メインコンテンツまでスキップ

2.7. Multicast Addresses (组播地址)

IPv6组播地址是一组接口(通常在不同节点上)的标识符。一个接口可以属于任意数量的组播组。组播地址具有以下格式:

|   8位   |  4位 |  4位 |           112位            |
+---------+------+------+----------------------------+
|11111111 | flgs | scop | 组ID (group ID) |
+---------+------+------+----------------------------+

地址开头的二进制 11111111 将地址标识为组播地址。

Flags (标志位)

+-+-+-+-+
|0|R|P|T|
+-+-+-+-+

flgs 是一组4个标志:

  • 高阶标志: 保留,必须初始化为0。

  • T标志:

    • T = 0 表示永久分配的("众所周知的")组播地址,由互联网号码分配机构 (IANA, Internet Assigned Numbers Authority) 分配。
    • T = 1 表示非永久分配的("临时"或"动态"分配的)组播地址。
  • P标志: P标志的定义和用法可以在[RFC3306]中找到。

  • R标志: R标志的定义和用法可以在[RFC3956]中找到。

Scope (范围)

scop 是一个4位组播范围值,用于限制组播组的范围。值如下:

范围说明
0reserved保留
1Interface-Local scope接口本地范围
2Link-Local scope链路本地范围
3reserved保留
4Admin-Local scope管理本地范围
5Site-Local scope站点本地范围
6(unassigned)未分配
7(unassigned)未分配
8Organization-Local scope组织本地范围
9(unassigned)未分配
A(unassigned)未分配
B(unassigned)未分配
C(unassigned)未分配
D(unassigned)未分配
EGlobal scope全局范围
Freserved保留

范围说明:

  • Interface-Local scope (接口本地范围): 仅跨越节点上的单个接口,仅对组播的环回传输有用。

  • Link-Local scope (链路本地范围): 跨越与相应单播范围相同的拓扑区域。

  • Admin-Local scope (管理本地范围): 是必须通过管理配置的最小范围,即不是从物理连接或其他非组播相关配置自动派生的。

  • Site-Local scope (站点本地范围): 旨在跨越单个站点。

  • Organization-Local scope (组织本地范围): 旨在跨越属于单个组织的多个站点。

  • 标记为"(unassigned)"的范围: 可供管理员定义其他组播区域。

Group ID (组ID)

group ID 在给定范围内标识组播组,可以是永久的或临时的。组播组ID字段结构的其他定义在[RFC3306]中提供。


组播地址的语义

永久分配的组播地址的"含义"与范围值无关。例如,如果"NTP服务器组"被分配了一个组ID为101(十六进制)的永久组播地址,则:

  • FF01:0:0:0:0:0:0:101 表示与发送者在同一接口(即同一节点)上的所有NTP服务器。
  • FF02:0:0:0:0:0:0:101 表示与发送者在同一链路上的所有NTP服务器。
  • FF05:0:0:0:0:0:0:101 表示与发送者在同一站点的所有NTP服务器。
  • FF0E:0:0:0:0:0:0:101 表示互联网中的所有NTP服务器。

非永久分配的组播地址仅在给定范围内有意义。例如,一个站点的非永久站点本地组播地址 FF15:0:0:0:0:0:0:101 标识的组与不同站点使用相同地址的组没有关系,也与使用相同组ID但不同范围的非永久组没有关系,也与具有相同组ID的永久组没有关系。


组播地址使用限制

  • 组播地址不能用作IPv6数据包中的源地址,也不能出现在任何路由头中。

  • 路由器不能转发任何超出目的组播地址中scop字段指示的范围的组播数据包。

  • 节点不能向scop字段包含保留值0的组播地址发起数据包;如果接收到这样的数据包,它必须被静默丢弃。

  • 节点不能向scop字段包含保留值F的组播地址发起数据包;如果接收到这样的数据包,它必须被静默丢弃。


2.7.1. Pre-Defined Multicast Addresses (预定义的组播地址)

以下众所周知的组播地址是预定义的。本节中定义的组ID是为显式范围值定义的。

不允许将这些组ID用于任何其他范围值(T标志等于0)。

Reserved Multicast Addresses (保留的组播地址)

FF00:0:0:0:0:0:0:0
FF01:0:0:0:0:0:0:0
FF02:0:0:0:0:0:0:0
FF03:0:0:0:0:0:0:0
FF04:0:0:0:0:0:0:0
FF05:0:0:0:0:0:0:0
FF06:0:0:0:0:0:0:0
FF07:0:0:0:0:0:0:0
FF08:0:0:0:0:0:0:0
FF09:0:0:0:0:0:0:0
FF0A:0:0:0:0:0:0:0
FF0B:0:0:0:0:0:0:0
FF0C:0:0:0:0:0:0:0
FF0D:0:0:0:0:0:0:0
FF0E:0:0:0:0:0:0:0
FF0F:0:0:0:0:0:0:0

上述组播地址是保留的,永远不会分配给任何组播组。

All Nodes Addresses (所有节点地址)

FF01:0:0:0:0:0:0:1
FF02:0:0:0:0:0:0:1

上述组播地址标识范围1(接口本地)或2(链路本地)内的所有IPv6节点组。

All Routers Addresses (所有路由器地址)

FF01:0:0:0:0:0:0:2
FF02:0:0:0:0:0:0:2
FF05:0:0:0:0:0:0:2

上述组播地址标识范围1(接口本地)、2(链路本地)或5(站点本地)内的所有IPv6路由器组。

Solicited-Node Address (请求节点地址)

FF02:0:0:0:0:1:FFXX:XXXX

请求节点组播地址 (Solicited-Node Multicast Address) 是作为节点单播和任播地址的函数计算的。请求节点组播地址通过获取地址(单播或任播)的低阶24位并将这些位附加到前缀 FF02:0:0:0:0:1:FF00::/104 来形成,从而产生范围内的组播地址:

FF02:0:0:0:0:1:FF00:0000

FF02:0:0:0:0:1:FFFF:FFFF

示例:

与IPv6地址 4037::01:800:200E:8C6C 对应的请求节点组播地址是 FF02::1:FF0E:8C6C

仅在高阶位上不同的IPv6地址(例如,由于与不同聚合相关联的多个高阶前缀)将映射到相同的请求节点地址,从而减少节点必须加入的组播地址数量。

节点必须计算并加入(在适当的接口上)为节点接口配置的所有单播和任播地址(手动或自动)的关联请求节点组播地址。


组播地址示例

地址说明
FF02::1链路本地所有节点
FF02::2链路本地所有路由器
FF02::1:FF00:0/104请求节点地址前缀
FF05::2站点本地所有路由器
FF0E::101全局NTP服务器(示例)