traceroute
traceroute example.com
# 1 192.168.1.1 1.2 ms ← 网关
# 2 10.0.0.1 5.3 ms ← ISP
# 3 * * * ← 这跳禁 ICMP(正常)
# 4 203.0.113.1 12.5 ms ← 骨干
# ...
装
sudo apt install traceroute # Debian/Ubuntu
sudo dnf install traceroute # RHEL 系
常用参数
| 参数 | 含义 |
|---|---|
-n |
不解析 IP 为名字 |
-T |
用 TCP(绕开禁 ICMP) |
-I |
用 ICMP echo(默认行为) |
-U |
用 UDP(多数默认) |
-p PORT |
指定端口 |
-m N |
最多 N 跳 |
-w S |
单跳超时 S 秒 |
mtr:traceroute + ping 合体(强烈推荐)
sudo apt install mtr
mtr example.com # 实时跟踪 + 丢包率
mtr -r example.com # 报告模式(跑完一次退出)
mtr -r -c 100 example.com # 跑 100 次再退
mtr -n example.com # 不解析名字
mtr --tcp -P 443 example.com # TCP 443(绕禁 ICMP)
输出(mtr):
Host Loss% Snt Last Avg Best Wrst StDev
1. 192.168.1.1 0.0% 100 1.2 1.3 1.0 2.5 0.4
2. 10.0.0.1 0.0% 100 5.5 5.7 5.1 8.2 0.7
3. ??? 100.0% 100 0.0 0.0 0.0 0.0 0.0 ← 这跳禁 ICMP
4. 203.0.113.1 0.5% 100 12.5 12.6 11.9 15.2 0.8
...
mtr 比 traceroute 强:能持续观察哪一跳丢包率高 / 延迟波动大。
实战:判断网络问题
# 1. 直接 ping 目标
ping -c 5 example.com
# 100% 丢包
# 2. 看断在哪
mtr -r -c 50 example.com
# 在第几跳开始丢包 / 延迟飙升
# 3. 通常:
# 第 1 跳就丢 → 本机 / 网关问题
# 中间跳丢 → 上游网络问题
# 最后跳丢 → 对方机器 / 防火墙
ICMP 被封时
# 用 TCP 替代
sudo traceroute -T -p 443 example.com
mtr --tcp -P 443 example.com
坑
- 中间路由禁 ICMP 是常态——
*不一定是问题,看最后是否到达目标 - traceroute 不一定走真实数据包路径——只是粗略估计
- 跨运营商 / 跨国,一些跳故意隐藏——也是正常