首页/网络/网络排障速查/ICMP 差错报文判读

ICMP 差错报文判读

ICMP 差错是网络层「报错信」:type 3 的 code 直接告诉你不可达的原因(端口、分片、策略),type 11 则是 TTL 超时;ICMP 里内嵌原始包可定位到底哪条流受影响。

网络排障速查网络更新于 2026-10-13

ICMP 差错是什么

ICMP 差错报文是 IP 层的退信通知:路由器无法转发、或目的主机无法交付某个包时,会回一条 ICMP 给源地址说明失败原因。它不承载业务数据,只承载「为什么没送到」,所以是可达性问题的第一手证据。IPv4 差错类型主要有 3 目的不可达、5 重定向、11 超时、12 参数问题;IPv6 的同类信息走 icmpv6 字段,语义相近但类型号不同。差错报文固定内嵌「触发它的原始 IP 头加原始载荷前 8 字节」,Wireshark 会把内层包展开,据此可把差错精确关联到某条具体流。

基本信息

适用工具Wireshark 4.x 图形界面、tshark 命令行
过滤字段icmp.type / icmp.code,IPv6 用 icmpv6.*
报文来源中间路由器或目的主机,取决于失败原因
能力边界只有抓包点位于差错报文经过的路径上才看得到

典型使用场景

  • 路径逐跳结果异常:想确认每跳到底回了什么类型差错,读内嵌原始包即可对上
  • UDP 服务排查:应用收不到请求而抓包出现 type 3 code 3,说明目的端口没有监听进程
  • 大包不通小包正常:出现 type 3 code 4,是路径 MTU 发现黑洞的典型信号
  • 连接立刻失败:区分回 RST 还是回 ICMP 不可达,前者多为服务或策略拒绝,后者是路由不可达
  • 跨设备排障:中间设备回管理员禁止,说明是被 ACL 拦截而不是路由缺失

定位 ICMP 差错

定位 ICMP 差错
icmp.type == 3                     # Destination Unreachable,目的不可达
icmp.type == 3 && icmp.code == 3   # Port Unreachable,UDP 端口无监听常见
icmp.type == 3 && icmp.code == 4   # Fragmentation Needed,PMTUD 黑洞信号
icmp.type == 3 && icmp.code == 13  # 被策略过滤,Communication Administratively Filtered
icmp.type == 11                    # Time Exceeded,TTL 超时
tshark -r a.pcap -Y 'icmp.type==3' -T fields -e ip.src -e icmp.code  # 命令行提取源与 code

type/code 速查

type/code含义处置方向
3/0、3/1网络或主机不可达查路由表、网关与链路状态
3/3端口不可达目标端口无服务,或 UDP 应用未启动
3/4需要分片但 DF=1MTU 与路径发现问题,查隧道和中间设备
3/10、3/13管理员禁止、被策略过滤核对防火墙 ACL 与云安全组
11/0TTL 超时环路,或路径探测的正常行为
5/0重定向同网段多网关,检查路由配置
很多设备对 ICMP 差错限速甚至直接丢弃,因此没抓到 ICMP 不代表没问题;此时改用两端对照抓包来判断丢包位置。
ICMP 差错的源地址往往是回信的那台设备而不是最终目标,内层原始包里的目标地址才是真正不可达的对象。

易错点

  • 把 ICMP 全部当噪声过滤掉:丢掉了最直接的网络层诊断信息,只能靠猜
  • 以为没有 ICMP 差错就说明网络没问题:中间设备限速或丢弃差错报文是常态
  • 只看 ICMP 的源地址就下结论:差错源是回信设备,真实目标在内嵌原始包里
  • 在主机的应用服务器上抓包找分片差错:分片需求由中间设备判定,差错报文往往根本到不了这台主机

数据来源与参考

  • RFC 792:ICMP 报文类型与代码
  • Wireshark 文档:ICMP dissector

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