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连接时,来自该连接先前的化身的老的重复分组都已经在网络中消逝了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容