TCP 四次挥手详解
TCP 四次挥手是终止连接的过程,确保双方都能安全地关闭连接并释放资源。
挥手过程
- 第一次挥手(FIN):客户端发送 FIN=1、seq=u 的报文段,进入 FIN_WAIT_1 状态,表示客户端没有数据要发送了
- 第二次挥手(ACK):服务器收到 FIN 后,发送 ACK=1、seq=v、ack=u+1 的报文段,进入 CLOSE_WAIT 状态,客户端收到后进入 FIN_WAIT_2 状态
- 第三次挥手(FIN):服务器发送 FIN=1、ACK=1、seq=w、ack=u+1 的报文段,进入 LAST_ACK 状态,表示服务器也没有数据要发送了
- 第四次挥手(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 状态的连接会对服务器造成什么影响?