PIM中的组播报文处理方法及装置
技术领域
本发明涉及IP组播技术领域,特别涉及一种PIM中的组播报文处理方法及装置。
背景技术
IP(InternetProtocol,因特网协议)组播能够显著节省网络带宽,广泛应用于视频点播、远程教育和监控等领域。PIM(Protocol-IndependentMulticast,协议无关组播)是一种使用最为广泛的组播路由协议。PIM可以利用静态路由或者任意单播路由协议所生成的单播路由表为IP组播提供路由。组播路由与所采用的单播路由协议的类型无关,只要能够通过单播路由协议产生相应的组播路由表项即可。
PIM借助RPF(ReversePathForwarding,逆向路径转发)机制实现对组播报文的转发。路由器在收到组播报文后,必须根据报文的源地址确定其正确的入接口(指向组播源方向)和下游方向,然后将其沿着远离组播源的下游方向转发—这个过程称为RPF。在RPF执行过程中会利用原有的单播路由表确定上、下游的邻接节点,只有报文从上游节点所对应的接口(称为RPF接口,即路由器上通过单播方式向该源地址发送报文的出接口;相应地,不是RPF接口的接口即为非RPF接口)到达时,才向下游转发。RPF检查的过程为:当组播报文到达路由器时,路由器首先在单播路由表中查找组播源或RP(RendezvousPoint,汇集点)对应的RPF接口(使用SPT(ShortestPathTree,最短路径树)时查找组播源对应的RPF接口,使用RPT(RendezvousPointTree,共享树或汇集树)时查找RP对应的RPF接口),如果组播报文是从RPF接口接收下来的,则RPF检查通过,创建相应的组播转发表项(包括:组播源的地址、组播组地址、入接口(即为RPF接口)以及出接口列表),将组播报文向下游接口(即出接口)转发;否则,丢弃该组播报文。
根据实现机制的不同,PIM分为以下两种模式:PIM-DM(ProtocolIndependentMulticast-DenseMode,协议无关组播—密集模式)和PIM-SM(ProtocolIndependentMulticast-SparseMode,协议无关组播—稀疏模式)。
密集模式假设网络中的每个子网都存在组播组成员,首先将组播数据扩散到网络中的所有节点,然后对没有组播数据转发的分支进行剪枝,只保留包含接收者的分支。被剪枝节点出现新的组播组成员时,使用嫁接机制恢复其对组播数据的转发。密集模式下组播报文的转发路径为有源树(SourceTree,即以组播源为“根”、组播组成员为“枝叶”的一棵转发树),由于有源树使用的是从组播源到接收者的最短路径,因此也称为SPT。
稀疏模式可以构建RPT和SPT两种类型的组播分发树,通常包括以下三个步骤:
步骤1,构建RPT:
接收者侧DR(DesignatedRouter,指定路由器)设备收到接收请求以后,向RP方向发送(*,G)加入报文。(*,G)加入报文逐跳向RP方向传递,最终到达RP,构建起一棵以RP为根、接收者为枝叶的组播分发树。组播源侧DR将组播数据报文封装在注册报文(RegisterMessage)中,以单播的形式发送给RP。RP将组播数据报文从注册报文中解封装之后,将其向RPT的枝叶进行分发,逐跳到达接收者。
步骤2,注册停止:
封装和解封装注册报文给组播源侧DR和RP设备带来沉重负担,因此RP可以选择切换到以组播源为根的SPT树:RP向组播源方向发送(S,G)加入报文,该报文逐跳向组播源侧DR发送,构建起从组播源侧DR到RP的SPT树。组播数据报文沿着SPT到达RP时,RP将组播路由和转发表项的RPF接口切换为SPT方向的接口,并向组播源侧DR发送注册停止报文(RegisterStopMessage),结束注册过程。
步骤3,构建SPT树:
所有的组播报文都经过RP才能到达接收者增加了RP的负载,一旦RP发生故障会导致所有的组播数据流中断,另一方面对于接收者来说RPT不是最优转发路径,增加了额外的消耗。为了解决上述问题,接收者侧DR可以选择建立以组播源为根、接收者为枝叶的SPT树:接收者侧DR向组播源方向发送(S,G)加入,该报文逐跳向组播源方向传递,最终到达组播源侧DR。组播流沿着构建的SPT树到达SPT和RPT的汇聚点,此时汇聚点的RPF接口为RPT方向的接口,非RPF接口到来的数据流被上送,汇聚点将RPF接口切换为到SPT方向的接口。
上述步骤2和步骤3即为从RPT向SPT切换的过程,在该过程中需要将非RPF接口收到的组播数据流(即SPT方向的组播数据流)上送CPU,才能触发PIM-SM协议将组播路由和转发表项的RPF接口切换为SPT方向的接口,即触发从RPT向SPT的切换。
另一方面,在PIM域(即支持PIM协议的组播路由器所组成的网络)中,如果在一个共享网段内存在多台组播路由器,则相同的组播报文可能会被重复发送到该网段,为了避免出现这种情况,PIM引入了ASSERT(断言)机制,通过让组播路由器的出接口(即组播转发表项中的出接口列表中的接口)收到的组播报文上送CPU,来触发ASSERT选举,选举失败的一方从出接口列表中删除该出接口,以保证一个共享网段中只有一个组播数据转发者(即选举成功的那个组播路由器)。
综上所述,在PIM协议中,为了触发ASSERT选举,路由器中的转发引擎需要将从出接口(属于非RPF接口)上接收到的组播报文上送CPU;为了触发从RPT向SPT的切换,转发引擎需要将切换时SPT方向的入接口(属于非RPF接口)上接收到的组播报文上送CPU。
现有技术中,通常是将从所有的非RPF接口收到的组播报文都无条件上送控制平面,以满足PIM中的ASSERT和从RPT向SPT的切换机制。但是,组播业务的数据流量通常都比较大,将所有的非RPF接口收到的组播报文无条件地上送控制平面,会对CPU造成很大的冲击,影响正常业务。尤其是,对于不需要发生ASSERT选举、已经完成ASSERT选举以及已经完成从RPT向SPT的切换的情况,非RPF接口上收到的组播报文也会持续冲击CPU。
发明内容
本发明提供了一种PIM中的组播报文处理方法及装置,以解决现有技术中将所有非RPF接口收到的组播报文无条件地上送控制平面,导致对CPU造成很大冲击,影响正常业务的问题。
本发明的技术方案如下:
一方面,提供了一种PIM中的组播报文处理方法,包括:接收组播报文;如果接收的组播报文的入接口不是逆向路径转发RPF接口,且该入接口是组播转发表项中的出接口列表中的接口、或者是从共享树RPT向最短路径树SPT切换时SPT方向的入接口,则转发引擎将接收的组播报文限速上送控制平面;否则,不将接收的组播报文上送控制平面。
另一方面,还提供了一种PIM中的组播报文处理装置,包括:接口,用于接收组播报文;转发引擎,用于在接口接收的组播报文的入接口不是逆向路径转发RPF接口,且该入接口是组播转发表项中的出接口列表中的接口、或者是从共享树RPT向最短路径树SPT切换时SPT方向的入接口时,将接收的组播报文限速上送控制平面;否则,不将接收的组播报文上送控制平面。
本发明的以上技术方案,能够在支持正常的ASSERT选举和从RPT向SPT切换的前提下,尽量避免非RPF接口的组播数据流冲击CPU。
附图说明
图1是本发明的实施例一的PIM中组播报文处理方法的流程图;
图2是根据本发明的实施例二的不需要发生ASSERT选举的场景的网络架构图;
图3是根据本发明的实施例二的发生了ASSERT选举的场景的网络架构图;
图4根据本发明的实施例二的从RPT向SPT切换的场景的网络架构图;
图5是根据本发明的实施例三的PIM中组播报文处理装置的一种结构示意图;
图6是根据本发明的实施例三的PIM中组播报文处理装置的另一种结构示意图。
具体实施方式
实施例一
为了在支持ASSERT选举和从RPT向SPT的切换的前提下,避免非RPF接口收到的组播数据流冲击CPU,本发明实施例首先对支持PIM的路由转发设备(如路由器和交换机)的控制平面和转发引擎进行了修改:
(1)控制平面修改:
为了支持ASSERT选举和从RPT向SPT的切换,需要向控制平面上送组播报文的非RPF接口包括:组播转发表项中的出接口列表中的接口(对应于ASSERT选举)和PIM-SM中正在进行从RPT向SPT切换时SPT方向的入接口(对应于从RPT向SPT的切换)。由于转发引擎中已经有出接口列表(记为OIF-LIST)了,因此,控制平面只需将从RPT向SPT切换时SPT方向的入接口(记为SPT-SWITCH-IIF)下发到转发引擎,并在切换完成后从转发引擎中删除即可。这样,可以确保在切换完成之后,转发引擎不再上送SPT-SWITCH-IIF收到的组播报文。如果在切换完成之前,SPT方向的入接口发生了变化,则需要通知转发引擎更新SPT-SWITCH-IIF。
(2)转发引擎修改:
修改转发引擎对于组播报文的转发规则为:
如果组播报文的入接口为RPF接口,向OIF-LIST中的接口进行转发;
否则:
如果组播报文的入接口是SPT-SWITCH-IIF中的接口或者是OIF-LIST中的接口,限速上送控制平面;
否则,丢弃。
基于上述两个方面的修改,本发明实施例的PIM中组播报文处理方法的流程如图1所示,该方法可以在任意支持PIM的路由器等网络设备中执行。如图1所示,该方法包括以下步骤:
步骤S102,接收组播报文;
步骤S104,转发引擎判断接收的组播报文的入接口是否是RPF接口,若是RPF接口,则进入步骤S106,否则进入步骤S108;
步骤S106,转发引擎将该组播报文向OIF-LIST中的接口进行转发;
步骤S108,转发引擎判断该组播报文的入接口是否是OIF-LIST中的接口或者SPT-SWITCH-IIF中的接口,若是OIF-LIST中的接口或者是SPT-SWITCH-IIF中的接口,则进入步骤S112,否则(既不是OIF-LIST中的接口,也不是SPT-SWITCH-IIF中的接口),进入步骤S110;
步骤S110,转发引擎丢弃该组播报文。进行丢弃处理的情况包括:该组播报文的入接口不是RPF接口,也不是OIF-LIST和SPT-SWITCH-IIF中的接口的情况。
步骤S112,转发引擎将该组播报文限速上送控制平面。
限速是指将组播报文的速率限制到预定的速率上限以下,该速率上限可以预先配置,本发明对此不做限定。将为触发ASSERT选举和从RPT向SPT切换而上送的组播报文限速上送控制平面,可以在一定程度上减少对CPU(或控制平面)的冲击。
触发ASSERT选举的必要条件是接收到组播报文的接口位于组播转发表项中的出接口列表(即接收到组播报文的接口是出接口列表中的接口),无论是初始情况下出接口列表中没有出接口,还是路由器ASSERT选举失败从出接口列表中删除了出接口(即接收到组播报文的出接口),从该接口收到的组播报文都不再需要上送控制平面。
只有PIM-SM中才需要进行从RPT向SPT的切换,且完成SPT切换之后,不考虑ASSERT选举的情况下,完成SPT切换的SM表项不再需要上送非RPF接口的组播报文。
本发明实施例中,仅将出接口列表中的接口或者从RPT向SPT切换时SPT方向的入接口这样的非RPF接口上接收到的组播报文上送控制平面,而其他非RPF接口收到的组播报文不上送控制平面,这样,对于不需要发生ASSERT选举,已经完成ASSERT选举以及已经完成从RPT向SPT切换的情况,从非RPF接口上收到的组播报文不再上送控制平面,避免了非RPF接口的组播数据流对CPU的冲击。而且,在发生ASSERT选举的过程中,也只是上送出接口列表中的接口收到的组播报文,以及在发生从RPT向SPT切换的过程中,也只是上送SPT方向的入接口收到的组播报文,其他非RPF接口收到的组播报文不上送,也进一步减少了上送的组播报文的数量,从而减少了对CPU的冲击。
以上步骤S104~S112即为转发引擎按照组播报文的转发规则对组播报文进行处理的过程。
从上可知,如果接收的组播报文的入接口不是RPF接口,且该入接口是组播转发表项中的出接口列表中的接口、或者是从RPT向SPT切换时SPT方向的入接口,则转发引擎将该组播报文限速上送控制平面;否则,不将该组播报文上送控制平面。而不上送控制平面的情况又进一步包括两种:转发或者丢弃。其中:
丢弃组播报文的条件为:接收的组播报文的入接口不是RPF接口,不是出接口列表中的接口,也不是从RPT向SPT切换时SPT方向的入接口。
转发组播报文的条件为:接收的组播报文的入接口为RPF接口。
实施例二
以下通过三个不同的实际应用场景,来说明实施例一中的方法。
应用场景一:不需要发生ASSERT选举的场景
如图2所示,RT3并未接收到PIM加入报文,未加入共享树,其Eth0/1接口不是出接口。当RT3从非RPF接口Eth0/1收到组播报文之后,由于Eth0/1不是出接口列表中的接口,也不是从RPT向SPT切换时SPT方向的入接口,因此,转发引擎直接将该组播报文丢弃,从而可以避免冲击CPU或CPU中运行的控制平面,使得共享网段内的路由器不受非预期组播数据流的冲击。
应用场景二:发生了ASSERT选举的场景
如图3所示,共享网段中,RT2和RT3进行了ASSERT选举。在完成ASSERT选举以后,假设RT2在其Eth0/1所在网络为WINNER(成功者),负责将组播报文转发到共享网络,而RT3选举失败。当RT3从非RPF接口Eth0/1接收到组播报文之后,由于RT3的Eth0/1接口不是出接口列表中的接口(因为在选举失败后,RT3将Eth0/1接口从出接口列表中删除了),也不是从RPT向SPT切换时SPT方向的入接口,组播报文可以直接被丢弃,避免冲击CPU。因此,ASSERT选举的失败者不再受非RPF接口收到的组播数据流的冲击。
应用场景三:发生了从RPT向SPT切换的场景
如图4所示,完成从RPT向SPT切换以后,接收者receiver1接收组播报文的路径为:RT1→RT2→RT4,接收者Receiver2接收组播报文的路径为:RT1→RT3→RT5。RT3通过其Eth0/1接口转发到共享网段上的组播报文到达RT4之后,对于RT4为非RPF接口收到的组播报文,而且,RT4的Eth0/1接口不是出接口列表中的接口,此时,控制平面也已经将RPT向SPT切换时SPT方向的入接口从转发引擎中删除了,因此,可以直接丢弃该组播报文,不再冲击CPU。从而,完成从RPT向SPT切换的路由器不再受非RPF接口收到的组播数据流的冲击。
从上述3个实际应用场景中可以看出,不需要发生ASSERT选举的场景,共享网段内路由器不受非预期组播数据流冲击;对于需要进行ASSERT选举和从RPT向SPT切换的场景,既可以支持ASSERT选举和从RPT向SPT切换过程中报文的不间断转发,并且在ASSERT选举和从RPT向SPT切换完成以后,丢弃从非RPF接口接收到的组播报文,避免了对CPU的冲击。
实施例三
针对实施例一,本发明实施例提供了一种PIM中的组播报文处理装置,该装置可以是路由器等支持PIM协议的路由转发设备。
如图5所示,该装置包括:接口10、转发引擎(可以是硬件的转发芯片等,也可以是负责报文转发的软件)20和控制平面(CPU中运行的控制平面软件)30,
接口10,用于接收组播报文;
转发引擎20,用于在接口10接收的上述组播报文的入接口是出接口列表中的接口、或者是从RPT向SPT切换时SPT方向的入接口时,将该组播报文限速上送控制平面30;否则,不上送控制平面30;
控制平面30,用于将从RPT向SPT切换时SPT方向的入接口下发到转发引擎20,以及在从RPT向SPT切换完成之后,从转发引擎20中删除从RPT向SPT切换时SPT方向的入接口。
其中,如图6所示,转发引擎20可以进一步包括:判断模块202、转发模块204、丢弃模块206和上送模块208,则:
判断模块202,用于判断该组播报文的入接口是否是RPF接口,以及是否是出接口列表中的接口或者从RPT向SPT切换时SPT方向的入接口;
转发模块204,用于在判断模块202的判断结果为接收的组播报文的入接口是RPF接口时,将该组播报文向出接口列表中的接口进行转发;
丢弃模块206,用于在判断模块202的判断结果为接收的组播报文的入接口不是RPF接口和出接口列表中的接口,也不是从RPT向SPT切换时SPT方向的入接口时,丢弃该组播报文;
上送模块208,用于在判断模块202的判断结果为接收的组播报文的入接口不是RPF接口,且该入接口是出接口列表中的接口或者是从RPT向SPT切换时SPT方向的入接口时,将该组播报文限速上送控制平面30。
综上,本发明以上实施例可以达到以下技术效果:
仅将出接口列表中的接口或者从RPT向SPT切换时SPT方向的入接口这样的非RPF接口上接收到的组播报文上送控制平面,而其他非RPF接口收到的组播报文不上送控制平面,这样,对于不需要发生ASSERT选举,已经完成ASSERT选举以及已经完成从RPT向SPT切换的情况,从非RPF接口上收到的组播报文不再上送控制平面,避免了非RPF接口的组播数据流对CPU的冲击。而且,在发生ASSERT选举的过程中,也只是上送出接口列表中的接口收到的组播报文,以及在发生从RPT向SPT切换的过程中,也只是上送SPT方向的入接口收到的组播报文,其他非RPF接口收到的组播报文不上送,也进一步减少了上送的组播报文的数量,从而减少了对CPU的冲击。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。