traceroute 利用 IP 头部的 TTL 字段:每经过一个路由器 TTL 减 1,减到 0 时路由器丢弃包并回发 ICMP Time Exceeded。于是源主机从 TTL=1 开始逐跳递增发包:TTL=1 在第一跳超时被它回应,TTL=2 得到第二跳的回应……直到抵达目标,就依次收集到了整条路径的路由器地址,配合 RTT 测量还能看出每跳延迟。

实现细节:传统 Unix traceroute 发 UDP 到高端口(33434 起),目标收到后因端口未监听回 ICMP Port Unreachable,以此判定「到达终点」;Windows 的 tracert 直接发 ICMP Echo;还有 TCP 版(traceroute -T)用 SYN 包探测,能穿透只放行 80/443 的防火墙。解读输出的注意点:某跳显示 * * * 通常是该路由器限速或不回应 ICMP,不代表断链(后续跳能到就没事);路径可能不对称(去程回程走不同路由,traceroute 只能看去程);ECMP 负载均衡下相邻探测包可能走不同路径(Paris traceroute 通过固定流标识改进)。追问方向:mtr 如何把 ping 统计与 traceroute 结合定位丢包点、IP 记录路由选项为何现实中不可用。

(约 420 字)