ICMP:Internet控制报文协议
1、引言
ICMP被认为是IP层的一部分。它传递差错报文及其他需要注意的事项。
2、ICMP报文的类型
通过ICMP报文中的8位类型和8位代码确定报文类型。
以下情况不会造成ICMP差错报文:
- ICMP差错报文
- 目的地址是广播地址的IP数据报
- 作为链路层广播的数据报
- 不是IP分片的第一片
- 源地址不是单个主机的数据报,即源地址不能是零地址、环回地址、广播地址和多播地址
以上的规则是为了防止产生广播风暴。
3、ICMP地址掩码请求与应答
此报文用于无盘系统在引导过程中获取自己的子网掩码。
标识符和序列号字段有发送端任意选择设定,这些值在应答时返回,发送端就可把应答与请求进行匹配。
假定请求的主机知道自己的Internet地址,然后向目的地址255.255.255.255广播地址掩码请求报文,这时地址掩码域中全部为“0”,知道正确地址掩码的路由器就会返回一个地址掩码应答报文,该应答报文中就包含了请求主机所需的地址掩码。
4、ICMP时间戳请求和应答
此报文允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始算的毫秒数(Coordinated Universal Time, UTC)。
请求端填写发起时间戳,然后发送报文。应答系统受到请求报文时,填写接收时间戳,在发送应答时填写发送时间戳。提供三个字段的原因是,让发送方分别计算发送请求的时间和发送应答的时间。
考虑到报文传送的时间,实际校时需要进行调整(difference - RTT/2)。
5、ICMP端口不可达差错
ICMP的一个规则是,ICMP差错报文必须包含生成该差错报文的数据报IP首部,还必须至少包括跟在该IP首部后面的前8个字节,如上图所示。
UDP首部包含了源端口号、目的端口号、长度和校验和。
IP首部被送回是因为其包含了协议字段,使得ICMP可知道如何解释后面的8个字节。
6、ICMP报文的4.4BSD处理
后面还会介绍Ping程序所使用的回应请求和应答报文、处理IP路由的ICMP报文。