TCP/IP协议(8): ICMP(Internet Control Message Protocol) 协议 ——诊断和控制 IP 协议层
关于网际控制报文协议(Internet Control Message Protocol, ICMP)
网际控制报文协议(Internet Control Message Protocol, ICMP) 是定义在 RFC 792 中的因特网协议套件的一部分。ICMP 报文通常用于诊断或控制目的,它也可以用于响应 IP 操作中的错误(定义于 RFC 1122)。
(ICMP is part of the Internet protocol suite as defined in RFC 792. ICMP messages are typically used for diagnostic or control purposes or generated in response to errors in IP operations (as specified in RFC 1122). )
ICMP 协议介于传输层和网络层之间。不能说它是网络层协议,是因为它依赖于所有的 IP 协议实现,ICMP 报文在传输过程中,又很可能被传输层解析处理。
尽管如此,我们通常仍然认为 ICMP 协议是网络层协议。维基百科对此有如下解释:
ICMP 协议使用了 IP 协议的基本支持,以至于它好像是更高层的协议。然而, ICMP 协议实际上是 IP 协议的一个组成部分。尽管 ICMP 报文被封装在标准 IP 协议包中,但与一般的 IP 包处理不同,ICMP 报文通常作为特殊情况处理。
(ICMP uses the basic support of IP as if it were a higher level protocol, however, ICMP is actually an integral part of IP. Although ICMP messages are contained within standard IP packets, ICMP messages are usually processed as a special case, distinguished from normal IP processing. )
ICMP 报文
- 类型(Type): 1 字节。 定义该 ICMP 报文的类型。常用的类型值如下:
类型值 | 正式名称 | 注释 |
0 | 回显应答 | ping 的应答 |
3 | 目的不可达 | 不可达的主机/协议 |
5 | 重定向 | 表示应该被使用的可选路由器 |
8 | 回显 | 回显请求 |
11 | 超时 | 资源耗尽 |
12 | 参数问题 | 有问题的数据包或首部 |
- 代码(Code):1 字节。ICMP 报文 子类型。进一步的解释该 ICMP 报文的作用。目标不可达类型常见代码如下:
代码值 | 正式名称 | 注释 |
0 | 网路不可达 | (完全) 没有路由到目的地 |
1 | 主机不可达 | 已知但不可达的主机 |
2 | 协议不可达 | 未知的(传输)协议 |
3 | 端口不可达 | 未知的端口 |
4 | 需要进行分片但设置不分片位 | 需要设置分片但被 DF 禁止 |
- 校验和(Checksum): 2 字节。该 ICMP 报文的首部和数据计算出的校验和。
- ICMP 首部剩余部分(Rest Of Header):4 字节。根据不同的类型和代码,表达不同的含义。
- ICMP 数据: ICMP 报文携带的附加数据。
常见的 ICMP 报文
ICMP 回显类型 — 分组网际探测(Packet InterNet Groper, PING)
我们通常使用 PING 操作来测试主机之间的连通性。该操作使用的 ICMP 回显报文结构如下:
其中,回显请求的类型值是 8, 回显应答的类型值是 0。其对应的代码值都为 0。
标识符和序列号用于匹配回显应答和回显请求。有效负载可能包括一个表示传输时间的时间戳和一个序列号,这允许 PING 以无状态的方式计算往返时间(Round Trip Time, RTT),而不需要记录每个包的传输时间。
目标不可达报文(Destination Unreachable)
目标不可到达报文由主机或其入站网关生成,用于通知客户端由于某种原因目标网络设备不可到达。
其中,类型值为 3, 表示网络不可达。 代码值用于标识目标设备不可达的具体原因,常见代码值如前文所示。
下一跳最大传输单元在代码值为 4 时有效,存放下一跳网络的 MTU。
IP 首部及原始数据报数据的前 8 字节用于客户端识别目标不可到达报文所对应的原报文。
参考文献
- Internet Control Message Protocol - Wikipedia
- ping (networking utility) - Wikipedia
- W.Richard Stevens等著,《TCP/IP 详解(卷一: 协议)》
- 谢希仁编著, 《计算机网络》