一、PIM DM
PIM DM的工作机制包括扩散、剪枝、嫁接、状态刷新及断言机制。
扩散、剪枝是生成SPT的主要方法,而嫁接和状态刷新是对扩散剪枝机制的改进增强;
1、扩散
当一台路由器收到组播报文后,先执行RPF检查,通过检查后的报文向所有其他有PIM邻居或有IGMP接收者的接口复制转发;(除RPF接口外,其他有PIM邻居的接口都是下游接口)
只有路由器组播表项下游接口非空,报文就会继续扩散下去,如果没有其他邻居或不再有IGMP接收者,则丢弃报文并不再继续扩散;
2、剪枝和剪枝定时器
当报文扩散到末端路由器后,由于其没有PIM邻居或没有IGMP接收者,组播表项下游接口列表为空,路由器会向上游邻居发送剪枝报文,通知上游邻居不要再继续将组播报文转发下来;
上游邻居收到剪枝报文后,会将收到剪枝报文的接口从其组播表项下游接口列表中剪除,如果路由器的下游接口都被剪除,会触发路由器继续向上游发送剪枝,而如果下游接口仍有其他接口,则不再继续剪枝,剪枝行为终止;
发生剪枝后,报文不再继续向剪枝接口扩散,剪枝计时器(210s)超时后,被剪掉的接口会重新出现在下游接口列表中,组播数据报文会再次向该接口扩散,下游路由器再次向上游邻居发送剪枝报文,如此反复;
剪枝延迟定时器及剪枝否决机制
剪枝延迟计时器的作用是在下游接口有多个邻居的场景下,阻止下游接口被某个下游邻居立即剪掉而设计的;
如果下游接口仅有一个PIM邻居且从其收到剪枝报文,则收到后下游接口立即被剪掉;
但如果下游接口有多个邻居存在,则要在3s超时后接口才被剪除;
Override是在共享网段上当前路由器看到另外一台路由器发送剪除自己上游RPF邻居的剪枝报文而设置的计时器,在Override期间2.5s,当前路由器如果听到其他路由器的join响应报文,则会立即终止Override计时器,否则发送自己的join报文;
3、 嫁接
被剪枝的接口下游出现新加入的接收者,被剪枝的接口会在剪枝定时器超时恢复转发,这个时间需要210s,接收者需要等待210s后才能收到组播数据,引入嫁接机制可以优化接收者收到组播报文的时间;
嫁接是下游路由器主动向上游RPF路由器发送Graft报文,要求上游路由器主动把被剪除的接口添加到下游接口列表,整个过程是可靠的;
发生剪枝的路由器下游新加入接收者,下游接口列表变为非空,触发路由器向上游RPF邻居发送Graft报文;(如果一直没有收到Graft-Ack,3s后会发生重传)
上游RPF邻居被剪枝的接口收到嫁接报文后,立即变为转发状态,同时单播回应Graft-Ack报文,如果当前路由器下游接口非空,会继续向上游RPF邻居发送嫁接报文,直至有组播流的路由器;
4、状态刷新
有了主动嫁接机制,就不再需要已剪枝接口剪枝定时器超时后恢复转发了,通过状态刷新来周期刷新剪枝定时器不让其因定时器超时恢复转发;
离组播源最近的第一跳路由器会以60s为间隔周期产生状态刷新报文并向全网扩散,扩散方式同组播报文扩散方式,状态刷新报文SR仅刷新相应表项的下游接口,如果该接口已被剪除则刷新剪枝定时器,使其一直处于剪枝状态;
当组播源不再活跃时,第一跳路由器将不再产生状态刷新报文;
5、断言机制和断言计时器
组播报文经多台路由器转发到同一下游网段,相同的组播报文被转发了多份,这会加重网络负担,同时接收者会收到重复的多份报文;
断言机制通过比较R3、R4到组播源的信息,在二者间选举出一台路由器负责转发组播数据到当前网段;
组播转发路由器的下游接口发送出组播数据的同时有收到同样的组播数据,触发各自发送Assert报文,报文中携带了自身到组播源的路由协议优先级和度量值;
先比较单播路由协议优先级,值越小越优;
如果路由协议优先级相同,比较到组播源的成本值,值越小越优;
如果到组播源的成本值也一致,Assert报文的源IP地址大的成为Winner;
非Winner路由器自动剪除自己的下游接口关联断言计时器(180s),同时发送一份剪枝报文给Winner,后续过程参考剪枝否决机制;
Assert计时器超时后180s,下游接口恢复转发,因此断言机制周期性发生;
Assert Cannel报文 (将Assert报文携带的metric值置为无穷大)
如果Winner上游RPF接口Down掉或RPF接口改变为当前断言优胜的接口,会触发接口发送Assert Cannel消息(Assert报文中将metric置为无穷大),非Winner下游接口立即恢复转发并发送Assert报文,避免非winner的下游接口等待Assert计时器超时,最大180s才能恢复转发;
二、PIM SM
PIM SM多部署在组播成员分布稀疏分散、规模相对较大的网络环境中;
不同于DM主动扩散组播数据到接收者的网络,SM使用PULL的方式来建组播树,接收者需要主动向树根建树,才能接收组播报文;
PIM SM中,组播网络上的接收者和组播源彼此并不知道对方是否存在及所在位置,所以需要RP Rendezvous Point作为网络的核心,接收者所在路由器以RP为树根构建共享树RPT,RP以组播源为树根构建最短路径树SPT;
PIM SM建组播分发树较DM复杂,包括三个阶段:
阶段一、接收者所在路由器向RP发(*,G)join建共享树RPT;
阶段二、RP收到注册报文后,向组播源发(S,G)join建最短路径树SPT;
阶段三、收到组播数据的接收者所在路由器向组播源发(S,G)建SPT树(可选,默认开启);
SPT和RPT比较
SPT以组播源为树根,连接组播源和组播接收者,路径最优,但是每个组播源和组就需要一个(S,G)表项,占用内存;
RPT以RP为树根,连接组播接收者,存在次优路径引入延迟的问题,但是一条(*,G)表项可以转发所有来自不同源的组播报文,内存开销相对较少;
RP的作用及不足
RP用于汇聚组播接收者的加入/剪枝请求和组播源的组播数据;
当组播源活跃时,组播源所在路由器向已知的RP发起注册;
当接收者出现时,接收者所在路由器向RP发送建树请求;
组播数据经RP在SPT和RPT间转发;
RP是PIM SM的核心、瓶颈,易有单点故障;
路由器间通告RP会使网络增加负荷,配置维护的复杂性相应增加;
RP未必处于源和接收者路由器的最优路径上,会引入额外的延迟;
静态RP
静态RP为每台路由器手工添加RP和组的对应关系,适用在简单拓扑或小型网络中部署;
当网络拓扑发生变化时,不能及时更新RP和组播组的对应关系;
如果没有指定ACL,静态RP为所有组播组224.0.0.0/4服务,如果指定了ACL,静态RP只为该ACL所许可的组播组服务;
如果没有指定ACL,只能配置一个静态RP,指定ACL后可以配置最多50个静态RP,但同一个ACL不能对应到多个静态RP;
缺省动态RP比静态RP优先级高,指定preferred关键字后,静态RP生效;
如果存在多个静态RP为某个组服务的情况,则选择IP地址最大的RP为该组服务;
动态RP
动态RP的好处是当网络拓扑发生变化的时候,RP和组播组的对应关系会自动调整,保证网络的冗余性;
PIMv2使用BSR作为动态RP协议,通过BSR定义组播组和RP的映射并快速的分发到域内PIM路由器,如果当前RP不可达,可以使用备份RP;
BSR协议定义了两种角色的设备,C-RP和C-BSR,二者都可以定义多台,以提供冗余备份能力;
1、C-BSR Candidate-BSR
在一个PIM-SM域内,可能存在多台设备配置为C-BSR,但在同一时刻只能有一台设备成为BSR;
BSR的选举是通过PIMv2的Bootstrap报文选举出来的,报文携带BSR优先级、BSR地址;
如下图,BSR优先级是0,BSR地址是10.1.2.2,RP-set= (10.1.2.2,224.0.0.0/4);
Hash掩码越大选择RP时的颗粒度越小,在多个RP间分担的效果就越好,把组范围和Hash掩码执行与运算,得出更小的地址段,对于组地址掩码相同、C-RP优先级相同的每个组地址段可随机在多个RP间选择,华为Hash掩码默认30位,Hash掩码为0则没有分担能力;
BSR选举规则:
(1)比较BSR优先级,数值越大越优先;
(2)若优先级一样,BSR IP地址大的优先;
任何一台C-BSR路由器初始状态都是C-BSR状态,启动BSR计时器130s;
若BSR计时器超时前收到一份更优的BSR报文,转发给所有其他PIM邻居,刷新BSR计时器,并把收到BSR报文中的RP-set复制到本地RP-Info中;
若BSR计时器超时后未听到任何其他更优的C-BSR报文,当前C-BSR成为BSR,逐跳泛洪自身报文;
BSR周期产生BSR报文,如果从另外一台路由器收到优先级更高的BSR报文,只转发已知最优BSR的报文,自身进入C-BSR状态不再产生自己的BSR报文,否则丢掉BSR报文;
若超过130s,仍未收到BSR报文,本地已有的BSR信息及RP映射关系将由于老化而被清除;
2、C-RP Candidate-RP
C-RP可以有多个,每个C-RP定义自己的一个接口IP地址和组播组地址范围的对应关系;
每一个IP地址和组播组地址范围的对应关系叫做RP映射;
多个C-RP的目的是为了增加网络的健壮性;
C-RP的PIMv2路由器收到泛洪过来的BSR报文后,了解到BSR地址后,每个C-RP都会以单播形式把C-RP上定义的RP映射发给BSR路由器,BSR路由器将收集到的RP映射放到周期性的BSR报文中通告;
RP选举规则:
(1)为组计算RP,组地址掩码最长的RP优先;
(2)C-RP优先级,数值越小越优先;
(3)Hash计算数值大的优先;
(4)C-RP地址大的优先;
C-RP以60s周期向BSR单播发送RP-Advertisement,以免C-RP信息在BSR上超时;
RP-Advertisement报文中携带C-RP优先级、C-RP地址、组播组地址范围;
3、普通PIMv2路由器
任何PIMv2路由器收到组地址224.0.0.13的BSR报文后,先执行RPF检查,只有通过RPF检查的BSR报文才能被接收,并继续转发给其他PIM邻居;RPF检查指接收路由器对BSR报文中的BSR地址检查,使BSR为树根,向远离BSR的路径上通告,避免BSR报文环路;
RPT构建
(1)接收者向接收者所在路由器发送IGMP成员报告,告知路由器想要加入的组播组;
(2)接收者所在路由器生成(*,G)表项,并通过RPF检查向RP方向发送(*,G)join,逐跳生成(*,G)表项,直到RP;
(3)只要接收者存在,RPT就会一直存在。接收者所在路由器每隔60s向上游发送(*,G)join报文,收到报文的接口刷新接口计时器210s,如果接口计时器超时都没有收到(*,G)join报文,会从下游接口列表中移除;
下游接口计时器根据(*,G)join报文携带的Holdtime决定;
如果接收者所在网段有多台路由器,仅DR向RP发送(*,G)join报文;
SM路由器向上游发送join报文的条件:
(1)组播接收者加入;
(2)收到下游join报文;
SM路由器向上游发送剪枝prune报文的条件,下游接口为空:
(1)组播接收者离开;
(2)从下游收到剪枝prune报文;
(3)下游接口计时器超时,未收到(*,G)join报文;
SPT构建
(1)组播源所在路由器收到组播数据后生成(S,G)表项,收到组播数据的接口为上游接口,下游接口只有注册隧道接口;
(2)PIM Register作为隧道协议直接封装原始组播数据,隧道源IP地址是DR接口地址,目标地址是RP地址,发给RP;
(3)当RP收到Register报文并解封装后,根据组播源和组地址,检查本地是否存在对应(*,G)表项;
如果不存在(*,G)表项,RP创建(S,G)表项,下游接口为空,立即向源端DR发送Register-stop报文,抑制其继续通过注册隧道发送组播数据;(一旦收到出现接收者后,立即向组播源发送(S,G)join报文,构建SPT);
如果存在(*,G)表项,RP沿着RPT将组播数据转发给接收者,同时向组播源方向发送(S,G)join报文,逐跳生成(S,G)表项,构建SPT;
RP从SPT和注册隧道收到两份组播数据后,立即向远端DR发送Register-Stop报文,告知源端DR不要继续通过注册隧道发送组播数据;
(4)源端DR收到Register-stop报文后,启动注册抑制计时器60s,不再发送注册报文,只要组播源一直活跃,注册抑制计时器超时后,源端DR重新开始发送注册报文;
为降低RP系统开销,DR在每次抑制计时器超时前5s向RP发送Register-null空注册报文,报文中仅包含组播源和组地址信息,不含组播数据,RP在存在对应SPT或对应(*,G)下游接口为空的情况下,都会响应Register-stop报文,来抑制源端DR通过注册隧道转发组播数据;
SPT切换
华为SM实现中,当组播数据沿RPT向下游转发时,会触发每一跳设备创建和(*,G)一致的(S,G)表项,有一致的上下游接口对应关系,但该(S,G)表项不置SPT位,仅置ACT位,表示有数据经过该表项;不置SPT位的(S,G)表项不能指导数据转发,这么设计优点是可以在发送SPT剪枝或建树时,减少不必要的建表项延迟;
(1)成员端DR对收到的所有组播组流量进行周期性检测,若速率超过设定的阀值,立即开始SPT切换;
缺省速率为0,成员端DR收到组播数据后会立即进行SPT切换;
(2)成员端DR向组播源方向发送(S,G)join报文,逐跳生成(S,G)表项;
组播表中已存在(S,G)表项,置SWT位,表示SPT切换中;
(3)组播数据经SPT转发,置SWT位的(S,G)表项置SPT位,(S,G)表项开始指导组播数据转发;
SPT置位的(S,G)表项和(*,G)表项上游接口不一致时,立即向RP方向发送置R位(表示RPT)的(S,G)剪枝报文,只要下游接口列表为空,上游路由器逐跳向RP剪枝,RP下游接口列表也为空,继续向组播源发送(S,G)剪枝,直至源端DR;
三、PIM SSM
IGMP SSM Mapping