2.7.2 连通性与路径诊断(ping/tracepath/mtr)
连通性与路径诊断(ping/tracepath/mtr)#
连通性与路径诊断用于快速判断“是否可达、走哪条路、在哪一跳异常、是否存在 MTU 问题”。推荐的排查顺序是:ping 初判可达与时延 → tracepath 定位路径与 MTU → mtr 持续观测丢包与抖动趋势。
原理草图:探测包在路径中的变化
1) 工具安装与版本确认#
Linux 常见工具来自 iputils 与 mtr 包。
Debian/Ubuntu
sudo apt update
sudo apt install -y iputils-ping iputils-tracepath mtr-tiny
ping -V
tracepath -V
mtr -V
RHEL/CentOS/Rocky
sudo yum install -y iputils mtr
ping -V
tracepath -V
mtr -V
2) ping:可达性与基础时延评估(含 MTU 验证)#
关键指标: RTT、丢包率、时延抖动
常用参数解释:
- -c N:发送 N 次后退出
- -i 秒:探测间隔
- -s 字节:载荷大小(不含 IP/ICMP 头)
- -M do:禁止分片,用于 PMTU 验证
基础可达性测试
ping -c 4 -i 0.5 8.8.8.8
输出示例(截断)与解读
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 12.4/13.2/15.1/1.1 ms
- 0% 丢包:可达
- avg 13.2ms:平均时延
- mdev 1.1ms:抖动低
PMTU 诊断(以 1472 载荷为例)
# 1500 MTU - 20(IP) - 8(ICMP) = 1472
ping -c 3 -M do -s 1472 目标IP
可能输出
ping: local error: Message too long, mtu=1460
说明路径 MTU < 1500,建议将载荷下调至 1432 或继续探测直到成功。
3) tracepath:路径与 MTU 诊断(无需 root)#
关键点:
- 展示每一跳时延
- 自动发现路径 MTU(pmtu)
- no reply 可能是中间设备禁止回显,不一定故障
示例
tracepath 目标IP
输出示例(截断)
1: 10.0.0.1 0.350ms
2: 100.64.0.1 1.231ms
3: 203.0.113.5 5.882ms
4: 198.51.100.9 8.214ms
5: 203.0.113.10 9.720ms pmtu 1460
6: 目标IP 9.901ms reached
解读:
- 第 5 跳出现 pmtu 1460,路径 MTU 被降低
- 若业务出现分片问题,可考虑调整接口 MTU 或应用层包大小
4) mtr:持续动态观测与报告输出#
适用场景: 需要持续监测丢包和抖动趋势
参数说明:
- -r:报告模式(一次性输出)
- -c N:探测次数
- -w:宽屏输出,便于阅读
示例(报告模式)
mtr -r -c 50 -w 目标IP
输出示例(截断)
HOST: node1 Loss% Snt Last Avg Best Wrst StDev
1.|-- 10.0.0.1 0.0% 50 0.4 0.5 0.3 1.2 0.2
2.|-- 100.64.0.1 2.0% 50 1.3 1.5 1.0 3.9 0.6
3.|-- 203.0.113.5 2.0% 50 6.2 6.5 5.1 12.4 1.8
4.|-- 198.51.100.9 2.0% 50 9.0 9.3 7.9 15.7 1.9
5.|-- 目标IP 2.0% 50 9.8 10.1 9.1 16.2 2.0
解读要点:
- 丢包在第 2 跳出现并在后续延续 → 该段或其后链路异常
- 若仅某一跳丢包而后续不丢 → 可能是该跳 ICMP 限速
5) 排错流程与命令解释模板#
排错流程
1) ping -c 4 目标IP → 判断可达性
2) tracepath 目标IP → 判断路径与 PMTU
3) mtr -r -c 50 目标IP → 持续观测丢包与抖动
结论输出模板
- 现象:目标可达/不可达;RTT 平均 xx ms;丢包 xx%
- 路径:第 N 跳出现明显时延/丢包(是否延续到后续)
- MTU:路径 MTU 变更为 xx(是否影响业务大包)
- 建议:联系运营商排查该段链路或调整 MTU/绕路
6) 典型问题与对策(含排错命令)#
问题一:ping 不通但服务可访问
- 可能原因:ICMP 被防火墙丢弃
- 排查命令:
# 检查本机防火墙策略
sudo iptables -L -n | grep -i icmp
sudo nft list ruleset | grep -i icmp
- 处理建议:确认安全策略是否允许 ICMP Echo
问题二:tracepath 出现 pmtu 降低且业务大包失败
- 排查命令:
# 用禁止分片的 ping 验证 PMTU
ping -c 3 -M do -s 1472 目标IP
- 处理建议:调整接口 MTU 或应用层包大小
问题三:mtr 某一跳丢包高但后续不丢
- 原因:该跳 ICMP 限速或优先级低
- 处理建议:关注后续跳与目标跳的 Loss%
7) 练习与实战任务#
1) 使用 ping 对公网 DNS 进行 20 次探测,记录 RTT 与丢包率。
2) 使用 tracepath 对目标主机检测路径,写出路径中 MTU 是否变化。
3) 使用 mtr -r -c 100 生成报告,判断异常跳是否延续到后续。
4) 修改本机 MTU(虚拟机/测试环境),验证 ping -M do 的变化。
参考命令(测试环境)
# 修改接口 MTU(仅测试环境)
sudo ip link set dev eth0 mtu 1400
ip link show dev eth0 | grep mtu