扒一扒TCP的四次挥手

2022-03-31 10:47:47 浏览数 (2)

书接上文:电脑A(192.168.11.111)启动TCP Server,端口号60000;电脑B(192.168.11.1)启动WireShark,并启动TCP Client

断开TCP连接,需要四次挥手?试验一下

在Client端把之前创建的TCP连接断开,WireShark抓到了四帧数据

第一帧由Client发送给Server,54字节

根据网络报文的格式定义,可将其划分为14 20 20=54字节

与创建连接时的握手帧相比,主要区别是标志位是0x11,表示TH_ACK和TH_FIN。序列号0xC0563477、确认号0x57B6972C,均由前文决定

第二帧,由Server发送给Client,长度60字节

那就划分为14 20 20 6=60

可以看到,这就是一个应答帧,与握手时的第三帧比较接近。不过TCP头部长度是5*4=20字节,那后面的6个字节只是以太网自动补的零。序列号为0x57B6972C,确认号为0xC0563477 1

第三帧,还是由Server发送给Client,长度60字节

还是划分为14 20 20 6=60

其方向与第二帧相同,而标志位与第一帧相同TH_ACK TH_FIN。序列号为0x57B6972C,确认号为0xC0563477 1

最后是第四帧,Client发送给Server,54字节

这还是一个应答帧,与第二帧基本相同,只是方向相反。序列号为0xC0563477 1,确认号为0x57B6972C 1

补充一下TCP连接的各种状态

  • TCP_S_LISTEN,等待来自任何远程TCP和端口的连接请求
  • TCP_S_SYN_SENT,在发送连接请求后等待匹配的连接请求
  • TCP_S_SYN_RECEIVED,在接收和发送连接请求后等待确认连接请求确认
  • TCP_S_ESTABLISHED,打开连接,接收到的数据可以传递给用户。数据传输阶段的正常状态
  • TCP_S_FIN_WAIT_1,等待来自远程TCP的连接终止请求、或之前发送的连接终止请求的确认
  • TCP_S_FIN_WAIT_2,正在等待来自远程TCP的连接终止请求
  • TCP_S_CLOSE_WAIT,正在等待本地用户的连接终止请求
  • TCP_S_LAST_ACK,等待来自远程TCP的连接终止请求确认
  • TCP_S_CLOSING,等待之前发送给远程TCP的连接终止请求的确认(包括其连接终止请求的确认)
  • TCP_S_TIME_WAIT,等待足够的时间以确保远程TCP收到其连接终止请求的确认
  • TCP_S_CLOSED,表示完全没有连接状态

总结一下,四次挥手长这样

0 人点赞