为什么要先看分布
连接数暴涨本身不是结论:5000 条连接来自一个 IP,与来自 5000 个分散 IP,处置方式完全不同。判定的三个维度是方向(入站还是出站)、来源(集中还是分散)、状态(ESTABLISHED / SYN-RECV / TIME-WAIT)。方向说明是别人连你还是你连别人,来源区分单点异常与分布式行为,状态则能直接把结论指向半连接攻击、连接池爆炸或正常的短连接回收。
基本信息
| 适用平台 | Linux(ss 为 iproute2 自带);Windows 用 Get-NetTCPConnection 聚合 |
|---|---|
| 核心命令 | ss -Htan(-H 去掉表头便于 awk 统计) |
| 统计手法 | awk 取列 + sort | uniq -c | sort -rn 找 Top 来源 |
| 关键状态 | established、syn-recv、time-wait、fin-wait-2 |
| 处置前动作 | 先留存 ss 快照、抓包与访问日志,再决定限速、封禁或改代码 |
分布形态与倾向判断
| 形态 | 典型特征 | 倾向判断 |
|---|---|---|
| 单 IP 高连接 | 一个来源占掉大半连接数 | 爬虫、未限速的压测、单点攻击 |
| 大量分散 IP 同目标 | 来源极度分散且端口集中 | 分布式扫描或 DDoS |
| 本机大量外连同目标 | 出方向连接堆积 | 程序重试风暴或连接池爆炸 |
| SYN-RECV 占比高 | 半连接队列被占满 | SYN flood,或握手回包被丢、服务端处理不过来 |
| TIME-WAIT 占比高 | 短连接密集 | 正常回收,或客户端未复用连接 |
典型使用场景
- 监控告警「连接数超阈值」,需要判断是攻击还是自身程序问题
- 服务响应变慢并伴随连接数上涨,确认是否重试风暴导致雪崩
- 压测后复盘:区分正常并发连接与异常堆积
- 排查半连接队列溢出:确认 synrecv 数量与内核参数是否需要调整
- 安全事件响应:快速定位 Top 来源 IP 并保留证据
分布分析
分布分析
ss -Htan state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20 # 已建立连接的 Top 来源
ss -Htan state syn-recv | wc -l # 半连接数量
ss -Htan | awk '{print $1}' | sort | uniq -c | sort -rn # 各状态计数排行
ss -Htan state established | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -rn | head # 按本地端口看哪个服务吃连接
netstat -s | grep -iE 'listen|overflow|retransmit' # 内核侧监听队列溢出与重传统计处置前先留存证据:ss 快照、抓包和访问日志。封 IP 前确认它不是自家监控、上游节点或企业出口地址,误封自有链路比不封代价更大。