本发明涉及一种位索引显示复制组播的故障保护路径的预置方法,属于组播技术领域。
背景技术:
位索引显示复制(bier)技术是一种新型组播技术,它将组播承载网络中的核心网部分替换为bier域,bier域包括位转发入口路由器(bfir),位转发路由器(bfr)和位转发出口路由器(bfer)。bier域中的bfir在发送组播分组到bier域中的bfer时,将bfer的位转发路由器身份标识(bfrid)信息编码到组播分组bier头部中的比特位串(bitstring)中。bier域中的bfr创建比特索引转发表(bift),bfr根据组播分组中的bitstring和bift复制和转发组播分组(参见ij.wijnandsande.rosen,multicastusingbitindexexplicitreplication(bier),ietfrfc8279,november2017;www.rfc-editor.org/rfc/rfc8279.txt)。
预置圈的概念最早由w.d.grover在1998年提出,设计的基本目标是以类似格网的效率提供接近环网的保护速度。预置圈的配置发生在任何网络故障之前,并且所要求的实时倒换动作是预先设计好的。
重路由技术包括普通重路由和快速重路由,普通重路由是在网络通讯中原有的传输路径失效时,重新计算路径,建立部分或完整的新路径以恢复通讯。快速重路由是预先计算和配置保护路径,在发生故障时直接切换到保护路径,能够在网络重收敛之前快速恢复业务。风险链路是指容易发生故障的链路。
公开专利位索引显示复制技术(us20180083790/cn105556899a),公开了一种用于执行位索引显示复制的方法和系统,在节点处接收分组,通过比较分组中的多播条目与节点存储的转发信息来选择邻居节点,更新分组中的组播条目并将分组转发到选择的邻居节点。该方法未涉及对bier组播故障的保护方法。
公开专利一种网络故障保护的方法、系统和存储介质(cn110391977a),该发明为环形拓扑的每一转发链路分配与工作路径方向相反的保护环比特位置;新增brft,用于存放沿保护环比特位置的方向进行转发相关的邻接转发表项;当bier报文沿着工作路径进行转发时,若bfr检测到下游邻接发生故障,则查找btaft的表项内容,找出故障转发链路的链路比特位置与保护环比特位置之间的对应关系,并结合brft的表项内容将bier报文沿着保护环比特位置的方向转发至对端故障点。该方法在原有bier转发规则的基础上,新增了brft、btaft等表项,并对原有转发规则有较大改动,操作过程复杂;另外,该方法针对环形拓扑,有一定的局限性。
技术实现要素:
本发明的目的在于解决现有技术的不足,提出了一种解决bier组播链路故障的预先配置保护路径的方法。本方法计算预置圈序列,依据预置圈的方向性计算组播的工作树和风险链路的保护路径,依据所述工作树和保护路径生成bier路由表。
本发明解决其技术问题所采用的技术方法是:以标识值最小的网络节点作为初始节点,选择第一链路计算第一预置圈,选择第二路径计算后续预置圈,得到预置圈序列;依据所述预置圈的方向性计算组播的工作树和风险链路的保护路径;依据所述工作树和保护路径生成bier路由表。本方法有益于组播通信中bier链路故障的快速重路由。
具体步骤如下:
步骤1:计算预置圈序列;
步骤1-1:以bfrid最小的网络节点作为初始节点,选择第一链路计算第一预置圈,按序记录到预置圈序列;
步骤1-2:从预置圈序列按序遍历所有圈上路径,选择第二链路或第二路径ls,ls是两端节点的节点度大于2且未被选择过的圈上链路或路径,计算后续预置圈,并按序记录到预置圈序列;
步骤2:依据所述预置圈的方向性计算组播的工作树;
步骤2-1:将源节点所在预置圈的所有其它节点添加到候选节点集合,若候选节点集合包含宿节点则该圈内的路径为源宿路径转入步骤2-3,否则转入步骤2-2;
步骤2-2:依次候选节点集合内的节点替换源节点迭代搜索并将结果与替换前的圈内路径合并形成源宿路径;
步骤2-3:将所有同源的源宿路径合并为该源作为根的组播工作树;
步骤3:依据所述预置圈的方向性计算风险链路的保护路径;
步骤3-1:将风险链路所在预置圈内与圈方向相反的路径作为风险链路的保护路径;
步骤4:依据工作树和保护路径生成bier路由表;
步骤4-1:依工作树构造工作条目的索引项、fbm项和bfr-nbr项;
步骤4-2:依保护路径构造与工作条目相同索引项的保护条目。
附图说明
图1为bier组播链路故障预先配置保护路径方法的整体流程图;
图2为本方法中,计算有向的预置圈序列的算法流程图;
图3为本方法中,计算组播的工作树的算法流程图;
图4为图3的子流程图,将中转节点序列扩展为工作路径;
图5为本方法中,计算风险链路的保护路径的算法流程图;
图6是本专利的说明样例的拓扑图,和按照图2所示计算预置圈算法计算出的预置圈示意图;
图7是以图6拓扑中bfr2为源节点,按照图3计算工作路径的算法计算得出的组播树示意图;
图8为图6拓扑中bfr2的bift示意图。
具体实施方式
下面结合说明书附图对本发明作进一步的详细说明。
本发明为解决bier组播链路故障,提出了预先配置保护路径的方法。选择第一链路和第二路径计算预置圈序列,根据预置圈序列计算组播的工作树和保护路径。将工作路径配置为bift表中的工作条目,将保护路径配置为bift表中的保护条目。
如图1所示是方法的整体流程图。在步骤(101)选择第一链路,计算第二路径,计算预置圈序列,详细的计算流程见图2所示的算法流程图。在步骤(102)根据预置圈序列,计算组播的工作树,该部分在图3和图4所示的流程图中有详细说明。步骤(103)中计算保护路径,详细计算过程在图5所示的流程图中进行说明。
如图2所示的计算预置圈序列的算法流程图,输入(201)是网络拓扑的邻接矩阵a=(aij)n×n,其中n表示拓扑中节点的个数,αij是大于等于0的整数,表示从节点i到节点j的链路的权重,本算法中要求输入的拓扑中的每条链路都有冗余链路。在步骤(202)中,初始化结果预置圈序列p和临时预置圈序列t为空序列,初始化初始节点m为bfrid最小的节点。结果预置圈序列表示图2所示的预置圈计算算法的输出结果,临时预置圈序列是在计算过程中用到的临时的序列。
在步骤(203)中,从所有与节点s相邻的链路中,选择对端节点的bfrid最小的链路为第一链路lf。然后,在步骤(204)中,计算以lf为圈上链路的无跨接链路的预置圈,预置圈的方向为第一链路的方向,将计算出的预置圈分别加入到序列p和序列t中。
在判决条件(205)中,判断临时预置圈序列t是否为空,该判决条件的目的是为了对计算出的所有预置圈进行遍历,从已计算出的预置圈上选择第二链路继续计算预置圈,该判决条件保证了能够计算出所有的无跨接预置圈,如果符合判决条件(205),表示计算完成,输出结果预置圈序列p(209),否则进入步骤(206)。
在步骤(206)中,从临时预置圈序列t中取出优先级最高的预置圈并记为pt,优先级是在添加预置圈到集合时,按照添加的先后顺序确定的,最先添加的预置圈优先级最高,此处即为标号最小的预置圈优先级最高。为了不重复处理,将预置圈pt从序列t中删除。
在步骤(207)中,计算圈pt上的第二链路或第二路径ls,ls是圈上,两端节点的节点度都大于2的链路,并且不与已计算过的链路或路径重复。然后,在步骤(208),计算以ls为圈上链路的无跨接链路的预置圈,预置圈的方向为第二链路的方向,将计算出的预置圈分别加入到序列p和序列t中。转到判决条件(205)。
在输出(209)中,输出的是结果预置圈序列p。由于拓扑中的预置圈个数是有限的,所以本算法中的遍历有终止条件。
如图3所示是计算组播的工作树的算法流程图。在本算法中,定义处于同一预置圈上的某两个节点为可中转的节点,即可以由预置圈上正方向的路径构成两节点之间的工作路径。
在本算法中,先计算从源节点到宿节点的中转节点序列,然后根据中转节点序列,计算出完整的工作路径。
如图3所示算法在步骤(301)输入预置圈序列p=(pi)、源节点s以及宿节点序列d=(dj),其中预置圈序列p是图2所示算法的输出,源节点s可以是拓扑图中的任一节点,宿节点序列d中的元素是任意拓扑图上的节点。在步骤(302)中,初始化输出工作路径集合o为空集。
在判决条件(303)中判断宿节点序列d是否为空,为空则说明已经计算出源节点s到宿节点序列d中所有宿节点的工作路径,计算结束,转入输出步骤(317)输出工作路径集合。否则转入操作步骤(304)。
在操作步骤(304)中,取宿节点序列d中的第一个宿节点记为d,将d从d中删除以防止重复计算。并初始化搜索节点序列v、已遍历节点序列n以及存放中转节点序列的序列l,将源节点s分别加入到搜索节点序列v和已遍历节点序列n中,序列l中存放的是当前搜索出来的所有可能的中转节点序列,初始序列中只包含一个源节点s。
在判决条件(305)中,判断搜索节点序列v是否为空。为空表示算法未能成功通过中转节点扩展到宿节点,转入步骤(313),输出错误表示计算失败。否则转入步骤(306)。
在步骤(306)中,从搜索节点序列v中取出第一个节点记为v,并将v从v中删除以防止重复计算;从l中取出第一条中转节点序列并记为l,并将l从l中删除以防止重复计算。然后在步骤(307)中,从输入预置圈序列p中计算节点v所在预置圈上不属于n的节点集合记为t。
在判决条件(308)中,判断宿节点d是否在集合t中,如果符合判决条件(308),表明宿节点d是节点v的可中转节点,已经找到了从源节点到宿节点的中转节点序列,转入步骤(311)进行下一步的处理。否则,转入步骤(309)继续搜索。
在步骤(309)中,将t中的所有节点添加到搜索节点序列v和已遍历节点序列n中。在步骤(310)中将t中的所有节点分别添加到l末尾生成新的中转节点序列,并添加到l中。
如果符合判决条件(308),在处理步骤(311)中,将节点d添加到l的末尾生成从s到d的中转节点序列。然后在步骤(312)中,将中转节点序列l扩展为工作路径lw,扩展的方法在图4算法流程图中有详细介绍,将生成的lw添加到集合o中,转入判决条件(303)继续计算s到宿节点序列d中下一个节点的工作路径。
在步骤(314),将工作路径集合o中转换为组播工作树,转换方法为,将从源节点到不同目的节点的工作路径中,相同的链路合并,合并为以源节点为根的组播树。本方法默认两节点之间只有一条直连链路,因此将工作路径相同链路合并一定可以生成无环且联通的组播树。
然后在步骤(315)输出组播树集合o,此时o中存储的是以s为根的组播的工作树。
如图4所示为将中转节点序列扩展为工作路径的算法流程图,在图3的操作步骤(312)中使用到了该计算方法。
该算法的输入(401)是预置圈序列p=(pi)、中转节点序列l。在步骤(402)中初始化输出的工作路径lw为空。在判决条件(403)中,判断l中元素个数是否为1,为1则表示扩展完成,转入输出步骤(408)输出lw;否则转入步骤(404)。
在处理步骤(404)中取出l中的第一个节点记为a,第二个节点记为b,并将a从l中删除。然后在步骤(405)中从p中选择a、b同在的优先级最高的预置圈记为p,在步骤(406)中计算p上沿正方向的a到b的路径记为la,b,la,b就是a到b的工作路径。在步骤(407)中,将la,b添加到lw。然后再次转入判决条件(403)。
如果符合判决判决条件(403),表示扩展完成,转入输出步骤(408)输出工作路径lw。
如图5所示是计算风险链路的保护路径的算法流程图。本算法的输入(501)是预置圈序列p=(pi)、风险链路e。
在处理步骤(502),从预置圈序列p中选择e为圈上链路,并且优先级最高的预置圈记为p。在步骤(503),p上除e之外的路径,就是风险链路e的保护路径,由于沿预置圈方向为工作路径,所以此处的保护是针对沿预置圈方向的链路进行的保护,选择沿预置圈方向反向的路径为保护路径lp。
流程图的输出(504)是风险链路e的保护路径lp。本算法计算出的保护路径能够提供对bier组播链路故障的保护。当到达不同目的节点的组播业务具有相同下一跳时,本方法计算出的风险链路的保护路径能够对这些组播业务进行保护;当到达不同目的节点的组播业务下一跳不同时,本方法计算出的保护路径能够对受故障链路影响的组播业务实现保护。本方法主要针对单链路故障,对同一圈上同时出现多链路故障无法实现保护,但是当多链路故障发生在不同预置圈上时,本方法计算的保护路径可以实现保护。
如图6所示是本方法的说明样例,bfr1(601)、bfr2(602)、bfr3(603)、bfr4(604)、bfr5(605)、bfr6(606)、bfr7(607)都是支持bier的路由器。
图6中圈(608)、(609)、(610)分别是按照图2所示的计算预置圈序列的算法流程图,计算出的预置圈。
下面按照图2所示的计算预置圈序列的算法流程图,计算图8所示的拓扑中的预置圈。
首先在输入步骤(201)中输入图6所示的拓扑的邻接矩阵。在处理步骤(202)确定初始节点m为bfr1,在处理步骤(203)选择第一链路lf=(bfr1,bfr2)。在处理步骤(204)计算以第一链路为圈上链路的预置圈1-2-4-1(608),以第一链路的方向记录预置圈以标志正方向,将计算出的预置圈添加到结果预置圈序列p和临时预置圈序列t中。此时p=(1-2-4-1),t=(1-2-4-1)。
经判决条件(205)转入处理步骤(206)选取序列t中优先级最高即序号最小的预置圈1-2-4-1,将圈1-2-4-1从序列t中删除。
圈1-2-4-1上连续的两个节点,bfr2和bfr4的节点度大于2,选择第二链路ls=(bfr2,bfr4),计算以第二链路为圈上链路的新预置圈,预置圈2-4-5-3-2(609),以第二链路的方向记录预置圈以标志正方向。将圈2-4-5-3-2添加到结果预置圈序列p和临时预置圈序列t中。此时p=(1-2-4-1,2-4-5-3-2),t=(2-4-5-3-2)。
圈1-2-4-1遍历结束。
经判决条件(205)转入处理步骤(206)选取序列t中优先级最高即序号最小的预置圈2-4-5-3-2,将圈2-4-5-3-2从序列t中删除。
选择圈2-4-5-3-2上的第二链路ls=(bfr4,bfr5),计算以第二链路为圈上链路的新预置圈,预置圈4-5-7-6-4。以第二链路的方向记录预置圈以标志正方向。将圈4-5-7-6-4添加到结果预置圈序列p和临时预置圈序列t中。此时p=(1-2-4-1,2-4-5-3-2,4-5-7-6-4),t=(4-5-7-6-4)。
圈2-4-5-3-2遍历结束。
经判决条件(205)转入处理步骤(206)选取序列t中优先级最高即序号最小的预置圈4-5-7-6-4,将圈4-5-7-6-4从序列t中删除。
圈4-5-7-6-4上不存在第二链路。
此时序列t为空集,经判决条件(205)转入输出步骤(210),输出结果预置圈序列p=(1-2-4-1,2-4-5-3-2,4-5-7-6-4)。计算结果如图6所示。
下面按照图3所示的计算工作路径的算法流程图,计算图6所示拓扑的组播的工作树,以bfr2为源节点,bfr7为宿节点为例。
输入(301)为预置圈序列p=(1-2-4-1,2-4-5-3-2,4-5-7-6-4),源节点s=bfr2,宿节点序列d=(bfr7)。在步骤(302)初始化输出工作路径集合o为空集。
经判决条件(303)进入处理步骤(304),取出宿节点bfr7,此时d为空集。
初始化搜索节点序列v=(bfr2),已遍历节点序列n=(bfr2),l=((bfr2))。
取出序列v中的第一个元素bfr2,并将bfr2从序列v中删除,此时v为空。取出序列l中的第一个元素(bfr2),并将(bfr2)从序列l中删除,此时l为空。
bfr2同时在圈1-2-4-1和圈2-4-5-3-2上,宿节点bfr7不在这些预置圈上,将圈上的中转节点添加到序列v和n中。此时v=(bfr4,bfr1,bfr5,bfr3),n=(bfr2,bfr4,bfr1,bfr5,bfr3)。将扩展中转节点序列添加到序列l,此时l=((bfr2,bfr4),(bfr2,bfr1),(bfr2,bfr5),(bfr2,bfr3))。
取出序列v中的第一个元素bfr4,并将bfr4从集合v中删除,此时v=(bfr1,bfr5,bfr3)。取出序列l中的第一个元素(bfr2,bfr4),并将(bfr2,bfr4)从序列l中删除,此时l=((bfr2,bfr1),(bfr2,bfr5),(bfr2,bfr3))。
bfr4同时在圈1-2-4-1、圈2-4-5-3-2和圈4-5-7-6-4上,宿节点bfr7在预置圈4-5-7-6-4上,将bfr7添加到中转节点序列(bfr2,bfr4),生成从源节点bfr2到宿节点bfr7的中转节点序列l=(bfr2,bfr4,bfr7)。
在步骤(312)中,将中转节点序列l扩展为工作路径lw,下面图4流程图说明如何将中转节点序列扩展为工作路径。
在判决条件(403)中,l的长度为3,故取a=bfr2,b=bfr4,将a从l中删除,此时l=(bfr4,bfr7)。
a和b同在的优先级最高的预置圈为1-2-4-1,沿预置圈方向的a到b的路径为(bfr2,bfr4),路径(bfr2,bfr4)为a到b的工作路径,添加到lw,此lw=(bfr2,bfr4)。
转回在判决条件(403)中,l的长度为2,故取a=bfr4,b=bfr7,将a从l中删除,此时l=(bfr7)。
a和b同在的优先级最高的预置圈为4-5-7-6-4,沿预置圈方向的a到b的路径为(bfr4,bfr5,bfr7),路径(bfr4,bfr5,bfr7)为a到b的工作路径,添加到lw,此lw=(bfr2,bfr4,bfr5,bfr7)。
转回在判决条件(403)中,l的长度为1,扩展结束,输出lw=(bfr2,bfr4,bfr5,bfr7)。
在步骤(315)将lw=(bfr2,bfr4,bfr5,bfr7)添加到集合o,此时o={(bfr2,bfr4,bfr5,bfr7)}。
转回判决条件(303),d为空,输出o={(bfr2,bfr4,bfr5,bfr7)},组播的工作树计算结束。
如图7所示,按照此方法计算的以bfr2(702)为源节点,bfr1(701)、bfr3(703)、bfr4(704)、bfr5(705)、bfr6(706)、bfr7(707)为宿节点的组播的工作树。
下面按照图4所示的计算当前节点的保护条目的下一跳节点的算法流程图,计算组播的工作树上风险链路e=(bfr2,bfr4)的保护路径。
风险链路e同时在预置圈1-2-4-1和2-4-5-3-2上,圈1-2-4-1在预置圈序列中的序号更小,优先级更高。沿预置圈反方向的路径(bfr2,bfr1,bfr4)为风险链路(bfr2,bfr4)的保护路径。
将组播的工作树预置为bift中的工作条目,将保护路径预置为bift中的保护条目,计算出了bfr2的bift转发表如图8所示。
表中列(801)为宿节点的bfrid,由集合识别码(setidentifier,si)和bitstring共同表示,在本说明样例中,只有一个集合,因此si为0。表中列(802)为转发比特掩码f-bm,该项是由具有相同下一跳节点的宿节点的bitstring进行与运算的结果。表中列(803)为到达宿节点的下一跳bier转发路由器。
特别的,本针对bier组播链路故障的frr算法对bift进行了改造。对于每一行转发条目,例如以bfr1为宿节点的转发条目(804),分为上下两行条目。上面的条目(805)是链路正常时的转发条目,即工作条目。下面的条目(806)为出现链路故障时快速重路由是参考的保护条目。为方便说明,此处(804)项中间添加了一条横线以区分工作条目(805)和保护条目(806)。
综上分析说明可见,利用第一链路和第二链路计算预置圈序列,由预置圈序列计算工作路径和保护路径的方法,能够预先在bift表中配置工作条目和保护条目,在发生链路故障后,能够提供重路由的保护路径。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。