目录
组播报文发送给一组特定的接收者,这些接收者可能分布在网络中的任意位置。为了实现组播报文正确、高效地转发,组播路由器需要建立和维护组播路由表项。但是如果像单播路由一样通过多种路由器算法动态生成组播路由,会带来不同路由协议间在互相引入时操作繁琐的问题。PIM(Protocol Independent Multicast,协议无关组播)直接利用单播路由表的路由信息进行组播报文RPF(Reverse Path Forwarding,逆向路径转发)检查,创建组播路由表项,转发组播报文。
1、组播报文转发需求
路由器转发组播报文:
- 各接口所在网段有无潜在接收者。
- 接收者需要接收那些组播信息。
在单播报文的转发机制中,路由器依据单播报文的目的IP地址,查找路由表进行转发。其中单播路由表可以通过静态配置或者动态路由协议来学习路由。
在组播中,接收者可能存在于全网中的任意位置,所以如果静态配置组播路由的话,存在时差性差、灵活性差以及工作量大容易出错的问题。为了正确高效的转发组播数据报文,路由器之间则需要运行组播路由器协议。
2、PIM
2.1 PIM概述
PIM(Protocol Independent Multicast)协议无关组播,目前常用版本是PIMv2,PIM报文直接封装在IP报文中,协议号为103,PIMv2组播地址为224.0.0.13。在PIM组播域中,以组播组为单位建立从组播源到组成员的点到多点的组播转发路径。由于组播转发路径呈现树型结构,也称为组播分发树(MDT,Multicast Distribution Tree)。
组播分发树的特点:
- 无论网络中的组成员有多少,每条链路上相同的组播数据最多只有一份。
- 被传递的组播数据在距离组播源尽可能圆的分叉路口才开始复制和分发。
PIM有两种模式:
- PIM-DM(Protocol Independent Multicast – Dense Mode)
- PIM-SM(Protocol Independent Multicast – Sparse Mode)
2.2 PIM路由表
PIM路由表项即通过PIM协议建立的组播路由表项。PIM网络中存在两种路由表项:(S,G)路由表项或(*,G)路由表项。S表示组播源,G表示组播组,*表示任意。
(S,G)路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。
(*,G)路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。
- 如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。
- 如果不存在(S,G)路由表项,只存在(*,G)路由表项,则先依照(*,G)路由
- 表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发。
3、PIM-DM
3.1 基本概述
PIM-DM假设网络中的组成员分布非常稠密,每个网段都可能存在组成员。采用“推(Push)模式”转发组播报文。PIM-DM的关键任务是建立SPT(Shortest Path Tree,最短路径树)。PIM-DM的工作机制:邻居发现、扩散与剪枝、状态刷新、嫁接和断言;其思想是:
- 首先将组播数据报文扩散到各个网段。
- 然后再裁减掉不存在组成员的网段。
- 通过周期性的“扩散—剪枝”,构建并维护一棵树连接组播源和组成员的单向无环SPT。
3.2 PIM-DM邻居发现
在PIM-DM网络中,路由器周期性发送Hello消息来发现、建立并维护邻居关系。
- Pim Timer Hello Interval,在接口视图下配置发送Hello消息的时间间隔。Hello消息默认周期是30s。
- PIM hello-option holdtime interval,在接口视图下配置Hello消息超时时间值,默认情况超时时间为105s。
DR的选举:
- 在PIM-DM中各路由器通过比较Hello消息上携带的优先级和IP地址,为多路访问网络选举指定路由器DR。
- DR充当IGMPv1的查询器。
- 接口DR优先级大的路由器将成为该MA网络的DR,在优先级相同的情况下,接口IP地址大的路由器将成为DR。
- 当DR出现故障后,邻居路由器之间会重新选举DR。
3.3 PIM-DM构建SPT
扩散过程:PIM-DM假设网络中所有主机都会准备接受组播数据,当某组播源开始向组播组G发送数据时,过程如下:
- 路由器接收到组播报文时会进行RPF检查。
- 如果RPF检查通过,则创建(S,G)表项,然后将数据向所有下游PIM-DM节点转发,这个过程称为扩散(Flooding)。
- 如果RPF检查没有通过,则将报文丢弃。
RPF检查:为了防止组播报文在转发过程中出现报文及环路的情况,路由器必须执行RPF检查。
- 所谓RPF检查,就是指路由器通过查找去往组播源的路由器来判断所接收到的组播报文是否来自于“正确的”上游接口。某一路由器去往某一组播源的路径所对应的出接口称为该路由器上关于该组播源的RPF接口。一台路由器从某一接口接收到一个组播报文后,如果发现该接口不是相应组播源的RPF接口,就意味着RPF检查失败,所收到的组播报文将被丢弃。
剪枝过程:当下游没有组播成员,扩散组播报文会导致带宽资源的浪费。为避免带宽的浪费PIM-DM使用剪枝机制。
- 当下游节点没有组播成员,则路由器向上游节点发Prune消息,通知上游节点不用再转发数据到该分支。上游节点收到Prune消息后,就将相应的接口从其组播转发表项(S,G)对应的输出发送列表中删除。剪枝过程继续直到PIM-DM中仅剩下了比要的分支,这就建立了一个以组播源为根的SPT。
- 各个被剪的节点同时提供超时机制,当剪枝超时时重新计算开始扩散—剪枝过程。剪枝状态超时计时器的默认值为210s。
- PIM-DM的扩散—剪枝机制周期性进行,每3分钟重复一次,如图所示,RTC对RTE所在网段处于剪枝状态,RTC对RTE的接口会维护一个“剪枝定时器”,当剪枝定时器超时时,RTC就会恢复对RTE的数据转发,这样会导致不必要的网络资源浪费。
3.4 状态刷新
PIM-DM协议采用状态刷新特性解决周期性“扩散—剪枝”带来的问题:离组播源最近的第一跳RTA周期性触发State Refresh消息。State Refresh消息在全网扩散,刷新所有设备上的剪枝定时器状态。
状态刷新使得RTE不再周期性的收到组播数据,但是当Client B加G1组之后,如果一直是剪枝状态,Client B无法接收到组播数据。
3.5 Graft机制
如图所示,当Client B发送组播组G1的IGMP Report报文请求组播数据后。RTE收到Client B的IGMP Report报文,说明RTE具有转发组播数据需求,则立即向上游路由器RTC发送Graft消息,请求上游路由器恢复对应出接口的转发。RTC收到Graft消息后,向RTE回复Graft Ack并将连接RTE的出接口恢复为转发状态。
3.6 Assert机制
如图所示,RTA、RTB、RTC均从上游接口收到组播报文并通过了RPF检查,三台路由器的下游接口连接在同一网段。RTA、RTB、RTC都向该网段发送组播报文,三份重复的组播报文浪费带宽资源。
为避免重复的组播报文浪费带宽资源,PIM路由器在接收到邻居路由器发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送Assert消息,其中目的地址为224.0.0.13。其它PIM路由器在接收到Assert消息后,将自身参数与对方报文中携带的参数做比较,进行Assert竞选。竞选规则如下:
- 到组播源的单播路由协议优先级较小者获胜。
- 如果优先级相同,则到组播源的路由协议开销较小者获胜。
- 如果以上都相同,则连接到接受者MA网络接口IP地址最大者获胜。
根据Assert竞选结果,路由器将执行不同的操作:
- 获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发。
- 落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表删除。
Assert竞选结束后,该网段上只存在一个下游接口,只传输一份组播报文。所有Assert Loser可以周期性地恢复组播报文转发,从而引发周期性的Assert机制。
3.7 配置命令
multicast routing-enable //全局模式下开启组播
interface G0/0/0 //在接口下开启pim dm
pim dm
interface G0/0/1
pim dm
interface G0/0/2
pim dm
display pim routing-table //查看pim路由表项
display pim neighbor //查看邻居
3.8 PIM-DM的局限性
PIM-DM适用于组播成员分部较为密集的园区网络。在组成员分布相对较为稀疏的大规模网络中(Internet),组播流量的周期性扩散/剪枝将给网络带来极大的负担。对于PIM-DM的局限性,PIM-SM可以提供相对有效的解决方案。
4、PIM-SM
4.1 基本概述
使用“拉(Pull)模式”转发组播报文。PIM-SM的关键任务是建立RPT(Rendezvous Point Tree,汇聚点树)和SPT(Shortest Path Tree,最短路径树)。该模式适用于组播成员分部较为稀释的网络环境。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(Bootstrap Router)管理域来实现单个PIM-SM域的精细化管理。PIM-SM中PIM邻居建立过程以及Assert机制与PIM-DM相同。
4.2 汇聚点RP
RP的作用:RP是PIM-SM域中的核心路由器,担当RPT树根节点;共享树里所有组播流量都要经过RP转发给接收者。用户通过配置命令限制RP所提供服务的组播组范围。
- 静态指定是指由管理员在每台PIM-SM路由器上进行配置,使得每台路由器获知RP的位置。
- 动态选举是指通过专用协议在若干台C-RP(Candidate-RP)中选举产生。管理员需要开启选举协议并配置若干台PIM-SM路由器成为C-RP。
- 中小型网络:建议选择静态RP方式,对设备要求低,也比较稳定。
- 如果网络中只有一个组播源,建议选择直连组播源的设备作为静态RP,这样可以省略源端DR向RP注册的过程。
- 采用静态RP方式要确保域内所有路由器(包括RP本身)的RP信息以及服务的组播组范围全网一致。
- 大型网络:可以采用动态RP方式,可靠性高,可维护性强。
- 如果网络中存在多个组播源,且分布密集,建议选择与组播源比较近的核心设备作为C-RP;如果网络中存在多个用户,且分布密集,建议选择与用户比较近的核心设备作为C-RP。
4.3 RPT及其建立过程
RPT实现了组播数据按需转发的目的,减少了数据泛洪对网络带宽的占用。RPT的建立过程:
- 主机加入某个组播组时,发送IGMP成员通告。
- 最后一跳路由器向RP发送(*,G)Join消息。
- (*,G)Join消息到达RP的过程中,沿途各路由器都会生成相应的(*,G)组播转发条目。
4.4 源端DR与用户端DR
运行PIM-SM的网络,都会进行DR(Designated Router)的选举。其中有两种DR分别称为接收者侧DR和组播源侧DR。PIM-SM中DR的选举原则与PIM-DM相同。
- 组播接收者侧DR:与组播组成员相连的DR,负责向RP发送(*,G)的Join加入消息。
- 组播源侧DR:与组播源相连的DR,负责向RP发送单播的Register消息。
4.5 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)关系
4.6 PIM-SM转发树
PIM-SM同时包含了SPT和RPT。通常情况下,组播源发出的组播报文会沿SPT到达RP,然后从RP沿RPT到达接收者。在这种情况下,从组播源到接收者的路径不一定是最优的,并且RP的工作负担非常大。为此,我们可以启用RPT向SPT进行的切换机制。
4.7 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转发树。
4.8 配置命令
multicast routing-enable //与Pim-DM配置相同
interface G0/0/0
pim sm
interface G0/0/1
pim sm
static-rp 4.4.4.4 //静态配置RP的地址