主动发起关闭连接的一方,才会有 TIME-WAIT 状态。

需要 TIME-WAIT 状态,主要是两个原因:

  • 防止具有相同「四元组」的「旧」数据包被收到;
  • 保证「被动关闭连接」的⼀方能被正确的关闭,即保证最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭。

TCP 四元组可以唯⼀的确定⼀个连接,四元组包括如下:

  • 源地址
  • 源端⼝
  • ⽬的地址
  • ⽬的端⼝

原因⼀:防止旧连接的数据包

假设 TIME-WAIT 没有等待时间或时间过短,被延迟的数据包抵达后会发⽣什么呢?

如上图黄色框框服务端在关闭连接之前发送的 SEQ = 301 报文,被网络延迟了。

这时有相同端口的 TCP 连接被复用后,被延迟的 SEQ = 301 抵达了客户端,那么客户端可能会正常接收这个过期的报文,这就会产生数据错乱等严重的问题。

所以,TCP 就设计出了⼀个机制,经过 2MSL 这个时间,⾜以让两个方向上的数据包都被丢弃,使得原来 连接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建立连接所产生的。


原因二:保证连接正确关闭

TIME-WAIT 作⽤是等待足够的时间以确保最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭。

假设 TIME-WAIT 没有等待时间或时间过短,断开连接会造成什么问题呢?

如图红色框客户端四次挥手的最后⼀个 ACK 报文如果在网络中被丢失了,此时如果客户端 TIME-WAIT 过短或没有,则就直接进入了 CLOSED 状态了,那么服务端会⼀直处在 LASE_ACK 状态。

当客户端发起建立连接的 SYN 请求报文后,服务端会发送 RST 报文给客户端,连接建立的过程就会被终止。


如果 TIME-WAIT 等待足够长的情况就会遇到两种情况:

  • 服务端正常收到四次挥手的最后⼀个 ACK 报文,则服务端正常关闭连接。
  • 服务端没有收到四次挥手的最后⼀个 ACK 报文时,则会重发 FIN 关闭连接报文并等待新的 ACK 报文。

所以客户端在 TIME-WAIT 状态等待 2MSL 时间后,就可以保证双方的连接都可以正常的关闭。

TIME_WAIT 状态的存在的原因?为什么需要 TIME_WAIT 状态?相关推荐

  1. linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)

    # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSING 130 ESTABLISHED 298 FIN_WAIT1 13 FIN_WA ...

  2. Kubernetes pod 状态出现 ImagePullBackOff 的原因

    通过一个试验作为例子来学习一下. 我们创建一个名为fail 的 deployment,让它故意指向一个实际并不存在的 Docker 镜像: $ kubectl run fail --image=jer ...

  3. php中http有哪些状态码,http状态码是什么意思?http常用状态码有哪些

    作为开发人员对http状态码都是很熟悉的,只有对这些http状态码熟悉,才能找到问题的关键所在,那么http状态码是什么意思?http常用状态码有哪些?接下来php中文网就向大家介绍一下http状态码 ...

  4. cmd中执行netsh wlan start hostednetwork 无法启动承载网络。 组或资源的状态不是执行请求操作的正确状态。

    cmd中执行netsh wlan start hostednetwork 无法启动承载网络. 组或资源的状态不是执行请求操作的正确状态. 解决办法: 1.打开网络共享中心,点击"更改适配器& ...

  5. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  6. java修改状态码_JavaWeb-用过滤器修改请求的返回状态码

    问题: 客户SDK对接服务,默认只识别200和非200的请求状态码.需要修改当前应用的状态码(如将201转为200) 解决方案:通过扩展HttpServletResponseWrapper,获取到每个 ...

  7. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)

    状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...

  8. spring期刊状态_无状态Spring安全性第2部分:无状态认证

    spring期刊状态 Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法. 如果您错过了有关CSRF的第一部分,可以在这里找到. 因此,在谈论身份验证 ...

  9. 无状态Spring安全性第2部分:无状态身份验证

    Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法. 如果您错过了CSRF的第一部分,可以在这里找到. 因此,在谈论身份验证时,其全部内容就是让客户端 ...

  10. 在使用win 7 无线承载网络时,启动该服务时,有时会提示:组或资源的状态不是执行请求操作的正确状态。 网上有文章指出,解决这个问题的方法是在设备管理器中启动“Microsoft托管网络虚拟适配

    在使用win 7 无线承载网络时,启动该服务时,有时会提示:组或资源的状态不是执行请求操作的正确状态. 网上有文章指出,解决这个问题的方法是在设备管理器中启动"Microsoft托管网络虚拟 ...

最新文章

  1. BGP的各种属性配置
  2. Linux系统断电后起不来,centos/linux 断电后,开机光标闪现不能开启,重新引导
  3. fastJson toJSONString注意点
  4. Reading SBAR SDN flow-Based monitoring and Application Recognition
  5. 运行cudasift
  6. 【图像处理】RGB图像边缘检测
  7. Compound供应量突破70亿美元
  8. UltraEdit 所有快捷键 说明
  9. 【渝粤教育】国家开放大学2018年秋季 3722-22T燃气输配工程 参考试题
  10. 【C++】C++继承和派生类、虚基类
  11. 无人驾驶-控制-阿克曼模型
  12. 冠层分析法(VCP)提取叶面积指数
  13. 电容在微分、积分电路中的本质以及应用
  14. MATLAB——根轨迹原理及其Matlab绘制
  15. React Native学习-第一篇
  16. vue传值给子页面html,vue.js如何父传子?
  17. 这可能是东半球最详细的Linux下搭建Jenkins服务器实现自动打包的教程(上)
  18. 1035神奇的数字9
  19. 美多商城项目之用户登录:账号登录、QQ登录
  20. jsp企业财务管理系统设计与实现(论文+PPT+源码

热门文章

  1. 点击泰坦单位计算机,泰坦导弹制导计算机内部
  2. 5.10杂谈正能量日记
  3. 【棉带印唛】主唛或成服装工厂印刷主流方式
  4. ARM汇编指令学习---基于启动文件startup.S分析
  5. 保姆级手把手教你ubuntu22.04换源
  6. Mac:解决移动硬盘异常退出后无法识别
  7. Python学习笔记 - 变量类型(1)
  8. Java实现一个简单的两人五子棋游戏(一) 系统设计
  9. 旅游预览报名开发日志
  10. win7下Genymotion安装方法