号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部
你可能经常在排查网络问题时敲下这行命令:
tracert www.baidu.com
几秒之后,一串类似下面的东西滚出来:
1 <1 ms <1 ms <1 ms 192.168.1.1
2 3 ms 4 ms 3 ms 10.1.1.1
3 10 ms 11 ms 12 ms 123.125.81.1
...
大部分人看着这些跳数和 IP 地址,大致能判断走的路径。
但你知道背后到底怎么实现的吗?
为啥能一跳跳地追?每一跳到底发了几个包?是不是 ICMP 协议?
今天咱就来拆开说说。
一、tracert 的本质是什么?
一句话概括:
★tracert 是通过设置 IP 包的 TTL 值,一跳跳触发路由器返回 ICMP 超时报文,从而推测出整条路径上的每个节点。
简单来说,它并不是什么“神奇指令”,而是借用了 IP 协议里的一个机制:
TTL 是啥?
TTL 全称是 Time To Live(生存时间),是 IP 报文头里的一个字段。
- 它的作用是防止数据包在网络里无限循环。
- 每经过一个三层设备(如路由器),TTL 就会减1。
- 当 TTL 减为 0 时,当前设备就会丢弃这个包,并返回一个 ICMP 类型为11的“超时”响应。
也就是说,TTL 本质上是个“跳数倒计时器”。
tracert 的核心思路就是:
- 我先发一个 TTL=1 的包 → 第一个路由器收到后 TTL=0,返回“超时”响应
- 然后我发 TTL=2 的包 → 经过第一跳,TTL=1 → 进入第二跳后 TTL=0,被丢弃 → 第二跳返回 ICMP
- 以此类推...
这样一来,每一跳的设备都会被“激怒”,从而跳出来暴露它的 IP。
二、tracert 每一跳到底发几个包?
这是很多人没注意的小细节:
Windows 下:
默认每一跳发 3 个探测包(其实就是 3 次 TTL 相同的数据包),目的是防止因丢包看不到路径,显示如下:
3 15 ms 14 ms 16 ms 10.10.10.1
这 3 个数字分别是 3 次响应时间。
如果你看到的是:
4 * * * Request timed out.
可能是:
- 当前节点设置了丢弃 ICMP
- 该路径存在防火墙或 ACL 限制
- 路由黑洞、不通
Linux 下(使用 traceroute):
默认也是每跳发 3 个探测包,但更灵活:
- 可以指定协议(ICMP / UDP / TCP SYN)
- 可以指定端口范围
- 默认使用 UDP 探测端口,并期待回一个端口不可达的 ICMP 报文(type 3, code 3)
三、tracert 和 ping 属于 ICMP 协议吗?
这是一个很多人有点混淆的点,我们来区分清楚:
所以说:
- ping 是标准的 ICMP 协议应用
- tracert 是利用 IP 层 TTL 行为 + ICMP 返回来“逼问出”每一跳的 IP
- Windows 用的是 ICMP Echo 作为“探测包”内容
- Linux 用的是 UDP/ICMP/TCP 三选一(看你怎么配置)
四、为什么有时候 tracert 跳着跳着就 timeout 了?
很常见,比如:
6 25 ms 28 ms 27 ms 10.1.1.1
7 * * * Request timed out.
8 45 ms 47 ms 49 ms 220.181.57.1
这通常是:
- 中间设备拒绝返回 TTL 超时报文(很多运营商骨干路由器配置了防 ICMP)
- 该跳设备故障但还有旁路可通
- ACL/防火墙策略丢弃了非业务相关的数据包
注意:timeout ≠ 不通,只能说那一跳不配合你玩 TTL 这套。
五、tracert 实战价值有哪些?
非常多,老网工排查必备工具之一:
路由路径排查
- 判断访问目标地址到底经过哪些设备
- 是从 A 出口走的,还是 B 出口走的
- 哪个链路在兜圈子(发现三层环路)
网络性能诊断
- 哪一跳延迟飙升?是不是出口/运营商链路压力太大?
- 某一跳之后全部 timeout,是不是 NAT 或防火墙在搞鬼?
ACL/NAT 排查
- tracert 被“断崖式”中断,说明 ICMP/TTL 响应被某处阻断
- 可反查是否某跳设备配置了丢弃或限速 ICMP 报文
六、命令变体推荐(Windows / Linux / 华为设备)
Windows:
tracert -d www.baidu.com ← 不解析域名,加快速度
tracert -h 10 1.1.1.1 ← 限制最大跳数为10
Linux:
traceroute -I 8.8.8.8 ← 用 ICMP 发包
traceroute -T www.baidu.com ← 用 TCP SYN 代替 UDP
华为设备:
display traceroute www.baidu.com
支持类似参数配置,甚至可抓包观察 ICMP 响应。
一句话总结
★tracert 并不是“问路工具”,而是“引蛇出洞”。
它靠着设置 TTL,诱使网络设备“暴露自己”返回 ICMP 报文,才让我们看到每一跳的路径。
网络排障中,一定要配合 ping、display ip routing-table、display interface 等命令一起用,才能真正还原“数据到底走了哪”。
原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部