当客户端接收到服务端发送的FIN后,即进入TIME_WAIT状态。
客户端在TIME_WAIT状态需要维持2个MSL时间。MSL 是max segment lifetime缩写,值IP 数据包在英特网中最大的存活时间。
TIME_WAIT有以下两个原因:
1、服务器可能无法收到客服发送的最终ACK,导致服务器无法关闭连接。由于服务器没有收到ACK,将会再次发送FIN,当客户处于TIME_WAIT状态时,再次收到服务器的FIN,将再次发送ACK,以保证服务端的正常关闭。
2、首先假设服务器端的ip地址为IP_1,端口为p_1,客户端的ip地址IP_2,端口为p_2。IP_1:p_1 与IP_2:p_2已经建立连接。
现在双方第一次通信结束。第二个服务又在IP_1:p_1 与IP_2:p_2之间建立了tcp连接。
由于网络的复杂性,第一次连接的分组(IP数据报)还可能存在在网络中,那么这个分组就会影响这次的连接,影响通信。
所以存在TIME_WAIT状态,并且维持2个MSL时间,保证旧的分组在网络中逝去,不会影响新的连接。