居然很少有人质疑: 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗?

        看了不少TIME_WAIT方面的书籍和网络文章, 很多地方不过是在人云亦云的拷贝别人的说法和思想而已, 看得让人颇为无趣。

        对于TIME_WAIT, 言必称2MSL, 当然, 如果是笔试面试, 我也会这么答, 因为这就是所谓的标准答案啊。 然而, 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗? 我最近一直在思考这个问题。 从理论上来讲, 这是扯淡。

        如果tcp四次挥手最后的ACK有好几次没有达到, 那么对端会重传FIN包, FIN包过来, 加上最后的新ACK, 要保证他们消失, 岂是2MSL时间能做到的? 别忘了, 从TIME_WAIT的起点到最后的新ACK的达到, 经历的理论时间为:  Tx(刚进入CLOSE_WAIT状态到对端发最后FIN的时间差) + MSL(最后FIN包传输对应的MSL) +  MSL(最后的新ACK传输对应的MSL)

        显然, TIME_WAIT的理论时间, 可以比2MSL还大。

        大家不要再以讹传讹了。


        当然, 到处在说2MSL, 说明这个东西并非没有道理, 其实, 2MSL只是一个经验值, 而非理论值。 在RFC中, 2MSL的值被建议为4分钟, 而在很多实现中, 2MSL的值被实现为1分钟。 所以, 你看, 2MSL这个东西, 是根据经验和系统环境而定的。 把TIME_WAIT定义为2MSL -1秒, 系统会异常吗? 不会, 几乎没什么影响的!

        2MSL能尽力而为地期望(而非百分之百地保证), 旧连接上的所有数据包都消失。 其实, 在实际中, 这个时间足够了, 已经是仁至义尽了。


        为了不至于误会(不是随大流), 以后在谈论TIME_WAIT的时候, 我让人会用2MSL来说话。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值