traceroute的核心原理是利用ttl递增触发中间路由器返回icmp超时消息(type 11),从而逐跳识别路径;目标主机则返回icmp端口不可达(type 3)或回显应答(type 0)标志追踪结束。

traceroute 的核心在于用 TTL(生存时间)值“敲门”,靠中间设备返回的 ICMP 错误消息来识别路径上的每一跳。
利用 TTL 逐跳触发超时响应
IP 数据包头部有一个 TTL 字段,初始值由 traceroute 设置为 1,并随每次探测递增。每经过一个路由器,TTL 减 1;减到 0 时,该路由器必须丢弃数据包,并向源主机发送一条 ICMP Time Exceeded(类型 11)消息。这条消息里包含该路由器的 IP 地址和响应时间,traceroute 就靠它定位第一跳。
- 第一次发 TTL=1 → 第一个路由器响应超时
- 第二次发 TTL=2 → 第二个路由器响应超时
- 依此类推,直到抵达目标或达到最大跳数(默认 30)
探测包类型因系统而异
不同操作系统使用不同协议构造探测包,但都依赖同一套 TTL+ICMP 机制:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- Windows 的 tracert 默认发 ICMP Echo Request(类似 ping)
- Linux/macOS 的 traceroute 默认发 UDP 数据包,端口从 33434 开始递增
- 部分变体支持 TCP 或自定义协议,但底层仍靠 TTL 控制“在哪被拦下”
如何判断追踪已完成
traceroute 不靠“收到回复就停”,而是依据明确的终止信号:
- 目标主机返回 ICMP Port Unreachable(UDP 方式,类型 3 代码 3),说明包已到达且端口不可用
- 目标主机返回 ICMP Echo Reply(ICMP 方式),说明 ping 通了
- 连续多轮无响应,或达到最大跳数限制,自动结束
实际使用中常遇到的“断点”现象
不是所有设备都会返回 ICMP 超时消息。防火墙、安全策略或路由器配置可能屏蔽这类报文,导致某跳显示为 * * *:
- 星号(*)不等于“断连”,只是该设备没回 ICMP
- 后续跳仍可能正常显示,路径并未中断
- 可尝试加 -I 参数强制走 ICMP,或配合 ping 和 mtr 综合判断










