互联网控制消息协议第六版

互联网控制消息协议第六版（或，缩写：ICMPv6）是互联网控制消息协议（）在IPv6协议下的新版本。它在 RFC 4443 中被定义，其协议号（IPv6的Next Header域）为58。

ICMPv6协议定义在OSI模型中的网络层（），用于报告IPv6节点数据包处理过程中的错误消息和完成一些网络诊断功能（如ping和traceroute等）。它是IPv6体系总体的的一个组成部分，其基本的协议RFC 4443 中定义的消息类型和处理动作必须被所有IPv6实现和IPv6节点所完整支持。

除了ICMPv4原有的功能，ICMPv6还承担了IPv4其他协议所实现的功能或IPv6所需的新功能，例如邻居发现协议（同时取代了ARP/RARP，SEND作为其安全扩展）、多播管理（取代了IGMP）。

 数据包格式 
IANA（因特网地址授权委员会）定义ICMPv6的协议号为58。

其消息分为两类，错误消息和信息消息。ICMPv6通过IPv6数据包传送，并且IPv6的扩展头需要被设置。

下文描述了ICMPv6使用的控制消息集的格式。
 格式 
ICMPv6包有类型（Type），代码（Code），校验和（Checksum）和消息体（Message Body）等几个字段。类型域为8位，用来表示消息的类型，如果最高有效位是0（即值的范围是0-127），则表示一个错误消息；如果是1，则该ICMPv6包是一个信息消息。代码域同样为8位，其内容取决于消息类型，用来区分某一类型的多条消息。校验和用来检测ICMP消息和IPv6包的错误。消息体的内容取决于消息类型。

+ICMPv6 封包 位偏移  0–7  8–15  16–31   0  类型  代码  校验和 32  消息体

 消息类型 
 类型  代表的意义详细描述 ICMPv6错误消息 1  目的地不可达通知源地址，不能发送数据包。 2  数据包太大通知源地址，数据包太大无法转发。 3  超时通知源地址，IPv6数据包的“跃点限制”相当于IPv4中的TTL，见IPv6已过期。 4  参数问题通知源地址，在处理 IPv6报头或 IPv6扩展报头时发生错误 100  实验 101  实验 127  保留 ICMPv6信息消息 128  回显请求用来确定 IPv6节点在网络上是否可用。 129  回显应答对“回显请求”的应答。130多播监听器查询（）131多播监听器报告（）132多播监听器硬蛋（） 133  路由器請求（邻居发现协议）一个网络的节点向路由器请求所在网络的自动配置信息 134  路由器公告（邻居发现协议）对“路由器請求”的应答。135邻居请求（邻居发现协议）一个网络的节点向其他节点请其的网络配置信息136邻居公告（邻居发现协议）对“邻居请求”的应答137重定向信息（邻居发现协议）路由器宣告路由的138路由器计数重设置139ICMP节点信息查询140ICMP节点信息响应141倒转的邻居发现协议的请求信息142倒转的邻居发现协议的公告信息 200  实验 201  实验 255  保留

 消息的校验和 
ICMPv6 包的校验和是一个 16 位的二进制补码，计算消息类型域开始的整个 ICMPv6 消息以及 IPv6 头的伪头标（pseudo-header）。计算校验和时，校验和預设为 0。伪头标中的下一个头标（Next Header）值为 58。（注意：ICMPv6 校验和中的伪头标的内容与 IPv4 中不同，见 IPv6）。

 ICMPv6消息传送 
ICMPv6通过IPv6数据包传送，当节点发送或转发ICMPv6消息时，必须确定消息的IPv6源地址和目的地址。当节点有多个单播地址，则要注意源地址的选择。
 消息源地址的确定 
如果节点有多个单播地址，则通过下面的规则确定源地址。
如果消息是对发送到其中一个单播（unicast）地址消息的回应，则使用该地址作为源地址。
如果消息是对发送到其他地址消息的回应，如：
多播（multcast）组地址
该节点实现的任播（anycast）地址
其他节点的单播地址
则源地址必须为该节点所属的一个多播地址，且源地址的选择应该与从该节点发出并到达同一目的地址的其他数据包使用相同的规则，即与其他IPv6协议的数据包使用相同的路由表。如果有多个路由可以到达ICMPv6包的目的地址，则可以任选其一。

 传送和处理规则 
当 ICMPv6节点收到数据包时，它应按照消息的类型采取动作。

 未知的ICMPv6错误消息交由上层协议处理。
 未知的ICMPv6消息信息丢弃。
 所有的错误消息必须足够长但不超过IPv6最小的MTU。
 禁止回应以下的消息或数据包：
 ICMPv6错误消息
 ICMPv6重定向消息Narten, T., Nordmark, E., and W. Simpson, "Neighbor Discovery for IP Version 6 (IPv6)", RFC 2461, December 1998.
 发送到IPv6多播地址的数据包。（有两种例外情况。 IPv6多播的“路径MTU发现”时发送“数据包太大”错误消息
 报告未知的IPv6选项时发送“参数问题”错误消息）
 发送到数据链路层广播地址的数据包。（例外情况同上）
 源地址不确定的数据包。
必须限制ICMPv6错误消息的产生速率。
为避免网络过负载，ICMPv6协议需要限制发送至同一地址的错误消息的数目。例如，如果一个节点持续转发错误的包，则ICMP会通知第一个错误包，然后根据一个固定的最小周期或者最大的网络负载，周期性提醒。禁止以ICMP错误消息回应错误消息包。

 参见 
 互联网控制消息协议（ICMP）
 IPv6

 参考 
 计算机世界网：ICMPv6
 RFC 4443

 延伸阅读 
 IANA: ICMPv6 Parameters
 RFC 4443, ICMPv6 for IPv6 Specification（替代了 RFC 2463 和 RFC 1885）
 RFC 2894, Router Renumbering for IPv6

 脚注 

Category:网络层协议
Category:IPv6