首页 > 其他 > 详细

TCP time_wait为什么持续2MSL

时间:2019-04-11 15:48:25      阅读:366      评论:0      收藏:0      [点我收藏+]

time_wait

timewait先发起close的一端的第二阶段:
a fin b,b ack a,b fin a 此时a收到b的fin之后,a处于time_wait,a无法确定自己接下来的ack of fin是否被b收到,所以time_wait还是会持续一段时间。接着可能发生两件事情:

  • 收到b的fin重传(因为b没有收到ack)
  • 相当长一段时间——2MSL,都没有收到b的fin重传

第一种,那么a可以确定第一次的ack没有及时到达b,继续发送ack,直到发生第二种。此时a可以关闭连接,因为在第一个MSL内,a收到的最后一次fin包发送之前的数据包都已经从网络消失,因为这些数据包到此时已经超过了MSL;又继续等待第二个MSL,确保a收到的最后一个fin包后面的所有重传fin包都不会存在网络了——如果约定最后一个fin包发送方控制重传时间窗口不超过1个MSL,那么a只要等待2MSL就可以确保所有的fin都已从网络消失。

再看b的close,应用层在socketclose之后,可能已经进程退出了,只不过内核还有socket的状态在维护,当然进程可能没有退出。

TCP time_wait为什么持续2MSL

原文:https://www.cnblogs.com/linlei2099/p/10689792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!