跳至内容
liuzhen932 的小窝
返回

ICMP 互联网控制消息协议 Type 和 Code 详解

这是一篇转载自 ICMP 互联网控制消息协议 Type 和 Code 详解 的文章。

互联网控制消息协议(Internet Control Message Protocol,ICMP)是互联网协议族的核心协议之一。它用于 IP 协议中发送控制消息,提供可能发生在通信环境中的各种问题反馈。它通常不由网络程序直接使用(除了 ping 和 traceroute)。 IPv4 中的 ICMP 被称作 ICMPv4,IPv6 中的 ICMP 则被称作 ICMPv6

报文结构

ICMP 报头通常从 IP 报头的第 160 位开始:

Bits160-167168-175176-183184-191
TypeCode校验码校验码

其中:

从第 192 位开始,是 Rest of Header,代表报头的其余部分,内容根据ICMP类型和代码而有所不同。

报文类型

互联网控制消息协议(ICMP)包含多种消息,这些消息通过 Type 字段进行标识。

Type名称中文名参考
0Echo ReplyEcho 响应,被程序 ping 使用[RFC792]
3Destination Unreachable目的不可达[RFC792]
4Source Quench (Deprecated)[RFC792][RFC6633]
5Redirect重定向[RFC792]
6Alternate Host Address (Deprecated)[RFC6918]
8EchoEcho 请求[RFC792]
9Router Advertisement路由器通告[RFC1256]
10Router Solicitation路由器的发现/选择/请求[RFC1256]
11Time ExceededICMP 超时[RFC792]
12Parameter Problem参数问题:错误IP头部[RFC792]
13Timestamp时间戳请求[RFC792]
14Timestamp Reply时间戳应答[RFC792]
15Information Request (Deprecated)[RFC792][RFC6918]
16Information Reply (Deprecated)[RFC792][RFC6918]
17Address Mask Request (Deprecated)[RFC950][RFC6918]
18Address Mask Reply (Deprecated)[RFC950][RFC6918]
19Reserved (for Security)[Solo]
20-29Reserved (for Robustness Experiment)[ZSu]
30Traceroute (Deprecated)[RFC1393][RFC6918]
31Datagram Conversion Error (Deprecated)[RFC1475][RFC6918]
32Mobile Host Redirect (Deprecated)[RFC6918]
33IPv6 Where-Are-You (Deprecated)[RFC6918]
34IPv6 I-Am-Here (Deprecated)[RFC6918]
35Mobile Registration Request (Deprecated)[RFC6918]
36Mobile Registration Reply (Deprecated)[RFC6918]
37Domain Name Request (Deprecated)[RFC1788][RFC6918]
38Domain Name Reply (Deprecated)[RFC1788][RFC6918]
39SKIP (Deprecated)[RFC6918]
40Photuris[RFC2521]
41ICMP messages utilized by experimental mobility protocols such as Seamoby[RFC4065]
42Extended Echo Request[RFC8335]
43Extended Echo Reply[RFC8335]
253RFC3692-style Experiment 1[RFC4727]
254RFC3692-style Experiment 2[RFC4727]
255Reserved[JBP]

注:这张表剔除了 Unassigned 未分配的 Type,中文翻译没有翻译弃用和保留的部分。

报文详解

Echo 响应 (Type 0)

Code 只有 0,代表 Echo 响应。

源站不可达 (Type 3)

Code 总共有 16 个,如下:

Code解释参考
0Net Unreachable 网络不可达[RFC792]
1Host Unreachable 主机不可达[RFC792]
2Protocol Unreachable 协议不可达[RFC792]
3Port Unreachable 端口不可达[RFC792]
4Fragmentation Needed and Don’t Fragment was Set 需要分片但是 Do not Fragment 置位[RFC792]
5Source Route Failed 源路由失败[RFC792]
6Destination Network Unknown 目的网络未知[RFC1122]
7Destination Host Unknown 目的主机未知[RFC1122]
8Source Host Isolated 源主机被隔离[RFC1122]
9Communication with Destination Network is Administratively Prohibited[RFC1122]
10Communication with Destination Host is Administratively Prohibited[RFC1122]
11Destination Network Unreachable for Type of Service[RFC1122]
12Destination Host Unreachable for Type of Service[RFC1122]
13Communication Administratively Prohibited[RFC1812]
14Host Precedence Violation 主机越权[RFC1812]
15Precedence cutoff in effect 优先权剥夺生效[RFC1812]

重定向 (Type 5)

重定向报文是网关发出的,用于要求主机或路由器改变量据报的传输路径的ICMP报文。ICMP 重定向是路由器将路由信息传达给主机的机制。如果一个数据报携带有路由信息,那么即使有更加优化的路径,路由器也不会发送重定向报文。并且,RFC 1122 指出,重定向报文应该只由网关发送,而不应该由互联网主机发送。

Code 指定重定向的原因:

Code描述
0针对网络的重定向报文
1针对主机的重定向报文
2针对网络和服务类型的重定向报文
3针对主机和服务类型的重定向报文

Echo 请求 (Type 8)

Code 只有 0,代表 Echo 请求。

路由器通告 RA (Type 9)

Code 指定:

Code描述
0Normal router advertisement
16Does not route common traffic

路由器请求 (Type 10)

Code 只有 0。

ICMP 超时 (Type 11)

超时报文是网关产生并发送给源站的 ICMP 报文,用于通知源站有数据报因为存活时间递减至 0 而被此网关丢弃,也用于 traceroute 工具来识别两个主机之间的路径上的网关。

Code 指定重超时的原因:

Code描述
0存活时间计数超时
1分片重装超时

分享这篇文章:

上一篇
使用 git-pkgs 管理你的历史包依赖
下一篇
入门网站搭建六年多了,分享下我的 Nginx (Openresty) 安全规则

人机验证:请刷新页面以加载评论区