ICMP是IP层的一个组成部分,传递差错报文以及其他需要注意的信息,通常被IP或者更高层的协议使用。一些ICMP报文把差错报文返回给用户进程;
ICMP中的检验和是必须的;
ICMP报文的类型:
查询报文和差错报文;
下列情况不会导致产生ICMP差错报文,为了防止广播风暴:
1).ICMP差错报文
2).目的地址是广播或多播地址的IP数据报
3).作为链路层广播的数据报
4).不是IP分片的第一分片
5).源地址不是单个主机的数据报
ICMP地址掩码请求与应答(查询报文):
ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码(另一个方法是BOOTP协议),系统广播它的ICMP请求报文。(广播的定义是局域网上的所有主机,必须包括发送主机在内)
ICMP时间戳请求与应答(查询报文):
允许系统向另一个系统查询当前的时间,可以提供毫秒级的分辨率;
ICMP端口不可达差错
UDP的规则之一是,如果收到一份UDP数据报而且目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文;
一个ICMP端口不可达差错是立刻返回的,ICMP报文是在主机之间交换的,而不用目的端口号;
导致差错的数据报中的IP首部要被送回的原因是因为IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的8个字节;
UDP和TCP的首部都包含源端口号和目的端口号,接受ICMP的系统可以根据源端口号来把差错报文与某个特定的用户进程相关联;