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:监听所有网卡的 8080
  • 127.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

掌握这几条,你就能处理绝大多数端口/连接排查问题。

posted @ 2026-02-19 17:01  CalvinMax  阅读(16)  评论(0)    收藏  举报