TCP连接四次挥手的过程,为什么是四次?

(1)四次挥手的过程

  1. 第一次挥手:客户端发送一个带有FIN标志位的TCP段给服务端,表示自己要断开数据传送,报文中会指定一个序列号 (seq=x)。然后,客户端进入FIN-WAIT-1(终止等待-1) 状态。
  2. 第二次挥手:服务端收到FIN报文后,回复ACK报文给客户端,且把客户端的序列号值+1,作为ACK+1报文的序列号(seq=x+1)。然后,服务端进入CLOSE-WAIT``(seq=x+1)(关闭等待)状态,客户端进入FIN-WAIT-2状态。
  3. 第三次挥手:服务端也要断开连接时,发送FIN报文给客户端,且指定一个序列号(seq=y+1),随后服务端进入LAST-ACK(最后确认)状态。
  4. 第四次挥手:客户端收到FIN报文后,发出ACK报文进行应答,并把服务端的序列号值+1作为ACK报文序列号(seq=y+2)。此时客户端进入TIME-WAIT(时间等待)状态。服务端在收到客户端的ACK 报文后进入CLOSE 状态。如果客户端等待2MSL(最长报文段寿命)没有收到回复,才关闭连接。

为什么需要四次挥手,而不是三次或更多次,原因如下:

TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。 当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后才会完全关闭 TCP 连接。因此两次握手可以释放一端到另一端的TCP连接,完全释放连接一共需要四次握手。 

只有通过四次挥手,才可以确保双方都能接收到对方的最后一个数据段的确认,

在TCP连接的关闭过程中,如果被动关闭方没有收到主动关闭方的最终确认(ACK),它可能会重新发送它的最终数据(FIN)。time-wait状态确保即使在这种情况下,主动关闭方仍然能够接收到这些重复的FIN,并重新发送确认,直到被动关闭方放弃重传。

如果是三次握手

如果一方在发送了FIN后立即关闭连接,而另一方没有收到这个FIN,那么另一方可能会一直等待,浪费资源。四次挥手确保了双方都可以确认连接的关闭,避免资源浪费。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值