Linux netstat 网络连接排查:从端口占用到连接状态
当 Linux 服务器出现服务访问不通、端口被占用或连接数异常时,netstat 是最直接的排查工具之一。
它能查看监听端口、已建立连接、路由表和网络接口统计,帮你快速定位问题出在哪一层。
不过现在很多新系统默认不再预装 netstat,而且部分场景下 ss 命令更高效。
下面按零基础也能照做的顺序,讲清楚怎么安装、怎么查、怎么看结果,以及哪些地方容易踩坑。
先确认 netstat 是否可用
登录服务器后,先执行:
netstat -V
如果提示 command not found,说明当前系统没有安装 net-tools 包。
不同发行版安装方式不同:
- Debian/Ubuntu:
apt update && apt install -y net-tools - CentOS/RHEL:
yum install -y net-tools - Rocky/AlmaLinux:
dnf install -y net-tools
安装完成后再次执行 netstat -V,能输出版本信息即表示可用。
注意: 如果服务器没有外网,需要先配置本地 yum 源或 apt 源,否则安装会失败。
排查端口监听与连接状态
netstat 的参数很多,排查时不需要全记。
下面几个组合覆盖了大部分场景。
查看所有监听端口
netstat -tlnp
参数含义:
-t:显示 TCP 连接-l:只显示监听状态-n:不解析域名和服务名,直接显示 IP 和端口号-p:显示占用端口的进程 PID 和程序名
输出中 Local Address 一列冒号后面的数字就是监听端口,PID/Program name 显示是哪个进程在监听。
如果只想看某个端口,比如 80:
netstat -tlnp | grep :80
有输出说明端口正在被监听;
没有输出说明服务没起来,或者监听在其他端口上。
查看已建立的连接
netstat -antp | grep ESTABLISHED
ESTABLISHED 表示连接已经建立。
如果某个 IP 出现大量 ESTABLISHED 连接,可能是正常业务流量,也可能是异常连接,需要结合业务判断。
查看连接状态统计
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn
这条命令会统计 TIME_WAIT、ESTABLISHED、LISTEN 等状态的数量。
TIME_WAIT 偏多通常是短连接频繁创建销毁导致,不一定是故障,但数量持续很高时需要关注。
定位端口占用与进程
服务启动报错“Address already in use”时,说明端口被占用。
用下面命令找到占用进程:
netstat -tlnp | grep :8080
输出示例:
tcp6 0 0 :::8080 :::* LISTEN 12345/java
其中 12345 是 PID,java 是程序名。
确认这个进程是否需要保留:
- 如果是旧进程残留,可以用
kill 12345结束,必要时用kill -9 12345强制结束 - 如果不确定进程用途,先用
ps -fp 12345查看启动命令,避免误杀关键服务
避坑点: 直接 kill -9 可能导致数据丢失或服务异常,优先用普通 kill,等待几秒后再确认。
常见查不到结果的原因
执行 netstat 后没有输出或输出不符合预期,通常有这几类原因:
- 权限不足:普通用户看不到进程信息,需要
sudo netstat -tlnp或切换到 root - 服务只监听 IPv6:输出显示
tcp6和:::,此时 IPv4 访问可能不通,需要检查服务配置 - 端口监听在 127.0.0.1:只允许本机访问,外部连接会被拒绝,需要改为 0.0.0.0 或具体网卡 IP
- 防火墙拦截:端口在监听但外部不通,检查
firewalld、ufw或云安全组规则
排查顺序建议:先确认服务进程存在,再确认端口监听,最后检查防火墙和安全组。
用 ss 替代 netstat 的简单对照
现代 Linux 更推荐 ss,它默认已安装且速度更快。
常用对照如下:
netstat -tlnp对应ss -tlnpnetstat -antp对应ss -antpnetstat -anp | grep ESTABLISHED对应ss -anp | grep ESTABLISHED
如果服务器上 netstat 不可用,可以直接用 ss,输出格式略有差异但排查思路一致。
验证排查结果
完成操作后,按下面几步确认问题是否解决:
- 再次执行
netstat -tlnp | grep :端口号,确认目标端口处于 LISTEN 状态 - 用
curl -I http://127.0.0.1:端口号在本机测试,排除网络和防火墙干扰 - 从外部客户端用
telnet IP 端口号或nc -zv IP 端口号测试连通性 - 如果服务有日志,查看日志中是否还有报错信息
本机通、外部不通,基本可以定位到防火墙或安全组;
本机也不通,则回到服务配置和进程状态继续排查。
几个容易忽略的细节
- netstat 输出中的
Recv-Q和Send-Q在 LISTEN 状态下表示等待处理的连接队列,数值持续偏高说明服务处理不过来 TIME_WAIT是正常状态,不要一看到就急着调内核参数- 排查完成后记得记录端口和进程对应关系,方便下次快速定位
- 涉及修改防火墙或结束进程前,先确认业务影响范围,必要时做好备份和回滚准备
如果你正在处理 Linux netstat 网络连接排查,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。