什么时候会TIME_WAIT

TCP在关闭的时候有个四次挥手的过程,主动关闭方在四次挥手的最后一个ACK发送之后会变成TIME_WAIT状态。

主动关闭方

跟握手不同,挥手可以由客户端发起,也可以是服务端发起。发起关闭的一端我们称之为主动关闭方,另一端称之为被动关闭方。

四次挥手
  • 主动关闭方会发送一个FIN给被动关闭方,表示数据已经发送完毕。
  • 被动关闭方接收到FIN,响应一个ACK。它的接收作为一个文件结束符(end-of-file)传递给接收端应用进程(放在所有已排队等候该应用进程接收的任何其他数据之后)。FIN意味着接收端在相应连接上再无额外的数据可以接收了。
  • 一段时间后,被动关闭方的应用进程收到了文件结束符,发送完所有需要发送的内容,也会发送一个FIN给主动关闭方。
  • 接收到这个最终的FIN的主动关闭方也需要响应一个ACK。

TIME_WAIT状态维持多久

主动关闭方响应完最后一次ACK之后,会在TIME_WAIT这个状态维持2MSL。

MSL

MSL全称是maximum segment lifetime,最长分节生命期。MSL是任何IP数据报能够在因特网存活的最长时间。我们知道,这个时间是有限的,因为每个数据报都含有一个限跳(hop limit)的8位字段,它的最大值是255(简单的讲就是不同经过超过255个路由器)。尽管这个跳数限制而不是真正的时间限制,我们仍然假设最大限跳的分组在网络中存在的时间不可能超过MSL秒。

MSL的具体值通常为30秒或者是2分钟。

为什么需要TIME_WAIT

可靠地实现了TCP全双工连接的终止

我们知道,TCP是比较可靠的。当TCP向另一端发送数据时,他要求对端返回一个确认(如同我们关闭时候的FIN和ACK)。如果没有收到确认,则会重发。

回忆一下我们最终的那个FIN与ACK,被动关闭方发送FIN,并等待主动关闭方返回的ACK。我们假设最终的ACK丢失,被动关闭方将需要重新发送它的最终那个FIN,主动关闭方必须维护状态信息(TIME_WAIT),以允许它重发最终的那个ACK。

如果没有了这个状态,当他第二次收到FIN时,会响应一个RST(也是一种类型的TCP分节),会被服务器解释成一个错误。

为了TCP打算执行必要的工作以彻底终止某个连接两个方向上的数据流(即全双工关闭),那么他必须要正确处理连接终止四个分节中任何一个分节丢失的情况。

允许老的重复分节在网络中的消逝(为什么需要2MSL)

首先,存在这样的情况,某个路由器崩溃或者两个路由器之间的某个链接断开时,路由协议需要花费数秒到数分钟的时间才能稳定找出另一条通路。在这段时间内,可能发生路由循环(路由器A把分组发送给B,B又发送回给A),这种情况我们称之为迷途。假设迷途的分组是一个TCP分节,在迷途期间,发送端TCP超时并重传该分组,重传分组通过某路径到达目的地,而后不久(最多MSL秒)路由循环修复,早先迷失在这个循环中的分组最终也被送到目的地。这种分组被称之为重复分组或者漫游的重复分组,TCP必须要正确处理这些重复的分组。

我们假设ip1:port1和ip2:port2 之间有一个TCP连接。我们关闭了这个链接,过一段时间后在相同IP和端口之间建立了另一个连接。TCP必须防止来自之前那个连接的老的重复分组在新连接上出现。为了做到这一点,TCP将不复用处于TIME_WAIT状态的连接。2MSL的时间足以让某个方向上的分组存活MSL秒后被丢弃,另一个方向上的应答也最多存活MSL秒后被丢弃。

TIME_WAIT状态存在的意义相关推荐

  1. 计算机网络之TCP中TIME_WAIT状态意义详解

    文章目录 为什么需要TIME_WAIT 一.何为TIME_WAIT? 二.为什么需要TIME_WAIT 原因一:防止被动关闭方的延迟数据被人窃取 原因二:防止被动关闭方没有收到最后的ACK 为什么需要 ...

  2. time_wait状态产生的原因,危害,如何避免

    1.先来了解TCP四次挥手的过程: ①第一次:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段:此 ...

  3. 理解tcp关闭连接中的time_wait状态

    首先看一下tcp关闭连接时的四次握手过程: 1.Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包.此后Client ...

  4. 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 ...

  5. netstat查看系统TIME_WAIT状态个数

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 它会显示例如下面的信息: TIME_WAIT 814 CLOS ...

  6. php closewait,Linux网络tcp连接大量CLOSE_WAIT和TIME_WAIT状态的出现和解决方法

    关于CLOSE_WAIT和TIME_WAIT状态,服务器端都有可能出现,TIME_WAIT出现应该是短连接较多,需要通过修改内核参数解决,CLOSE_WAIT状态则是服务器程序可能有问题,服务器需要主 ...

  7. 为什么TCP的TIME_WAIT状态要保持2MSL?

    TIMEWAIT状态也称为 2MSL等待状态. 每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime). 它是任何报文段被丢弃前在网络内的最长时间. ...

  8. Linux-TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  9. 面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 几个方面: 问题描述:什么现象?什么影响? 问题分析 解决 ...

最新文章

  1. 那些重要却容易被忽视的用户体验(五)
  2. libpcap-mmap分析(五)
  3. 李开复:AlphaGo 若打败了世界冠军,意味着什么?
  4. 探讨.NET Core数据进行3DES加密和解密问题
  5. java.lang.Exception: Socket bind failed: [730048]
  6. 1、Hive原理及查询优化
  7. mysql自增id获取失败
  8. 移动端点击拉起输入_耐用的筛分式移动破碎站
  9. Ehcache、memcache、redis三大缓存区别
  10. 没有Angular 3,下一个Angular主版本将是Angular 4
  11. 同济启明星深基坑支挡结构设计计算软件FRWS 8.1全功能\
  12. LPC_2136 PLC,扩展方案,兼容西门子S7-200 CPU 224XP,兼容西门子软件
  13. kuangbin新模板错误
  14. 工作中使用到的单词(软件开发)_2022_0815备份
  15. 联创机房管理系统服务器密码,高校机房管理系统解决方案.doc
  16. 时钟晶振电路EMC设计标准电路详解
  17. JNCIS翻译文档之------接口2
  18. Fishermen(2018 ICPC SouthEastern European)
  19. Linux进阶_加密和安全
  20. 立创eda专业版学习笔记(3)(隐藏部分飞线)

热门文章

  1. Phython做小鸟飞行游戏
  2. dw的html代码文档,Dw 基础篇:DW的文档工具栏
  3. Springboot+Mysql在线众筹系统
  4. 线程wait、join用法
  5. MBA-day25 最值问题-应用题
  6. MBA-day20 不定方程问题-练习题
  7. 使用联通云OSS小程序直传
  8. vue接收后台返回的验证码图片
  9. 一个有趣的实验之OSPF中RID相同建邻
  10. 【Linux】基于Mplayer开源多媒体库的音视频播放器