ICMP(因特网控制报文协议)用在主机、路由器之间传递控制消息,ICMP 最典型的用途是差错报告和网络探寻。
ICMP 协议可以看作是 IP 协议的伴随协议,通常实现 IP 协议的同时也需要实现 ICMP 协议;但从体系结构上讲它是位于 IP 之上的,因为 ICMP 报文是封装在 IP 数据报中的,就像 TCP 和 UDP 报文段作为 IP 有效载荷被承载那样(IP 数据报首部中的协议字段:ICMP(1)、TCP(6)、UDP(17)),类似地,当一台主机收到一个指明上层协议为 ICMP 的 IP 数据报时,它分解出该数据报的内容给 ICMP,即多路复用 / 分用。
ICMP 报文由首部和数据部分构成:首部共 8 个字节,前 4 个字节包括一个类型字段、一个编码字段(这两个字段的组合就代表了一种特定的报文)和校验和字段(对整个 ICMP 报文计算校验和),后 4 个字节取决于 ICMP 报文的类型(有些类型的报文这四个字节为全0);ICMP 差错报告报文的(不同于 ICMP 网络探寻报文)数据部分为引起该 ICMP 报文首次生成的 IP 数据报的首部和前 8 字节的内容(以便发送方能确定引发该差错的数据报)。
几种不发送 ICMP 差错报告报文的特殊请况:
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文;
- 除第一个 IP 数据报分片外,对所有后续分片均不发送 ICMP 差错报告报文;
- 对所有多播(广播) IP 数据报均不发送 ICMP 差错报告报文;
- 对具有特殊地址(如
127.0.0.0
或0.0.0.0
)的 IP 数据报不发送 ICMP 差错报告报文。
附:ICMP 报文类型。