一、PIM-SM
1、PIM-SM(Protocol independent multicast-sparse Mode),协议无关组播-稀疏模式。属于稀疏模式的组播路由协议,适用于组成员相对分散、范围较广、大规模的网络。PIM-SM会在源到RP之间建立SPT树,在RP到接受者之间建立RPT树。
2、工作机制
(1)邻居发现Hello报文,接口互相发送hello报文,优先级高的或者IP地址大的成为DR。其中第一跳和最后一跳的DR才有实际意义。最后一跳DR向RP方向传递(*,G)表项,构建SPT树,第一跳DR向RP发送组播源注册消息。
(2)RP(Rendezvous Point)发现
既可以静态指定,也可以动态发现。
静态指定就是在每台路由器上配置指定具体的静态RP
(3)RPT共享树加入
新加入接收者,向路由器发送IGMP report报文,DR路由器收到后生成(*,G)报文,并逐跳向RP方向发送(*,G)Join报文,沿途创建(*,G)表项,生成一棵以RP为根的RPT。
(4)组播源注册过程
在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员。
组播源向第一条DR发送第一个组播报文,源端DR将该组播报文封装成Register报文并以单播方式发送给相应的RP,RP收到注册消息后,一方面从Register消息中提取出组播报文,并将该组播报文沿RPT分支转发给接收者。
另一方面,RP向源端DR发送(S,G)Join消息,沿途路由器上都会生成相应(S,G)表项。从而建立了一颗由组播源至RP的SPT树。
SPT树建立后,组播源发出的组播报文沿该SPT转发至RP。
RP沿SPT收到该组播报文后,向源端DR单播发送Register-stop消息。
3、配置命令
DR:
multicast routing-enable
int g0/0/0
pim sm
quit
pim
static-rp 3.3.3.3 //指定RP地址,一般使用环回口地址
RP:
multicast routing-enable
int lo0
pim sm
int g0/0/0
pim sm
quit
pim
static-rp 3.3.3.3 //指定自己的地址
二、SPT切换
1、PIM-SM同时包含了SPT和RPT。通常情况下,组播源发出的组播报文会沿SPT到达RP,然后从RP沿RPT到达接收者。
在这种情况下,从组播源到接收者的路径不一定是最优的,并且RP的工作负担非常大。为此,我们可以启用RPT向SPT进行的切换机制。
2、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转发树。
SPT切换默认是开启的
pim
spt-switch-threshold infinity 设置STP切换阀值为无穷大
切换阀值默认是0,STP切换默认开启,设为无穷大就是关闭了SPT切换。
2、案例理解
拓扑图:
分析过程:
(1)配置各接口地址IP,配置OSPF实现全网互通,具体配置过程省略,为方便分析,3台PC暂时关闭。
(2)路由器接口配置PIM-SM模式,AR2、AR7、AR8配置IGMPv2,AR4为静态RP,部分配置命令如下:
AR1:
multicast routing-enable
int g0/0/0
pim sm
int g0/0/1
pim sm
int g0/0/2
pim sm
pim
static-rp 4.4.4.4
AR4:
multicast routing-enable
int g0/0/0
pim sm
int g0/0/2
pim sm
int lo0
pim sm
pim
static-rp 4.4.4.4
AR7:
multicast routing-enable
int g0/0/0
pim sm
igmp enable
int g0/0/1
pim sm
pim
static-rp 4.4.4.4
(3)PC1,配置加入224.1.1.1,配置MCS1组播信息
开启PC1后,AR4、AR6、AR8的pim routint-table生成(*,G)表项,构成RPT树,其他路由器pim routing-table是空的:
开启MCS1,启动组播流,AR1、AR5、AR6、AR8的pim routing-table里面出现了(*,G)和(S,G)表项,形成SPT树,而AR2、AR3上依然是空表项,AR4上也有这两类表项,但上游邻居和下游接口因为SPT切换产生的剪枝报文都是空的:
(4)shutdown掉AR5的g0/0/0端口,在重新开启MCS1组播流,此时AR2、AR3的pim routing-table出现(S,G)表项,AR4中的两类表项的上下游接口正常出现,AR1、AR2、AR3、AR4构成SPT树,AR4、AR6、AR8构成RPT树:
(5)关闭PC1,开启PC2,PC2加入组播组224.1.1.1 。
PC2开启后,向AR2发送igmp report报文,AR2生成(*,G)表项,并向AR4方向传递,构成RPT树,其中G0/0/0口为上游接口,G0/0/2为下游接口;AR3生成(*,G)表项,上游接口为g0/0/2,下游接口为g0/0/0; AR4生成(*,G)表项,g0/0/2为下游接口,上游接口为空;
PC2开启,组播流量没开启前的PIM routing-table:
当组播流下来的时候,AR1向AR4发送单播注册,AR4生成(S,G)表项,根据RPF检测,G0/0/2为上游接口,同时向AR1方向建立SPT树;AR3生成(S,G)表项,其中g0/0/0为上游接口,下游接口拷贝 (*,G)中的下游接口,在(*,G)中g0/0/0还是下游接口,这时候,只有g0/0/2被拷贝成(S,G)中的下游接口(因为规定上游接口不能同时成为下游接口),AR3同时拥有(*,G)、(S,G)表项,会向上游接口发送(S,G)join报文;AR2收到AR3的(S,G)join报文后,生成(S,G)表项,根据rpf检测,G0/0/1成为上游接口,g0/0/2、g0/0/0成为下游接口。这样就形成了AR1-AR2的SPT树,组播流量会直接经AR1-->AR2到达PC2,在AR2还有一份去往AR3的流量。
组播流量开启后的PIM routing-table: