2020-12-08:TIME_WAIT的等待时间为什么是2MSL?
发布日期:2021-05-04 20:00:29 浏览次数:23 分类:精选文章

本文共 466 字,大约阅读时间需要 1 分钟。

福哥答案2020-12-08:

这里假设主动关闭方为A,被动关闭方为B,TIME_WAIT状态是在主动关闭方A接收到主动关闭的FIN报文的ACK报文后,此时被动关闭方B会发出FIN报文,A在收到FIN报文后会发出Last_ack报文。假如A在发出Last_ack报文后,B未能在超时前收到报文,就需要重新发送FIN报文。如果A在发出Last_ack报文后直接关闭连接,那么B重发的Fin报文到达A后就可能被错误接收,因此A必须等待,那么这个时间应该为多长,考虑的主要是不对后边新建立的连接产生影响。那么考虑最坏的情况A在发出Last_ack后,经过MSL的时间才到大B,B就可以正常断开连接了,而B在接收到这个包前一刻重传了Fin包,也经过MSL的时间才到达A,那么A就能在2MSL的时间等到B的最后一个重传Fin包并处理掉,当然B的重传时间肯定小于MSL,因此A收到B重传的Fin包肯定小于2MSL。另外MSL也是一个经验值,不同的系统实现默认值也不同,现在的协议栈已经能够处理重复序列号的情况,因此2MSL的时间实际意义也不大。

上一篇:2020-12-09:TCP中,慢启动是什么?
下一篇:2020-12-07:go中,slice的底层数据结构是什么?

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月27日 22时29分34秒