PIM-SM
PIM-SM(Protocol Independent Multicast-Sparse Mode,协议无关组播-稀疏模式)可以有效解决大型网络且用户分布比较分散的场景中,“点到多点”的数据传输问题,使用户能够按需接收数据。
PIM-SM假设网络中所有主机均不需要接收组播数据,只有在主机明确提出需要接收组播数据时,才会构建组播分发树,向提出需求的主机转发组播数据。
相关概念
如图4-6所示,介绍PIM-SM协议的基本概念:
PIM设备
支持PIM协议的组播路由器称为PIM设备。PIM设备上使能了PIM协议的接口称为PIM接口。
PIM域
由PIM设备所组成的网络称为PIM网络。
通过在组播设备接口上设置BSR边界,可以限制BSR消息的传播,从而划分PIM-SM域。将一个大的PIM网络划分成多个PIM域,可以实现组播业务之间的隔离,便于管理网络。
DR
DR(Designated Router)称为指定路由器,在PIM网络中,存在两种DR:组播源DR:在PIM-SM中,组播源DR是与组播源直接相连且负责向RP发送注册报文的PIM设备。
接收者DR:与组播组成员(通常为接收者主机)直接相连且负责向该组成员转发组播数据的PIM设备。
RP
RP(Rendezvous Point)称为汇聚点,它是PIM-SM网络的转发核心。接收者DR向RP发起加入,构建以RP为根的RPT;组播源DR向RP发送注册报文,在RP上创建(S,G)表项,通过RP向组成员传输组播报文。网络中的设备必须知道RP的地址,RP分类如下:
表4-2 RP分类RP类型
实现机制
使用场景
注意事项
静态RP
用户可在网络中的所有PIM设备上手工配置相同的地址为静态RP地址,网络中的所有PIM设备都以此地址作为RP地址。
对于中小型网络,建议选择静态RP方式,对设备要求低,也比较稳定。
说明:如果网络中只有一个组播源,建议选择直连组播源的设备做为静态RP,这样可以省略组播源DR向RP注册的过程。
采用静态RP方式要确保域内所有路由器(包括RP本身)的RP信息以及服务的组播组范围全网一致。
动态RP
在PIM域内将几台PIM设备配置为C-RP(Candidate-RP),即候选RP。在这些C-RP中,通过竞选产生RP,BSR通过Bootstrap消息将当前网络中的所有C-RP信息汇总为RP-Set,发布给所有的PIM设备。网络中的所有PIM设备根据RP-Set,使用相同的规则进行计算和比较,从多个C-RP中竞选出RP。由于所有PIM设备使用相同的RP-Set和相同的竞选规则,即:它们具有相同的RP信息。一旦竞选出的RP出现故障,剩余C-RP会重新进行选举,产生新的RP。
对于大型网络,可以采用动态RP,可靠性高,可维护性强。如果网络中存在多个组播源,且分布密集,建议选择与组播源比较近的核心设备作为C-RP。
如果网络中存在多个用户,且分布密集,建议选择与用户比较近的核心设备作为C-RP。
如果使用动态RP,则必须同时配置BSR。通过BSR,组播网络中的路由器可以动态地掌握组播组到RP的映射。
Embedded-RP(嵌入式RP)
Embedded-RP是ASM模式下路由器获取RP地址的一种方式,可应用于IPv6 PIM-SM域内和域间。RP地址嵌入在IPv6组地址中,路由器获取IPv6组地址的同时获取该IPv6组播组地址对应的RP地址。
可解决由于MSDP不支持IPv6网络导致IPv6 PIM-SM域间无法互相获取RP信息,组播业务不通的问题。
-
BSR
BSR(Bootstrap Router)称为自举路由器,负责在PIM-SM网络启动后,收集网络内的RP信息,然后将RP集(即组-RP映射数据库)发布到整个PIM-SM网络。
一个网络内部只能有一个BSR,但是可以配置多个候选BSR,即C-BSR(Candidate-Bootstrap Router)。一旦BSR出现故障,剩余C-BSR中会重新选举出BSR。
RPT
RPT(Rendezvous Point Tree),称为共享树。以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为RPT。
SPT
SPT(Shortest Path Tree),称为最短路径树。以组播源为根,组播组成员为叶子的组播分发树称为SPT。
实现过程
-
PIM设备之间交互Hello消息为共享网络选举DR,接收者DR将作为该共享网络中组播数据的唯一转发者,组播源DR负责将组播源的数据发送给RP。
-
RP是PIM-SM域中的核心设备。通过配置静态或动态RP,依靠此RP为整个网络转发组播数据。
-
PIM-SM假设所有主机都不需要接收组播数据,只向明确提出需要组播数据的主机转发。实现组播转发的核心任务就是构建并维护RPT,组播数据通过RP沿RPT转发给接收者。
-
在PIM-SM域中,一个组播组唯一对应一个RP和RPT,RP是所有组播数据必经的中转站。但由RP转发组播数据的转发路径不一定是从组播源到接收者的最短路径,且当组播流量变大时,RP负担增大,因此,当组播数据的转发速率超过阈值时,可进行SPT切换,直接在组播源与接收者间建立最优路径,缓解RP的负担。
-
如果在一个网段内出现多台PIM设备,则相同的组播报文可能会被重复发送到该网段。可通过断言为网段选定唯一的组播数据转发者,避免冗余的组播数据的转发。
-
当网络中的某接口由DR变为非DR时,PIM设备会立即停止使用此接口转发数据。如果此时新DR的组播数据还未到达,那么将会出现短暂的组播数据断流。配置DR切换延迟后,该接口在延迟时间超时前仍然继续转发组播数据,避免组播数据断流的情况。
以下详细介绍具体的实现过程:
邻居发现(Neighbor Discovery)
目的地址是224.0.0.13,表示同一网段中所有PIM设备
源地址为接口的IP地址
TTL数值为1,仅发送给邻居接口
Hello消息的作用:发现邻居、协调各项协议参数、维持邻居关系。
DR竞选(DR Election)
如图4-7所示,在组播源或组成员所在的网段,通常同时连接着多台PIM设备。这些PIM设备之间通过交互Hello消息成为PIM邻居,Hello消息中携带DR优先级和该网段接口地址。路由器将自身情况与对方报文中携带的信息进行比较,称为DR竞选。规则如下:
DR优先级较高者获胜(网段中所有路由器都支持DR优先级)。
如果DR优先级相同或该网段存在不支持在Hello消息中携带DR优先级的路由器,则IP地址较大者获胜。
RP发现(RP Discovery)
静态RP
静态RP通过配置命令在网络中的所有路由器上配置相同的RP地址来指定,无需进行竞选。
动态RP
如果配置动态RP,则需要在PIM设备间竞选产生。
如图4-8所示,动态RP的竞选规则如下:
使用动态RP,必须同时配置C-BSR(Candidate-Bootstrap Router),由C-BSR竞选产生BSR。
最初,每个C-BSR都认为自己是BSR,向全网发送Bootstrap消息。Bootstrap消息中携带C-BSR地址、C-BSR的优先级。每一台路由器都收到所有C-BSR发出的Bootstrap消息,通过比较这些C-BSR信息,竞选产生BSR。竞选规则如下:
优先级较高者获胜(优先级数值越大优先级越高)。
如果优先级相同,IP地址较大者获胜。
由于所有路由器使用相同的竞选规则,所以得到的获胜BSR也相同。网络中的所有路由器都知道BSR的地址。
C-RP向BSR发送C-RP Advertisement消息,消息中携带C-RP地址、服务的组范围和C-RP优先级等。
BSR将这些信息汇总为RP-Set,封装在Bootstrap消息中,发布给全网的每一台PIM-SM设备。
- 各路由器根据RP-Set,使用相同的规则进行计算和比较,从多个针对特定组的C-RP中竞选出该组RP。规则如下:
与用户加入的组地址匹配的C-RP服务的组范围掩码最长者获胜。
如果与用户加入的组地址匹配的C-RP服务的组范围掩码长度相同,则比较C-RP优先级,C-RP优先级较高者获胜(优先级数值越大优先级越低)。
如果优先级相同,则执行Hash函数,计算结果较大者获胜。
如果以上都相同,则C-RP地址较大者获胜。
由于所有路由器使用相同的RP-Set和竞选规则,所以得到的“组播组-RP”对应关系也相同。路由器将“组播组-RP”对应关系保存下来,指导后续的组播操作。
如果路由器需要与支持Auto-RP的设备互通,可以使能Auto-RP侦听功能。使能后,路由器可以接收Auto-RP宣告和发现报文,并解析报文的源地址,根据源地址进行RPF检查。
- 如果RPF检查失败,则路由器丢弃该Auto-RP报文。
- 如果RPF检查通过,则路由器向其他PIM邻居转发Auto-RP报文,此报文中携带RP服务的组地址范围,指导后续的组播操作。
Auto-RP侦听功能仅IPv4支持。
Embedded RP
Embedded-RP是ASM模式下路由器获取RP地址的一种方式,仅应用于IPv6 PIM-SM,为避免RP选举结果不一致,Embedded-RP优先级高于其他RP选举机制。嵌入式RP的地址需要编码在IPv6组播组地址中,可以嵌入RP的组播组地址必须同时满足下面两个条件:
- 在IPv6组播组地址范围之内。
- IPv6组播组地址范围不能是SSM范围内的组地址。
从IPv6组播组地址中计算出此RP地址后,就可以利用此RP地址发现路由并指导组播数据的转发。计算RP地址的步骤为:
- 复制IPv6组播组地址的network prefix的前plen位。
- 用RIID的内容代替最后4位。
执行上述步骤之后,产生的地址即为Embedded RP地址。如图4-9所示。
Anycast RP
在传统的PIM-SM域中,每个组播组只能映射到一个RP。但当网络负载较大或者流量过于集中时,可能导致RP的压力过大、RP失效后路由收敛较慢、组播转发路径非最优等问题。
可以通过实现Anycast RP解决上述问题,目前有两种配置Anycast RP的方法:采用MSDP协议:在同一PIM-SM域内设置多个具有相同地址的RP,并在这些RP之间通过建立MSDP(Multicast Source Discovery Protocol)对等体的方式共享组播数据源信息。
采用MSDP协议实现Anycast RP支持IPv4网络。具体实现原理详见MSDP实现Anycast RP。
采用PIM协议:在同一个PIM-SM域内设置多个具有相同地址的RP,同时在这些RP所在的设备上配置全网唯一标识该RP的本地地址,用于这些设备之间相互建立无连接的对等体,对等体之间以Register消息的方式共享组播源信息。
采用PIM协议实现Anycast RP支持IPv4和IPv6网络。
在同一PIM-SM域内,不支持同时使用MSDP和PIM协议两种方式配置同一个Anycast RP;采用PIM协议实现Anycast RP支持通过命令行设置有选择地将从MSDP获得的域外数据源信息通知给域内的其它对等体(可配置)。
通过以上两种方式之一实现Anycast RP,接收者和组播源分别选择距离自己最近的RP进行RPT的创建,当接收者DR接收到组播数据后自行决定是否发起SPT切换。从而实现RP路径最优及负荷分担。下面重点介绍采用PIM协议实现Anycast RP的原理。
配置RP1和RP2,使用相同的IP地址(使用Loopback接口,假设为10.10.10.10)。
在RP1和RP2两个设备间配置无连接的对等体关系(使用网络中唯一标识的IP地址,假设RP1的IP地址为1.1.1.1,RP2的IP地址为2.2.2.2)。
- 接收者选择距离最近的RP发送Join消息构建RPT树。
U1加入以RP1为根的RPT,在RP1上创建(*,G)。
U2加入以RP2为根的RPT,在RP2上创建(*,G)。
- 组播源选择距离最近的RP进行注册。
DR1向RP1发送Register消息,在RP1上创建(S1,G)。从S1发来的组播数据沿RPT到达U1。
DR2向RP2发送Register消息,在RP2上创建(S2,G)。从S2发来的组播数据沿RPT到达U2。
- RP收到源DR发过来的Register消息,重新封装成Register消息转给自己的对等体,共享组播源信息。
RP1收到源DR1发过来的(S1,G)Register消息后,将该Register消息的源地址和目的地址替换为1.1.1.1和2.2.2.2,重新封装后发送到RP2。RP2收到该Register消息后检查发现该Register消息来自对等体1.1.1.1,不再转发给其它对等体,只是处理该Register消息。
RP2收到源DR2发过来的(S2,G)Register消息后,将该Register消息的源地址和目的地址替换为2.2.2.2和1.1.1.1,重新封装后发送到RP1。RP1收到该Register消息后检查发现该Register消息来自对等体2.2.2.2,不再转发给其它对等体,只是处理该Register消息。
接收者DR接收到组播数据后,自行决定是否发起SPT切换。
RPT建立(RPT Setup)
建立RPT的过程即建立组播数据转发路径的过程。如图4-11所示,RPT的建立及数据转发过程如下:
当网络中出现活跃的组播源(组播源向某组播组G发送第一个组播数据)时,组播源端DR将组播数据封装在Register消息中单播发往RP,在RP上创建(S,G)表项,注册源信息。
当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,接收者DR向RP发送Join消息,在通向RP的路径上逐跳创建(*,G)表项,生成以一棵以RP为根的RPT。
当网络中同时出现组成员和向该组发送数据的组播源时,以RP为中转站,组播数据先被封装在Register消息中单播发往RP,再沿RPT到达组成员。
RPT实现了组播数据按需转发的目的,减少无需求数据对网络带宽的占用。
为了减轻RPT的转发负担、提高组播数据转发效率,PIM-SM允许进行SPT切换。即建立一条从数据源直接到接收者的转发链路,组播源可以沿SPT将组播数据转发到接收者。
SPT切换(SPT Switchover)
在PIM-SM网络中,一个组播组只对应一个RP,只构建一棵RPT。在未进行SPT切换的情况下,所有发往该组的组播报文都必须先封装在Register消息中发往RP,RP解封装后,再沿RPT分发。
由于所有通过RPT转发的组播数据报文必须经过RP中转,所以当组播数据报文逐渐增多时,会对RP形成巨大的负担。为了解决此问题,PIM-SM允许由RP或接收者DR触发SPT切换,建立一条从数据源直接到接收者的转发链路。
SPT切换的两种方式:
RP触发SPT切换
RP收到源端DR的Register消息后,将封装在Register消息中的组播数据沿RPT转发给组成员,同时RP会向源端DR发送SPT Join消息,建立RP到源的SPT。
SPT建立成功后,当RP从SPT接收到第一个组播数据报文后,RP停止使用Register消息,使源端DR和RP免除了频繁的封装/解封装。组播数据从与组播源直接相连的路由器,通过SPT树转发到RP,再沿RPT转发给组成员。
- 组成员端DR触发SPT切换。
如图4-12所示:组播数据由RPT转发,接收者DR(DeviceD)向RP发送(*,G) Join消息,组播数据沿组播源DR(DeviceA)->RP(DeviceB)->接收者DR(DeviceD)到达接收者(Receiver)。
接收者DR周期性检测组播报文的转发速率。一旦发现(S,G)报文的转发速率超过阈值,则触发SPT切换。
接收者DR直接向组播源端DR发送(S,G) Join消息,当接收者DR收到沿SPT发来的组播数据后,丢弃沿RPT发来的组播数据,同时向RP发送Prune消息,删除RPT中的此接收者,实现从RPT向SPT的切换。
组播数据由SPT转发,组播数据沿组播源DR(DeviceA)->接收者DR(DeviceD)到达接收者(Receiver)。
建立从源到组成员的SPT后,后续报文可能不再流经RP。由于RPT不一定是路径最短的树,进行SPT切换后,减少了组播数据在网络中的传输延迟。
SPT切换前,这些报文都沿RPT到达组成员端DR。
完成SPT切换后,只有组播源发往属于SPT切换策略中组播组范围内的组播组的报文沿SPT转发,而组播源发往其他组播组的报文,仍会沿RPT转发。
断言(Assert)
在组播网络中,如果出现如下情况,则说明网段上还存在着其他的组播转发者。
该组播报文不能通过RPF检查。
接收到该组播报文的接口是本路由器上(S,G)表项中的一个下游接口。
此时,路由器会执行Assert机制:
路由器从该下游接口发送Assert消息。同时,该下游接口也接收到了来自该网段上其他组播转发者的Assert消息。Assert消息的目的地址为224.0.0.13,源地址为下游接口地址,TTL为1。Assert消息中携带:该PIM设备到组播源或RP的开销、所采用的单播路由协议的优先级、组播组地址G。
单播路由协议优先级较高者获胜。
如果优先级相同,则到组播源的开销较小者获胜。
如果以上都相同,则下游接口IP地址最大者获胜。
根据Assert竞选结果,路由器将执行不同的操作:
如果获胜,则该下游接口保持转发状态,路由器负责后续在该网段上的(S,G)转发,该下游接口称为Assert winner。
如果落败,则禁止该下游接口转发组播报文,将其从(S,G)表项下游接口列表中删除。该下游接口称为Assert loser。
Assert竞选结束后,该网段上只存在一个有下游接口的上游路由器,只传输一份组播报文。Assert winner周期性发送Assert消息,维持Assert winner的状态。若Assert loser的定时器超时后,Assert loser仍没有收到Assert winner的Assert消息,则重新添加下游接口转发组播数据。
DR切换延迟(DR Switchover Delay)
如果当前DR出现故障,将导致PIM邻居关系超时,其他PIM邻居之间会触发新一轮的DR竞选过程。
缺省情况下,接口由DR变为非DR时,路由器会立即停止使用此接口转发数据。如果此时新DR的组播数据还未到达,那么将会出现短暂的组播数据断流。
在一个接口配置PIM DR切换延迟后,当某个使能PIM-SM的接口由于收到一个新邻居的Hello消息导致该接口由DR变为非DR时,该接口在延迟时间超时前仍然具有部分DR功能,并继续转发组播数据。
如果在DR延迟期间收到新DR转发过来的数据,处于DR延迟的路由器将会立刻停止转发数据,从而保证不会出现重复数据流的现象。此时在共享网段上若收到新的IGMP Report消息,处于DR切换延迟状态的旧DR将不会为其向上游发送PIM Join消息,而由新DR处理。
在DR切换延迟期间,如果新DR收到原DR发送的组播数据,则会触发Assert竞选。
PIM-SM管理域机制
为了实现网络管理精细化,可以选择将一个PIM-SM网络划分为多个BSR管理域和一个Global域。这样一方面可以有效地分担单一BSR的管理压力,另一方面可以使用私有组地址为特定区域的用户提供专门服务。
每个BSR管理域中维护一个BSR,为某一特定地址范围的组播组服务。Global域中维护一个BSR,为所有剩余的组播组服务。
下文将从地域空间、组地址范围、组播功能三个角度分析BSR管理域和Global域的关系。
地域空间
如图4-13所示,对于有相同组地址的不同管理域,各BSR管理域所包含的路由器互不相同,同一路由器不能从属于多个BSR管理域。各BSR管理域在地域上相互独立,且相互隔离。BSR管理域是针对特定地址范围的组播组的管理区域,属于此范围的组播报文只能在本管理域内传播,无法通过BSR管理域边界。
Global域包含PIM-SM网络内的全部路由器。不属于任意BSR管理域的组播报文,可以在整个PIM网络范围内传播。
组地址范围
每个BSR管理域为特定地址范围的组播组提供服务,不同的BSR管理域服务的组播组范围可以重叠。该组播地址只在本BSR管理域内有效,相当于私有组地址。如图4-14所示,BSR1域和BSR3域对应的组地址范围出现重叠。
不属于任何BSR管理域的组播组,一律属于Global域的服务范围。即Global域组地址范围是G-G1-G2。
组播功能
如图4-13所示,Global域和每个BSR管理域都包含针对自己域的C-RP和BSR设备,这些设备在行使相应功能时,仅在本域内有效。即BSR机制和RP竞选在各管理域之间是隔离的。
每个BSR管理域都有自己的边界,该管理域的组播信息(C-RP Advertisement消息、Bootstrap消息等)不能跨越域传播。同时Global域的组播信息可以在整个Global域内传递,可以穿越任意BSR管理域。