常用的网络排查工具
- linux
- 2026-08-24
- 0评论
当你在排查网络故障时,是不是上来就 ping 一下,通了就觉得“没事”?然后用户说“还是慢”,你又 traceroute 看一遍,发现一堆 * * * 就懵了?
我做Linux运维的头两年也这样。后来被线上事故教育了几回才明白:每个命令都有它的正确打开方式,用错了等于白干。
我把手头最常用的 几个网络排查工具,按 “先看通不通 → 再看怎么走 → 再看谁在占 → 最后抓包破案” 的顺序讲清楚。每个工具只讲高频用法,不做“全部参数罗列”——那种事让 man 手册去做就行。
工具 1:ping
什么时候用它
- 目标机器在不在?(网络层可达)
- 大概有多远?(RTT 粗估)
- 丢包严重吗?(丢包率)
推荐的用法
# 发 30 个包,带时间戳,不走域名解析(避免 DNS 干扰)
ping -c 30 -D -n 8.8.8.8
输出
[1787536993.123456] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
[1787536993.126789] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.9 ms
...
--- 8.8.8.8 ping statistics ---
30 packets transmitted, 30 received, 0% packet loss, time 29034ms
rtt min/avg/max/mdev = 11.234/12.567/15.432/1.234 ms
参数说明
-c 30:发 30 个包就停(别挂在那等 Ctrl+C)-D:每行前面打印时间戳,事后对日志排查非常有用-n:不解析域名,快很多
工具 2:mtr
它解决了什么问题
traceroute 只跑一遍,遇到中间某节点不响应就直接显示 ***,然后你就抓瞎了。
而 mtr(My TraceRoute)把 ping 和 traceroute 合二为一,持续探测每个中间节点,给出丢包率和延迟统计。
用一句话说:traceroute 告诉你“经过了哪些路由器”,mtr 告诉你“每台路由器表现怎么样”。
命令
# 日常推荐:TCP 模式 + 443 端口,更接近真实业务路径
mtr --tcp -P 443 -n -c 100 目标IP
参数说明
--tcp:改用 TCP 数据包(不是 ICMP),走业务走的链路-P 443:指定探测端口(如果是 HTTP 服务就改 80)-n:不反解域名-c 100:发 100 个包后退出
输出结果
[root@hk-x86 ~]# mtr -r -c 100 chenkaidi.com
Start: 2026-08-24T10:47:15+0800
HOST: hk-x86 Loss% Snt Last Avg Best Wrst StDev
1.|-- 10.130.86.82 98.0% 100 1.6 1.6 1.6 1.6 0.0
2.|-- 10.102.123.86 62.0% 100 1.3 1.3 1.3 1.8 0.1
3.|-- 11.94.68.70 0.0% 100 1.7 2.2 1.6 9.3 1.8
4.|-- 10.255.191.162 73.0% 100 2.0 1.9 1.8 2.6 0.2
5.|-- 10.54.21.82 20.0% 100 2.1 6.5 2.0 62.5 11.1
6.|-- 146762-hk1-ix.equinix.com 0.0% 100 2.9 3.0 2.9 3.2 0.0
7.|-- 103.2.158.237 0.0% 100 32.6 31.9 31.5 34.1 0.4
8.|-- 103.2.158.34 0.0% 100 34.7 35.3 34.6 47.3 2.1
9.|-- ??? 100.0 100 0.0 0.0 0.0 0.0 0.0
10.|-- ??? 100.0 100 0.0 0.0 0.0 0.0 0.0
11.|-- ??? 100.0 100 0.0 0.0 0.0 0.0 0.0
12.|-- 116.62.102.173 0.0% 100 40.1 40.2 40.1 44.5 0.5
| 列名 | 说明 |
|---|---|
Host |
路径上每一跳(路由器)的IP地址或主机名。 |
Loss% |
丢包率。显示发往该节点的数据包丢失百分比。 |
Snt |
已发送的数据包总数。 |
Last |
最近一个数据包的往返延迟(毫秒)。 |
Avg |
所有发送数据包的平均延迟。 |
Best |
最佳(最小)延迟。 |
Wrst |
最差(最大)延迟。 |
StDev |
标准偏差,反映延迟的稳定性,值越大表示网络越不稳定。 |
判断原则
- 只看最后一跳的 Loss%:如果最终目标丢包率 0%,中间某跳 50% 丢包但后续恢复了,大概率是那个节点禁 ICMP 回复,不是故障。
- 某一跳延迟突然飙升(比如从 10ms 跳到 300ms),之后又降不下来 → 问题大概率出在这跳所在的运营商骨干网或跨网互联节点。
- 跳数中出现 ??? 但后续节点正常:说明该节点不响应探测,忽略即可。
工具 3:ss
示例:定位谁在占用 80 端口
[root@chenkaidi k8s.net]# ss -tlnp | grep :80
LISTEN 0 511 *:80 *:* users:(("nginx",pid=11228,fd=7),("nginx",pid=11227,fd=7),("nginx",pid=2540,fd=7))
看 TCP 内部状态
[root@chenkaidi ~]# ss -ti state established '( dport = :443 or sport = :443 )'
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 10.1.7.227:https 180.165.59.127:60433
cubic wscale:8,7 rto:213 rtt:12.173/4.573 ato:40 mss:1452 rcvmss:1452 advmss:1460 cwnd:10 bytes_acked:156 bytes_received:1976 segs_out:4 segs_in:5 data_segs_out:1 data_segs_in:3 send 9.5Mbps lastsnd:8847 lastrcv:8835 lastack:8835 pacing_rate 19.1Mbps delivery_rate 956.1Kbps app_limited busy:12ms rcv_space:14600 minrtt:12.149
0 0 10.1.7.227:https 180.165.59.127:60275
cubic wscale:8,7 rto:222 rtt:21.039/16.462 ato:40 mss:1452 rcvmss:1095 advmss:1460 cwnd:14 bytes_acked:31843 bytes_received:24992 segs_out:43 segs_in:34 data_segs_out:24 data_segs_in:23 send 7.7Mbps lastsnd:7357 lastrcv:7693 lastack:7345 pacing_rate 15.5Mbps delivery_rate 7.0Mbps app_limited busy:218ms rcv_space:14600 minrtt:11.174
:平均 RTT 12.173ms,抖动 4.573msrtt:12.173/4.573
工具 4:tcpdump
基础用法
# 抓 100 个包,写文件(不要直接在终端打印)
sudo tcpdump -i eth0 -c 100 -w /tmp/capture.pcap
# 用 tcpdump 或 Wireshark 读文件
tcpdump -r /tmp/capture.pcap -n | head -20
两个关键的参数
-s 0:捕获完整数据包(默认可能只抓前 68 字节,不够用)
• -i any:谨慎使用!会从所有接口抓包,在 bond/team 环境下会重复抓同一个流量,干扰判断
实用过滤表达式
只抓目标 IP 的包
tcpdump -i eth0 host 10.0.0.1 -c 100
抓 80 端口的 HTTP 流量
tcpdump -i eth0 tcp port 80 -A -c 50(-A 以 ASCII 显示内容)
抓 SYN 包(看 TCP 握手)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' -c 20
抓 RST 包(看谁主动断连)
tcpdump -i eth0 'tcp[tcpflags] & tcp-rst != 0'
组合条件:源 IP 且目标端口 443
tcpdump -i eth0 src 192.168.1.100 and dst port 443
工具 5:iftop / nethogs
iftop 告诉你“哪些连接在消耗带宽”,nethogs 告诉你“哪个进程在消耗带宽”。
iftop:按连接看
iftop -i eth0 -n
界面跑起来后,按 P 显示端口号,按 T 显示累计流量。从上往下是流量最大的连接。
nethogs:按进程看
nethogs eth0
什么时候用哪个
把这 几个工具吃透了:
- ping → 快速敲门
- mtr → 看路径质量
- ss → 看连接状态
- tcpdump → 抓包破案
- iftop/nethogs → 抓出带宽杀手
