当Linux服务器的TIME_WAIT过多时,
通常会想到去修改参数降低TIME_WAIT时长,
以减少TIME_WAIT数量,但Linux并没有提供这样的接口,
除非重新编译内核。

Linux默认的TIME_WAIT时长一般是60秒,
定义在内核的include/net/tcp.h文件中:
#define TCP_TIMEWAIT_LEN (60*HZ)
/* how long to wait to destroy TIME-WAIT state,
 * about 60 seconds
 */
#define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
/* BSD style FIN_WAIT2 deadlock breaker.
 * It used to be 3min, new value is 60sec,
 * to combine FIN-WAIT-2 timeout with
 * TIME-WAIT timer.
 */

注意tcp_fin_timeout不是TIME_WAIT时间:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
tcp_fin_timeout实为FIN_WAIT_2状态的时长,
Linux没有提供修改TIME_WAIT时长接口,除非修改宏的定义重新编译内核。
但Windows可以修改注册表中的TcpTimedWaitDelay值来控制TIME_WAIT时长。

RTO:超时重传(Retransmission Timeout)

TIME_WAIT是一个常见经常的问题,相关内容(/etc/sysctl.conf或/proc/sys/net/ipv4):
1) net.ipv4.tcp_timestamps
   为1表示开启TCP时间戳,用来计算往返时间RTT(Round-Trip Time)和防止序列号回绕
2) net.ipv4.tcp_tw_reuse
   为1表示允许将TIME-WAIT的句柄重新用于新的TCP连接
3) net.ipv4.tcp_tw_recycle
   为1表示开启TCP连接中TIME-WAIT的快速回收,NAT环境可能导致DROP掉SYN包(回复RST)
4) net.ipv4.tcp_fin_timeout
   FIN_WAIT_2状态的超时时长
5) net.ipv4.tcp_syncookies
   为1时SYN Cookies,当SYN等待队列溢出时启用cookies来处理,可防范少量SYN攻击
6) net.ipv4.tcp_max_tw_buckets
   保持TIME_WAIT套接字的最大个数,超过这个数字TIME_WAIT套接字将立刻被清除并打印警告信息
7) net.ipv4.ip_local_port_range
8) net.ipv4.tcp_max_syn_backlog
   端口最大backlog内核限制,防止占用过大内核内存
9) net.ipv4.tcp_syn_retries
   对一个新建连接,内核要发送多少个SYN连接请求才决定放弃,不应该大于255
10) net.ipv4.tcp_retries1
   放弃回应一个TCP连接请求前﹐需要进行多少次重试,RFC规定最低的数值是3,这也是默认值
11) net.ipv4.tcp_retries2
   在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试,默认值为15
12) net.ipv4.tcp_synack_retries
   TCP三次握手的SYN/ACK阶段重试次数,缺省5

13) net.ipv4.tcp_max_orphans
   不属于任何进程(已经从进程上下文中删除)的sockets最大个数,超过这个值会被立即RESET,并同时显示警告信息
14) net.ipv4.tcp_orphan_retries
   孤儿sockets废弃前重试的次数,缺省值是7
15) net.ipv4.tcp_mem
   内核分配给TCP连接的内存,单位是page:
   第一个数字表示TCP使用的page少于此值时,内核不进行任何处理(干预),
   第二个数字表示TCP使用的page超过此值时,内核进入“memory pressure”压力模式,
   第三个数字表示TCP使用的page超过些值时,报“Out of socket memory”错误,TCP 连接将被拒绝
16) net.ipv4.tcp_rmem
   为每个TCP连接分配的读缓冲区内存大小,单位是byte
17) net.ipv4.tcp_wmem
   为每个TCP连接分配的写缓冲区内存大小,单位是byte:
   第一个数字表示,为TCP连接分配的最小内存,
   第二个数字表示,为TCP连接分配的缺省内存,
   第三个数字表示,为TCP连接分配的最大内存(net.core.wmem_max可覆盖该值)
18) net.ipv4.tcp_keepalive_time
   当keepalive起用的时候,TCP发送keepalive消息的频度,单位为秒,缺省是7200秒(即2小时)
19) net.ipv4.tcp_keepalive_intvl
   keepalive探测包的发送间隔    
20) net.ipv4.tcp_keepalive_probes
   如果对方不予应答,探测包的发送次数

代码中可通过SO_LINGER来控制。

