ICMP通常被认为是IP层的一个组成部分,它用来传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议使用。
ICMP报文是在封装在IP数据包内部:
ICMP报文的格式如下:
所有ICMP的前四个字节都是一样的,检验和字段覆盖整个ICMP报文且是必须的。不同类型由报文中的类型字段和代码字段来共同决定。ICMP需要对其是查询还是差错报文进行区分,应为对ICMP差错报文需要特殊处理,比如在对ICMP差错报文进行响应时,永远不会生成另一份差错报文。
下列各种情况都不会导致产生ICMP差错报文:
- ICMP差错报文;
- 目的地址是广播或多播地址的IP数据报;
- 作为链路层广播的数据报;
- 不是IP分片的第一片;
- 源地址不是单个主机的数据报,即原地址不能为零地址、环回地址、广播地址或多播地址;
ICMP端口不可达差错
ICMP端口不可达是ICMP目的不可达报文的一种。ICMP差错报文必须包括生成该差错报文的数据报IP首部,还必须至少包括跟在该IP首部后面的前8个字节。注意,ICMP报文是在主机之间交换的,并未指明端口。
ICMP不可达报文的一般格式如下:
一个ICMP端口不可达差错报文是立即返回的,然后客户端不断重发直到超时。
ICMP查询报文
ICMP查询报文主要有ICMP地址掩码和时间戳请求与应答。