组播流量保护方法及装置的制造方法

xiaoxiao2020-10-23  6

组播流量保护方法及装置的制造方法
【技术领域】
[0001]本申请涉及组播技术领域,尤其涉及组播流量保护方法及装置。
【背景技术】
[0002]随着音频视频业务的迅速发展,组播的应用越发广泛。但组播的实现较为复杂,在路径保护和快速切换时存在较大困难,应用上受到限制。
[0003]PIM-SM(Protocol Independent Multicast-Sparse Mode,稀疏模式协议无关组播)协议使用“拉(Pull)模式”传送组播数据,通常适用于组播组成员分布相对分散、范围较广的大中型网络。
[0004]PIM-SM的基本原理如下:
[0005]PIM-SM假设所有主机都不需要接收组播数据,只向明确提出需要组播数据的主机转发。PIM-SM实现组播转发的核心任务就是构造并维护RPT (Rendezvous Point Tree,共享树或汇集树),RPT选择PIM域中某台路由器作为公用的根节点RP (Rendezvous Point,汇集点),组播数据通过RP沿着RPT转发给接收者;
[0006]连接接收者的路由器向某组播组对应的RP发送加入报文(Join Message),该报文被逐跳送达RP,所经过的路径就形成了 RPT的分支;
[0007]组播源如果要向某组播组发送组播数据,首先由组播源侧DR(DesignatedRouter,指定路由器)负责向RP进行注册,将注册报文(Register Message)通过单播方式发送给RP,该报文到达RP后触发建立SPT (Shortest Path Tree,最短路径树)。之后组播源将组播数据沿着SPT发向RP,当组播数据到达RP后,被复制并沿着RPT发送给接收者。
[0008]当接收者侧DR发现从RP发往组播组G的组播数据速率超过了一定的阈值时,将发起从RPT向SPT的切换,过程如下:首先,接收者侧DR向组播源S逐跳发送(S,G)加入报文,并最终送达组播源侧DR,沿途经过的所有路由器在其转发表中都生成了(S,G)表项,从而建立了 SPT分支;随后,接收者侧DR向RP逐跳发送包含RP位的剪枝(Prune)报文,RP收到该报文后会向组播源方向继续发送剪枝报文(假设此时只有这一个接收者),从而最终实现从RPT向SPT的切换。从RRT切换到SPT后,组播数据将直接从组播源发送到接收者。
[0009]MOFRR(Multicast Over Fast ReRoute,组播快速重路由)是在接收者侧DR向组播源发起两份加入报文,分别发往主备下一跳。组播源收到2份加入报文后均建立组播表项,组播流同时从2条SPT路径转发到接收者侧DR,接收者侧DR通过RPF(Reverse PathForwarding,反向路径转发)检查丢弃非优选下一跳的流量。当网络故障时原优选的下一跳路由表项删除,则备份下一跳升为主下一跳,流量得以转发到接收者。

【发明内容】

