组播报文发送给一组特定的接收者,这些接收者可能分布在网络中的任意位置。为了实现组播报文正确、高效地转发,组播路由器需要建立和维护组播路由表项。
随着多个组播路由协议的开发与应用,人们渐渐感觉到,如果像单播路由一样通过多种路由算法动态生成组播路由,会带来不同路由协议间在互相引入时操作繁琐的问题。
PIM(Protocol Independent Multicast)直接利用单播路由表的路由信息进行组播报文RPF检查,创建组播路由表项,转发组播报文。
组播报文转发需求
在单播报文的转发机制中,路由器依据单播报文的目的IP地址,查找单播路由表进行转发。其中,单播路由表可以通过静态配置或者动态路由协议来学习路由。
在组播中,接收者可能存在于全网中的任意位置,所以如果静态配置组播路由的话,存在实时性差、灵活性差以及工作量大容易出错的问题。
为了正确、高效的转发组播数据报文,路由器之间则需要运行组播路由协议。
-
组播分发树
组播分发树是指从组播源到接收者之间形成的一个单向无环数据传输路径
决定了组播数据的转发方式
组播分发树有两类:SPT和RPT
-
SPT:最短路径树
组播的接受者到组播源路径是最优的
而且沿途的每台路由器都知道组播源的位置,维护的(S,G)
-
RPT:共享树模式
RP(汇聚点)
组播源把组播数据先给RP,然后RP和组播接受者之间构建组播转发路由
RP到接受者沿途的每台路由器不知道组播源位置的。维护的是(*,G)
PIM-DM
PIM的密集模型
用的是组播SPT的分发树模型
适合应用在组播接受者分布的比较密集的场景
采用"推"的方式把组播数据扩散到全网
-
设计思想是:
- 首先将组播数据报文扩散到各个网段
- 然后再裁剪掉不存在组成员的网段
- 通过周期性的“扩散—剪枝”,构建并维护一棵连接组播源和组成员的单向无环SPT
-
PIM-DM的关键工作机制包括
- 邻居发现
- 扩散与剪枝
- 状态刷新
- 嫁接
- 断言
-
PIM-DM邻居发现
-
在PIM-DM网络中,路由器周期性发送Hello消息来发现、建立并维护邻居关系
-
pim timer hello interval,在接口视图下配置发送Hello消息的时间间隔。 Hello消息默认周期是30秒
-
pim hello-option holdtime interval,在接口视图下配置Hello消息超时时间值。默认情况超时时间值为105秒
-
-
DR的选举:(跟ospf不同)
- 在PIM-DM中各路由器通过比较Hello消息上携带的优先级和IP地址,为多路访问网络选举指定路由器DR。
- DR充当IGMPv1的查询器
- 接口DR优先级大的路由器将成为该MA网络的DR,在优先级相同的情况下,接口IP地址大的路由器将成为DR
- 当DR出现故障后,邻居路由器之间会重新选举DR
-
DR
-
组播源侧的DR
-
组播接受者侧的DR
分发组播数据,建立维护组播转发表项
-
-
-
PIM-DM构建SPT
进行扩散过程、RPF检查、剪枝过程
-
扩散过程
PIM-DM假设网络中所有主机都准备接收组播数据,当某组播源开始向组播组G发送数据时,具体过程如下:
-
路由器接收到组播报文时会进行RPF检查
-
如果RPF检查通过,则创建(S,G)表项,然后将数据向所有下游PIM-DM节点转发,这个过程称为扩散(Flooding)
-
如果RPF检查没有通过,则将报文丢弃
-
-
RPF检查
为了防止组播报文在转发过程中出现重复报文及环路的情况,路由器必须执行RPF检查
RPF也能防止次优路径的产生
所谓RPF检查,就是指路由器通过查找去往组播源的路由来判断所收到的组播报文是否来自于“正确的”上游接口。某一路由器去往某一组播源的路由所对应的出接口称为该路由器上关于该组播源的RPF接口。一台路由器从某一接口收到一个组播报文后,如果发现该接口不是相应组播源的RPF接口,就意味着RPF检查失败,所收到的组播报文将被丢弃。
-
剪枝过程
当下游有没有组播成员,扩散组播报文会导致带宽资源的浪费。为避免带宽的浪费PIM-DM使用剪枝机制
-
当下游节点没有组播组成员,则路由器向上游节点发Prune消息,通知上游节点不用再转发数据到该分支。上游节点收到Prune消息后,就将相应的接口从其组播转发表项(S,G)对应的输出发送列表中删除。剪枝过程继续直到PIM-DM中仅剩下了必要的分支,这就建立了一个以组播源为根的SPT
-
各个被剪枝的节点同时提供超时机制,当剪枝超时时重新开始扩散—剪枝过程。剪枝状态超时计时器的默认值为210秒
-
PIM-DM的扩散—剪枝机制周期性进行,每3分钟重复一次,RTC对RTE所在网段处于剪枝状态,RTC对RTE的接口会维护一个“剪枝定时器”,当剪枝定时器超时,RTC就会恢复对RTE的数据转发,这样会导致不必要的网络资源浪费
-
-
状态刷新
PIM DM协议采用状态刷新特性解决周期性“扩散-剪枝”带来的问题:离组播源最近的第一跳RTA周期性触发State Refresh消息。State Refresh消息在全网扩散,刷新所有设备上的剪枝定时器状态
状态刷新使得RTE不再周期性的收到组播数据,但是当Client B加入G1组之后,如果一直是剪枝状态,Client B无法收到组播数据
为了解决这个问题引入了Graft机制
-
Graft机制
嫁接:新的组成员加入组播组后,快速得到组播报文
如图所示,当Client B发送组播组G1的IGMP Report报文请求组播数据后。RTE收到Client B的IGMP Report报文,说明RTE具有转发组播数据需求,则立即向上游路由器RTC发送Graft消息,请求上游路由器恢复对应出接口的转发。RTC收到Graft消息后,向RTE回复Graft Ack并将连接RTE的出接口恢复为转发状态
-
Assert机制
断言:避免重复组播报文
为避免重复的组播报文浪费带宽资源,PIM路由器在接收到邻居路由器发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送Assert消息,其中目的地址为224.0.0.13。其它PIM路由器在接收到Assert消息后,将自身参数与对方报文中携带的参数做比较,进行Assert竞选
-
竞选规则如下:
- 到组播源的单播路由协议优先级较小者获胜
- 如果优先级相同,则到组播源的路由协议开销较小者获胜
- 如果以上都相同,则连接到接受者MA网络接口IP地址最大者获胜
-
根据Assert竞选结果,路由器将执行不同的操作:
- 获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发
- 落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除
Assert竞选结束后,该网段上只存在一个下游接口,只传输一份组播报文
所有Assert Loser可以周期性地恢复组播报文转发,从而引发周期性的Assert机制
-
-
PIM-DM的局限性
PIM-DM适用于组播成员分布较为密集的园区网络
在组播成员分布相对较为稀疏的大规模网络中(Internet),组播流量的周期性扩散/剪枝将给网络带来极大的负担
对于PIM-DM的局限性,PIM-SM可以提供相对更加有效的解决方案
PIM-SM
相对于PIM-DM的“推(Push)模式”,PIM-SM使用“拉(Pull)模式”转发组播报文。PIM-SM假设网络中的组成员分布非常稀疏,几乎所有网段均不存在组成员,直到某网段出现组成员时,才构建组播路由,向该网段转发组播数据。一般应用于组播组成员规模相对较大、相对稀疏的网络
-
实现方法是:
- 在网络中维护一台重要的PIM路由器:汇聚点RP(Rendezvous Point),可以为随时出现的组成员或组播源服务。网络中所有PIM路由器都知道RP的位置
- 当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,最后一跳路由器向RP发送Join报文,逐跳创建(*,G)表项,生成一棵以RP为根的RPT
- 当网络中出现活跃的组播源(信源向某组播组G发送第一个组播数据)时,第一跳路由器将组播数据封装在Register报文中单播发往RP,在RP上创建(S,G)表项,注册源信息
-
PIM-SM的关键机制:
- 邻居建立
- DR竞选
- RP发现
- RPT构建
- 组播源注册
- SPT切换
- Assert
- BSR
-
汇聚点RP(Rendezvous Point)
-
RP的作用:
- RP是PIM-SM域中的核心路由器,担当RPT树根节点。
- 共享树里所有组播流量都要经过RP转发给接收者。
-
用户通过配置命令限制RP所提供服务的组播组范围
-
RP可以静态指定也可动态选举:
- 静态指定是指由管理员在每台PIM-SM路由器上进行配置,使得每台路由器获知RP的位置。
- 动态选举是指通过专用协议在若干台C-RP(Candidate-RP)中选举产生。管理员需要开启选举协议并配置若干台PIM-SM路由器成为C-RP
-
RP配置方式建议:
- 中小型网络:建议选择静态RP方式,对设备要求低,也比较稳定
- 大型网络:可以采用动态RP方式,可靠性高,可维护性强
- 如果网络中只有一个组播源,建议选择直连组播源的设备作为静态RP,这样可以省略源端DR向RP注册的过程
- 如果网络中存在多个组播源,且分布密集,建议选择与组播源比较近的核心设备作为C-RP;如果网络中存在多个用户,且分布密集,建议选择与用户比较近的核心设备作为C-RP。
- 采用静态RP方式要确保域内所有路由器(包括RP本身)的RP信息以及服务的组播组范围全网一致
-
-
RPT的建立
-
过程:
- 主机加入某个组播组时,发送IGMP成员通告
- 最后一跳路由器向RP发送(*,G)Join消息
- (,G)Join消息到达RP的过程中,沿途各路由器都会生成相应的(,G)组播转发条目
RPT实现了组播数据按需转发的目的,减少了数据泛洪对网络带宽的占用
-
-
组播接收者侧DR与组播源侧DR
组播接收者侧DR:与组播组成员相连的DR,负责向RP发送(*,G)的Join加入消息
组播源侧DR:与组播源相连的DR,负责向RP发送单播的Register消息
PIM-SM中DR的选举原则与PIM-DM相同
-
SPT的建立过程
在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员
具体过程如下
- 组播源向组播组发送第一个组播报文。
- 源端DR将该组播报文封装成Register报文并以单播方式发送给相应的RP。
- RP收到注册消息后,一方面从Register消息中提取出组播报文,并将该组播报文沿RPT分支转发给接收者。
- 另一方面,RP向源端DR发送(S,G)Join消息,沿途路由器上都会生成相应(S,G)表项。从而建立了一颗由组播源至RP的SPT树。
- SPT树建立后,组播源发出的组播报文沿该SPT转发至RP。
- RP沿SPT收到该组播报文后,向源端DR单播发送Register-stop消息。
-
(*,G)与(S,G)条目关系
-
PIM-SM的转发树
PIM-SM同时包含了SPT和RPT。通常情况下,组播源发出的组播报文会沿SPT到达RP,然后从RP沿RPT到达接收者
在这种情况下,从组播源到接收者的路径不一定是最优的,并且RP的工作负担非常大。为此,我们可以启用RPT向SPT进行的切换机制(Switchover机制)
-
Switchover机制
PIM-SM通过指定一个利用带宽的SPT阈值可以实现RPT到SPT的切换
用户端DR周期性检测组播报文的转发速率,一旦发现从RP发往组播组G的报文速率超过阈值,则触发SPT切换
-
切换过程
- 用户端DR逐跳向源端DR发送(S,G)Join报文并创建(S,G)表项,建立源端DR到用户端DR的SPT
- SPT建立后,用户端DR会沿着RPT逐跳向RP发送剪枝报文,收到剪枝报文的路由器将(*,G)复制成相应的(S,G),并将相应的下游接口置为剪枝状态。剪枝结束后,RP不再沿RPT转发组播报文到组成员端
- 如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP
在VRP中,缺省情况下连接接收者的路由器在探测到组播源之后(即接收到第一个数据报文),便立即加入最短路径树,即从RPT向SPT切换
通过RPT树到SPT树的切换,PIM-SM能够以比PIM-DM更精确的方式建立SPT转发树
-