ICMP
ICMP(Internet Control Message Protocol)是 TCP/IP 协议簇的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。例如,数据报大小超过设备的最大处理能力,设备就会丢弃该数据报并往回发送一个 ICMP 消息。又例如网关发现一个更短的路由路径,就会往回发送一个 ICMP 消息,数据报会被路由到更短的路径。
ICMP 协议是为了辅助 IP 协议,交换各种各样的控制信息而被制造出来的,它工作在网络层,是 IP 的组成部分,必须由每个 IP 模块实现。
ICMP 大致分成两种功能:差错通知和信息查询。
ICMP 功能
MTU 探索:找到通信对方之间不用分片 IP 数据报,就能交流的 MTU 大小的功能。
改变路由:路由器向送信方指示路径改变。源主机根据路由信息来决定传送目标,没有相应的路由信息就发给默认网关的路由器。默认网关接收到数据包,发现将数据包发给局域网内的其它路由器会比较快的时候,将这一信息通过 ICMP 通知发送方。
源点抑制:数据包集中到达某一路由器后,数据包来不及被处理,有可能被丢弃。此时向送信方发送 ICMP 源点抑制报文,用来使送信方减慢发送速度。
ping
traceroute:通过发送不同 TTL 的数据报,然后凭借 ICMP 超时报文来确定路径信息。
ICMP 数据包格式
ICMP 信息包含在 IP 数据报的数据部分,IP 数据报的协议字段值为 1。
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: Identifies the problem in the original IP message |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Message Body +
| |
Type: 消息类型,8 bits,常见有
Type 0 -- Echo reply
Type 3 -- Destination unreachable
Type 8 -- Echo
Type 5 -- Redirect
Code: 编码,8 bits,提供消息类型更详细的信息。
Pointer:指针,32 bits,指出原数据报中问题所在字节位置。
TYPE
CODE
Description
Query
Error
0
0
Echo Reply——回显应答(Ping应答)
x
3
0
Network Unreachable——网络不可达
x
3
1
Host Unreachable——主机不可达
x
3
2
Protocol Unreachable——协议不可达
x
3
3
Port Unreachable——端口不可达
x
3
4
Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特
x
3
5
Source routing failed——源站选路失败
x
3
6
Destination network unknown——目的网络未知
x
3
7
Destination host unknown——目的主机未知
x
3
8
Source host isolated (obsolete)——源主机被隔离(作废不用)
x
3
9
Destination network administratively prohibited——目的网络被强制禁止
x
3
10
Destination host administratively prohibited——目的主机被强制禁止
x
3
11
Network unreachable for TOS——由于服务类型TOS,网络不可达
x
3
12
Host unreachable for TOS——由于服务类型TOS,主机不可达
x
3
13
Communication administratively prohibited by filtering——由于过滤,通信被强制禁止
x
3
14
Host precedence violation——主机越权
x
3
15
Precedence cutoff in effect——优先中止生效
x
4
0
Source quench——源端被关闭(基本流控制)
5
0
Redirect for network——对网络重定向
5
1
Redirect for host——对主机重定向
5
2
Redirect for TOS and network——对服务类型和网络重定向
5
3
Redirect for TOS and host——对服务类型和主机重定向
8
0
Echo request——回显请求(Ping请求)
x
9
0
Router advertisement——路由器通告
10
0
Route solicitation——路由器请求
11
0
TTL equals 0 during transit——传输期间生存时间为0
x
11
1
TTL equals 0 during reassembly——在数据报组装期间生存时间为0
x
12
0
IP header bad (catchall error)——坏的IP首部(包括各种差错)
x
12
1
Required options missing——缺少必需的选项
x
13
0
Timestamp request (obsolete)——时间戳请求(作废不用)
x
14
Timestamp reply (obsolete)——时间戳应答(作废不用)
x
15
0
Information request (obsolete)——信息请求(作废不用)
x
16
0
Information reply (obsolete)——信息应答(作废不用)
x
17
0
Address mask request——地址掩码请求
x
18
0
Address mask reply——地址掩码应答
ICMPv6
ICMPv6 除了与 ICMP 相同的功能外,还有基于 ICMPv6 实现的邻居发现,包括:地址解析、重复地址检测、路由发现、Path MTU发现以及重定向等功能。
ICMPv6 的协议号为 58,也就是在 IPv6 报文中的 Next Header 的值为58。
Last updated
Was this helpful?