乐闻世界logo
搜索文章和话题

TCP 四次挥手的过程和原理是什么?

2月21日 17:09

TCP 四次挥手详解

TCP 四次挥手是终止连接的过程,确保双方都能安全地关闭连接并释放资源。

挥手过程

  1. 第一次挥手(FIN):客户端发送 FIN=1、seq=u 的报文段,进入 FIN_WAIT_1 状态,表示客户端没有数据要发送了
  2. 第二次挥手(ACK):服务器收到 FIN 后,发送 ACK=1、seq=v、ack=u+1 的报文段,进入 CLOSE_WAIT 状态,客户端收到后进入 FIN_WAIT_2 状态
  3. 第三次挥手(FIN):服务器发送 FIN=1、ACK=1、seq=w、ack=u+1 的报文段,进入 LAST_ACK 状态,表示服务器也没有数据要发送了
  4. 第四次挥手(ACK):客户端收到 FIN 后,发送 ACK=1、seq=u+1、ack=w+1 的报文段,进入 TIME_WAIT 状态,服务器收到后进入 CLOSED 状态

为什么需要四次挥手

  • TCP 是全双工协议:每个方向都必须单独关闭
  • 第二次挥手只确认了客户端的关闭请求:服务器可能还有数据要发送给客户端,所以不能立即发送 FIN
  • 第三次挥手是服务器主动关闭:服务器确认没有数据要发送后,才发送 FIN
  • TIME_WAIT 状态:客户端需要等待 2MSL(最大报文生存时间),确保最后一个 ACK 能够到达服务器

TIME_WAIT 状态的作用

  • 确保最后的 ACK 能够到达服务器:如果 ACK 丢失,服务器会重传 FIN,客户端可以重新发送 ACK
  • 等待所有旧报文段消失:确保网络中所有旧报文段都已过期,避免影响新连接

相关问题

  • 为什么 TIME_WAIT 状态需要等待 2MSL?
  • 如果服务器在 TIME_WAIT 状态之前就关闭了会发生什么?
  • 大量 TIME_WAIT 状态的连接会对服务器造成什么影响?
标签:TCP