ICMP报文格式
ICMP(Internet Control Message Protocol)是IP层的一个组成部分,主要用来传递差错报文以及其他需要注意的信息。它通常被IP层或更高协议(TCP或UDP)使用。一些ICMP报文会把差错信息返回给用户进程。
-
有很多情况都会发送ICMP消息,例如,报文无法发送到目的地址,再如,网关设备没有足够的缓存来存储转发报文。
-
用于检测IP网络连通性的Ping/Tracert,是通过发送ICMP Echo消息实现的。
-
IP是一个尽力而为的交付机制,不会轻易丢弃数据报。当路由设备无法转发或者交付IP数据报时,会向源站发送一个目的站不可达的报文,然后丢弃该数据报。
-
ICMP重定向消息是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台主机或网络设备使用非优化路由的时候,它会向该主机或网络设备发送一个ICMP重定向报文,请求主机或网络设备改变路由。路由器也会把初始数据报向它的目的地转发。
-
当收到TTL为0的报文时,网络设备/主机会丢弃该报文,并返回一个ICMP超时报文。Traceroute正是利用了ICMP超时报文来获得路由器的IP地址,再用端口不可达报文来判断数据报是否已经送达目的端。
-
如果发现接收的数据包存在报文头参数有问题,无法完成数据包解析时,网络/主机会将数据包丢弃,并可能会返回一个ICMP参数问题消息给源端。
-
用于表示对方或中途的服务器繁忙无法回应。如果网络设备没有足够的缓存空间存储到某个目的主机的报文时,这些报文会被该设备丢弃。此时,网络设备发送ICMP源端被关闭消息给该目的主机。如果到达某一个主机的数据包过快,来不及被主机处理,则该主机也可以发送ICMP源端被关闭消息,以便降低数据包速率。
ICMP报文通用格式
有很多情况都会发送ICMP消息,例如,报文无法发送到目的地址,再如,网关设备没有足够的缓存来存储转发报文。
ICMP报文通用格式
+0------7-------15---------------31
| Type | Code | Checksum |
+--------------------------------+
| Message Body |
| (Variable length) |
+--------------------------------+
ICMP报文通用格式字段解释
| 字段 | 长度 | 含义 |
|---|---|---|
| Type | 1字节 | 报文类型,用来标识报文,Type字段的取值和含义如所示。 |
| Code | 1字节 | 代码,提供报文类型的进一步信息,Code字段的取值和含义如所示。 |
| Checksum | 2字节 | 校验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。 |
| Message Body | 可变 | 字段的长度和内容,取决于消息的类型和代码,请参见。 |
ICMP消息类型代码
其中,最后一个字段的长度和内容,取决于消息的类型和代码。
ICMP消息类型代码对应表
| Type | Code | 描述1 | 描述2 | 说明 |
|---|---|---|---|---|
| 0 | 0 | 回显应答(ping应答) | Each Reply | |
| 3 | 0 | 网络不可达 | net unreachable | |
| 3 | 1 | 主机不可达 | host unreachable | |
| 3 | 2 | 协议不可达 | protocol unreachable | |
| 3 | 3 | 端口不可达 | port unreachable | |
| 3 | 4 | 需要进行分片但设置不分片比特 | fragmentation needed and DF set | |
| 3 | 5 | 源站选路失败 | source route failed | |
| 3 | 6 | 目的网络不认识 | Destination network unknown | |
| 3 | 7 | 目的主机不认识 | Destination host unknown | |
| 3 | 8 | 源主机被隔离(作废不用) | Source host isolated (obsolete) | |
| 3 | 9 | 目的网络被强制禁止 | Destination network administratively prohibited | |
| 3 | 10 | 目的主机被强制禁止 | Destination host administratively prohibited | |
| 3 | 11 | 由于TOS,网络不可达 | Network unreachable for TOS | |
| 3 | 12 | 由于TOS,主机不可达 | Host unreachaSSble for TOS | |
| 3 | 13 | 由于过滤,通信被强制禁止 | Communication administratively prohibited by filtering | |
| 3 | 14 | 主机越权 | Host precedence violation | |
| 3 | 15 | 优先权中止生效 | Precedence cutoff in effect | |
| 4 | 0 | 源端被关闭 | ||
| 5 | 0 | 对网络重定向 | Redirect datagrams for the Network | |
| 5 | 1 | 对主机重定向 | Redirect datagrams for the Host. | |
| 5 | 2 | 对服务类型和网络重定向 | Redirect datagrams for the Type of Service and Network. | |
| 5 | 3 | 对服务类型和主机重定向 | Redirect datagrams for the Type of Service and Host. | |
| 8 | 0 | 请求回显(ping请求) | ||
| 9 | 0 | 路由器通告 | ||
| 10 | 0 | 路由器请求告 | ||
| 11 | 0 | 传输期间生存时间为0 | ||
| 11 | 1 | 在数据报组装期间生存时间为0 | ||
| 12 | 0 | 坏的IP首部 | ||
| 12 | 1 | 缺少必须的选项 | ||
| 13 | 0 | 时间戳请求(作废不用) | ||
| 14 | 0 | 时间戳应答(作废不用) | ||
| 15 | 0 | 信息请求(作废不用) | ||
| 16 | 0 | 信息应答(作废不用) | ||
| 17 | 0 | 地址掩码请求 | ||
| 18 | 0 | 地址掩码应答 |
ICMP Echo Request/Reply消息格式
用于检测IP网络连通性的Ping/Tracert,是通过发送ICMP Echo消息实现的。
ICMP Echo Request/Reply消息格式
+0------7-------15---------------31
| Type | Code | Checksum |
+--------------------------------+
| Identi| Sequence Number |
+--------------------------------+
| Data |
+--------------------------------+
ICMP Echo Request/Reply消息字段解释
| 字段 | 长度 | 含义 |
|---|---|---|
| Type | 1字节 | 消息类型:0:回显应答报文 8:请求回显报文 |
| Code | 1字节 | 消息代码,此处值为0。 |
| Checksum | 2字节 | 检验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。 |
| Identifier | 2字节 | 标识符,发送端标示此发送的报文。 |
| Sequence Number | 2字节 | 序列号,发送端发送的报文的顺序号。每发送一次顺序号就加1。 |
| Data | 可变 | 选项数据,是一个可变长的字段,其中包含要返回给发送者的数据。回显应答通常返回与所收到的数据完全相同的数据。 |
ICMP目的不可达消息格式
IP是一个尽力而为的交付机制,不会轻易丢弃数据报。当路由设备无法转发或者交付IP数据报时,会向源站发送一个目的站不可达的报文,然后丢弃该数据报。
ICMP目的不可达消息格式
+0------7-------15---------------31
| Type | Code | Checksum |
+--------------------------------+
| unused |
+--------------------------------+
| Internet Header |
| +64 bits of |
| Original Data Datagram |
+--------------------------------+
ICMP目的不可达消息字段解释
| 字段 | 长度 | 含义 |
|---|---|---|
| Type | 1B | 消息类型,此处值为3。 |
| Code | 1B | 消息代码 |
| Checksum | 2B | 检验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。 |
| unused | 4B | 未使用,必须填0。 |
| Internet Header + 64 bits of Original Data Datagram | 可变 | IP首部+原始数据包的前8字节:IP首部:如果IP首部没有选项字段时为20字节原始数据包的前8字节:UDP首部的8字节或者TCP首部的8字节。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64比特的这些数据会被重组。 |
ICMP重定向消息
ICMP重定向消息是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台主机或网络设备使用非优化路由的时候,它会向该主机或网络设备发送一个ICMP重定向报文,请求主机或网络设备改变路由。路由器也会把初始数据报向它的目的地转发。
ICMP重定向消息
+0------7-------15---------------31
| Type | Code | Checksum |
+--------------------------------+
| Gateway Internet Address |
+--------------------------------+
| Internet Header |
| +64 bits of |
| Original Data Datagram |
+--------------------------------+
ICMP重定向消息字段
| 字段 | 长度 | 含义 |
|---|---|---|
| Type | 1B | 消息类型,此处值为5。 |
| Code | 1B | 消息代码. |
| Checksum | 2B | 检验和。 |
| Gateway Internet Address | 4B | 即原始数据包里的IP目的地址域。 |
| Internet Header + 64 bits of Original Data Datagram | 可变 | IP头和原始数据包的前64比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64比特的这些数据会被重组。 |
ICMP超时消息格式
当收到TTL为0的报文时,网络设备/主机会丢弃该报文,并返回一个ICMP超时报文。Traceroute正是利用了ICMP超时报文来获得路由器的IP地址,再用端口不可达报文来判断数据报是否已经送达目的端。
ICMP超时消息格式
+0------7-------15---------------31
| Type | Code | Checksum |
+--------------------------------+
| unused |
+--------------------------------+
| Internet Header |
| +64 bits of |
| Original Data Datagram |
+--------------------------------+
ICMP超时消息字段格式
| 字段 | 长度 | 含义 |
|---|---|---|
| Type | 1B | 消息类型,此处值为11。 |
| Code | 1B | 消息代码:0 = time to live exceeded in transit1 = fragment reassembly time exceeded |
| Checksum | 2B | 检验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。 |
| Internet Header + 64 bits of Original Data Datagram | 可变 | IP头和原始数据包的前64比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64比特的这些数据会被重组。 |
ICMP参数问题消息格式
如果发现接收的数据包存在报文头参数有问题,无法完成数据包解析时,网络/主机会将数据包丢弃,并可能会返回一个ICMP参数问题消息给源端。
ICMP参数问题消息格式
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Pointer | unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ICMP参数问题消息字段解释
| 字段 | 长度 | 含义 |
|---|---|---|
| Type | 1B | 消息类型,此处值为12。 |
| Code | 1B | 消息代码:0 = pointer indicates the error. |
| Checksum | 2B | 检验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。 |
| Pointer | 1B | 标识出报文中出现错误地方的8位片偏移量。 |
| unused | 3B | 未使用。 |
| Internet Header + 64 bits of Original Data Datagram | 可变 | IP头和原始数据包的前64比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64比特的这些数据会被重组。 |
ICMP源端被关闭消息格式
用于表示对方或中途的服务器繁忙无法回应。如果网络设备没有足够的缓存空间存储到某个目的主机的报文时,这些报文会被该设备丢弃。此时,网络设备发送ICMP源端被关闭消息给该目的主机。如果到达某一个主机的数据包过快,来不及被主机处理,则该主机也可以发送ICMP源端被关闭消息,以便降低数据包速率。
ICMP源端被关闭消息格式
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ICMP源端被关闭消息字段格式
| 字段 | 长度 | 含义 |
|---|---|---|
| Type | 1B | 消息类型,此处值为4。 |
| Code | 1B | 消息代码,此处值为0。 |
| Checksum | 2B | 检验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。 |
| unused | 4B | 未使用。 |
| Internet Header + 64 bits of Original Data Datagram | 可变 | IP头和原始数据包的前64比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64比特的这些数据会被重组。 |
参考标准
| 标准 | 描述 |
|---|---|
No comments to display
No comments to display