TIME_WAIT状态存在的理由

TIME_WAIT状态肯定是要存在的,否则TCP的会存在半关闭的状态,这里主要讨论下TIME_WAIT状态为什么要保持2MSL时间。

关于MSL
MSL是任何IP数据报能够在网络中存货的最长时间,这个时间是有限的,每个数据报有个称之为跳限的字段,该字段是8bit,最大值为255,尽管这是一个跳数限制,而不是一个真正的时间限制,我们仍然假设:具有最大跳限的数据报在网络中存活的最长时间不可能超过MSL秒。

  1. 可靠地实现TCP全双工连接的终止。
    在客户端发起关闭的场景中,假设客户端发送的ACK丢失了,服务端将重新发送FIN,若客户端不再维护该状态,则客户端相应RST,该分节将会被服务器解释为一个错误。如果要彻底关闭TCP连接,则必须正确处理终止序列中任何一个分节丢失的情况。

  2. 允许老的重复分节在网络中消逝。
    假设在IP1:Port1(客户端)和IP2:Port2(服务端)之间有一个TCP连接,我们关闭这个连接,过一段时间仍在相同的IP和端口建立另一个连接,后一个连接称之为前一个连接的化身。TCP必须阻止老的重复分组在该连接终止后再出现,为做到这一点,TCP不给处于TIME_WAIT状态的分组发起新的化身。 既然TIME_WAIT状态的持续时间是2MSL,这足以人任一方向上的TCP数据报被丢弃,我们就能保证没成功建立一个TCP连接时,来自该连接先前的化身的老的重复分组都已经在网络中消逝了。

你可能感兴趣的:(TIME_WAIT状态存在的理由)