TCP 为什么要有FIN_WAIT2, 主要是为了维护一个全双工的通道,
要弄懂这个问题, 必须要弄清楚, TCP断开链接时的四次挥手。如图所示

tcp四次挥手,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动(关闭读端,写端还不会关闭),一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
1.当一方主动断开链接, 给对端发送(FIN = 1, seq)。
2.自己进入FIN_WAIT1状态, 等待对端回复(ACK, seq)
3.对端收到(FIN = 1, seq) 后,向它的对端回复ACK。
发送FIN一方,收到ACK后。 就进入FIN_WAIT2 状态。 直到收到对端发送过来的FIN.
这就是FIN_WAT2的由来。
在实际生产项目中。服务器程序上,经常出现很多FIN_WAIT2, 由netstat -ant
可以查看连接。如果出现过多的FIN_WAIT2。会大量耗费服务器资源, 因为这些连接并没有销毁。它们等待对端发过来的的FIN, 如果对端已不在, 或已断线,它们会一直占用系统资源。
SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入 FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash。
那么问题来了, 怎么解决这个问题呢?
解决方案:
修改/etc/sysctl.conf文件:
net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。
这是修改操作系统配置方法。
另外在NODEJS下, 当服务器关闭SOCKET 不要用半关闭 socket.end(); 需应该用销毁连接方法。socket.destroy(); 自测可行。
END

TCP FIN_WAIT2由来相关推荐

  1. TCP FIN_WAIT2定时器

    注:本文分析基于3.10.107内核版本 之前我们一直考虑的是TCP建链过程中出现问题时,双方用户是如何感知,并处理的.在TCP建链的三次我手中主要是由超时重传定时器以及SYNACK定时器来进行链接状 ...

  2. 解决Linux服务器中TCP的FIN_WAIT2,CLOSE_WAIT状态连接过多的问题

    问题现象 Linux系统服务器中FIN_WAIT2,CLOSE_WAIT状态的TCP链接过多,服务不能及时响应. 通过命令 netstat –ant|grep FIN_WAIT2|wc –l 查看连接 ...

  3. 面试官:换人!他连 TCP 这几个参数都不懂

    每日一句英语学习,每天进步一点点: 前言 TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用. TCP 协议是由操作系统实现,所以操作系统提供了不少调节 T ...

  4. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  5. 全网最详细 TCP 参数讲解,不用担心没有面试机会

    作者 | 小林coding 来源 | 小林coding 前言 TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用. TCP 协议是由操作系统实现,所以操作系 ...

  6. 全网最详细TCP参数讲解,再也不用担心没有面试机会了......

    作者 | 小林coding 责编 | 王晓曼 封图 | CSDN 下载自视觉中国 前言 TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用. TCP 协议是 ...

  7. [计算机网络] - 调节参数提高 TCP 性能

    转载自:https://blog.csdn.net/qq_34827674/article/details/106627403 1. TCP 三次握手的性能提升 TCP 是面向连接的.可靠的.双向传输 ...

  8. 全网最详细 TCP 参数讲解,再也不用担心没有面试机会了......

    作者 | 小林coding 来源 | 小林coding 前言 TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用. TCP 协议是由操作系统实现,所以操作系 ...

  9. 近两万字 TCP 硬核知识,教你吊打面试官!

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用. TCP 协议是由操 ...

最新文章

  1. 【连载】高效人士的116个IT秘诀(第2版)——秘诀25快速记录你的工作日志
  2. 【转】js frame 框架编程
  3. 解决screen Cannot open your terminal '/dev/pts/1'问题
  4. 深度强化学习探索算法最新综述,近200篇文献揭示挑战和未来方向
  5. Storm配置文件中主要参数配置说明
  6. caj转pdf_CAJ转PDF文件,这恐怕是最全的方法总结了!
  7. 《P5R》的反派设计有什么可取之处?
  8. C#对多态性的两种支持
  9. switch的对象不能为null
  10. DMTF Redfish 概念介绍
  11. java把date转化成yyyymmdd_jquery 将当前时间转换成yyyymmdd格式的实现方法
  12. 二、 防火墙中使用的核心技术
  13. Html5超链接重置为link状态,去除a标签下划线 html超链接更改颜色和去掉下划线
  14. (CVPR-2020)Strip Pooling:重新思考场景解析的空间池化
  15. Python:sample函数 如何使用?
  16. Acrel-2000T无线测温产品方案介绍(安科瑞-须静燕)
  17. H264码流中NALU sps pps IDR帧的理解
  18. 迪普科技“高”在哪里?
  19. MIT6.031学习笔记:(一)code review
  20. vue播放视频使用原生video标签基本功能(不含样式)

热门文章

  1. 小学数学测试软件报告,第二学小学数学期末测试质量分析报告
  2. 【C语言】小学数学练习
  3. 7种流行PHP编辑器的比较(PHP IDE)
  4. 2010年SQLite学习笔记之一
  5. 当生活真的过得很艰难的时候,你是怎么熬过来的?(内容来自知乎,用于自省)...
  6. java android 打地鼠_android实现打地鼠游戏
  7. matlab画banana函数,MATLAB 必须知道的基本操作.m
  8. Div+CSS网页布局对网站搜索引擎优化的影响
  9. 一梦江湖——华山快还钱是怎么会事呢?
  10. DAY2作业-假如生活欺骗了你!