traceroute 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
traceroute——网络基础命令族(见网络基础与远程访问命令族)。ping 告诉你"通不通",traceroute 告诉你"不通的话卡在哪一跳"。
traceroute 通过逐步增大 IP 报文头的 TTL(生存时间),让每一跳路由器在 TTL 耗尽时回送 ICMP 超时消息,从而描出从本机到目标所经过的每一跳路径与延迟。
一、基本用法
bash
traceroute example.com # 默认用 UDP 探测,逐跳列出
traceroute -I example.com # -I 用 ICMP Echo(更像 ping 的方式)
traceroute -T -p 80 example.com # -T 用 TCP,-p 指定端口(绕开 UDP 被禁的场景)
traceroute -n example.com # -n 不解析主机名,只显示 IP,更快默认模式发 UDP 到高端口(通常 33434+),很多网络会丢 UDP 导致全是
*。遇到这种,-I(ICMP)或-T -p 80(TCP 80)往往能穿越,因为防火墙常放行 ICMP/TCP 但拦 UDP。
二、读懂输出
text
1 gateway (192.168.1.1) 1.2 ms
2 100.64.0.1 5.8 ms
3 * * * ← 这一跳不回包(可能被防火墙过滤)
4 203.0.113.9 22.4 ms
...每行是一跳(一个路由器),显示该跳的 IP/主机名与三 probes。出现
* * *通常意味着该跳的设备不回 ICMP 超时(策略丢弃),不一定是断点——关键看后续跳是否恢复。如果从第 N 跳开始全*且到不了目标,断点大概率在 N 附近。
三、traceroute vs mtr vs ping
| 命令 | 用途 |
|---|---|
| ping | 测端到端通断与延迟 |
traceroute | 看路径每一跳(单次快照) |
| mtr | 持续刷新每跳的丢包/延迟(见mtr 命令详解) |
想"看走哪条路"用 traceroute;想"持续观察某跳是否稳定丢包"用 mtr,它会边 traceroute 边 ping,给出每跳的统计。
四、踩坑:UDP 模式常被防火墙误伤
bash
traceroute host # 全是 *,但其实网络是通的
traceroute -I host # 换 ICMP 模式立刻出结果默认 UDP 探测在很多网络被丢弃,造成"看起来全断"。先换
-I/-T再下结论,别被满屏*骗了。另外 traceroute 需要 root 才能用某些套接字选项(TCP 模式常需)。
五、实战:定位访问变慢的瓶颈跳
bash
traceroute -I -n slow-site.com # 看哪一跳延迟突然飙升一句话总结
traceroute = 描出到目标的逐跳路径:靠 TTL 递增让每跳回超时消息;-I 用 ICMP、-T -p 用 TCP 可绕过 UDP 被禁。看全 * 别急着断定断网(可能只是设备不回包),定位断点看从哪跳起彻底失联。持续统计用 mtr。