ICMP:传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层的协议使用。一些ICMP报文把差错报文返回给用户进程。ICMP报文是在IP数据报内部传输的。ICMP封装在IP数据报内部。
1.ICMP报文类型
ICMP报文分为查询报文和差错报文。对于ICMP差错报文进行响应时,永远不会生成另一份ICMp差错报文。如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样就会无休止的循环下去。
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。
下面各种情况都不能产生差错报文:
- ICMP差错报文(但是,ICMP查询报文可能产生ICMP差错报文);
- 目的地址是广播地址或多播地址(D类地址)的IP数据报;
- 作为链路层广播的数据报;
- 不是IP分片的第一片;
- 源地址不是单个主机的数据报。就是说,源地址不能为零地址、环回地址、广播地址、多播地址。
2.ICMP地址掩码请求与应答
ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码,系统广播它的ICMP请求报文。ICMP报文中的表示符与序列号字段由发送端任意选择,这些值在应答中将被返回。这样发送端就可以把应答与请求进行匹配。
像本机IP地址和环回地址分别发送地址掩码请求:两种情况下返回的地址掩码对应的都是环回地址,即A类127.0.0.1。ICMP地址掩码应答必须是接收到请求接口的子网掩码,因此两种情况下地址掩码请求都来自于环回接口。
3.ICMP时间戳请求与应答
ICMP时间戳请求运行允许系统向另一个系统查询当前的时间,返回的建议值为自午夜开始计算的毫秒数,协调的统一时间。它提供了毫秒级的分辨率。