知识卡片

TIME_WAIT状态存在的必要性

普通读书笔记卡

内容

TCP连接关闭后主动方要停留TIME_WAIT等待2×MSL(约240秒)才回到CLOSED。原因有二:一是连接用四元组标识,物理网络上旧包可能还在”闲逛”,等待期保证旧包已消失;二是[[网络2将军问题的不可解性]]导致最后挥手是否送达不确定,等待窗口给对方重发的余地。代价是频繁创建关闭会积累大量TIME_WAIT,故倾向让客户端主动关闭并用连接池复用。

参考来源

- 位置:第5章《网络》5.6.3节「三次握手(网络2将军问题)」TIME_WAIT相关小节(源文件:_epub-src/text/part0021.html) - 结论依据:原文明确说明因为网络2将军问题,第四次挥手数据包是否送达不确定,服务器在未收到时会重发第三次数据包,客户端须停留在TIME_WAIT状态等待2×MSL才能保证这个重传窗口被覆盖,直接支持卡片对TIME_WAIT等待窗口给对方重发余地的论述。 - 原始内容:"因为网络的2将军问题,图5-24中的第四次发送的数据包,服务器是否收到是不确定的。服务器采取的方法是在无法收到第四次的情况下重新发送第三次的数据包……第四次数据包的传输时间+服务器重新发送第三次数据包的时间,最长是两个MSL,所以要让客户端在TIME_WAIT状态等待2×MSL的时间。"