[0010]本申请实施例提供组播流量保护方法及装置。
[0011]本申请的技术方案是这样实现的:
[0012]一种组播流量保护方法,该方法包括:
[0013]PIM-SM网络中的任一节点接收到针对组播组的join报文,确定所述join报文中设置了基于分叉路径的组播快速重路由MoDP应用标记,且分叉标记置位,则,
[0014]若所述join报文中设置了主路径标记,则针对所述组播组的主路径生成PM表项、组播路由信息库MRIB表项和组播转发信息库MFIB表项;
[0015]若所述join报文中设置了备路径标记,则针对所述组播组的备路径生成PM表项和MRIB表项;
[0016]当所述主、备路径建立完成后,所述节点接收到所述分叉路径的尾节点沿所述主路径发送的针对所述组播组的组播第一双向转发检测BFD报文时,根据所述MFIB表项转发所述组播第一 BFD报文;
[0017]所述节点接收到所述分叉路径的首节点沿所述备路径发往所述分叉路径的尾节点的单播第二 BFD报文时,根据自身保存的单播转发表项转发所述单播第二 BFD报文。
[0018]一种组播流量保护装置,位于PM-SM网络中的节点上,该装置包括:
[0019]组播表项维护模块:接收到针对组播组的join报文,确定所述join报文中设置了基于分叉路径的组播快速重路由MoDP应用标记,且分叉标记置位,则,若所述join报文中设置了主路径标记,则针对所述组播组的主路径生成PM表项、组播路由信息库MRIB表项和组播转发信息库MFIB表项;若所述join报文中设置了备路径标记,则针对所述组播组的备路径生成PM表项和MRIB表项;
[0020]BFD模块:当所述主、备路径建立完成后,接收到所述分叉路径的尾节点沿所述主路径发送的针对所述组播组的组播第一双向转发检测BFD报文时,根据所述MFIB表项转发所述组播第一 BFD报文;接收到所述分叉路径的首节点沿所述备路径发往所述分叉路径的尾节点的单播第二 BFD报文时,根据自身保存的单播转发表项转发所述单播第二 BFD报文。
[0021]可见,本申请实施例中在为组播组生成主、备路径时,只在主路径上生成组播转发表项,从而组播流量只在主或备路径中的一条路径上转发,节省了带宽;基于已建立的主备路径,通过组播BFD报文检测主路径状态,通过单播BFD报文检测备路径状态,基于该检测机制,可以实现链路故障时,对组播流量的保护。。
【附图说明】
[0022]图1为本申请一实施例提供的组播流量保护方法流程图;
[0023]图2为本申请一实施例提供的组播流量保护中的主、备路径建立方法流程图;
[0024]图3为本申请的应用示例的组网图;
[0025]图4为本申请实施例提供的组播流量保护中的路径切换方法流程图;
[0026]图5为RFC4601定义的PM join消息格式;
[0027]图6为本申请实施例对图6所示join报文的扩展示例;
[0028]图7为本申请一实施例提供的组播流量保护装置的组成示意图。
【具体实施方式】
[0029]申请人对现有的MOFRR方法进行分析发现:
[0030]MOFRR本质上就是从2个上游网络分别建立SPT树,流量从主备路径同时引下来,其存在如下缺陷:
[0031]一)现有的MOFRR实质上不能称为“快速重路由”,而只是“冗余路由”,即通过两套独立的网络同时引流,在接收端丢掉一份流量,浪费了带宽;
[0032]二 )现有的MOFRR缺少动态检测机制,节点故障导致断流时没有保护措施。
[0033]为了解决上述问题,本申请给出如下解决方案,下面结合附图及具体实施例对本申请作进一步详细的说明。
[0034]图1为本申请一实施例提供的组播流量保护方法流程图,其具体步骤如下:
[0035]步骤101:PIM-SM网络中的任一节点接收到针对组播组的join报文,确定该报文中设置了 MoDP(Multicast over Divergent Path Fast ReRout,基于分叉路径的组播快速重路由应用)标记,且分叉标记置位,则,若join报文中设置了主路径标记,则针对所述组播组的主路径生成PIM表项、MRIB (Multicast Routing Informat1n Base,组播路由信息库)表项和 MFIB (Multicast Forwarding Informat1n Base,组播转发信息库)表项;若join报文中设置了备路径标记,则针对所述组播组的备路径生成PM表项和MRIB表项。
[0036]步骤102:当所述主、备路径建立完成后,所述节点接收到所述分叉路径的尾节点(简称分叉尾节点)沿所述主路径发送的针对所述组播组的组播第一 BFD (Bidirect1nalForwarding Detect1n,双向转发检测)报文时,根据所述MFIB表项转发所述第一 BFD报文;接收到分叉路径的首节点(简称分叉首节点)沿所述备路径发往所述分叉路径的尾节点的单播第二 BFD报文时,根据自身保存的单播转发表项转发所述单播第二 BFD报文。
[0037]步骤101中,针对所述组播组的主路径生成PM表项、MRIB表项和MFIB表项之后进一步包括:若自身未生成针对所述组播组的备路径的PM表项和MRIB表项,则确认自身为所述组播组的分叉中间节点,直接将该join报文发往组播源;否则,确认自身为所述组播组的分叉尾节点,将该join报文转换成普通join报文后发往组播源;
[0038]针对所述组播组的备路径生成PM表项和MRIB表项之后进一步包括:若自身未生成针对所述组播组的主路径的P頂表项、MRIB表项和MFIB表项,则确认自身为所述组播组的分叉中间节点,直接将该join报文发往组播源;否则,确认自身为所述组播组的分叉尾节点,将该join报文转换成普通join报文后发往组播源。
[0039]所述节点为所述分叉路径的尾节点,接收到所述单播第二 BFD报文后,且,所述节点为所述分叉路径的首节点,接收到所述组播第一 BFD报文后,所述分叉路径的尾节点和所述分叉路径的首节点之间的BFD会话建立。
[0040]所述BFD会话建立后,所述节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率低于预设门限值时,确定所述主路径故障,并发出携带BFD会话Down标记的单播第三BFD报文;
[0041]所述节点为所 述分叉路径的尾节点,接收到所述单播第三BFD报文时,确认所述主路径故障,针对所述备路径为所述组播组生成MFIB表项,并沿所述备路径发送组播数据报文;
[0042]所述节点为所述分叉路径的中间节点,接收到所述组播数据报文时,针对所述备路径为所述组播组生成MFIB表项,并按照生成的所述MFIB表项转发所述组播数据报文。
[0043]所述主路径故障后,所述节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率等于或高于预设门限值时,确认所述主路径故障恢复,沿所述备路径向所述分叉路径的尾节点发送携带BFD会话Up标记的单播第四BFD报文,并启动定时器,在定时器到时时,沿着所述备路径发送携带主路径恢复标记的join报文;
[0044]当所述节点为所述分叉路径的中间节点或所述分叉路径的尾节点时,所述节点接收所述携带主路径恢复标记的join报文,并将所述备路径对应的MFIB表项删除。
[0045]这里的BFD会话频率指的是,每个检测周期内收到的BFD报文的数目,例如:分叉首节点在一个检测周期内从主路径收到的第一 BFD报文的数目等于或大于预设阈值,则认为主路径正常;否则,认为主路径故障。
[0046]所述任一节点接收到针对组播组的加入join报文之前,当所述节点为所述分叉路径的首节点时,根据本节点到组播源的单播转发表项,在到组播源的多个下一跳中选择最优和次优的下一跳;
[0047]在发往最优下一跳的join报文中设置主路径标记,在发往次优下一跳的join报文中设置备路径标记,同时针对所述主路径生成PM表项、MRIB表项和MFIB表项,针对所述备路径生成PM表项和MRIB表项。
[0048]所述主、备路径建立完成后,当所述节点为所述分叉路径的首节点时,所述节点接收join报文;
[0049]若接收的所述join报文中的分叉标记置位,则删除自身针对所述主、备路径的PIM表项、MRIB表项和MFIB表项,并分别沿所述主、备路径发送剪枝prune报文;
[0050]当所述节点为所述分叉路径的中间节或尾节点时,接收所述prune报文,并则删除自身针对所述主、备路径的P頂表项、MRIB表项和MFIB表项。
[0051]在选择最优下一跳和次优下一跳时,通常米用LPM (Longest Prefix Matching,最长前缀匹配)方法,即与组播源的前缀最匹配的路由的下一跳为最优下一跳,与组播源的前缀次匹配的路由的下一跳为次优下一跳。
[0052]所述主、备路径建立完成后,分叉首节点发现自身到组播源的单播路由发生变化,则当接收到下游节点发来的join报文时,返回执行所述根据本节点到组播源的单播转发表项,在到组播源的多个下一跳中选择最优和次优的下一跳的动作,以根据新的单播路由,建立新的主、备路径。
[0053]本申请一实施例中,PM-SM网络中的任一节点接收到下游节点发来的针对一组播组的join报文,若发现自身已生成了针对该组播组的主路径的PM表项、MRIB表项和MFIB表项,或者已生成了针对该组播组的备路径的PM表项和MRIB表项,且自身不为该组播组的分叉首节点或分叉尾节点,且该下游节点不位于该组播组的主或备路径上,则直接将该join报文转发出去。这是考虑到:任意两组主、备路径不能重叠,即若存在两组主、备路径:路径A、B (互为备份且组成一个环I),路径C、D (互为备份且组成一个环2),则环1、环2不能交叉,因此,在路径A、B(即环I)建立后,环I上的中间节点再收到环外的join报文后,直接转发即可(即使自己满足成为分叉首节点的条件,也不再分叉),以避免又建立了另一个与环I交叉的环。
[0054]图2为本申请一实施例提供的组播流量保护中的主、备路径建立方法流程图,其具体步骤如下:
[0055]步骤200:在单点连接的PM-SM网络中的所有节点上使能MoDP。
[0056]单点连接的P頂-SM网络即,对于PIM-SM网络中的各路由节点来说,针对同一网段只有一个PM邻居。
[0057]步骤201:PIM-SM网络中的任一上游节点接收到下游节点发来的针对一组播组的join报文,发现该报文未设置MoDP应用标记,且本节点到组播源方向的单播路由有多个下一跳,则确认本节点为分叉首节点,在多个下一跳中选择最优和次优的下一跳。
[0058]另外,分叉首节点也可以由网管等根据PM-SM网络的组网情况预先配置,这样,当PM-SM网络中的任一上游节点接收到下游节点发来的针对一组播组的join报文时,若发现自身被配置为分叉首节点,则在本节点到组播源方向的多个下一跳中选择最优和次优的下一跳。
[0059]步骤202:分叉首节点复制join报文,得到两份join报文,在该两份join报文中都设置MoDP应用标记,且将该两份join报文的分叉标记置位,在该两份join报文中设置本分叉首节点的IP地址(即分叉首节点上通往组播源的最优下一跳的上行端口的IP地址),在发往最优下一跳的join报文中设置主路径标记,在发往次优下一跳的join报文中设置备路径标记,同时针对该组播组的主路径生成PM表项、MRIB (Multicast RoutingInformat1n Base,组播路由信息库)表项和 MFIB (Multicast Forwarding Informat1nBase,组播转发信息库)表项,针对该组播组的备路径生成PM表项和MRIB表项。
[0060]PIM表项的内容主要包括:组播源S地址、组播组G地址、主路径或备路径的上游端口及下游端口,MRIB和MFIB表项的内容主要包括:组播源S地址、组播组G地址、主路径或备路径的下游端口。
[0061]MFIB表项是根据PM和MRIB表项生成的。在针对组播组的主路径生成PM、MRIB和MFIB表项时,要将主路径的下游端口(即join报文的入端口 )添加到PM、MRIB和MFIB表项中,同时在P頂表项中该主路径的下游端口上设置“主”标记。
[0062]在针对组播组的备路径生成PM和MRIB表项时,只将备路径的下游端口(即join报文的入端口)添加到PM表项中,而不添加到MRIB表项中,同时在PM表项中该备路径的下游端口上设置“备”标记。
[0063]节点在转发组播数据报文时,是根据MFIB表项转发的。
[0064]步骤203:PIM-SM网络中的上游节点接收到下游节点发来的针对一组播组的join报文,发现该报文中设置了 MoDP应用标记,且分叉标记置位,则,若join报文中设置了主路径标记,则针对该组播组的主路径生成PM、MRIB和MFIB表项;若join报文中设置了备路径标记,则针对该组播组的备路径生成PM、MRIB表项。
[0065]针对该组播组的主路径生成PM、MRIB和MFIB表项的具体过程,以及针对该组播组的备路径生成PM、MRIB表项的具体过程与步骤202相同。
[0066]步骤204:该上游节点判断自身是否已生成针对该组播组的备路径的PM表项,或者判断自身是否已生成针对该组播组的主路径的PIM表项,若是,执行步骤206 ;否则,执行步骤205。
[0067]该上游节点判断自身是否已生成针对该组播组的备路径的PIM表项具体为:在自身查找该组播组对应的PM表项,若发现该PM表项的下游端口上设置了 “备”标记,则确定自身已生成针对该组播组的备路径的PM表项。
[0068]该上游节点判断自身是否已生成针对该组播组的主路径的PIM表项具体为:在自身查找该组播组对应的PM表项,若发现该PM表项的下游端口上设置了 “主”标记,则确定自身已生成针对该组播组的主路径的PM表项。
[0069]步骤205:该上游节点确认本节点为该组播组的分叉中间节点或者分叉尾节点,则将该join报文发往组播源,转至步骤207。
[0070]步骤206:该上游节点确认本节点为该组播组的分叉尾节点,则将该join报文转换为普通join报文后发往组播源。
[0071]普通join报文即,符合现有PM协议规定的join报文,普通join报文中不设置本申请实施例中的MoDP应用标记、分叉标记、主/备路径标记等。
[0072]可见,对于分叉尾节点来说,当它先收到针对一组播组的设置了主或备路径标记的join报文(同时设置了 MoDP应用标记且分叉标记置位)时,其处理为:建立针对主或备路径的相关组播表项,并将join报文继续发往组播源(join报文中的MoDP应用标记、分叉标记、主/备路径标记都原样保留);当它此后收到了针对该组播组的设置了备或主路径标记的join报文(同时设置了 MoDP应用标记且分叉标记置位)时,发现自身已生成了针对该组播组的主或备路径的相关组播表项时,则确认本节点为该组播组的分叉尾节点,此时,除了建立针对备或主路径的相关组播表项外,还要将join报文转换成普通join报文后再发往组播源。
[0073]对于分叉尾节点的上游节点来说,当该上游节点收到来自分叉尾节点的设置了MoDP应用标记、且分叉标记置位、且设置了主或备路径标记的join报文时,得知该组播组已经分叉,则即使自身具备分叉首节点的属性,也不再分叉,只根据该join报文生成相关组播表项;
[0074]当该上游节点收到来自分叉尾节点的普通join报文时,则若自身具备分叉首节点的属性(即本节点到组播源有多个下一跳),则如步骤201所述将本节点作为分叉首节点,执行步骤201?202的处理,该组播组的下一组主/备路径出现了。
[0 075]也就是说,针对同一组播组,可以有多组主/备路径,但不同组主/备路径不能交叉。
[0076]另外,考虑到:分叉尾节点可能是该组播组的下一组主/备路径的分叉首节点,则步骤206中,分叉尾节点将该join报文转换为普通join报文之前,还要判断一下自己是否为新的分叉首节点,即判断:本节点到组播源方向是否有多个下一跳,若有,则如步骤201所述将本节点作为分叉首节点,执行步骤201?202的处理,该组播组的下一组主/备路径出现了。
[0077]步骤207 =PIM-SM网络中的节点接收到来自组播源的组播数据报文,根据该报文中的组播源S地址和组播组G地址,在自身查找到对应的MFIB表项,根据MFIB表项的下游端口将该组播数据报文转发出去。
[0078]图3为本申请的应用示例的组网图,则组播组的主、备路径的建立过程如下:
[0079]I)作为DR的交换机SW8收到主机Host3发来的针对一组播组G的join报文,发现该报文中未设置MoDP应用标记,且自身到组播源方向的单播路由有多个下一跳,则确认自身为该组播组G的分叉首节点,在自身到组播源方向的多个下一跳中选择最优和次优的下一跳,其中,最优下一跳指向SW7,次优下一跳指向SW5。
[0080]2)分叉首节点SW8复制join报文,在该两份join报文中都设置MoDP应用标记,且将该两份join报文的分叉标记置位,在该两份join报文中设置本分叉首节点的IP地址(即SW8上通往SW7的上行端口的IP地址、SW8上通往SW5的上行端口的IP地址),在发往最优下一跳的join报文中设置主路径标记,在发往次优下一跳的join报文中设置备路径标记,同时针对该组播组的主路径生成PM表项、MRIB表项和MFIB表项,针对该组播组的备路径生成PM表项和MRIB表项,将携带主路径标记的join报文发往SW7,将携带备路径标记的join报文发往SW5。
[0081]3) SW7收到携带主路径标记的join报文,则得知自己位于组播组G的主路径上,生成针对组播组G的主路径的PM、MRIB和MFIB表项,将该join报文发往组播源方向;
[0082]SW5收到携带备路径标记的join报文,则得知自己位于组播组G的备路径上,生成针对组播组G的备路径的PM和MRIB表项,将该join报文发往组播源方向;
[0083]4) SW4收到携带主路径标记的join报文,则得知自己位于组播组G的主路径上,生成针对组播组G的主路径的PM、MRIB和MFIB表项,将该join报文发往组播源方向;
[0084]SW2收到携带备路径标记的join报文,则得知自己位于组播组G的备路径上,生成针对组播组G的备路径的PM和MRIB表项,将该join报文发往组播源方向;
[0085]5) Sffl收到携带主路径标记的join报文,则得知自己位于组播组G的主路径上,生成针对组播组G的主路径的PM、MRIB和MFIB表项,将该join报文发往组播源方向;
[0086]之后,SWl收到携带备路径标记的join报文,则得知自己同时位于组播组G的主、备路径上,确认自己为组播组G的分叉尾节点,生成针对组播组G的备路径的PM和MRIB表项,将该join报文转换为普通join报文后发往组播源方向。
[0087]此后,组播源发出的组播组G的组播流量到达SWl,Sffl根据自身的MFIB表项,将该组播流量沿组播组G的主路径依次经过SW4、Sff7, SW8传输到Host3。
[0088]本申请实施例中,为了防止主、备路径过长导致保护切换较慢,可以预先设定主、备路径的最大跳数Hmax,并将Hmax预先配置在PM-SM网络中的各节点上,步骤202中,分叉首节点在向主、备路径发送的join报文中携带用于表示主或备路径的跳数的H字段,并将H字段的值设置为0,此后,当每个上游节点接收到join报文后,都要将H字段的取值加1,且加I后若发现H字段的取值等于Hmax,则将join报文恢复为普通join报文发往组播源。
[0089]另外,本申请实施例中,为了避免同一组播组的多组主/备路径交叉,当已建立的一组播组的主或备路径上的分叉中间节点接收到不位于本主或备路径上的下游节点发来的针对该组播组的join报文(设置了 MoDP应用标记或者分叉标记置位)时,不再分叉,即,不判断自己是否具备分叉首节点的属性(即判断本节点到组播源是否有多个下一跳),而是直接根据join报文生成相关组播表项后将join报文直接转发出去。
[0090]图4为本申请实施例提供的组播流量保护中的路径切换方法流程图,其具体步骤如下:
[0091]步骤401:分叉尾节点在接收到针对一组播组的主、备路径的join报文后(即步骤206中该上游节点确认本节点为该组播组的分叉尾节点后),开始针对该组播组周期性地沿主路径向下游发送组播BFD报文,报文的源IP地址为自身在该主路径上的下游端口的IP地址,报文的目的MAC、IP地址分别为该组播组的MAC、IP地址。
[0092]实际应用中,若多个组播组对应同一组主/备路径,则分叉尾节点只需针对其中一个组播组发送组播BFD报文。
[0093]步骤402:分叉首节点接收到该组播BFD报文,确认自己为该组播组的分叉首节点,则沿该组播组的备路径向分叉尾节点发送单播BFD报文,报文的目的IP地址为该组播BFD报文的源IP地址;分叉首节点也可以主动向分叉尾节点发送单播BFD报文。
[0094]步骤403:分叉尾节点接收到该单播BFD报文,BFD会话建立;分叉首节点基于接收的组播BFD报文报文检测BFD会话频率,若等于或高于预设门限值,则认为该组播组的主路径正常;分叉尾节点基于接收的单播BFD报文报文检测BFD会话频率,若等于或高于预设门限值,则认为该组播组的备路径正常;设置该组播组的BFD会话的状态为“主、备路径均active (生效)”。
[0095]若多个组播组对应同一组主/备路径,则本步骤中,分叉尾节点设置该多个组播组的BFD会话的状态都为“主、备路径均active”。
[0096]为了避免组播BFD报文发往无用端口,在图3所示实施例中,位于该组播组的主路径上的节点在接收到下游节点发来的join报文(携带MoDP应用标记、且分叉标记置位、且携带主路径标记)时,生成ACL(Access Control List,访问控制列表)表项,表项的内容为:只在该join报文的接收端口允许该组播组的组播BFD报文的发送;这样,本实施例中,当组播BFD报文到达主路径的分叉中间节点时,分叉中间节点根据自身的ACL表项,只会将该组播BFD报文从该组播组的主路径的下游端口发送。
[0097]步骤404:当分叉首节点检测到在该组播组的主路径上与分叉尾节点间的BFD会话频率低于预设门限值时,则在此后向分叉尾节点发送的单播BFD报文中携带BFD会话Down标记。
[0098]步骤405:分叉尾节点接收到分叉首节点发来的单播BFD报文,发现报文中携带BFD会话down标记,则将该组播组的BFD会话的状态更改为“仅备路径active” ;同时,将该组播组的备路径的下游端口添加到该组播组的备路径对应的MRIB表项中,并针对该组播组的备路径生成MFIB表项。
[0099]当该组播组的主路径的BFD会话Down后,主路径的MFIB表项中的该主路径的下游端口并不删除,即当分叉尾节点接收到该组播组的组播数据报文时,组播数据报文仍然从该主路径的下游端口转发,直到从该主路径的下游端口收到下游节点发来的针对该组播组的剪枝(Prune)消息后才将该主路径的下游端口从MFIB表项删除。
[0100]步骤406:当分叉尾节点接收到针对该组播组的组播数据报文时,查找到该组播组对应的MFIB表项,根据查找到的MFIB表项的下游端口,将该组播数据报文转发出去。
[0101]步骤407:当该组播组的备路径上的分叉中间节点接收到针对该组播组的组播数据报文时,在自身查找到该组播组的备路径对应的PIM表项,发现该PIM表项的下游端口上设置了 “备”标记,且该组播数据报文的入端口为该PM表项中的该备路径的上游端口,则将设置了“备”标记的下游端口(即备路径的下游端口)添加到该组播组对应的MRIB表项中,并生成该组播组的备路径对应的MFIB表项,根据该组播组对应的MFIB表项的下游端口将该组播数据报文转发出去。
[0102]步骤408:当分叉首节点在该组播组的主路径的BFD会话Down后的第一预设时长内,检测到在该备路径上与分叉尾节点间的BFD会话频率又开始等于或高于预设门限值时,则在此后向分叉尾节点发送的单播BFD报文中携带BFD会话Up标记。
[0103]步骤409:分叉尾节点在该组播组的主路径的BFD会话Down后的第一预设时长内,接收到分叉首节点发来的单播BFD报文,发现报文中携带BFD会话Up标记,则将BFD会话的状态更改为“主、备路径均active”。
[0104]步骤410:分叉首节点在该组播组的主路径的BFD会话active第二预设时长后,沿着该组播组的备路径发送针对该组播组的join报文,该join报文中携带主路径恢复标记。
[0105]步骤411:分叉中间节点和分叉尾节点接收到join报文,发现该报文携带主路径恢复标记,则将该组播组的备路径对应的MFIB表项删除,同时,将join报文的入端口从该组播组的备路径对应的MRIB表项中删除。
[0106]另外,本申请实施例中,当分叉尾节点检测到在该组播组的备路径上与分叉首 节点之间的BFD会话频率低于预设门限值时,在此后发送的组播BFD报文中携带BFD会话Down标记,并将该组播组的BFD会话的状态更改为“仅主路径active”。
[0107]当分叉尾节点在该组播组的备路径的BFD会话Down后的第一预设时长内,检测到在该组播组的备路径上与分叉首节点间的BFD会话频率开始等于或高于预设门限值,则将该组播组的BFD会话的状态更改为“主、备路径均active”。
[0108]当分叉尾节点发现:在该组播组的主路径的BFD会话Down后的第一预设时长内,未接收到分叉首节点沿该组播组的备路径发来的携带BFD会话Up标记的单播BFD报文,则停止沿该组播组的主路径发送针对该组播组的组播BFD报文,并将该组播组的BFD会话的状态更改为“主、备路径初始化”。
[0109]当分叉尾节点发现:在该组播组的备路径的BFD会话Down后的第一预设时长内,该组播组的备路径上的BFD会话一直未恢复(即BFD会话频率一直低于预设门限值),则停止沿该组播组的主路径发送针对该组播组的组播BFD报文,并将该组播组的BFD会话的状态更改为“主、备路径初始化”。
[0110]另外,本申请实施例中,分叉首节点检测到自身到组播源的单播路由变化,则沿该组播组的备路径向分叉尾节点发送携带BFD会话Down标记的单播BFD报文,并停止沿该组播组的备路径发送单播BFD报文,且,当接收到下游节点发来的针对该组播组的join报文后,返回步骤301,以便作为该组播组的分叉首节点,为该组播组建立新的主、备路径。
[0111]另外,本申请实施例中,若针对一组播组G的一组主/备路径建立后,分叉首节点接收到下游节点发来的针对该组播组G的join报文,且该join报文中的分叉标记置位,则依据下游优先的原则,分叉首节点分别沿该组播组的主、备路径发送prune报文,prune报文中携带组播组G标识,同时,将本节点作为分叉中间节点处理新接收到的join报文。
[0112]本申请实施例需要对现有的join报文进行扩展。图5为RFC4601定义的PIM join消息格式,图6为本申请实施例对图5所示join报文的扩展示例,如图6所示,本申请实施例的扩展主要如下:
[0113]I)为PIM join报文的第一行中的Type字段定义一个新的取值,例如:取值3,以表示该join报文为组播分叉过程中使用的报文;
[0114]2)将PM join报文的第一行中的Reserved字段(共I字节)作为MoDP应用标记,例如:可取值为0x01 ;
[0115]3)将PM join报文的第三行中的Reserved字段(共I字节)作为MoDP-Type (共3bit)、H(共 4bit)和 D (共 Ibit)标记,其中:
[0116]31)MoDP-Type:用于表示分叉首节点发送的join消息的类型,具体包括三种:
[0117]a、分叉首节点向组播组的主路径发送的join消息,此时,MoDP-Type取值可为0x00 ;
[0118]b、分叉首节点向组播组的备路径发送的join消息,此时,MoDP-Type取值可为OxOl ;
[0119]C、分叉首节点向分叉尾节点发送的通告主路径恢复的join消息,此时,MoDP-Type 取值可为 0x02。
[0120]32)H:表示join消息在组播组的主或备路径上的跳数;
[0121]33) D:分叉标记。
[0122]4)另外,本申请实施例中,还需要在join报文中插入2个字段:分叉首节点的IP地址和分叉尾节点的IP地址,具体地,可以在join报文的第3行的末尾插入8个字节,前4个字节表示分叉首节点的IP地址,后4个字节表示分叉尾节点的IP地址。
[0123]本申请实施例的有益技术效果如下:
[0124]一 )在为组播组生成主、备路径时,只在主路径上生成组播转发表项,在备路径上只生成PM表项而不生成组播转发表项,这样,组播流量只在主路径上转发,当主路径故障后,才在备路径上生成组播转发表项,从而在实现组播流量保护的前提下,节省了带宽。
[0125]二)给出组播流量动态保护和切换机制,节点故障时组播流量不中断。
[0126]图7为本申请实施例提供的组播流量保护装置的组成示意图,该装置位于PM-SM网络中的节点上,该装置主要包括:组播表项维护模块和BFD模块,其中:
[0127]组播表项维护模块:接收到针对组播组的join报文,确定所述join报文中设置了MoDP应用标记,且分叉标记置位,则,若所述join报文中设置了主路径标记,则针对所述组播组的主路径生成PM表项、MRIB表项和MFIB表项;若所述join报文中设置了备路径标记,则针对所述组播组的备路径生成PM表项和MRIB表项。
[0128]BFD模块:当所述主、备路径建立完成后,接收到所述分叉路径的尾节点沿所述主路径发送的针对所述组播组的组播第一 BFD报文时,根据所述MFIB表项转发所述组播第一BFD报文;接收到所述分叉路径的首节点沿所述备路径发往所述分叉路径的尾节点的单播第二 BFD报文时,根据自身保存的单播转发表项转发所述单播第二 BFD报文。
[0129]组播表项维护模块针对所述组播组的主路径生成PM表项、MRIB表项和MFIB表项之后进一步用于,若自身未生成针对所述组播组的备路径的PM表项和MRIB表项,则确认自身为所述分叉路径的中间节点,直接将所述join报文发往组播源;否则,确认自身为所述分叉路径的尾节点,将所述join报文转换成普通join报文后发往组播源;
[0130]组播表项维护模块针对所述组播组的备路径生成PM表项和MRIB表项之后进一步用于,若自身未生成针对所述组播组的主路径的PM表项、MRIB表项和MFIB表项,则确认自身为所述分叉路径的中间节点,直接将所述join报文发往组播源;否则,确认自身为所述分叉路径的尾节点,将所述join报文转换成普通join报文后发往组播源。
[0131]BFD模块进一步用于,当本节点为所述分叉路径的尾节点时,接收到所述单播第二BFD报文后,所述分叉路径的尾节点和所述分叉路径的首节点之间的BFD会话建立;或者,当本节点为所述分叉路径的首节点时,接收到所述组播第一 BFD报文后,所述分叉路径的尾节点和所述分叉路径的首节点之间的BFD会话建立。
[0132]BFD模块进一步用于,BFD会话建立后,
[0133]当本节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率低于预设门限值时,确定所述主路径故障,并发出携带BFD会话Down标记的单播第三BFD报文;
[0134]当本节点为所述分叉路径的尾节点时,接收到所述单播第三BFD报文时,确认所述主路径故障,针对所述备路径为所述组播组生成MFIB表项,并沿所述备路径发送组播数据报文;
[0135]当本节点为所述分叉路径的中间节点时,接收到所述组播数据报文时,针对所述备路径为所述组播组生成MFIB表项,并按照生成的所述MFIB表项转发所述组播数据报文。
[0136]BFD模块进一步用于,所述主路径故障后,
[0137]当本节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率等于或高于预设门限值时,确认所述主路径故障恢复,沿所述备路径向所述分叉路径的尾节点发送携带BFD会话Up标记的单播第四BFD报文,并启动定时器,在定时器到时时,沿着所述备路径发送携带主路径恢复标记的join报文;
[0138]当本节点为所述分叉路径的中间节点或所述分叉路径的尾节点时,接收所述携带主路径恢复标记的join报文,并将所述备路径对应的MFIB表项删除。
[0139]组播表项维护模块进一步用于,接收到针对组播组的加入join报文之前,当本节点为所述分叉路径的首节点时,根据本节点到组播源的单播转发表项,在到组播源的多个下一跳中选择最优和次优的下一跳;在发往最优下一跳的join报文中设置主路径标记,在发往次优下一跳的join报文中设置备路径标记,同时针对所述主路径生成PM表项、MRIB表项和MFIB表项,针对所述备路径生成PM表项和MRIB表项。
[0140]组播表项维护模块进一步用于,所述主、备路径建立完成后,
[0141]当本节点为所述分叉路径的首节点时,接收join报文;若接收的所述join报文中的分叉标记置位,则删除自身针对所述主、备路径的PM表项、MRIB表项和MFIB表项,并分别沿所述主、备路径发送剪枝prune报文;
[0142]当本节点为所述分叉路径的中间节或尾节点时,接收所述prune报文,并则删除自身针对所述主、备路径的P頂表项、MRIB表项和MFIB表项。
[0143]以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
【主权项】
1.一种组播流量保护方法,其特征在于,该方法包括: 稀疏模式协议无关组播PM-SM网络中的任一节点接收到针对组播组的加入join报文,确定所述join报文中设置了基于分叉路径的组播快速重路由MoDP应用标记,且分叉标记置位,则, 若所述join报文中设置了主路径标记,则针对所述组播组的主路径生成PM表项、组播路由信息库MRIB表项和组播转发信息库MFIB表项; 若所述join报文中设置了备路径标记,则针对所述 组播组的备路径生成PIM表项和MRIB表项; 当所述主、备路径建立完成后,所述节点接收到所述分叉路径的尾节点沿所述主路径发送的针对所述组播组的组播第一双向转发检测BFD报文时,根据所述MFIB表项转发所述组播第一 BFD报文; 所述节点接收到所述分叉路径的首节点沿所述备路径发往所述分叉路径的尾节点的单播第二 BFD报文时,根据自身保存的单播转发表项转发所述单播第二 BFD报文。2.根据权利要求1所述的方法,其特征在于,所述针对所述组播组的主路径生成PM表项、MRIB表项和MFIB表项之后,所述方法还包括: 若自身未生成针对所述组播组的备路径的PM表项和MRIB表项,则确认自身为所述分叉路径的中间节点,直接将所述join报文发往组播源;否则,确认自身为所述分叉路径的尾节点,将所述join报文转换成普通join报文后发往组播源; 所述针对所述组播组的备路径生成P頂表项和MRIB表项之后进一步包括: 若自身未生成针对所述组播组的主路径的PM表项、MRIB表项和MFIB表项,则确认自身为所述分叉路径的中间节点,直接将所述join报文发往组播源;否则,确认自身为所述分叉路径的尾节点,将所述join报文转换成普通join报文后发往组播源。3.根据权利要求1所述的方法,其特征在于, 所述节点为所述分叉路径的尾节点,接收到所述单播第二 BFD报文后,且,所述节点为所述分叉路径的首节点,接收到所述组播第一 BFD报文后,所述分叉路径的尾节点和所述分叉路径的首节点之间的BFD会话建立。4.根据权利要求3所述的方法,其特征在于,所述BFD会话建立后,所述方法还包括: 所述节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率低于预设门限值时,确定所述主路径故障,并发出携带BFD会话Down标记的单播第三BFD报文; 所述节点为所述分叉路径的尾节点,接收到所述单播第三BFD报文时,确认所述主路径故障,针对所述备路径为所述组播组生成MFIB表项,并沿所述备路径发送组播数据报文; 所述节点为所述分叉路径的中间节点,接收到所述组播数据报文时,针对所述备路径为所述组播组生成MFIB表项,并按照生成的所述MFIB表项转发所述组播数据报文。5.根据权利要求4所述的方法,其特征在于,所述主路径故障后,该方法还包括: 所述节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率等于或高于预设门限值时,确认所述主路径故障恢复,沿所述备路径向所述分叉路径的尾节点发送携带BFD会话Up标记的单播第四BFD报文,并启动定时器,在定时器到时时,沿着所述备路径发送携带主路径恢复标记的join报文; 当所述节点为所述分叉路径的中间节点或所述分叉路径的尾节点时,所述节点接收所述携带主路径恢复标记的join报文,并将所述备路径对应的MFIB表项删除。6.根据权利要求1所述的方法,其特征在于,所述任一节点接收到针对组播组的加入join报文之前,所述方法还包括: 当所述节点为所述分叉路径的首节点时,根据本节点到组播源的单播转发表项,在到组播源的多个下一跳中选择最优和次优的下一跳; 在发往最优下一跳的join报文中设置主路径标记,在发往次优下一跳的join报文中设置备路径标记,同时针对所述主路径生成PM表项、MRIB表项和MFIB表项,针对所述备路径生成PM表项和MRIB表项。7.根据权利要求6所述的方法,其特征在于,所述主、备路径建立完成后,所述方法还包括: 当所述节点为所述分叉路径的首节点时,所述节点接收join报文; 若接收的所述join报文中的分叉标记置位,则删除自身针对所述主、备路径的PIM表项、MRIB表项和MFIB表项,并分别沿所述主、备路径发送剪枝prune报文; 当所述节点为所述分叉路径的中间节或尾节点时,接收所述prune报文,并删除自身针对所述主、备路径的PM表项、MRIB表项和MFIB表项。8.—种组播流量保护装置,位于稀疏模式协议无关组播PM-SM网络中的节点上,其特征在于,该装置包括: 组播表项维护模块:接收到针对组播组的加入join报文,确定所述join报文中设置了基于分叉路径的组播快速重路由MoDP应用标记,且分叉标记置位,则,若所述join报文中设置了主路径标记,则针对所述组播组的主路径生成PM表项、组播路由信息库MRIB表项和组播转发信息库MFIB表项;若所述join报文中设置了备路径标记,则针对所述组播组的备路径生成PM表项和MRIB表项; BFD模块:当所述主、备路径建立完成后,接收到所述分叉路径的尾节点沿所述主路径发送的针对所述组播组的组播第一双向转发检测BFD报文时,根据所述MFIB表项转发所述组播第一 BFD报文;接收到所述分叉路径的首节点沿所述备路径发往所述分叉路径的尾节点的单播第二 BFD报文时,根据自身保存的单播转发表项转发所述单播第二 BFD报文。9.根据权利要求8所述的装置,其特征在于,所述组播表项维护模块针对所述组播组的主路径生成PM表项、MRIB表项和MFIB表项之后进一步用于,若自身未生成针对所述组播组的备路径的PIM表项和MRIB表项,则确认自身为所述分叉路径的中间节点,直接将所述join报文发往组播源;否则,确认自身为所述分叉路径的尾节点,将所述join报文转换成普通join报文后发往组播源; 所述组播表项维护模块针对所述组播组的备路径生成PM表项和MRIB表项之后进一步用于,若自身未生成针对所述组播组的主路径的PM表项、MRIB表项和MFIB表项,则确认自身为所述分叉路径的中间节点,直接将所述join报文发往组播源;否则,确认自身为所述分叉路径的尾节点,将所述join报文转换成普通join报文后发往组播源。10.根据权利要求8所述的装置,其特征在于, 所述BFD模块进一步用于,当本节点为所述分叉路径的尾节点时,接收到所述单播第二 BFD报文后,所述分叉路径的尾节点和所述分叉路径的首节点之间的BFD会话建立;或者,当本节点为所述分叉路径的首节点时,接收到所述组播第一 BFD报文后,所述分叉路径的尾节点和所述分叉路径的首节点之间的BFD会话建立。11.根据权利要求10所述的装置,其特征在于,所述BFD模块进一步用于,BFD会话建立后, 当本节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率低于预设门限值时,确定所述主路径故障,并发出携带BFD会话Down标记的单播第三BFD报文; 当本节点为所述分叉路径的尾节点时,接收到所述单播第三BFD报文时,确认所述主路径故障,针对所述备路径为所述组播组生成MFIB表项,并沿所述备路径发送组播数据报文; 当本节点为所述分叉路径的中间节点时,接收到所述组播数据报文时,针对所述备路径为所述组播组生成MFIB表项,并按照生成的所述MFIB表项转发所述组播数据报文。12.根据权利要求11所述的装置,其特征在于,所述BFD模块进一步用于,所述主路径故障后, 当本节点为分叉路径的首节点时,检测到在所述主路径上与所述分叉路径的尾节点间的BFD会话频率等于或高于预设门限值时,确认所述主路径故障恢复,沿所述备路径向所述分叉路径的尾节点发送携带BFD会话Up标记的单播第四BFD报文,并启动定时器,在定时器到时时,沿着所述备路径发送携带主路径恢复标记的join报文; 当本节点为所述分叉路径的中间节点或所述分叉路径的尾节点时,接收所述携带主路径恢复标记的join报文,并将所述备路径对应的MFIB表项删除。13.根据权利要求8所述的装置,其特征在于,所述组播表项维护模块进一步用于, 接收到针对组播组的加入join报文之前,当本节点为所述分叉路径的首节点时,根据本节点到组播源的单播转发表项,在到组播源的多个下一跳中选择最优和次优的下一跳;在发往最优下一跳的join报文中设置主路径标记,在发往次优下一跳的join报文中设置备路径标记,同时针对所述主路径生成PM表项、MRIB表项和MFIB表项,针对所述备路径生成PM表项和MRIB表项。14.根据权利要求13所述的装置,其特征在于,所述组播表项维护模块进一步用于,所述主、备路径建立完成后, 当本节点为所述分叉路径的首节点时,接收join报文;若接收的所述join报文中的分叉标记置位,则删除自身针对所述主、备路径的PM表项、MRIB表项和MFIB表项,并分别沿所述主、备路径发送剪枝prune报文; 当本节点为所述分叉路径的中间节或尾节点时,接收所述prune报文,并则删除自身针对所述主、备路径的PM表项、MRIB表项和MFIB表项。
【专利摘要】本申请提出组播流量保护方法及装置。方法包括:PIM-SM网络中的任一节点接收到join报文,确定该报文中设置了MoDP应用标记,且分叉标记置位,则,若join报文中设置了主路径标记,则针对所述主路径生成PIM表项、MRIB表项和MFIB表项;若join报文中设置了备路径标记,则针对所述备路径生成PIM表项和MRIB表项;当所述主、备路径建立完成后,所述节点接收到分叉尾节点沿所述主路径发送的组播第一双向转发检测BFD报文时,根据所述MFIB表项转发所述组播第一BFD报文;所述节点接收到分叉首节点沿所述备路径发送的单播第二BFD报文时,根据自身保存的单播转发表项转发单播第二BFD报文。本申请节省了组播流量保护时消耗的带宽。
【IPC分类】H04L12/711, H04L12/761
【公开号】CN104901893
【申请号】CN201510319817
【发明人】周泽泉, 缐崴
【申请人】杭州华三通信技术有限公司
【公开日】2015年9月9日
【申请日】2015年6月11日

最新回复(0)