关于三次握手和四次挥手的过程算是十分熟悉了,可昨天网易面试面试官的一个问题瞬间让我意识到自己只不过理解了一点皮毛而已。

我们都知道,四次挥手时,主动发起关闭连接的操作的一方将达到TIME_WAIT状态,而且这个状态要保持Maximum Segment Lifetime的两倍时间。

那么问题来了 :1.为什么不直接关闭要进入等待状态?

2. 为什么等待的时间是2MSL?

一、为什么不直接关闭要进入等待状态?

1.保证客户端发送的ACK报文段能够到达服务器,从而保证tcp连接能够进行可靠的关闭。

这个很好理解,如果客户端发动ACK后就立刻关闭,那么如果ACK丢失的话,服务端就会一直处于等待关闭确认的状态,超时后再发送关闭请求时,此时的客户端已经关闭,那么服务端就无法进行正常的关闭。

2.保证此次连接的数据段消失,防止失效的数据段。

客户端在发送ACK后,再等待2MSL时间,可以使本次连接所产生的数据段从网络中消失,从而保证关闭连接后不会有还在网络中滞留的数据段去骚扰服务端;

再有一点就是,如果客户端重新发送请求,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。

二、为什么是2MSL

我们知道服务端收到ACK,关闭连接。但是客户端无法知道ACK是否已经到达服务端,于是开始等待?等待什么呢?假如ACK没有到达服务端,服务端会为FIN这个消息超时重传 timeout retransmit ,那如果客户端等待时间足够,又收到FIN消息,说明ACK没有到达服务端,于是再发送ACK,直到在足够的时间内没有收到FIN,说明ACK成功到达。这个等待时间至少是:服务端的timeout + FIN的传输时间,为了保证可靠,采用更加保守的等待时间2MSL。

MSL,Maximum Segment Life,这是TCP 对TCP Segment 生存时间的限制。

客户端发出ACK,等待ACK到达对方的超时时间 MSL,等待FIN的超时重传,也是MSL,所以如果2MSL时间内没有收到FIN,说明对方安全收到FIN。

关于4次挥手时等待2MSL的问题相关推荐

  1. 为什么TCP4次挥手时等待为2MSL?

    问题: B收到ACK,关闭连接.但是A无法知道ACK是否已经到达B,于是开始等待?等待什么呢?假如ACK没有到达B,B会为FIN这个消息超时重传 timeout retransmit ,那如果A等待时 ...

  2. TCP的TIME_WAIT状态为什么要等待2MSL的时长

    TCP四次挥手的第四次挥手后为什么要经过TIME_WAIT状态? TIME_WAIT状态为什么是2MSL的时长?为什么不是等待其他时长? TCP第四次挥手后为什么要经过TIME_WAIT状态? 第四次 ...

  3. TCP第4次挥手为何要等待2MSL才关闭?

    MSL是Maximum Segment Lifetime的缩写,译为报文最大生存时间,也就是任何报文在网络上存活的最大时间,一旦超过该时间,报文就会被丢弃.2MSL也就是指的2倍MSL的时间. 回归主 ...

  4. TCP第四次挥手后为什么要等待2MSL后才断开链接?等待时间为什么是2MSL?

    为何要等待2MSL? 1.假如第四次挥手失败了,因为丢失而未到达服务器会怎样呢?这样,服务器会一直收不到客户端的回应,也就无法得知客户端是否收到了即将要断开连接的请求.客户端此刻还蒙在鼓里,还在等待服 ...

  5. 释放连接:四次挥手过程?为什么要等待2MSL

    储备知识:TCP报文段的首部格式(讲下面提到的): 1.FIN:用来释放一个连接.当FIN=1时,表示此报文段的发送方的数据已经发送完毕,并要求释放运输连接. 2. 确认ACK(acknowledgm ...

  6. TCP第四次挥手为什么要等待2MSL(最长报文段寿命,Maximum Segment Lifetime)

    当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这时为什么呢??? 这最主要是因为两个理由: 1.为了保 ...

  7. TCP第四次挥手为什么要等待2MSL

    当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这时为什么呢???  这最主要是因为两个理由: 1.为了 ...

  8. TCP的四次挥手及为什么要等待2MSL

    一.四次挥手的详述 1.假设Client端发起中断连接请求,也就是发送FIN报文. 2.Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还 ...

  9. tcp四次挥手为何最后要等待2MSL时间?

    之前别人问过的一个问题,说是四次挥手为何要等待2MSL时间? 首先我们需要明白,MSL是表示什么意思? 其实是maxinum segment lifttime(报文最大存活时间),tcp发出的包是有一 ...

最新文章

  1. Excel+bat批量更改文件名
  2. mysql 5.5 主从同步_Windows下mysql5.5主从同步
  3. [html] 本地存储和cookie之间的区别是什么?
  4. Linux下rgmii接口与fpga相连,FPGA控制RGMII接口PHY芯片88E1512网络通信
  5. Html百分比设宽偏差大,前端开发之移动端适配详细讲解
  6. makefile之引用(3)
  7. checkcode.aspx 生成随即验证码
  8. JavaScript基础笔记(十四)最佳实践
  9. C# 处理图像三种方法对比
  10. 深度学习文献阅读笔记(6)
  11. 类比菜鸟全国仓配网络来学习CDN
  12. 破解密码——利用粘滞键漏洞破解Windows 7 PIN
  13. Office 解决WORD转PDF未显示书签。
  14. 分享我本人打造微信公众号吸粉引流的恶搞方法
  15. WPS表格如何将二维表转为一维表
  16. java find 方法,findOne方法是findOne(Example
  17. sai文字图层、钢笔图层如何转普通图层
  18. SpringBoot导出word模板并动态渲染数据
  19. 扫地机器人噪音响_硬件老兵拆机分析:扫地机器人噪音大小到底与何相关?
  20. server2012安全_2012年重要安全提示

热门文章

  1. RHEL-7.4-Server系统安装
  2. 可以正常上网但ping 127.0.0.1或localhost出现请求超时的解决方法
  3. msp fet430uif驱动
  4. 互联网快讯:华虹虹芯基金正式发起成立;极米高性能投影产品获用户青睐;中国电信联手钉钉研发“天翼钉”
  5. Android 8遇到的问题cat: /system/build.prop: Permission denied,如果不root,有方法解决吗?
  6. 2020-05-09 工作中英语单词积累
  7. Graphql中我们应该用什么姿势来实现Resolver?
  8. Java工程师只要掌握这些知识点,就能给面试官一个满意的答案,挑战高薪
  9. _access()函数
  10. 前端请求异步与同步的区别