基于Wireshark的TCP原理解析
(2)基于 Wireshark 的 TCP 原理解析的实验完成情况
TCP
TCP的特点:
1、TCP是面向连接的运输层协议
2、每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
3、TCP提供可靠交付的服务
4、TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
5、面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP应用程序交下来的数据仅仅是一连串的无结构的字节流。
1)实验过程
1 、打开wireshark软件
2、选择网络捕获接口,选择WLAN
3、选择过滤器为HTTP,并右键选择追踪流-TCP流
可以点击查看下方的详情信息
其中
Frame 1667为物理层
Ethernet为数据链路层以太网2
Internet Protocol Version 4为网络层
Transmission Control Protocol为传输层TCP
Hypertext Transfer Protocol为应用层TCP
4、以下为TCP数据包,其中包含三次握手与四次挥手
首先对握手进行分析
选中其中第一次握手,可查看下面的详情信息
下面为捕获的TCP包中的每个字段的说明信息
源端口号:数据发起者的端口号,16bit
目的端口号:数据接收者的端口号,16bit
序号:32bit的序列号,由发送方使用
确认序号:32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认序号应当是上次已成功收到数据字节序号加1。
首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。一般首部长度为20字节。
保留:6bit, 均为0
紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。
确认比特ACK:ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。
推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。
复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
同步比特SYN:在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
终止比特FIN:FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
检验和:该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证。
紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
选项:长度可变,最长可达40字节。
与所示的数据进行对应
2)实验结果与分析
现对TCP三次握手的过程进行分析
第一次握手:
建立连接时,客户端发送syn包(seq=X)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:
服务器收到syn包,必须确认客户端的SYN(ack=X+1),同时自己也发送一个SYN包(seq=Y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=Y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
对四次挥手进行分析
原理分析
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
第一次挥手:
客户端(主动关闭方)发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。
第二次挥手:
服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入Close_WAIT状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
第三次挥手:
服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态。(有时候抓挥手包时只会抓到三个,这是因为服务端将第二次挥手与第三次挥手合并发送)
第四次挥手:
客户端收到FIN后,客户端进入Time_WAIT状态,接着发送一个ACK给服务端,确认后,服务端进入Closed状态,完成四次挥手。