游客发表

追踪路由trace

发帖时间:2026-10-17 05:10:24

打开终端,追踪敲下 `tracert example.com`,追踪屏幕上开始一行行蹦出IP地址和延迟数字。追踪大多数人看到这个场景的追踪第一反应是:这不就是查网络通不通的工具吗?说实话,我一开始也这么想。追踪直到有次公司内网某个服务间歇性抽风,追踪ping看着正常,追踪但请求就是追踪偶尔超时,折腾了一下午没头绪,追踪最后靠 trace 把问题锁死在了一跳运营商链路上——从那以后我才算真正理解这东西的追踪价值。

trace 的追踪核心逻辑其实很朴素。它利用 IP 包的追踪 TTL(Time To Live)字段做文章。TTL 每经过一台路由器就减一,追踪减到零时路由器会把包丢掉,追踪同时回一个 ICMP 超时消息。追踪trace 的做法是:先发 TTL=1 的包,第一跳路由器扔掉它并报信,于是你拿到了第一跳的地址;再发 TTL=2 的,第二跳报信……如此递增,逐跳把整条路径勾勒出来。有点像你往远处扔石头,每次让石头只能飞固定步数,看它在哪一步落地,就知道沿途每段路有多远。

Windows 上叫 tracert,Linux 和 macOS 上是 traceroute。名字差一个字母,底层行为也有区别:Windows 默认走 ICMP,Linux 默认走 UDP(高端口),也可以用 -I 切到 ICMP 或者 -T 走 TCP。这个区别在实际排查中很要命。有些防火墙对 ICMP 睁一只眼闭一只眼,对 UDP 高端口直接封死,你 trace 出来一堆星号,以为链路断了,换 TCP 模式一试,路径清清楚楚。别问我是怎么知道的。

拿到 trace 结果之后,真正需要盯的是三件事。第一,看路径在哪一跳开始出现持续高延迟——注意是持续,单次抖动不算数,网络本来就忽快忽慢。第二,看有没有某一跳之后全是星号,这说明那台路由器不回 ICMP,但后面的跳数又恢复了,那其实没断,只是中间设备懒得理你。第三,看路径有没有绕路。国内访问某些海外服务,trace 出来先飞到美国西海岸再绕回日本,这种“国际漫游”一看就是路由策略出了问题,找运营商比你自己折腾有用得多。

还有个容易被忽略的细节:trace 每跳默认发三个包,显示三个延迟值。如果这三个值差距特别大,比如 2ms 2ms 187ms,说明链路存在抖动或者负载均衡,你的流量可能被分到了不同物理路径上。这种情况在云环境里尤其常见,因为虚拟路由器背后的实际转发路径可能完全不同。

我自己的习惯是,遇到网络问题先 ping 网关,通了再 trace 目标地址,把结果和正常时候的 trace 做对比。有基线才有判断力,否则看到一堆延迟数字根本不知道哪个算异常。工具本身不复杂,难的是知道该看什么、该忽略什么。trace 给你的是一条路径的切片,不是网络健康的全部真相。

    热门排行

    友情链接