首页/网络/抓包与流量分析速查/ICMP 与 TTL 探测观察
丢包与时延定位60 条

ICMP 与 TTL 探测观察

超时 ICMP、不可达 ICMP、TTL 递减能反映路径与过滤策略:ICMP 被禁不等于路径健康,结合 TCP 重传数据交叉判断。

ICMP 能说明什么

ICMP 是 IP 层的信令协议:路径上 TTL 归零时设备回 Time Exceeded(type 11),报文投不出去时回 Destination Unreachable(type 3),需要分片但 DF 置位时回 type 3 code 4。抓包时 ICMP 能反映路径结构和设备策略,但它是旁证而不是定论:设备限速或屏蔽 ICMP 时,收不到回包只能说明没有响应,不能推出路径健康。

基本信息

关键字段icmp.type、icmp.code、icmp.ident
常见类型0 回声应答、8 回声请求、3 不可达、11 超时、5 重定向
与 MTU 相关type 3 code 4,PMTUD 依赖它
抓包点差异两端与中间设备看到的结果可能完全不同

典型使用场景

  • 用 traceroute 结果与抓包对照,确认路径上的 TTL 超时点在哪一跳
  • 排查大包不通小包正常:路径 MTU 探测依赖 code 4,被屏蔽就形成黑洞
  • 区分「路径不通」与「设备不回话」,判断策略是否屏蔽了 ICMP
  • 分析安全设备限速导致的探测抖动,避免误判成丢包
  • 佐证单向丢包:traceroute 三跳后无响应,而 TCP 建连正常

常用过滤

常用过滤
tshark -r t.pcap -Y "icmp.type==11" -T fields -e ip.src -e icmp.type
# 超时消息:源地址就是发出该 ICMP 的那一跳设备
tshark -r t.pcap -Y "icmp.type==3" -T fields -e ip.src -e icmp.code
# 不可达消息,按 code 再看细分原因
tshark -r t.pcap -Y "icmp.type==8 || icmp.type==0" -T fields -e ip.src -e ip.dst
# ping 的请求与应答成对出现,用来核对双向可达性

常用 type/code 读法

type/code含义实践提示
3/0网络不可达路由缺失或被策略拒绝
3/1主机不可达目标主机不可达,可能已下线
3/3端口不可达UDP 探测常见,目标端口没有监听
3/4需分片但 DF 置位路径 MTU 过小,是 PMTUD 的关键信号
11/0TTL 超时跳数不足或存在路由环路
11/1分片重组超时重组不完整,UDP 大包问题常见
5/0重定向内网网关配置不理想时出现
ICMP 差错报文里会带回触发它的原始 IP 头与部分载荷,所以从一条不可达消息里就能看出是哪条流的哪一段触发的。这是 ICMP 作为排错证据的价值所在,别只看它的源地址。
大量安全策略会限速或直接屏蔽 ICMP,对公网尤其明显。抓包里没有 ICMP 回包只能说明「没有响应」,推不出「路径正常」,也不能据此把丢包归到别处。

排查顺序

  • 先看两端能否互 ping,确认地址与基本路由层面可达
  • 再看 traceroute 停在哪一跳,与抓包里 ICMP 超时的源地址对照
  • 大包不通时重点找 type 3 code 4,确认是否 PMTUD 被阻断
  • 区分安全设备限速:同样是丢包,ICMP 抖动大而 TCP 稳定说明限速在起作用
  • 记录测试条件:源地址、目标地址、包大小与时间窗,便于复现与对比

易错点

  • 把「没有 ICMP 响应」当成路径正常:屏蔽与限速都会造成这个现象,结论必须留余地
  • 忽略 code 4:MTU 问题表现为大包不通小包通畅,只看 type 3 会漏掉这个关键信号
  • 拿中间设备的 ICMP 源地址当根因设备:返回 ICMP 的往往是转发路径上的设备,不代表它是问题源
  • 在两端抓包只做单向统计:ICMP 差错报文的方向由触发方决定,单向抓包容易得出相反的结论

数据来源与参考

  • RFC 792(ICMP)
  • RFC 1191(PMTUD)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