TIME_WAIT查看与减少TIME_WAIT状态的TCP连接数量

admin 2026-02-08 00:52:44 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍了Linux系统中TIME_WAIT状态的TCP连接监控与优化方法。监控方面推荐使用ss命令替代netstat,通过ss-ant等命令统计连接数,并支持按端口、IP进行进阶分析。优化方案包括内核参数调整(启用tcp_tw_reuse、缩短tcp_fin_timeout、调整tcp_max_tw_buckets和端口范围)以及应用层设计(由客户端主动关闭、使用长连接/连接池)。文中特别提醒tcp_tw_recycle参数已在Linux4.12+移除且存在NAT兼容风险,严禁使用。 综合评分: 82 文章分类: 网络安全,安全运营,安全建设


cover_image

TIME_WAIT查看与减少TIME_WAIT状态的TCP连接数量

原创

刘军军 刘军军

运维星火燎原

2026年2月7日 00:00 河北

TIME_WAIT是TCP连接关闭后需保持的状态,通过系统工具可实时统计其数量,常用于诊断高并发场景下的连接资源占用问题。

查看方案:

一、基础统计(适用于所有Linux系统)

  1. 使用netstat命令(传统工具,需安装net-tools包)
netstat -an | grep -i TIME_WAIT | wc -l
  • 参数说明:

-a:显示所有连接

-n:以数字形式显示IP和端口(避免DNS解析耗时)

grep -i TIME_WAIT:过滤状态为TIME_WAIT的连接

wc -l:统计行数(即连接数量)

  1. 使用ss命令(现代高效工具,推荐优先使用)
ss -ant | grep -i TIME-WAIT | wc -l
  • 优势:ss比netstat性能更好(尤其连接数>1万时),且默认已安装在主流Linux发行版(如CentOS 7+、Ubuntu 16.04+)。
  • 注意:ss输出中状态显示为TIME-WAIT(短横线),与netstat的TIME_WAIT(下划线)略有区别。

二、进阶分析(按端口/IP统计)

  1. 按本地端口统计TIME_WAIT数量
ss -ant | grep TIME-WAIT | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr
  • 输出示例(前两列分别为数量和端口):

150 8080

80 443

👉 可快速定位高TIME_WAIT占用的服务端口(如Web服务80/443)。

  1. 按远程IP统计来源
ss -ant | grep TIME-WAIT | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10
  • 用于识别是否存在单一IP大量发起短连接(可能是恶意扫描或业务异常)。

三、实时监控(动态观察变化趋势)

watch -n 1'ss -ant | grep TIME-WAIT | wc -l'
  • 每1秒刷新一次统计结果,适用于观察连接数随时间的变化(如秒杀活动期间的峰值监控)。

💡 注意事项:

  • 若netstat命令未找到,需安装工具包:

  • Ubuntu/Debian:sudo apt install net-tools

  • CentOS/RHEL:sudo yum install net-tools

  • 生产环境建议优先使用ss,避免netstat在高并发时导致CPU占用过高(实测:10万连接场景下ss耗时<10ms,netstat需>1s)。

如何减少TIME_WAIT状态的TCP连接数量

TIME_WAIT是TCP四次挥手后主动关闭方保持的状态(默认2MSL,约60秒),过多会占用端口资源导致新连接失败,常见于高并发短连接场景(如HTTP服务、数据库连接池)。

处置方案:

四、内核参数优化(Linux系统)

1.启用TIME_WAIT连接复用

sysctl -w net.ipv4.tcp_tw_reuse=1  # 允许重用TIME_WAIT连接(仅适用于客户端主动发起的连接)

2.缩短TIME_WAIT超时时间

sysctl -w net.ipv4.tcp_fin_timeout=30  # 调整为30秒(默认60秒,需根据业务稳定性评估)

3.限制TIME_WAIT最大数量

sysctl -w net.ipv4.tcp_max_tw_buckets=30000  # 超过此值后新连接会被直接重置(需结合服务器内存调整,默认约18万)

五、应用层设计优化

1.由客户端主动关闭连接

避免服务端作为主动关闭方(如HTTP服务中,通过配置Connection: close让客户端发起FIN),可减少服务端TIME_WAIT积累(BAT某CDN节点实践:调整后TIME_WAIT数量下降40%)。

2.使用长连接或连接池

HTTP服务启用Keep-Alive(配置nginx.conf中keepalive_timeout 65);

数据库/Redis等服务采用连接池复用,减少频繁建连(如Java应用配置maxIdle和minIdle参数)。

3.端口资源扩展

增加可用端口范围:

sysctl -w net.ipv4.ip_local_port_range="1024 65535"  # 扩大临时端口范围(默认32768-60999)

风险提示:

  • tcp_tw_recycle参数已在Linux 4.12+移除,且在NAT环境下可能导致连接异常,严禁使用;
  • 缩短tcp_fin_timeout可能丢失延迟数据包,建议先压测验证(可参考BAT高可用架构规范:核心服务保留默认60秒)。

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:运维星火燎原 刘军军 刘军军《TIMEWAIT查看与减少TIMEWAIT状态的TCP连接数量》

当心RDP泄露你的信息 网络安全文章

当心RDP泄露你的信息

文章总结: 文章指出RDP连接后会在目标系统环境变量中设置CLIENTNAME变量暴露客户端主机名这一鲜为人知的安全隐患。攻击者可利用该信息实施精准反制或社工攻
评论:0   参与:  0