为什么TIME_WAIT状态到CLOSED状态需要等待2MSL?
第一、确保被动方能进入CLOSED状态。
对照上图,主动方我们用A表示,被动方用B表示,在四次挥手协议中,当B向A发送Fin+Ack后,A就需要向B发送ACK+Seq报文,A这时候就处于TIME_WAIT 状态,但是这个报文有可能会发送失败,这时候就需要A等待B来确认是否成功,就需要A等待,而且至少要等待两个最大报文长度(发送过去,再反馈回来),当B没有收到时,B会向A再次发送Fin+Ack报文,而A在2MSL内就可以收到Fin+Ack报文,这时A便重新发送,就能确保B进入CLOSED状态。
第二、防止已失效的连接请求报文段出现在本连接中。
客户端在发送完最后一个ACK确认报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。