IPv6组播技术白皮书
Copyright © 2019 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。
作为IPv4协议的替代,IPv6协议使用128位的地址结构解决了IP地址不足的问题,同时对一些特性进行了优化处理。出现于IPv4时代的组播技术,由于其有效解决了单点发送、多点接收的问题,实现了网络中点到多点的高效数据传送,能够大量节约网络带宽、降低网络负载,因此在IPv6中的应用得到了进一步的丰富和加强。
IPv6组播与IPv4组播的最大不同在于IPv6组播地址机制的极大丰富,而其它诸如组成员管理、组播报文转发以及组播路由建立等与IPv4组播基本相同。因此,本文将重点介绍组播地址对IPv6的支持情况;对于IPv6组播协议,只对其与IPv4组播协议的异同进行大致的介绍。
在介绍IPv6组播地址之前,先简单回顾一下IPv6的地址结构:IPv6地址的长度为128比特,每个IPv6地址被分为8组,每组的16比特用4个十六进制数来表示,组和组之间用冒号隔开,例如:FEDC:BA98:7654:3210:FEDC:BA98:7654:3210。
IPv6组播地址用来标识一组接口,通常这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。
图1 IPv6组播地址格式
如图1所示,IPv6组播地址中各字段的含义如下:
· 0xFF:最高8比特为11111111,标识此地址为IPv6组播地址。
· Flags:4比特,该字段中各位的取值及含义如表1所示。
表1 Flags字段各位的取值及含义
位 |
取值及含义 |
0位 |
保留位,必须取0 |
R位 |
· 取0表示非内嵌RP的IPv6组播地址 · 取1表示内嵌RP的IPv6组播地址(此时P、T位也必须置1) |
P位 |
· 取0表示非基于单播前缀的IPv6组播地址 · 取1表示基于单播前缀的IPv6组播地址(此时T位也必须置1) |
T位 |
· 取0表示由IANA永久分配的IPv6组播地址 · 取1表示非永久分配的IPv6组播地址 |
· Scope:4比特。用来标识该IPv6组播组的应用范围,其取值及含义如表2所示。
表2 Scope字段的取值及其含义
取值 |
含义 |
0、F |
保留(Reserved) |
1 |
接口本地范围(Interface-Local Scope) |
2 |
链路本地范围(Link-Local Scope) |
3 |
子网本地范围(Subnet-Local Scope) |
4 |
管理本地范围(Admin-Local Scope) |
5 |
站点本地范围(Site-Local Scope) |
6、7、9~D |
未分配(Unassigned) |
8 |
机构本地范围(Organization-Local Scope) |
E |
全球范围(Global Scope) |
· Group ID:112比特,IPv6组播组标识号。用来在由Scope字段所指定的范围内唯一标识IPv6组播组,该标识可能是永久分配的或临时的,这由Flags字段的T位决定。
根据RFC 4291,目前已被预留的IPv6组播地址如表3所示。
表3 预留的IPv6组播地址列表
名称 |
地址 |
说明 |
保留组播地址 |
FF0X:: |
不能分配给任何组播组 |
所有节点组播地址 |
· FF01::1(节点本地) · FF02::1(链路本地) |
- |
所有路由器组播地址 |
· FF01::2(节点本地) · FF02::2(链路本地) · FF05::2(站点本地) |
- |
被请求节点组播地址 |
FF02::1:FFXX:XXXX |
在被请求节点单播或任播IPv6地址的低24位前增加地址前缀FF02::1:FF00::/104而得,如4037::01:800:200E:8C6C对应于FF02::1:FF0E:8C6C |
表3中的X代表0~F的任意一个十六进制数。
RFC 3306中规定了一种动态分配IPv6组播地址的方式——基于单播前缀的IPv6组播地址。这种IPv6组播地址中包含了其组播源网络的单播地址前缀,通过这种方式分配全局唯一的组播地址。
图2 基于单播前缀的IPv6组播地址格式
基于单播前缀的IPv6组播地址的格式如图2所示,其中各字段的含义如下:
· Flags:R位置0,P、T位则分别置1,表示基于单播前缀的组播地址。
· Scope:如2.1.1 图1表2所示。
· Reserved:8比特。保留字段,必须为0。
· Plen:8比特。表示网络前缀的有效长度(单位为比特)。
· Network prefix:64比特。表示该组播地址所属子网的单播前缀,有效长度由Plen字段指定。
· Group ID:32比特。表示IPv6组播组标识号。
例如:单播前缀为3FFE:FFFF:1::/48的网络分配基于单播前缀的组播地址为FF3X:30:3FFE:FFFF:1::/96(X表示任意合法的Scope)。
嵌入式RP(Rendezvous Point,汇集点)是IPv6 PIM中特有的RP发现机制,该机制使用内嵌RP地址的IPv6组播地址,使得组播路由器可以直接从该地址中解析出RP的地址。
图3 内嵌RP地址的IPv6组播地址格式
如图3所示,内嵌RP地址的IPv6组播地址使用基于单播前缀的IPv6组播地址格式,其中各字段的含义如下:
· Flags:R、P和T位均置1,表示内嵌RP地址的组播地址。
· Scope:如2.1.1 图1表2所示。
· Reserved:4比特。保留字段,必须为0。
· RIID:4比特。表示RP地址的接口ID。
· Plen:8比特。表示RP地址前缀的有效长度(单位为比特)。
· Network prefix:64比特。表示RP地址前缀,有效长度由Plen字段指定。
· Group ID:32比特。表示IPv6组播组标识号。
内嵌于IPv6组播地址中的RP地址的计算规则如下:
(1) 先将IPv6组播地址Network prefix字段的前Plen位作为RP地址的网络前缀。
(2) 再将IPv6组播地址RIID字段填充到RP地址的最低4位。
(3) 最后,将RP地址的所有剩余位补0。
例如:对于IPv6组播地址FF7E:F40:2001:DB8:BEEF:FEED::1234,内嵌于其中的RP地址的前缀为Network prefix字段的前Plen(这里为0x40 = 64 bits)位,最低4位为RIID(0xF),其余位均为0,如图4所示。
图4 嵌入式RP计算举例
假设网络管理员想在2001:DB8:BEEF:FEED::/64网段中设置RP,则内嵌RP地址的IPv6组播地址为FF7X:Y40:2001:DB8:BEEF:FEED::/96,可分配32比特的Group ID,内嵌于其中的RP地址为2001:DB8:BEEF:FEED::Y/64。
如果网络管理员想在IPv6组播地址中保留更多可分配的Group ID,可以选择更短的RP地址前缀:譬如取Plen = 0x20 = 32 bits,则此时内嵌RP地址的IPv6组播地址为FF7X:Y20:2001:DB8::/64,可分配64比特的Group ID,内嵌于其中的RP地址为2001:DB8::Y/32。
X表示任意合法的Scope,Y代表1~F的任意一个十六进制数。
IPv6 SSM(Source-Specific Multicast,指定信源组播)组播地址也使用基于单播前缀的IPv6组播地址格式,其中的Plen字段和Network prefix字段均取0。IPv6 SSM组播地址范围为FF3X::/32(X表示任意合法的Scope)。
IPv6组播MAC地址以0x3333开头,低32位为IPv6组播地址的低32位,最终形成48比特的组播MAC地址。如图5所示,IPv6组播地址FF1E::F30E:101所对应的组播MAC地址为33-33-F3-0E-01-01。
图5 IPv6组播地址的MAC地址映射举例
IPv6支持的组播协议包括MLD(Multicast Listener Discovery Protocol,组播侦听者发现协议)、MLD Snooping(Multicast Listener Discovery Snooping,组播侦听者发现协议窥探)、IPv6 PIM(IPv6 Protocol Independent Multicast,IPv6协议无关组播)和IPv6 MBGP(IPv6 Multicast BGP,IPv6组播BGP)等。
MLD源自IGMP(Internet Group Management Protocol,互联网组管理协议),MLD有两个版本:MLDv1源自IGMPv2,MLDv2源自IGMPv3。
与IGMP采用IP协议号为2的报文类型不同,MLD采用ICMPv6(IP协议号为58)的报文类型,包括MLD查询报文(类型值130)、MLDv1报告报文(类型值131)、MLDv1离开报文(类型值132)和MLDv2报告报文(类型值143)。MLD协议与IGMP协议除报文格式不同外,协议行为完全相同。
IPv6 PIM与PIM除报文中IP地址结构不同外,其它协议行为基本相同,IPv6 PIM也支持如下四种模式:
· IPv6 PIM-DM(IPv6 Protocol Independent Multicast-Dense Mode,IPv6协议无关组播—密集模式)
· IPv6 PIM-SM(IPv6 Protocol Independent Multicast-Sparse Mode,IPv6协议无关组播—稀疏模式)
· IPv6 PIM-SSM(IPv6 Protocol Independent Multicast Source-Specific Multicast,IPv6协议无关组播-指定源组播)
· IPv6 BIDIR-PIM(IPv6 Bidirectional Protocol Independent Multicast,IPv6双向协议无关组播,简称IPv6双向PIM)
IPv6 PIM发送链路本地范围的协议报文(包括PIM Hello、Join-Prune、Assert、Bootstrap、Graft、Graft-Ack和State-refresh报文)时,报文的源IPv6地址使用发送接口的链路本地地址;IPv6 PIM发送全球范围的协议报文(包括Register、Register-Stop和C-RP Advertisement报文)时,报文的源IPv6地址使用发送接口的全球单播地址。
IPv6组播并不支持MSDP协议,如果需要接收来自其它IPv6 PIM域的组播数据,有以下两种实现方式:
· 通过其它方式(譬如广告等)直接获取其它IPv6 PIM域内的组播源地址,使用IPv6 PIM-SSM发起指定源组的加入。
· 使用嵌入式RP机制,通过嵌入RP地址的IPv6组播地址来获取其它IPv6 PIM域内的RP地址,向其它域内的RP发起组加入。
对于域间IPv6组播路由信息的传递,则可以使用IPv6的MBGP协议,其与IPv4的MBGP协议也基本相同。
MLD Snooping与IGMP Snooping协议基本相同。
IPv6 PIM Snooping与PIM Snooping协议基本相同。
组播VLAN,对于IPv4组播和IPv6组播,处理原理相同。
· RFC 4291:IP Version 6 Addressing Architecture
· RFC 3306:Unicast-Prefix-based IPv6 Multicast Addresses
· RFC 3956:Embedding the Rendezvous Point (RP) Address in an IPv6 Multicast Address