为什么TIME_WAIT一定要2MSL的理解

我们假定称主动关闭方为客户端,被动关闭方为服务端。

TCP4次挥手阶段,当客户端收到服务端发送的FIN(4次挥手的第三个报文),将维护一个2MSL时长的TIME_WAIT状态。

 

原因先看课本的答案:

  1. 可靠地实现TCP全双工连接的终止
  2. 允许老的重复分节在网络中消逝

 

对于1的理解:

客户端发送FIN时,客户端必须能够响应,让服务端能知道对方已经收到FIN报文,这样,服务端好进行一些工作,这样一个才能实现双工终止。

否则,不维护TIME_WAIT,则服务端发送FIN时,客户端将回复“RST”报文,这样,服务端会以为遇到了错误。

对2的理解:

TIME_WAIT防止关闭连接后,两端用相同的ip端口重新连接,导致老连接的迷途报文被新的连接收到而被误解(被误解可能以为对方要关闭连接)。

所以在2MSL(报文最大生存时间)的周期中,TCP将不给处于TIME_WAIT状态的socket建立新连接,这段时间内,足够迷途报文自生自灭。

那为什么是2MSL呢?

看下图:

当网络超好时,server发送FIN1给client,client进入TIME_WAIT的时间几乎与server一致。

当网络特别差时,server发送FIN2给client,client在MSL之后进入TIME_WAIT。

服务器的超时重传时间RTO一般小于MSL,我们看看最晚到达client的FIN报文是什么情况?对就是FIN3。

假设RTO为MSL(只是假设),FIN3在MSL之后发起,经过了MSL之后到达client。

如果第一个到达client的包是FIN1,则FIN1到达client之后恰好2MSL时间的时候,FIN3刚好到达client。

因为RTO<MSL,所以,FIN3到达client后,距离TIME_WAIT结束应该还是有点时间的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值