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位组播范围值,用于限制组播组的范围。值如下:
| 值 | 范围 | 说明 |
|---|---|---|
| 0 | reserved | 保留 |
| 1 | Interface-Local scope | 接口本地范围 |
| 2 | Link-Local scope | 链路本地范围 |
| 3 | reserved | 保留 |
| 4 | Admin-Local scope | 管理本地范围 |
| 5 | Site-Local scope | 站点本地范围 |
| 6 | (unassigned) | 未分配 |
| 7 | (unassigned) | 未分配 |
| 8 | Organization-Local scope | 组织本地范围 |
| 9 | (unassigned) | 未分配 |
| A | (unassigned) | 未分配 |
| B | (unassigned) | 未分配 |
| C | (unassigned) | 未分配 |
| D | (unassigned) | 未分配 |
| E | Global scope | 全局范围 |
| F | reserved | 保留 |
范围说明:
-
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服务器(示例) |