1. TIME_WAIT状态
主动关闭方在收到被动关闭方的FIN
包后并返回ACK
后,会进入TIME_WAIT
状态,TIME_WAIT
状态又称2MSL
状态,每个TCP连接都必须有一个最大报文段生存时间MSL,在网络传输中超过这个时间的报文段将被丢弃。当TCP连接发起一个主动关闭,并发出最后一个ACK时,必须在TIME_WAIT
状态停留两倍MSL时间,在2MSL
等待期间,定义这个连接的插口(客户端IP地址和端口号,服务器IP地址和端口号的四元组)将不能再被使用。2MSL
状态存在有两个理由:
-
1.允许老的重复报文分组在网络中消逝。
-
2.保证TCP全双工连接的正确关闭。
第一个理由是假如我们在192.168.1.1:5000
和39.106.170.184:6000
建立一个TCP连接,一段时间后我们关闭这个连接,再基于相同插口建立一个新的TCP连接,这个新的连接称为前一个连接的化身。老的报文很有可能由于某些原因迟到了,那么新的TCP连接很有可能会将这个迟到的报文认为是新的连接的报文,而导致数据错乱。为了防止这种情况的发生TCP连接必须让TIME_WAIT状态持续2MSL
,在此期间将不能基于这个插口建立新的化身,让它有足够的时间使迟到的报文段被丢弃。