前文我们讲述了不少IPv6地址的相关内容,了解了它与传统版本IP地址的不同之处和一些新内容的含义,现在我们来对这部分内容在进行一些内容上的扩充。现在我们将要讲述的是:多播地址和字段以及一些定义。
IPv6多播地址识别多个接口。使用适当的多播路由拓扑,将向多播地址发送的数据包发送给该地址识别的所有接口。
IPv6多播地址有 1111 1111 的格式前缀 (FP)。IPv6地址很容易区分为多播地址,因为它总是以 FF 开始。多播地址不能被用作源地址。
除了 FP 以外,多播地址还包括其他结构,以便标识它们的标志、作用域和多播组,如下图所示。
多播地址中的字段如下所示:
标志:“标志”字段表示在IPv6多播地址上设置的标志。该字段的大小为 4 位。从 RFC 2373 起,定义的唯一标志是 Transient (T) 标志。T 标志使用“标志”字段的低位比特。当设置为 0 时,T 标志表示该多播地址是由 Internet 号码指派机构 (IANA) ***指派的(著名)多播地址。当设置为 1 时,T 标志表示该多播地址是瞬态(非***指派)多播地址。
范围:作用域字段表示进行多播通讯的 IPv6网络的作用域。该字段的大小为 4 位。除了多播路由协议提供的信息之外,路由器使用多播作用域来确定是否可以转发多播通讯。
以下作用域在 RFC 2373 中定义:
作用域字段值范围:1 节点本地,2 链路本地,5 站点本地,8 组织本地,E 全局
例如,使用多播地址 FF02::2 的通讯具有链路本地作用域。IPv6路由器永远不会将此通讯转发到本地链路以外。
组ID:“组ID”字段标识多播组,并且在作用域中是唯一的。该字段的大小为 112 位。***指派的组 ID 独立于作用域。瞬态组 ID 仅与特定的作用域有关。从 FF01::到 FF0F::的多播地址是保留的已知地址。
为了识别用于节点本地和链路本地作用域的所有节点,定义下列IPv6地址的多播地址:
FF01::1(节点本地作用域所有节点地址)
FF02::1(链路本地作用域所有节点地址)
为了识别用于节点本地、链路本地和站点本地作用域的所有路由器,定义下列多播地址:
FF01::2(节点本地作用域所有路由器地址)
FF02::2(链路本地作用域所有路由器地址)
FF05::2(站点本地作用域所有路由器地址)
在“组ID”中使用 112 位,就可能有 2 的 112 次方个组ID。但是,因为 IPv6多播地址被映射到以太网多播 MAC 地址,所以 RFC 2373 建议从 IPv6多播地址的低位 32 位指派“组 ID”,并将剩余的原始组 ID 位设置为 0。通过在组 ID 中只使用低位 32 位,每个组 ID 映射到唯一的以太网多播 MAC 地址。
请求节点地址:请求节点地址有利于在地址解析过程中实现有效的网络节点查询。在 IPv4中,ARP 请求帧被发送到 MAC 层次的广播,扰乱了网络段上的所有节点,包括不运行 IPv4的节点。IPv6使用“邻居请求”消息执行地址解析。但是,没有使用本地链路作用域所有节点地址作为“邻居请求”消息目标,因为这样可能扰乱本地链路上的所有 IPv6节点,而是使用请求节点多播地址。请求节点多播地址由前缀 FF02::1:FF00:0/104 和被解析的 IPv6地址的*** 24 位地址组成。
例如,对于使用 FE80::2AA:FF:FE28:9C*** 链路本地 IPv6地址的节点,相应的请求节点地址是 FF02::1:FF28:9C***。要将 FE80::2AA:FF:FE28:9C*** 地址解析为它的链路层地址,节点将发送“邻居请求”消息给 FF02::1:FF28:9C*** 请求节点地址。使用 FE80::2AA:FF:FE28:9C*** 地址的节点,将侦听请求节点地址的多播通讯,因为对应于某一物理网络适配器的接口,已经和网络适配器一起注册了相应的多播地址。
使用请求节点多播地址的结果是,地址解析(通常发生在链路上)不需要使用扰乱所有网络节点的机制。事实上,在地址解析过程中很少有节点被扰乱。在实践中,因为以太网 MAC 地址、IPv6接口 ID 和请求节点地址之间的关系,所以请求节点地址扮演伪单播地址的角色,以便实现非常有效的地址解析。