CP连接在四次挥手时,需要TIME_WAIT阶段的原因

发布时间 2024-01-11 19:58:33作者: rockdow

image
如图,客户端在收到服务端发来的FIN报文后,会进入TIME_WAIT阶段,该阶段最大持续时间为2MSLMSL即报文段最大生存时间,超出该时间,TCP报文就会被丢弃)。设置TIME_WAIT阶段的主要原因有两点:

  • 为了使客户端收到第四次挥手的ACK,从而正确关闭连接

    假设第四次挥手时,客户端发送给服务端的ACK报文丢失。极端情况下,经过1MSL后,服务端发现未收到预期的ACK报文,那么就会触发重传机制,重新向客户端发送FIN报文,此次的FIN报文最多再经过1MSL后,被客户端接收(这时客户端会重置TIME_WAIT时间为2MSL,防止重传的ACK报文再次丢失),从而客户端再次传送ACK报文,使得服务端正确关闭连接。

  • 为了使旧TCP连接的数据包不干扰新的连接

    假设没有TIME_WAIT阶段,客户端发送完ACK报文后直接关闭连接,那么可能会出现ACK报文丢失,服务端重传FIN报文的情况,如果刚好客户端和服务端以相同的四元组建立了新的连接,且重传FIN报文序列号恰好在客户端的滑动窗口内,那么客户端就会接收这个FIN报文,造成数据错乱等严重问题。因此要有TIME_WAIT阶段等待2MSL时长,使得本次连接的所有数据包都自然消失。