互联网控制消息协议第六版(英语:Internet Control Message Protocol Version 6或ICMP for IPv6,缩写:ICMPv6)是互联网控制消息协议(ICMP)在IPv6协议下的新版本。它在 RFC 4443 中被定义,其协议号(IPv6的Next Header域)为58。
ICMPv6协议定义在OSI模型中的网络层(Internet Layer),用于报告IPv6节点数据包处理过程中的错误消息和完成一些网络诊断功能(如ping和traceroute等)。它是IPv6体系总体的的一个组成部分,其基本的协议必须被所有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 包的校验和是一个 16 位的二进制补码,计算消息类型域开始的整个 ICMPv6 消息以及 IPv6 头的伪头标(pseudo-header)。计算校验和时,校验和预设为 0。伪头标中的下一个头标(Next Header)值为 58。(注意:ICMPv6 校验和中的伪头标的内容与 IPv4 中不同,见 IPv6)。
ICMPv6通过IPv6数据包传送,当节点发送或转发ICMPv6消息时,必须确定消息的IPv6源地址和目的地址。当节点有多个单播地址,则要注意源地址的选择。
如果节点有多个单播地址,则通过下面的规则确定源地址。
则源地址必须为该节点所属的一个多播地址,且源地址的选择应该与从该节点发出并到达同一目的地址的其他数据包使用相同的规则,即与其他IPv6协议的数据包使用相同的路由表。如果有多个路由可以到达ICMPv6包的目的地址,则可以任选其一。
当 ICMPv6节点收到数据包时,它应按照消息的类型采取动作。
为避免网络过负载,ICMPv6协议需要限制发送至同一地址的错误消息的数目。例如,如果一个节点持续转发错误的包,则ICMP会通知第一个错误包,然后根据一个固定的最小周期或者最大的网络负载,周期性提醒。禁止以ICMP错误消息回应错误消息包。