摘要
互联网控制消息协议第六版即ICMPv6(Internet Control Message Protocol Version 6或ICMP for IPv6)是互联网控制消息协议(ICMP)在IPv6协议下的新版本。它在RFC 4443中被定义,其协议号(IPv6的Next Header域)为58。
ICMPv6协议定义在TCP/IP模型中的网络层(Internet Layer),用于报告IPv6节点数据包处理过程中的错误消息和完成一些网络诊断功能(如ping和Traceroute等)。它是IPv6体系总体的的一个组成部分,其基本的协议必须被所有IPv6实现和IPv6节点所完整支持。
ICMPv6数据包格式
IANA(因特网地址授权委员会)定义ICMPv6的协议号为58。 其消息分为两类,错误消息和信息消息。ICMPv6通过IPv6数据包传送,并且IPv6的扩展头需要被设置。
下文描述了ICMPv6使用的控制消息集的格式。
格式
ICMPv6包有类型(Type),代码(Code),校验和(Checksum)和消息体(Message Body)等几个字段。类型域为8位,用来表示消息的类型,如果最高有效位是0(即值的范围是0-127),则表示一个错误消息;如果是1,则该ICMPv6包是一个信息消息。代码域同样为8位,其内容取决于消息类型,用来区分某一类型的多条消息。校验和用来检测ICMP消息和IPv6包的错误。消息体的内容取决于消息类型。
消息类型
类型 代表的意义 详细描述
ICMPv6错误消息
1 目的地不可达 通知源地址,不能发送数据包。
2 数据包太大 通知源地址,数据包太大无法转发。
3 超时 通知源地址,IPv6数据包的“跃点限制”已过期。
4 参数问题 通知源地址,在处理 IPv6报头或 IPv6扩展报头时发生错误
100 实验
101 实验
127 保留
ICMPv6信息消息
128 回显请求 用来确定 IPv6节点在网络上是否可用。
129 回显应答 对“回显请求”的应答。
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重定向消息
发送到IPv6多播地址的数据包。(有两种例外情况。)
发送到数据链路层广播地址的数据包。(例外情况同上)
源地址不确定的数据包。
必须限制ICMPv6错误消息的产生速率。
为避免网络过负载,ICMPv6协议需要限制发送至同一地址的错误消息的数目。例如,如果一个节点持续转发错误的包,则ICMP会通知第一个错误包,然后根据一个固定的最小周期或者最大的网络负载,周期性提醒。禁止以ICMP错误消息回应错误消息包。
原创文章,作者:满天星,如若转载,请注明出处:https://www.ipv6s.com/basis/20100813149.html