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/0 | TTL 超时 | 跳数不足或存在路由环路 |
| 11/1 | 分片重组超时 | 重组不完整,UDP 大包问题常见 |
| 5/0 | 重定向 | 内网网关配置不理想时出现 |
ICMP 差错报文里会带回触发它的原始 IP 头与部分载荷,所以从一条不可达消息里就能看出是哪条流的哪一段触发的。这是 ICMP 作为排错证据的价值所在,别只看它的源地址。
大量安全策略会限速或直接屏蔽 ICMP,对公网尤其明显。抓包里没有 ICMP 回包只能说明「没有响应」,推不出「路径正常」,也不能据此把丢包归到别处。
排查顺序
- 先看两端能否互 ping,确认地址与基本路由层面可达
- 再看 traceroute 停在哪一跳,与抓包里 ICMP 超时的源地址对照
- 大包不通时重点找 type 3 code 4,确认是否 PMTUD 被阻断
- 区分安全设备限速:同样是丢包,ICMP 抖动大而 TCP 稳定说明限速在起作用
- 记录测试条件:源地址、目标地址、包大小与时间窗,便于复现与对比