TCP 连接状态查看全套方法
核心概念 TCP 连接状态查看方法,涵盖 ss、netstat 等工具,定位网络故障如 TIME_WAIT、CLOSE_WAIT 等异常。
1. 核心查看命令(分新旧工具)
1.1. ss(推荐,性能远优于netstat,云服务器首选)
# 完整连接,含状态、端口、进程
ss -antp
# 只看TCP,显示状态、地址
ss -at
# 过滤TIME_WAIT
ss -at state TIME-WAIT
# 统计各状态连接数量(面试高频)
ss -ant | awk '{print $1}' | sort | uniq -c
常用参数:
-a:所有连接(监听+已建立+关闭中)-n:数字端口,不解析域名,速度快-t:仅TCP-p:关联进程PID/程序名-s:直接汇总TCP各类状态统计(最简)
ss -s
1.2. netstat(传统工具,老系统常用)
# 查看全部TCP连接+进程
netstat -antp
# 统计各TCP状态计数
netstat -ant | awk '/tcp/ {print $6}' | sort | uniq -c
1.3. /proc 内核文件(底层查看,排查大量连接场景加分)
# 全局TCP连接表
cat /proc/net/tcp
# IPv6 TCP
cat /proc/net/tcp6
# 字段含义:第4列为TCP状态十六进制编码
# 00=ERROR,01=ESTAB,02=SYN_SENT,03=SYN_RECV,04=FIN_WAIT1,05=FIN_WAIT2,06=TIME_WAIT,07=CLOSE,08=CLOSE_WAIT,09=LAST_ACK,0A=LISTEN,0B=CLOSING
1.4. 实时监控
# 每秒刷新连接状态
watch -n 1 ss -ant
# 持续打印TCP状态统计
watch -n 1 "ss -ant | awk '{print \$1}' | sort | uniq -c"
2. 面试答题标准流程(问到“怎么查看TCP状态”直接这么说)
- 日常快速统计优先使用
ss -s,一秒输出 ESTAB、TIME-WAIT、LISTEN 等全部状态总数,快速判断连接堆积。 - 查看具体连接与进程使用
ss -antp,显示本地/远端地址、端口、TCP状态、对应业务PID,定位哪个进程产生大量异常连接。 - 过滤异常状态
业务大量超时/丢包时,单独筛选 TIME-WAIT / CLOSE_WAIT 连接:
ss -at state TIME-WAIT,统计数量判断是否内核参数需要调优。 - **底层内核视角排查(高并发场景加分)**连接几十万、ss/netstat卡顿,读取
/proc/net/tcp,通过十六进制状态码批量统计,不占用CPU。 - 持续观测波动
搭配 watch 实时监控,看故障时段异常连接是否同步上涨,定位故障根因。
3. 配套延伸(面试官追问必会)
3.1. 常见异常状态排查思路(二面网络故障必问)
- 大量TIME_WAIT
短连接业务、频繁创建销毁连接;优化:调大 tcp_tw_reuse、tcp_tw_recycle、缩短tw超时时间。 - 大量CLOSE_WAIT
服务端收到客户端FIN后,未调用close()关闭句柄,程序代码漏释放连接;解决:修复业务代码、重启服务。 - ESTABLISHED 堆积不释放
长连接卡死、线程池耗尽、读写阻塞;抓包看是否有持续数据交互。
4. 最简背诵版回答(面试口述)
查看TCP连接状态我分四层工具:
- 快速汇总用
ss -s,直接统计所有TCP状态总量; - 查看详细连接和进程用
ss -antp,能看到每条连接的两端地址、状态、归属进程; - 需要筛选异常连接时,用 ss state 参数单独过滤 TIME_WAIT、CLOSE_WAIT;
- 高并发连接量巨大,工具卡顿的时候,直接读取
/proc/net/tcp内核文件,通过状态编码统计;
同时可以配合 watch 实时监控状态变化,快速定位连接堆积类网络故障。
关联文档