互联网控制消息协议第六版
互联网控制消息协议第六版(英語: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体系总体的的一个组成部分,其基本的协议[1]必须被所有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包的错误。消息体的内容取决于消息类型。
位偏移 | 0–7 | 8–15 | 16–31 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 类型 | 代码 | 校验和 | |||||||||||||||||||||||||||||
32 | 消息体 |
消息类型
编辑类型 | 代表的意义 | 详细描述 |
---|---|---|
ICMPv6错误消息 | ||
1 | 目的地不可达 | 通知源地址,不能发送数据包。 |
2 | 数据包太大 | 通知源地址,数据包太大无法转发。 |
3 | 超时 | 通知源地址,IPv6数据包的“跃点限制”[2]已过期。 |
4 | 参数问题 | 通知源地址,在处理 IPv6报头或 IPv6扩展报头时发生错误 |
100 | 实验 | |
101 | 实验 | |
127 | 保留 | |
ICMPv6信息消息 | ||
128 | 回显请求 | 用来确定 IPv6节点在网络上是否可用。 |
129 | 回显应答 | 对“回显请求”的应答。 |
130 | 多播监听器查询(多播监听器发现) | |
131 | 多播监听器报告(多播监听器发现) | |
132 | 多播监听器硬蛋(多播监听器发现) | |
133 | 路由器請求(邻居发现协议) | 一个网络的节点向路由器请求所在网络的自动配置信息 |
134 | 路由器公告(邻居发现协议) | 对“路由器請求”的应答。 |
135 | 邻居请求(邻居发现协议) | 一个网络的节点向其他节点请其的网络配置信息 |
136 | 邻居公告(邻居发现协议) | 对“邻居请求”的应答 |
137 | 重定向信息(邻居发现协议) | 路由器宣告路由的 |
138 | 路由器计数重设置 | |
139 | ICMP节点信息查询 | |
140 | ICMP节点信息响应 | |
141 | 倒转的邻居发现协议的请求信息 | |
142 | 倒转的邻居发现协议的公告信息 | |
200 | 实验 | |
201 | 实验 | |
255 | 保留 |
消息的校验和
编辑ICMPv6 包的校验和是一个 16 位的二进制补码,计算消息类型域开始的整个 ICMPv6 消息以及 IPv6 头的伪头标(pseudo-header)。计算校验和时,校验和預设为 0。伪头标中的下一个头标(Next Header)值为 58。(注意:ICMPv6 校验和中的伪头标的内容与 IPv4 中不同,见 IPv6)。
ICMPv6消息传送
编辑ICMPv6通过IPv6数据包传送,当节点发送或转发ICMPv6消息时,必须确定消息的IPv6源地址和目的地址。当节点有多个单播地址,则要注意源地址的选择。
消息源地址的确定
编辑如果节点有多个单播地址,则通过下面的规则确定源地址。
- 如果消息是对发送到其中一个单播(unicast)地址消息的回应,则使用该地址作为源地址。
- 如果消息是对发送到其他地址消息的回应,如:
则源地址必须为该节点所属的一个多播地址,且源地址的选择应该与从该节点发出并到达同一目的地址的其他数据包使用相同的规则,即与其他IPv6协议的数据包使用相同的路由表。如果有多个路由可以到达ICMPv6包的目的地址,则可以任选其一。
传送和处理规则
编辑当 ICMPv6节点收到数据包时,它应按照消息的类型采取动作。
- 未知的ICMPv6错误消息交由上层协议处理。
- 未知的ICMPv6消息信息丢弃。
- 所有的错误消息必须足够长但不超过IPv6最小的MTU。
- 禁止回应以下的消息或数据包:
- 必须限制ICMPv6错误消息的产生速率。
为避免网络过负载,ICMPv6协议需要限制发送至同一地址的错误消息的数目。例如,如果一个节点持续转发错误的包,则ICMP会通知第一个错误包,然后根据一个固定的最小周期或者最大的网络负载,周期性提醒。禁止以ICMP错误消息回应错误消息包。