各种类型的ICMP报文如图6-3所示,不同类型由报文中的类型字段和代码字段来共同决定。
图中的最后两列表明ICMP报文是一份查询报文还是一份差错报文。因为对ICMP差错报文有时需要作特殊处理,因此我们需要对它们进行区分。例如,在对ICMP差错报文进行响应时,永远不会生成另一份ICM
P差错报文(如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)。
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。6.5节将举例来说明一点。下面各种情况都不会导致产生ICMP差错报文:
1)ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)。
2)目的地址是广播地址或多播地址
5)的IP数据报。3)作为链路层广播的数据报。
4)不是IP分片的第一片。
5)源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。
类型 | 代码 | 描述 | 查 | 询 | 差 | 错 | |
0 | 0 | 回显应答(P i n g应答) | • | ||||
3 | 目的不可达: | ||||||
0 1 2 |
网络不可达主机不可达协议不可达 | • • • | |||||
3 4 5 6 |
端口不可达需要进行分片但设置了不分片比特源站选路失败目的网络不认识 | • • • • | |||||
7 | 目的主机不认识 | • | |||||
8 9 |
源主机被隔离(作废不用)目的网络被强制禁止 | • • | |||||
1 0 | 目的主机被强制禁止 | • | |||||
11 12 13 |
由于服务类型TO S ,网络不可达由于服务类型TO S ,主机不可达由于过滤,通信被强制禁止 | • • • | |||||
14 | 主机越权 | • | |||||
15 | 优先权中止生效 | • | |||||
4 | 0 | 源端被关闭(基本流控制) | • | ||||
5 | 0 | 重定向: 对网络重定向 | • • | ||||
1 | 对主机重定向 | • | |||||
2 | 对服务类型和网络重定向 | • | |||||
3 | 对服务类型和主机重定向 | • | |||||
8 | 0 | 请求回显(P i n g请求) | • | ||||
9 | 0 | 路由器通告 | • | ||||
1 0 | 0 | 路由器请求 | • | ||||
11 | 超时: | ||||||
0 | 传输期间生存时间为0(Traceroute) | • | |||||
1 | 在数据报组装期间生存时间为0 | • | |||||
1 2 | 参数问题: | ||||||
0 | 坏的I P首部(包括各种差错) | • | |||||
1 | 缺少必需的选项 | • | |||||
1 3 | 0 | 时间戳请求 | • | ||||
1 4 | 0 | 时间戳应答 | • | ||||
1 5 | 0 | 信息请求(作废不用) | • | ||||
1 6 | 0 | 信息应答(作废不用) | • | ||||
1 7 | 0 | 地址掩码请求 | • | ||||
1 8 | 0 | 地址掩码应答 | • |