赞
踩
使用Wireshark抓包,实现建立连接三次握手和释放连接四次握手。
1.TCP的通信过程
TCP是面向连接的传输协议,因此其通信过程包含三个阶段阶段:建立连接、传输数据、释放连接。其中,建立连接主要解决三个问题:(1)确认对方能够接收数据;(2)双方协商一些参数(如最大报文段长度,最大窗口大小,初始顺序号等);(3)双方预分配一些必要的通信资源(如收发缓存区,连接表项目等)。而释放连接的目的就是双方释放所占用的资源。
2.TCP连接的建立
TCP连接的建立采用客户服务器的方式,主动发起连接建立请求的应用进程叫做客户(Client),而被动等待连接建立的应用进程叫做服务器(Server)。
TCP通过三次握手完成连接的建立:
第一次握手:A的TCP向B发出连接请求报文段,其首部中的同步位SYN=1,并选择序号seq=x,表明传送数据时的第一个数据字节的序号是x。
第二次握手:B的TCP收到连接请求报文段后,如同意,则发回确认。B 在确认报文段中应使SYN=1,使ACK=1,其确认号ack=x+1,自己选择的序号seq=y。
第三次握手:A再向B确认,其ACK=1,确认号ack=y+1。A的TCP通知上层应用进程,连接已经建立。
完成三次握手,客户端与服务器开始传送数据。连接可以由任一方或双方发起,一旦连接建立,数据就可以双向对等地流动。
3.TCP连接的释放
第一次握手:客户A的应用进程先向B发出连接释放报文段,并停止发送数据,主动关闭TCP连接。
第二次握手:服务器B发出确认。此时,从A到B这个方向的连接就释放了,A不能再向B发送数据,因此不再消耗序号,TCP 连接处于半关闭状态,B若还有数据要发送,A仍要接收。
第三次握手:若服务器B的数据已经发完了,其应用进程就通知TCP释放连接。B向A发送连接释放请求报文段。
第四次握手:客户A收到B的连接释放报文段后,必须发出确认。A在发出确认后还必须再等待2MSL的时间后,才能进入关闭状态。
任务一:观察建立TCP连接的三次握手协议
步骤1:捕获TCP传输
步骤2:查找TCP建立连接的三次握手事件
步骤3:分析TCP的三次握手机制
任务二:观察TCP连接的释放机制
步骤1:查找TCP释放连接的四次挥手事件
步骤2:分析TCP的四次挥手机制
TCP报文段格式
在wireshark文件 tcp握手&挥手捕获.pcapng中,
Filter:tcp.port==33457
建立连接——三次握手
客户A的IP:192.168.3.11,端口号33457
服务器B的IP:123.125.81.244,端口号80
(三次握手单独截图)
..
说明:客户A向服务器B发送请求报文段,SYN=1 初始序号 seq=x=21 c5 a3 5b,此报文不能携带数据,但要消耗一个序号。
说明:服务器B收到A的请求后,向A发送确认报文段。SYN=1 ACK=1 ack=x+1=21 c5 a3 5c,初始序号seq=y=84 36 3b 52, 此报文段不能携带数据,但要消耗一个序号。
说明:TCP客户进程收到B的确认后,向B再发送一次确认。 ACK=1
ack=y+1=84 36 3b 53,
seq=x+1=21 c5 a3 5c, 此报文段可以携带数据,如果不携带数据就不占序号。
建立连接三次握手过程图
释放连接——四次握手
(四次握手单独截图)
说明:B向A发送连接释放报文。FIN=1 seq=u=84 36 3c 59(前面以传送数据最后一个字节的序号加 1) ,FIN报文段即使不携带数据也占一个序号。
说明:B向A发送连接释放确认报文段。 ACK=1 seq=w=21 c5 a4 54 ack=u+1=84 36 3c 5a 此时B到A方向的连接已经关闭,无法传送数据了。但是,从A到B方向的还是可以的。
说明:A向B发送连接释放报文段。FIN=1 ACK=1 seq=w=21 c5 a4 54 ack=u+1=84 36 3c 5a
说明: 此时B到了最后确认状态。
B收到了A发来的连接释放报文段后,对此发出确认。
ACK=1 ack=w+1=21 c5 a4 55 seq=u+1=84 36 3c 5a, 最终进入时间等待状态,当等待时间过去后进入关闭状态。
释放连接四次握手过程图
思考题:
① 连接建立阶段的第一次握手是否需要消耗一个序号?其SYN报文段是否携带数据?为什么?第二次握手呢?
答:第一次握手建立连接时,客户端A向服务端B发送请求报文段,这时首部中的同步位SYN =1,同时选择一个初始序号seq= x.TCP规定SYN=1报文段不能携带数据,但是要消耗一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态,等待服务器确认。第二次握手:服务器收到请求报文后,如同意连接,则向A发送确认,同时自己也发送一个确认报文段,确认报文段中SYN和ACK都置1,确认号ack = x+1,同时自己也为自己选择一个初始序号seq =y。注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时TCP服务器进程进入SYN-RCVD(同步收到)状态。
② 本实验中连接释放过程的第二、三次挥手是同时进行的还是分开进行的?这两次挥手何时需要分开进行?
答:同时。还有数据要发送时需要分开进行。
③ 本实验中连接释放阶段的第四次握手,PC向Server发送最后一个TCP确认报文段后,为什么不是直接进入CLOSED(已关闭)连接状态,而是进入CLOSE-WAIT(半关闭)连接状态?
答:PC端需要等待Server回复确认才能关闭。
④ 本实验中TCP连接建立后的数据通信阶段,PC向Server发送了多少数据?Server向PC发送了多少数据?
答:528比特数据,432比特数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。