Linux上的TIME_WAIT和tcp_fin_timeout相关推荐

  1. 不要在linux上启用net.ipv4.tcp_tw_recycle参数

    本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,但并非完整的翻译,译者CFC4N对原文理解后, ...

  2. lisp协议instand_分享|Linux 上 10 个最好的 Markdown 编辑器

    在这篇文章中,我们会点评一些可以在 Linux 上安装使用的最好的 Markdown 编辑器. 你可以在 Linux 平台上找到非常多的 的 Markdown 编辑器,但是在这里我们将尽可能地为您推荐 ...

  3. linux加微软的数据库,在Linux上使用Microsoft SQL – 安装SQL

    Microsoft 分享一下如何在Linux上使用Microsoft SQL 2017. SQL Server 2017旨在处理开源数据和应用程序的异构环境.在本技术白皮书中,您将获得业界领先的关系数 ...

  4. linux 存储映射lun 给_如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘 | Linux 中国

    导读:当 Linux 系统连接到 SAN(存储区域网络)后,你需要重新扫描 iSCSI 服务以发现新的 LUN.本文字数:3394,阅读时长大约:4分钟https://linux.cn/article ...

  5. linux上查看网络限制,如何在Linux上限制网络带宽

    您是否曾经与多个设备共享网络带宽?如果您曾经处于一个应用程序占用了所有流量的位置,那么您是系统管理员还是Linux用户,您将需要发现如何控制应用程序的上载和下载速度,以确保您的带宽并不完全被单个应用程 ...

  6. 在Linux上利用python获取本机ip

    下面介绍在Linux上利用python获取本机ip的方法. 经过网上调查, 发现大致有两种方法, 一种是调用shell脚本,另一种是利用python中的socket等模块来得到,下面是这两种方法的源码 ...

  7. Linux上隐藏进程名(初级版)

    缘起 上一篇博文 模仿nginx修改进程名 中提到了一种修改进程名的方法,就像 nginx 一样,给不同进程命名为 master 以及 worker 等.那么能不能把新进程名设置为空字符串呢?如果能, ...

  8. Windows/Linux上使用fopen相关函数读取大文件

    在介绍读取大文件之前,先了解下<cstdint>文件,标准头文件,存放固定宽度整数类型,如int32_t, uint32_t,不管在32位上还是64位上,长度都为4个字节:int64_t, ...

  9. linux里运行windows,在Linux上运行Windows应用程序

    当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net  网友分享于:2015- ...

最新文章

  1. 28 模态框拖动案例
  2. 最好用的markdown编辑器推荐typora
  3. SharePoint自动化系列——Add/Remove Record from items
  4. mysql查看表描述_MySQL表记录操作介绍(重点介绍查询操作)
  5. node.js编写网页_为Node.js编写可扩展架构
  6. 基础编程题目集 6-8 简单阶乘计算 (10 分)
  7. hdu 6149 Valley Numer II(01背包套状压dp)
  8. Winform 显示Gif图片
  9. PL/SQL程序设计(七)—— 触发器
  10. 关于原型污染漏洞的完整指南
  11. git 多个stash选择指定的版本恢复
  12. 在 keil MDK_V5中加入arm7,arm9等一些芯片型号
  13. 解压rar_【RAR安卓】RAR解压v5.91.build93去广告版,解压多种压缩包 与WinRAR完美兼容!...
  14. 基于Hive数据仓库的标签画像实战
  15. 思科服务器dns配置文件,cisco设置dns方法
  16. RSS阅读器FeedDemon使用方法
  17. 支付宝崩了登上微博热搜
  18. MATLAB中符号运算和数值运算的区别
  19. 如何通俗理解并快速写出麦克斯韦方程组?
  20. Unity 编辑器运行没问题,打包exe文件运行蓝屏?

热门文章

  1. 卡巴斯基安全浏览器_360安全DNS正式推出DoH安全解析服务,打造安全上网“金钟罩”...
  2. 纯C写Windows程序系列---------VS2010设置纯C环境 .
  3. 什么是java序列化,如何实现java序列化?
  4. 手机利用python访问电脑文件_黑客教程,一行python命令让手机读取电脑文件!
  5. overflow超出显示_实现:超过N行折叠并显示“...查看全部”【功能】
  6. python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)
  7. php点击按钮创建文件,PHP 文件操作类(创建文件并写入) 生成日_php
  8. lambda 对象去重_最火的java8新特性:Lambda 表达式
  9. 计算机技术大神,2017考研:计算机科学与技术学科大神给你的套路
  10. diy nas配置推荐2019_在Windows Server 2019上配置NAS的方法