ICMP消息格式详解与ASCII表示

  • ICMP头最小8字节:Type(8位)、Code(8位)、Checksum(16位)和Rest of Header(32位,可变)。错误类型附加原始数据。以下是通用头的ASCII文本表示:

 0                   1                   2                   3   
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Type     |      Code     |            Checksum           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                          Message Body                         |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

关键点

  • ICMP协议的核心:ICMP(互联网控制消息协议)是一种网络层协议,用于错误报告和诊断,不传输用户数据,而是封装在IP数据包中,提供如目标不可达或超时等反馈。
  • 字段结构:主要包括Type(类型)、Code(代码)、Checksum(校验和)和可变部分(如Identifier和Sequence Number),错误消息中还会封装原始IP头和传输层数据,帮助诊断问题。
  • Wireshark示例:在实际抓包中,Echo Request(Type 8)显示请求字段,而Destination Unreachable(Type 3)嵌套IP和TCP/UDP头,用于识别问题包。
  • 安全考虑:ICMP实用但易被滥用,如洪水攻击;现代系统有缓解,但需谨慎过滤。

ICMP概述

ICMP是IP协议套件的辅助协议,主要用于网络设备间传递控制消息。例如,当数据包无法到达时,它发送错误报告;或通过ping工具测试连通性。Wireshark可捕获这些包,显示详细字段,帮助分析网络问题。 更多详情见RFC 792(https://www.ietf.org/rfc/rfc792.txt)。

消息结构

ICMP消息嵌入IP数据报(协议字段=1),最小8字节:Type(1字节)、Code(1字节)、Checksum(2字节)和4字节可变部分。错误类型附加原始IP头+传输层数据。

实际Wireshark示例

使用Wireshark过滤“icmp”,捕获ping包。Echo Request显示Type=8,嵌套数据匹配响应;错误包如Type=3包含原始端口,帮助定位故障。


互联网控制消息协议(ICMP)作为TCP/IP协议栈中的网络层协议,主要负责错误报告、诊断查询和网络控制消息的传递,而非用户数据传输。它被封装在IP数据报中,协议号为1,帮助路由器和主机报告问题,如数据包无法交付或超时。根据RFC 792的定义,ICMP是IP的必备组成部分,每个IP实现必须支持它。在IPv6中,演变为ICMPv6(RFC 4443),支持更多功能如邻居发现。 ICMP不保证交付,是无连接的,但通过提供反馈提升网络可靠性。

ICMP的历史与发展

ICMP于1981年由RFC 792定义,用于IPv4环境,解决IP的无连接和不可靠性问题。随着互联网发展,ICMPv6在2006年更新,支持IPv6的扩展头和路径MTU发现。 如今,它仍是网络诊断的核心,尽管在防火墙中常被限制以防滥用如DDoS攻击。

ICMP消息格式详解

ICMP消息结构包括固定头和可变体:

  • Type(类型,8位):分类消息,如8(Echo Request)、0(Echo Reply)、3(Destination Unreachable)。
  • Code(代码,8位):细化Type,如Type 3下Code 3(端口不可达)。
  • Checksum(校验和,16位):验证完整性,使用一的补码求和;Wireshark标记[correct]或[bad]。
  • 可变部分:视Type而定,如Echo中包括Identifier(标识符,匹配进程)和Sequence Number(序列号,追踪顺序);错误消息附加原始IP头(20+字节)和传输层数据(至少8字节,包括端口)。

在ICMPv6中,Checksum包括IPv6伪头。 错误消息不针对自身生成,避免循环。

以下是ICMPv4消息类型表格:

类型 (Type) 代码 (Code) 示例 描述 用途
0 0 Echo Reply 响应ping测试
3 0 (网络不可达), 1 (主机不可达), 3 (端口不可达), 4 (需分片但DF设) Destination Unreachable 报告交付失败原因
5 0 (网络重定向), 1 (主机重定向) Redirect 建议更好路由
8 0 Echo Request 请求回显,用于诊断
11 0 (TTL超时), 1 (重组超时) Time Exceeded 报告超时,用于traceroute
12 0 (指针指示错误) Parameter Problem IP头参数错误
13 0 Timestamp 时间同步请求
14 0 Timestamp Reply 时间同步响应

ICMPv6扩展表格(部分):

类型 (Type) 代码 (Code) 示例 描述 用途
1 0 (无路由), 3 (地址不可达), 4 (端口不可达) Destination Unreachable IPv6交付失败
2 0 Packet Too Big 路径MTU发现
3 0 (跳限超时) Time Exceeded 类似IPv4
4 0 (头字段错误) Parameter Problem 处理扩展头
128 0 Echo Request IPv6 ping
129 0 Echo Reply 响应

这些基于RFC标准。

ICMP工作原理

当设备遇到问题时,生成ICMP消息返回源端。例如,TTL过期发送Time Exceeded。ICMPv6增加速率限制。 在Wireshark中,过滤“icmp”显示包细节。

实际Wireshark抓包讲解

使用Wireshark捕获ping或路由故障包。示例从pcap文件分析。

示例1:Echo Request/Reply(ping包)
从捕获:源10.0.0.12 ping 10.0.0.30。

  • IP层:Protocol=1, TTL=128, Source/Dest IP。
  • ICMP层:Type=8 (Request), Code=0, Checksum=0x4b07 [correct], Identifier (BE)=1, Sequence Number (BE)=596, Data=32 bytes (abcde…)。
    意义:测试连通性,Response Time=1.251 ms。无传输层封装。
    Reply类似,Type=0。
字段 值示例 含义
Type 8 Echo Request
Code 0 无子码
Checksum 0x4b07 完整性
Identifier 1 (BE) 匹配进程
Sequence Number 596 (BE) 顺序追踪
Data abcde… 负载

在这里插入图片描述

示例2:Destination Unreachable(Type 3)
捕获:端口扫描或路由故障,源10.74.192.78到192.168.128.112,Code=4 (Fragmentation needed)。

  • ICMP层:Type=3, Code=4, Checksum=0x8a3c [correct], Next-hop MTU=1280。
  • 嵌套:原始IP (Src:192.168.128.112, Dst:36.92.190.198) + TCP (Ports:34945→443)。
    意义:封装IP+传输层(前8字节,包括端口/序列号)帮助识别问题包,如端口关闭或MTU问题。Wireshark显示嵌套树。
字段 值示例 含义
Type 3 Destination Unreachable
Code 3 端口不可达
Checksum 0xbda8 完整性
嵌套IP Src/Dst 8.8.8.8 / 172.16.4.10 原始地址
嵌套TCP Ports 34945 / 443 连接细节

https://superuser.com/questions/1756813/icmp-packet-with-tcp

应用与工具

ICMP驱动ping(Echo)和traceroute(Time Exceeded)。在安全中,用于扫描,但易遭洪水攻击。扩展包括IPsec支持。

ICMP是网络支柱,通过反馈提升实用性,尽管简单,在现代网络中不可或缺。

关键引用:

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新

更多推荐