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 不一定走真实数据包路径——只是粗略估计
  • 跨运营商 / 跨国,一些跳故意隐藏——也是正常