ICMP 超时报文
ICMP 超时(类型 11)有两个代码:代码 0 表示报文在传输中 TTL 减到 0,由路由器丢弃并回送;代码 1 表示分片重组在等待时间内没凑齐。traceroute 正是利用代码 0:故意把 TTL 从 1 递增,靠每一跳回的这条消息画出整条路径。
基本信息
| 类型号 | 11(IPv4 Time Exceeded) |
|---|---|
| 代码 0 | 传输中 TTL 耗尽,最常见,traceroute 的基础 |
| 代码 1 | 分片重组超时,现代网络少见 |
| 携带内容 | 原始数据报的头部加至少 8 字节载荷 |
| IPv6 对应 | ICMPv6 类型 3(Time Exceeded) |
| 生成方 | 路径上的任意一台路由器或最终目标主机 |
典型使用场景
- 用 traceroute 绘制到目标的逐跳路径,按延迟找出异常跳
- 排查路由环路:同一跳地址重复出现或 TTL 快速耗尽
- 确认某条路径是否存在多层 NAT 或隧道导致跳数异常增加
- 抓包验证路径上是否真的回送超时报文,判断是不是被设备屏蔽
- 分析分片重组超时,判断路径 MTU 是否配置混乱
- 定位「traceroute 只显示到第 N 跳」的原因:后续跳不回超时报文
最小示例
最小示例
traceroute -n 1.1.1.1 | head -5 # -n 不做反向解析,输出更快
traceroute -I -n 1.1.1.1 # 用 ICMP Echo 探测,部分设备更放行
tcpdump -nn -i eth0 'icmp[0] == 11' -c 10 # 抓超时报文
tcpdump -nn -i eth0 'icmp[0] == 11 and icmp[1] == 1' -c 5 # 只看分片重组超时
mtr -rwc 20 1.1.1.1 # 持续探测并统计每跳丢包代码含义与用途
| 代码 | 含义 | 用途 |
|---|---|---|
| 0 | 传输中 TTL 耗尽 | traceroute 逐跳,判断路径与环路 |
| 1 | 分片重组超时 | 大包重组失败信号,指向 MTU 或分片配置问题 |
| 无响应 | 设备不回超时报文 | 路径后段显示星号,不代表该跳不存在 |
| 延迟突增 | 某一跳排队严重 | 多为该跳链路拥塞或限速 |
traceroute 输出中的星号表示该跳没有返回任何报文,可能是设备不回 ICMP、被限速,也可能是真丢包;要结合后续跳的响应与端到端丢包率一起判断。