netstat 详细使用教程:查看端口、连接、监听与路由(新手到实战)
netstat 详细使用教程:查看端口、连接、监听与路由(新手到实战)
netstat 是 Linux/Unix/Windows 上都很常见的网络诊断命令。它可以帮助你快速回答这些问题:
- 现在有哪些 TCP/UDP 连接?
- 哪些端口正在监听?
- 某个端口被哪个进程占用了?
- 当前机器的路由表是什么?
- 网络协议统计是否异常(丢包、重传等)?
不过需要提前说明一点现实情况:
在很多现代 Linux 发行版中,
netstat已经属于“老工具”(来自net-tools套件)。
官方更推荐使用它的继任者:ss(来自iproute2套件)。
但 netstat 依然非常常用,尤其是老项目、老脚本、排查端口问题、面试等场景。
1. netstat 能做什么?(核心用途)
1.1 查看端口监听(服务是否启动)
比如你想知道 8080 是否在监听:
netstat -lntp | grep 8080
1.2 查看当前 TCP 连接(谁在连谁)
netstat -ant
1.3 查看 UDP 监听(DNS、NTP、IoT 常见)
netstat -lnup
1.4 查看路由表
netstat -rn
1.5 查看网络统计信息
netstat -s
2. 先理解 netstat 输出(新手必看)
netstat 输出的关键列通常包括:
- Proto:协议(tcp/udp)
- Local Address:本地地址(IP:PORT)
- Foreign Address:远端地址(IP:PORT)
- State:连接状态(LISTEN/ESTABLISHED 等)
- PID/Program name:进程号/进程名(需要
-p)
例如:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1234/python3
你需要重点关注:
0.0.0.0:8080:监听所有网卡的 8080127.0.0.1:8080:只监听本机(外部无法访问):::8080:IPv6 监听(通常也可能兼容 IPv4)
3. 最常用:查看监听端口(LISTEN)
3.1 查看所有 TCP 监听端口 + 对应进程
sudo netstat -lntp
参数解释:
-l:只显示监听 socket(LISTEN)-n:数字显示(不解析域名和服务名)-t:只看 TCP-p:显示 PID/进程名(需要 root)
3.2 查看所有 UDP 监听端口 + 对应进程
sudo netstat -lnup
参数解释:
-u:只看 UDP
3.3 查某个端口是否监听
sudo netstat -lntp | grep 8080
4. 查看所有连接(连接状态排查)
4.1 查看所有 TCP 连接
netstat -ant
参数解释:
-a:显示所有(监听 + 已连接)-n:数字显示-t:TCP
4.2 查看 TCP 连接 + PID(排查谁在连谁)
sudo netstat -antp
5. TCP 状态(工程排查必会)
在排查网络问题时,你经常会看到以下状态:
- LISTEN:服务在监听端口
- ESTABLISHED:连接已建立
- TIME_WAIT:连接关闭后的等待释放(常见,通常正常)
- CLOSE_WAIT:对端关了,但本地程序没有 close(常见于程序 bug)
- SYN_SENT:正在发起连接(握手未完成)
- SYN_RECV:收到连接请求,正在握手
5.1 常见经验判断
TIME_WAIT很多:可能是短连接过多(例如压测、没有连接复用)CLOSE_WAIT很多:通常是程序没有正确关闭 socket(更值得关注)SYN_SENT很多:网络不通、防火墙、对端不响应
6. netstat 参数大全(按类别记忆)
很多人背参数很痛苦。实际上你只要按类别理解就行。
6.1 显示范围类
-a:显示所有 socket(监听 + 非监听)-l:只显示监听 socket
6.2 协议筛选类
-t:TCP-u:UDP
6.3 输出格式类(强烈推荐)
-n:不解析域名/服务名(快、稳定)-p:显示 PID/进程名(需要权限)
6.4 路由与网卡统计
-r:显示路由表-i:显示网卡统计(收发包、错误等)-s:显示协议统计(TCP/UDP/ICMP 等计数)
7. 路由表:netstat -rn(网络不通必查)
netstat -rn
-r:路由表-n:数字显示
这条命令常用于排查:
- 默认网关是否正确
- 路由是否被错误配置
- 某个网段是否可达
8. 网络统计:netstat -s(高级但很有用)
netstat -s
它会输出:
- TCP 重传次数
- UDP 错误计数
- ICMP 错误计数
- 丢包统计等
适合排查:
- 网络不稳定
- TCP 重传异常
- 系统网络栈是否出现异常
9. 工程师最常用的经典组合(建议背下来)
9.1 查 TCP 监听(最常用)
sudo netstat -lntp
9.2 查所有 TCP 连接
sudo netstat -antp
9.3 查 UDP 监听
sudo netstat -lnup
9.4 查路由表
netstat -rn
9.5 查网卡统计
netstat -i
10. 常见实战场景(排查套路)
场景 1:服务启动失败,提示端口被占用
sudo netstat -lntp | grep 8080
你会看到:
- PID/进程名
- 端口是否被监听
拿到 PID 后可以继续:
ps -fp PID
场景 2:服务对外访问不了(很常见)
你看到监听是:
127.0.0.1:8080:只能本机访问0.0.0.0:8080:外部可访问
排查时务必确认监听地址。
场景 3:连接数异常(ESTABLISHED/TIME_WAIT 很多)
netstat -ant | head
或统计状态:
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -nr
(这条适合稍微熟悉 shell 后使用)
场景 4:排查 adb 5037 是否监听正常
sudo netstat -lntp | grep 5037
11. netstat vs ss:现代 Linux 更推荐用 ss
在现代 Linux 上,ss 基本等价于 netstat,但更快、更强。
例如:
netstat 查监听
netstat -lntp
ss 对应写法
ss -lntp
ss 的优势:
- 读取内核信息更直接
- 速度更快
- 支持更强的过滤能力
12. Windows 上的 netstat(补充)
Windows 也有 netstat,常用:
netstat -ano
-a:所有连接-n:数字显示-o:显示 PID
然后用:
tasklist | findstr PID
查出具体进程。
13. 常见坑与注意事项
13.1 不加 sudo 看不到 PID
-p 需要权限,否则可能显示为 -。
解决:加 sudo。
13.2 不加 -n 会变慢
netstat 可能解析 DNS、服务名,导致输出很慢。
排查时强烈建议:
- 总是加
-n
13.3 IPv6 输出的 :::8080
很多新手看到 :::8080 会慌。
它表示:
- IPv6 监听 8080
- 通常也可能兼容 IPv4(取决于系统配置)
14. 总结:你应该怎么用 netstat?
netstat 的核心价值是:
- 快速看到端口监听情况
- 快速看到连接状态
- 快速定位端口与进程关系(配合 -p)
建议记住的最小集合:
sudo netstat -lntp
sudo netstat -antp
sudo netstat -lnup
netstat -rn
掌握这几条,你就能处理绝大多数端口/连接排查问题。

浙公网安备 33010602011771号