返回首页

TCP 连接数爆表:攻击还是 Bug 排查指南

📅 创建于 2026-05-26 🔄 更新于 2026-05-26 📝 336 字

来源:王璐宇 | 发布日期:2025-08-29

TCP 连接数爆表:攻击还是 Bug 排查指南

当服务器 TCP 连接数飙升(如 10 万+)时,快速分辨是 DDoS/CC 攻击 还是 代码 Bug/配置错误,是应急响应的核心能力。

紧急响应:5 分钟快速定位

1. 连接状态分析

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
大量状态 初步判断 说明
TIME_WAIT 大概率业务 Bug 应用频繁创建短连接,主动关闭后 OS 需保持 2MSL。常见于未使用连接池的 HTTP 客户端
CLOSE_WAIT 代码 Bug 实锤 对方关闭连接但应用未调用 close(),属资源泄漏。典型:DB/HTTP 连接未正确释放
SYN_RECV 极可能是 SYN Flood 攻击 服务器发 SYN-ACK 但未收 ACK,半连接队列被占满
ESTABLISHED 需进一步分析 可能正常业务、连接池过大、或长连接攻击

2. 源 IP 分析

netstat -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 20
  • 攻击特征:源 IP 分散、随机,或零星外部 IP 大量请求 → CC/DDoS
  • Bug 特征:源 IP 集中(127.0.0.1、内网 IP、自身)→ 程序 Loopback 调用或连接池配置错误

3. 端口/进程关联

# 哪个端口连接数最多
netstat -ant | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr | head -n 10
# 根据端口查进程
lsof -i :80

快速定位到 Nginx、MySQL 或 Java 应用等具体进程。

攻防鉴别总表

特征指标 攻击 (Attack) 代码/配置 Bug
主要连接状态 SYN_RECV、FIN_WAIT1 TIME_WAIT、CLOSE_WAIT
源 IP 分布 分散、随机 集中(本地、少数服务 IP)
流量规律 瞬间爆发,与业务无关 持续增长,与发布/功能调用时间相关
资源消耗 CPU、带宽 CPU、内存、文件描述符
解决方案 防火墙、流量清洗、扩容 修改代码、调整配置、重启服务

实战案例

  • CC 攻击:活动页 ESTABLISHED 飙高,源 IP 分散指向一个耗时查询 API → 启用 WAF CC 防护规则
  • CLOSE_WAIT 泄漏:Java 应用发布后 CLOSE_WAIT 缓慢上升至爆表 → 异常处理中未关闭 MySQL 连接 → 修复代码后重启

落地解决

临时止损

场景 措施
攻击 iptables 限制单 IP 并发(--connlimit-above 50);接入云厂商 DDoS 高防;临时扩容
Bug 重启服务释放资源;回滚新版

根因治理

代码层面

  • 所有 HTTP/数据库/Redis 客户端使用连接池,设置合理大小
  • finally 块中确保连接释放
  • 设置连接超时、读超时、写超时

系统层面

  • 调优 /etc/sysctl.conf 内核参数(如 net.ipv4.tcp_tw_reusenet.core.somaxconn
  • 建设常态化 WAF 和 DDoS 防护体系
  • 核心 API 配置速率限制(Rate Limiting)

关联页面

页面关联点
server-performance-four-dimensions服务器性能五维排查总纲
docker-production-pitfallsDocker 生产环境 TCP 连接排坑
network-troubleshooting-order网络排障顺序
online-troubleshooting-checklist在线排障清单
nginx-realtime-push-guideNginx 实时推送与长连接配置