Linux netstat查看网络连接
netstat 是 Linux 中查看网络连接、监听端口和路由表的经典命令。 即使新系统更推荐 ss,很多服务器仍默认或可安装 netstat。
本文面向零基础用户,讲清如何用 netstat 查看连接状态,并识别 SYN Flood、连接数异常、TIME_WAIT 堆积等常见问题。
先确认 netstat 是否可用
部分 Linux 发行版默认不再预装 net-tools,需要先安装:
# Debian/Ubuntu
apt update && apt install net-tools -y
# CentOS/RHEL
yum install net-tools -y
安装后执行 netstat -V,能输出版本号即表示可用。
如果提示 command not found,优先检查是否安装成功,或改用 ss -tunlp 替代。
常用查看命令与参数含义
掌握几个核心参数就能覆盖大部分场景:
-t:只看 TCP 连接-u:只看 UDP 连接-n:不解析域名,直接显示 IP 和端口,速度更快-l:只看监听状态-p:显示对应进程 PID 和程序名(需要 root 权限)-a:显示所有连接和监听
常用组合:
# 查看所有 TCP 连接及进程
netstat -tunp
# 查看监听端口
netstat -tlnp
# 统计各状态连接数
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn
最后一条命令是排查异常连接的关键入口,能快速看出哪种状态数量异常。
识别异常连接的三个信号
信号一:大量 SYN_RECV 状态。 正常服务器 SYN_RECV 数量很少且短暂。
如果持续出现几十上百个,可能是 SYN Flood 攻击或客户端连接异常。
可结合 netstat -ant | grep SYN_RECV | wc -l 统计数量。
信号二:ESTABLISHED 连接数远超预期。 例如单台 Web 服务器正常并发几百,突然涨到几千,可能遭遇 CC 攻击或程序连接池泄漏。
用 netstat -ant | grep ESTABLISHED | wc -l 观察趋势。
信号三:TIME_WAIT 或 CLOSE_WAIT 堆积。 TIME_WAIT 过多通常是短连接频繁创建销毁,可调整内核参数;
CLOSE_WAIT 过多往往说明程序没有正确关闭连接,需要检查代码或服务配置。
定位到具体进程和远端 IP
发现异常后,用 -p 参数定位进程:
netstat -tunp | grep ESTABLISHED
输出中最后一列会显示 PID/程序名。
如果某个进程连接数异常,可进一步统计:
netstat -tunp | grep 进程名 | wc -l
netstat -tunp | grep 进程名 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
这能列出连接最多的远端 IP,便于判断是单一来源攻击还是正常业务分布。
避坑与验证建议
- 权限不足会看不到进程信息,建议用
sudo或 root 执行。 - netstat 在连接数极高时可能较慢,可改用
ss -s快速汇总,再回到 netstat 看细节。 - 不要只凭单次输出下结论,异常连接通常要看持续趋势,建议间隔几秒多次执行对比。
- 调整内核参数前先备份,例如修改
net.ipv4.tcp_tw_reuse等参数需评估业务影响。
验证是否恢复正常,可重复执行统计命令,观察 SYN_RECV、ESTABLISHED、TIME_WAIT 数量是否回落到合理区间。
如果异常连接来自固定 IP,可结合防火墙临时封禁,再继续观察。
常见疑问
netstat 和 ss 哪个更好? ss 更快、更现代,但 netstat 输出更直观,新手排查够用。
两者可结合使用。
为什么看不到进程名? 通常是没用 root 权限,或连接属于其他用户。
加 sudo 重试即可。
TIME_WAIT 很多需要处理吗? 少量属正常,若持续数千且影响新连接,可考虑调整内核参数或改用长连接。
掌握以上命令和判断逻辑,你就能用 netstat 快速查看网络连接并识别常见异常,为后续防火墙、内核调优或程序修复提供依据。