关于TIME_WAIT状态

  TIME_WAIT是TCP状态转换中的一个非常重要的状态,TIME_WAIT状态的或多或少会极大的影响客户端与服务端的性能,在真实的应用场景中往往需要根据实际需求来对TIME_WAIT进行优化,因此在学习过程中有必要掌握TIME_WAIT状态。

  为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

  MSL(Maximum Segment Lifetime)表示报文段最大生存时间,它表示任何报文段被丢弃前在网络内的最长时间,实际上这个时间和 TTL 有关(TTL 是 IP 协议中的一个概念,表示能够经历的路由器的跳数,这个跳数是有限制的,最大值为 255)。但是MSL并不用跳数,而是用时间来计算。不同系统中,MSL 定义的大小不一样,RFC 规定,MSL = 2 分钟,而实际实现中,通常是 30 秒、1 分钟。也就是说报文在网络中存在的时间不能超过MSL规定的时间,同时也间接的说明了tcp连接在TIME_WAIT状态必须存在2MSL才能进入CLOSE状态。


图1-2MSL

2MSL的原因

2MSL的原因有2个:
  1. 通常,当tcp释放连接的四个报文都发送完后,客户端和服务端双方就完全关闭连接,进入CLOSE状态。但是需要考虑一种情况:当四个报文都发送完毕时,客户端和服务器按理说应该进入CLOSE状态了,但是可能出现最后一个ACK丢失,即客户端发送的ACK在网络中丢失了,服务就永远都收不到最后的ACK,服务器也就无法关闭这个tcp连接

  因此,TIME_WAIT状态就是用来重发可能丢失的ACK报文,也就是说2MSL计时器可以让客户端在丢失最后一个ACK确认时,等待服务器的下一个FIN到来,如果在TIME_WAIT状态中有一个新的FIN到来,那么客户端就发送一个新的ACK确认,并重新启动2MSL计时器。因为服务端收到客户端发送的ACK确认报文然后才进入close状态,如果一直没收到客户端发送的ACK确认报文,服务器则等待2MSL超时进入close状态(通常是可能会发送RST来关闭这条连接)

  2. 假设客户端和服务端已经建立了一条连接1,如果没有TIME_WAIT状态,客户端和服务端马上又建立了连接2,这可能会造成连接2可能会接收到连接1的tcp数据报,从而产生一些错误。这时就需要加入TIME_WAIT状态,因为处于TIME_WAIT状态的端口在2MSL时间内无法建立新的连接(保证了在2MSL时间内只创建一个连接),只有当2MSL超时把连接1丢弃掉才能创建新的连接2, 这样就保证了每次只创建一个连接。

关于FIN_WAIT2状态

  通常主动一方发起FIN报文,只要对端发送ACK确认后主动方就会处于FIN_WAIT2状态,然后等待对端发送FIN报文,如果一直没有发送FIN报文(就会一直处于CLOSE_WAIT状态,还有数据要发送,等等再关闭),那么主动一方就可能永远处于FIN_WAIT2状态,如图2所示。


图2-FIN_WAIT_2状态

  为了解决主动一方永远处于FIN_WAIT2状态,操作系统设置了一个定时器,如果这个连接空闲时间超时了,那么该连接将进入CLOSED状态。

参考资料:https://blog.csdn.net/q1007729991/article/details/69686781

23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态相关推荐

  1. TCP协议连接的11种状态浅谈

    了解TCP的协议可以在很大程度上帮助我们分析服务器当前的TCP连接状态,同时也是排查一些网络故障的基础,首先来看一下TCP协议的三次握手与四次断开. TCP协议三次握手   1.客户端首先发起连接,也 ...

  2. 基于TCP协议的网络程序(基础学习)

    下图是基于TCP协议的客户端/服务器程序的一般流程: 图 37.2. TCP协议通讯流程 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听 ...

  3. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  4. TCP协议端口状态说明:CLOSE-WAIT、TIME_WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST_ACK、CLOSED

    了解TCP协议端口的连接状态,对排除和定位网络或系统故障会有很大帮助,因此了解一下是有必要的: 一.LISTENING  提供某种服务,侦听远方TCP端口的连接请求,当提供的服务没有被连接时,处于LI ...

  5. TCP/IP TIME_WAIT状态原理

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

  6. tcp协议不具备的功能是_TCP协议的状态深度解析,你知道的和不知道的都在这篇文章(干货)...

    今天和大家说说,TCP协议的状态解析.大家可以看看下图,接下来我们会详细说明. 发起握手阶段 CLOSED:表示初始状态. LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受连接. S ...

  7. tcp协议的端口状态

    Listening Syn_sent syn_rcvd established close_wait time_wait --------- 对方主动关闭(对方调用close()), 我方的状态变为 ...

  8. TCP协议 状态解析和状态统计

    一.三次握手和四次挥手 1.建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器. (2)服务器端回应客户端的请求,这是三次握手中的第2个报文,这个 ...

  9. 重学TCP协议(8) TCP的11种状态

    TCP的11种状态 为了逻辑更加清晰,假设主动打开连接和关闭连接皆为客户端,被动打开连接和关闭连接皆为服务端 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 ...

最新文章

  1. 【iOS报错】“The operation couldn’t be completed (LaunchServicesError erro
  2. VMWare 虚拟化 Ubuntu 64 (16.04)-- docker 无法链接 pull 镜像 ?(solved)
  3. 网狐棋牌(二) CQueueServiceEvent初步分析
  4. linux c 获取时间戳 打印时间戳
  5. log4js linux,日志管理 log4js
  6. 十二、Promise的学习笔记(Promise的基本使用、链式编程、all())
  7. 【人工智能】《Python深度学习》
  8. messagebox 全部使用_商业篇 | 使用python开发性格分析工具卖钱
  9. java 面向对象之内存管理
  10. 最新款电影程序源码 影院网站源码 在线采集多资源播放器去广告
  11. 软件架构-redis特性和集群特性(下)
  12. 计算机用户被锁定 蓝屏,电脑提示文档已被administrator锁定怎么办
  13. win7+linux双系统安装
  14. CStyle足迹:一个BIOS人的成长日记之开篇
  15. CentOS 之 openssl-devel 安装
  16. 数学分析教程(科大)——1.5笔记+习题
  17. 流媒体之MP4码流解析。
  18. 解压特定zip压缩文件中特定文件,Java
  19. 禅道CMS文件上传漏洞(CNVD-C-2020-121325)
  20. 为SharePoint网站添加Banner

热门文章

  1. 小学生识字现状调查问卷
  2. hihoCoder #1135 : Magic Box
  3. unity3d 非运行模式下执行脚本
  4. 普元信息 服务器,普元配置服务器
  5. Elasticsearch性能优化技巧
  6. 1023 穷游?“穷”游?
  7. 学霸用 Python 分析相亲网站数据,在两万异性中找到真爱!
  8. mysql meb物理备份脚本
  9. spring中的事件监听机制
  10. 金蝶ERP K3 介绍