基于Wireshark的TCP关闭时的四次挥手介绍

《基于Wirshark的TCP三次握手介绍》中提到,TCP在建立连接之前,要经历三次握手,而在关闭TCP连接时,通信双方要经历四次挥手,如图1所示。

 

图1 关闭TCP时的四次挥手

1 第一次挥手

客户端和服务端进行TCP通信时,一般是客户端主动断开TCP连接。因此,第一次挥手一般是客户端向服务端发送FIN+ACK数据包,实际上就是客户端通知服务端,自己(客户端)要关闭本端的TCP连接了。图2是通过Wireshark捕获到的第一次挥手时的数据。

 图2 第一次挥手

从图2中可以看到,第一次挥手数据包的TCP头部中,序列号是3423066014,确认序列号是424177797,而标志位是0x011,表示该包是FIN+ACK包。TCP头部的序列号、确认序列号与标志位的含义,请参考《基于Wirshark的TCP三次握手介绍》

2 第二次挥手

当服务端收到客户端的第一次挥手后,会向客户端发送第二次挥手数据包,即通知客户端,自己(服务端)确认了客户端关闭TCP的通知。图3是通过Wireshark捕获到的第二次挥手时的数据。

 图3 第二次挥手

从图3中可以看出,有服务端向客户端发送的第二次挥手的数据包中,序列号是424177797,与第一次挥手中的确认序列号相同;第二次挥手的数据包中,确认序列号是3423066015,是第一次挥手中的序列号的值加1,因为FIN+ACK数据包占1个序列号。标志位是0x010,表示ACK数据包。

3 第三次挥手

当服务端关闭本端TCP连接时,会向客户端发送FIN+ACK数据包,通知客户端,自己(服务端)要关闭本端TCP连接了。图4是通过Wireshark捕获到的第三次挥手时的数据。

 图4 第三次挥手

假设在第二次挥手后,服务端没有向客户端发送数据,就直接进行了第三次挥手,因为之前服务端向客户端发送的ACK数据包不占用序列号,因此,第三次挥手的数据包中的序列号与确认序列号,与第二次挥手时相同,标志位是0x011,表示FIN+ACK数据包。

4 第四次挥手

当客户端收到服务端发送的第三次挥手数据包后,会向服务端发送确认数据包,通知服务端自己(客户端)确认了服务端关闭TCP。图5是通过Wireshark捕获到的第四次挥手时的数据。

 图5 第四次挥手

从图5中可以看出,第四次挥手数据包中的序列号的值是3423066015,与第三次挥手中的确认数据包值相同;第四次挥手数据包中的确认序列号的值是424177798,是第三次挥手中的数据包值加1,因为第三次挥手的数据包是FIN+ACK,占用1个序号。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值