第6章 ICMP:Internet控制报文协议
6.1 引言
I C M P 经常被认为是 I P 层的一个组成部分。它传递差错报文以及其他需要注意的信息。 ICMP报文通常被 IP 层或更高层协议( TCP或UDP)使用。一些 ICMP报文把差错报文返回给 用户进程。
ICMP报文是在 IP数据报内部被传输的,如 图6-1所示。
ICMP 的正式规范参见 RFC 792 [Posterl
1981b]。
IP首部
20字节
IP数据报
ICMP报文
ICMP报文的格式如图 6-2所示。所有报文的
图6-1 ICMP封装在IP数据报内部
前4个字节都是一样的,但是剩下的其他字节则互不相同。下面我们将逐个介绍各种报文格式。类型字段可以有 15个不同的值,以描述特定类型的 ICMP报文。某些 ICMP报文还使用代
码字段的值来进一步描述不同的条件。
检验和字段覆盖整个 ICMP报文。使用的算法与我们在 3.2节中介绍的 IP首部检验和算法相 同。ICMP的检验和是必需的。
8位类型 8位代码 16位检验和
(不同类型和代码有不同的内容)
图6-2 ICMP报文
在本章中,我们将一般地讨论 ICMP 报文,并对其中一部分作详细介绍:地址掩码请求和 应答、时间戳请求和应答以及不可达端口。我们将详细介绍第 27章Ping程序所使用的回应请 求和应答报文和第 9章处理 IP路由的 ICMP报文。
6.2 ICMP报文的类型
各种类型的ICMP报文如图6-3所示,不同类型由报文中的类型字段和代码字段来共同决定。 图中的最后两列表明 ICMP报文是一份查询报文还是一份差错报文。因为对 ICMP 差错报 文有时需要作特殊处理,因此我们需要对它们进行区分。例如,在对 ICMP差错报文进行响应 时,永远不会生成另一份 ICMP差错报文(如果没有这个限制规则,可能会遇到一个差错产生
另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)。 当发送一份 ICMP差错报文时,报文始终包含 IP的首部和产生 ICMP差错报文的 IP数据报的
前8个字节。这样,接收 ICMP 差错报文的模块就会把它与某个特定的协议(根据 IP数据报首
类 型 代 码 描 述 |
查 询 |
差 错 |
0 0 回显应答( Ping应答,第 7章) |
• |
|
3 目的不可达: 0 网络不可达( 9.3节) 1 主机不可达( 9.3节) 2 协议不可达 3 端口不可达( 6.5节) 4 需要进行分片但设置了不分片比特( 11.6节) 5 源站选路失败( 8.5节) 6 目的网络不认识 7 目的主机不认识 8 源主机被隔离(作废不用) 9 目的网络被强制禁止 10 目的主机被强制禁止 11 由于服务类型 TOS,网络不可达( 9.3节) 12 由于服务类型 TOS,主机不可达( 9.3节) 13 由于过滤,通信被强制禁止 14 主机越权 15 优先权中止生效 |
|
• • • • • • • • • • • • • • • • |
4 0 源端被关闭(基本流控制, 11.11节) |
|
• |
5 重定向( 9.5节): 0 对网络重定向 1 对主机重定向 2 对服务类型和网络重定向 3 对服务类型和主机重定向 |
|
• • • • • |
8 0 请求回显( Ping请求,第 7章) |
• |
|
9 0 路由器通告( 9.6节) 10 0 路由器请求( 9.6节) |
• • |