只有处于FIN_WAIT2状态的客户端等待到服务器的结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态,如果不是为了在半关闭状态下继续发送数据,连接长时间的停留在FIN_WAIT2状态并无益处,连接停留在FIN_WAIT2的状态的原因可能是:客户端执行关闭后,未等服务器关闭就强行退出了,此时客户端将由内核在托管,可称之为孤儿连接。LINUX为了防止故而连接长时间存留在内核中,定义了两个变量:/proc/sys/net/ipv4/tcp_max_orphans 和 /proc/sys/net/ipv4/tcp_fin_timeout,前者指定内核能接管的孤儿连接的数目,后者指定孤儿连接的生存时间。

当客户端接收到服务器的结束报文段并且发送ACK之后,会进入TIME_WAIT状态,在这个状态客户端一般要等待2MSL(Maximum Segment Life,报文段最大生存时间),才能完全关闭,标准文档RFC1122的建议值是2min。

TIME_WAIT状态存在的原因有两点:
①可靠的终止TCP连接
②保证让迟来的TCP报文段有足够的时间被识别并丢弃

解释①:客户端因为接收到一个结束报文段从而从FIN_WAIT2状态到TIME_WAIT状态,因此客户端也要用ACK来回复这个结束报文段,如果没有TIME_WAIT这个等待时间,怎么才能保证客户端发送的ACK服务器一定会接受到呢,因此TIME_WAIT状态保证了可以可靠的终止连接

解释②:在LINUX系统上,一个TCP端口不能被同时打开两次或者以上,当一个TCP连接处于TIME_WAIT状态,我们将无法使用该连接占用的端口来创建一个新连接,反之,如果不存在TIME_WAIt状态,则应用程序嫩立即创建一个和刚关闭的连接相似的连接,(具有相同的IP和PORT),这个新的和原来相似的连接被称为原来连接的化身(incarnation),新的化身可能接收到属于原来的连接,携带应用程序数据的TCP报文段(迟到的报文段),这个显然是不应该发生的,这个也是TIME_WAIT状态存在的第二个原因

可通过TCP选项REUSEADDR来强制进程立即使用处于TIME_WAIT状态的端口。
在bind之前插入这段代码即可

int opt=1;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));

FIN_WAIT2状态的弊端以及TIME_WAIT状态分析及作用相关推荐

  1. 23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态

    关于TIME_WAIT状态   TIME_WAIT是TCP状态转换中的一个非常重要的状态,TIME_WAIT状态的或多或少会极大的影响客户端与服务端的性能,在真实的应用场景中往往需要根据实际需求来对T ...

  2. shutdown函数和FIN_WAIT2状态

    玩过英雄联盟的人都不会对shutdown感到陌生,就是你连杀被终结了嘛.在网络编程中也差不多是这个意思,准确来说是从容关闭.有啥用呢?来看代码吧 [mapan@localhost TCP]$ ls c ...

  3. linux关闭established状态,有关ESTABLISHED,CLOSE_WAIT,TIME_WAIT等连接状态

    在Linux的日常维护过程中,会经常用到下面的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 它会显示 ...

  4. TCP连接状态详解及TIME_WAIT过多的解决方法

    TCP建立连接的三次握手过程,以及关闭连接的四次握手过程. TCP建立连接的三次握手过程,以及关闭连接的四次握手过程. 1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务 ...

  5. 计算机端口 closewait,TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

    一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...

  6. TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

    一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...

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

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

  8. TCP端口状态说明ESTABLISHED、TIME_WAIT

    查看网络连接数: netstat -an |wc -l netstat -an |grep xx |wc -l        查看某个/特定ip的连接数 netstat -an |grep TIME_ ...

  9. linux socket netstat 状态 LISTENING、ESTABLISHED、SYN_SENT、CLOSE_WAIT、TIME_WAIT、FIN_WAIT2 分别是什么意思?

    文章目录 LISTENING状态 ESTABLISHED状态 CLOSE_WAIT TIME_WAIT SYN_SENT状态 FIN_WAIT2状态 运行我们的hikflow_demo程序后,用net ...

最新文章

  1. android开发中用到的px、dp、sp
  2. 互联网时代的云服务器四大功能
  3. 图像抠图Image Matting算法调研
  4. Java多线程-新特性-线程池
  5. linux关机时循环输出脚本,Linux关机时执行指定脚本功能实现
  6. 数组遍历VS对象遍历
  7. Java面向对象(13)--==操作符与equals方法
  8. 三分钟理解Python函数式编程与闭包
  9. 应变界的翘楚:硅基谐振式传感器灵敏度非常高
  10. soidworks 生成PCD点云文件
  11. [转载]遗留系统中的RUBY中文解决方案
  12. PHP Default value for parameters with a class type hint can only be NULL
  13. 新手零基础一小时学会小程序开发制作教程
  14. 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
  15. js-纳税人识别码验证
  16. 均匀裁剪图片(3000X3000到1000X1000)
  17. AutoCAD2018_块
  18. CAD2014学习笔记-常用绘图命令和工具
  19. 实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)
  20. VMware虚拟机备份和恢复

热门文章

  1. 【手把手教学】获取阿里云服务器
  2. 全国31省城市化水平程度数据集(1990-2021年)
  3. mybatis plus argument type mismatch
  4. Google/Baidu的搜索技巧
  5. ARCGIS前端--读取excel数据并在地图上显示
  6. CENTOS7网络时钟同步
  7. 算法题放苹果:把M个相同的苹果放到N个完全相同的盘子里,有多少种放法?
  8. LLVM pass pwn 入门 (4)
  9. 透彻感知 数字孪生智慧隧道Web3D可视化监控系统
  10. 【实用】顶底预警公式,精准逃顶和抄底信号指标公式