【概述】
为提高 IP 数据报交付成功的机会,网络层使用了网际控制报文协议(Internet Control Message Protocol,ICMP)来允许主机或路由器报告差错和异常情况
ICMP 报文会作为 IP 数据报的数据,然后加上 IP 数据报的首部,之后再发送出去
根据实际需要,ICMP 报文分为报告差错和异常情况的 ICMP 差错报文,以及网络探询追踪的 ICMP 询问报文
【ICMP 报文结构】
ICMP 报文结构如下图所示
其中,各字段含义如下:
- 类型:占 $8bit$,取值
1~127
为差错报文,取值128
以上为询问报文 - 代码:占 $8bit$,在类型的基础上进一步指明 ICMP 报文类型
- 检验和:包括数据部分的检验和
【ICMP 差错报文】
类型
ICMP 差错报文主要用于目的主机或到目的主机路径上的路由器向源主机报告差错和异常情况,总共有以下五种类型:
1.终点不可达
当主机、路由器无法交付 IP 数据报时,目的主机将会向源主机发送该类型的 ICMP 差错报文
2.源点抑制
当目的主机、路由器由于拥塞丢弃 IP 数据报时,目的主机会向源主机发送该类型的 ICMP 差错报文,以使得源主机将 IP 数据报的发送速率减慢
3.时间超过
时间超过类型的 ICMP 差错报文注意分为以下两种情况:
1)当路由器收到生存时间 TTL 为 $0$ 的 IP 数据报时,除丢弃该 IP 数据报外,还要向源主机发送该类型的 ICMP 差错报文
2)当目的主机在预定时间内没有收到 IP 数据报的全部 IP 数据报片时,会将已收到的 IP 数据报片全部丢弃,再向源主机发送该类型的 ICMP 差错报文
对于工作在网络层的用来追踪分组经过的路由 Tracert(Windows)、Traceroute(UNIX) 来说,就直接使用了时间超过报文
4.参数问题
当目的主机、路由器收到的 IP 数据报的首部中,存在某些字段值不正确时,会丢弃该 IP 数据报,并向源主机发送该类型的 ICMP 差错报文
5.改变路由
当路由需要更改时,路由器会将该类型的 ICMP 差错报文发送给源主机,告知主机下次应将 IP 数据报发送给另外的路由器
不可发送情况
对于 ICMP 差错报文来说,有以下四种情况是不可发送的:
- 对 ICMP 差错报文不可发送
- 对第一个分片的 IP 数据报片后所有后续 IP 数据报片不可发送
- 对具有组播地址的 IP 数据报不可发送
- 对具有特殊地址(例如:
127.0.0.0
、0.0.0.0
)的 IP 数据报不可发送
【ICMP 询问报文】
ICMP 询问报文主要有:回送请求与回答报文、时间戳请求与回答报文、掩码地址请求与回答报文、路由器询问与通告报文
对于工作在应用层的用于测试两个主机间连通性的分组网间探测 PING,其直接使用了 ICMP 协议,没有使用传输层的 TCP、UDP 协议
具体来说,PING 使用了 ICMP 协议的回送请求与回答报文