本发明涉及一种基于分段节点的单播保护方法。
背景技术:
随着通信路由组网技术的快速发展以及网络应用需求的快速增长,家用路由和企业路由的大量普及,导致网络规模越来越大,因此,用户的业务需求以及网络结构都发生了巨大的变化。复杂的组网和多样的用户需求给当前的路由保护技术带来了巨大的挑战。
目前有两种广泛使用的保护环结构:“1+1”保护与“1:1”保护。在“1+1”保护体系结构中,增加一条备用路径来保护信号。在这种体系结构中,数据通过两条并行链路传输,接收端选择这两条信号中较好的一条,即当处用通道效果不好,接收端将切换接收备用路径上的数据。在“1:1”保护体系结构中,虽然也增加一条备用路径,但是在正常运行期间,基本没有流量在保护路径中传输,而只有当主用路径发生故障时,源节点和目的节点才切换到备用路径。1+1保护相对一1:1保护来说不需要对链路状态进行判断,这节省了一部分的计算资源。通常来说,工作路径都是通过域内路由协议生成的(ospf、is-is、rip等),也就是各节点到其他节点的最短径的集合。
技术实现要素:
发明目的:为了解决传统单播保护方案消耗时间较多的问题,本发明提供一种基于分段节点的单播保护方案,使得源节点可以在较小的时间复杂度下寻找到保护路径,解决了在某些拓扑中单纯依靠中继节点无法保护的问题。
技术方案:本发明提供一种基于分段节点的单播保护方法,所述方法包括以下步骤:
(1)预先对偏射径、中继节点、分段节点保护路径进行定义;
(2)对步骤(1)中保护路径进行分类,分类规则为:算法1:源节点s有偏射径,目的节点d无偏射径,并且源节点偏射径上的节点与目的节点d之间没有连通路径;算法2:源节点s没有偏射径,目的节点d有偏射径,且目的节点d的偏射径上的节点与源节点s没有连通路径;算法3:源节点s和目的节点d均没有偏射径,且源节点s和目的节点d之间没有连通路径。
步骤(1)所述定义为:
假定在树t中存在从s发出的两条路径p=(v1,v2,...,vl)和q=(u1,u2,...,uw),其中的数字及字母代表节点编号,如果存在一个整数x满足以下4个条件:
(1)x<l,并且x<w,节点x不是各自路径上最后一个节点;
(2)vi=ui(0≤i≤x),字母表示的两个节点是同一个节点;
(3)vx+1≠ux+1,节点x之后的节点不重合;
(4)(ux+1,ux+2,…,uw)是从ux+1到uw的最短路径;
则称(ux,ux+1)为q路径相对于p路径的偏离边,ux为q路径相对于p路径的偏离节点,路径(ux+1,ux+2,…,uw)为q路径相对于p路径在ux处的偏射径,公式中的数字和字母l和w是节点编号。
步骤(1)所述偏射径构造算法1包括以下步骤:
1)获取工作路径wp(s,d)=pl(s,d),函数pl作用为取(s,d)之间的最短径,工作路径的方向为s→d,源节点s的下一跳节点为记为ns,s为源节点,d为目的节点;在目的节点d的路由表中,获取逆向工作路径wp(d,s)=pl(d,s),wp(d,s)上目的节点d的下一跳节点记为nd,设置保护路径path(s,d)的初始费用为cost_path=∞;
2)获取s→nd的保护路径:path(s,nd);若保护路径的类型为基于中继节点的保护路径则转入3,否则转入4;
3)计算path(s,nd)与pl#(nd,d)的路径的花费,函数pl#(nd,d)作用为取(nd,d)之间的次短路径,若花费小于cost_path则更新cost_path,同时更新保护路径path(s,d)=path(s,nd)∪pl#(nd,d);否则不更新;
4)获取wp(nd,s)的下一跳节点用于更新nd;
5)若nd不为源节点s则返回步骤2,否则转入步骤6;
6)返回cost_path和path(s,d)。
所述中继节点的构造算法2包括以下步骤:
1)获取工作路径wp(s,d)=pl(s,d),工作路径的方向为s→d,s为源节点,d为目的节点,获取在最短路径wp(s,d)上的源节点s的下一跳节点,记为ns;设置保护路径path(s,d)的初始费用为cost_path=∞;
2)获取ns→d的保护路径:path(ns,d),若其类型为基于中继节点的保护路径转入步骤3,否则转入步骤4;
3)计算若cost(pl#(s,ns))+cost(path(ns,d))<cost_path则更新cost_path,并更新保护路径path(s,d)=pl#(s,ns)∪path(ns,d);否则不更新;
4)获取wp(ns,d)的下一跳节点用以更新ns;
5)若ns不是目的节点d则返回步骤2,否则转入步骤6;
6)返回cost_path和path(s,d)。
所述分段节点的构造算法3包括以下步骤:
1)获取工作路径wp(s,d)=pl(s,d),工作路径的逆向路径wp(d,s)=pl(d,s);
2)获取源节点在工作路径wp(s,d)的下一跳节点记为ns;获取目的节点在wp(d,s)上的下一跳节点记为nd;
3)获取ns→nd的保护路径:path(ns,nd),若保护路径类型为基于中继节点的保护路径,则转入步骤4,否则转入步骤5;
4)若cost(pl#(s,ns))+cost(path(ns,nd))+cost(pl#(nd,d))<cost_path则更新cost_path,并更新保护路径为path(s,d)=pl#(s,ns)∪path(ns,nd)∪pl#(nd,d);
5)获取逆向工作路径wp(nd,s)的下一跳节点用于更新nd,若nd≠ns转入步骤3,否则转入步骤6;
6)获取目的节点在wp(d,s)上的下一跳节点重新覆盖nd;
7)获取ns→d工作路径wp(ns,d)的下一跳节点用来更新ns;
8)若nd≠ns,转入步骤3,否则转入步骤9;
9)返回cost_path与path(s,d)。
步骤1:若源节点s有偏射径,目的节点无偏射径,且源节点偏射径上的节点与目的节点与目的节点d无连通径,转到步骤2,否则转步骤3;
步骤2:执行偏射径保护路径算法1;
步骤3:若源节点无偏射径,目的节点有偏射径,且目的节点偏射径上的节点与源节点无连通径,转到步骤4,否则转步骤5;
步骤4:执行中继节点保护路径算法2;
步骤5:若源节点与目的节点均无偏射径,转步骤6,否则转步骤7;
步骤6:使用分段节点保护路径算法3;
步骤7:结束。
有益效果:本发明的一种基于分段节点的单播保护方法,具有以下优点:
1.本发明本专利通过构造偏射径、中继节点保护路径、分段节点保护路径,并设定分类规则对保护路径进行分类,使得源节点可以在相对较短的时间内和较小的时间复杂度的情况下寻找到保护路径;解决了单纯依靠中继节点无法保护到的问题。
附图说明
图1是网络拓扑实例;
图2是基于中继节点的保护路径;
图3是基于分段节点源节点有偏射径保护路径(算法1);
图4是基于分段节点的目的节点有偏射径保护路径(算法2);
图5是基于分段节点的源目的节点无偏射径保护路径(算法3);
图6是具体实例网络拓扑(算法1);
图7是具体实例网络拓扑(算法2)
图8是基于分段节点源节点有偏射径保护路径流程图;
图9是基于分段节点的目的节点有偏射径保护路径流程图;
图10是基于分段节点的源目的节点无偏射径保护路径流程图。
具体实施方式
下面结合附图对本发明的技术方案做进一步的详细说明:
一种基于分段节点的单播保护方法,包括以下步骤:
所述方法包括以下步骤:
(1)预先对偏射径、中继节点、分段节点保护路径进行定义;
(2)依据步骤(1)对保护路径进行分类,分类规则为:算法1:源节点s有偏射径,目的节点d无偏射径,并且源节点偏射径上的节点与目的节点d之间没有连通路径;算法2:源节点s没有偏射径,目的节点d有偏射径,且目的节点d的偏射径上的节点与源节点s没有连通路径;算法3:源节点s和目的节点d均没有偏射径,且源节点s和目的节点d之间没有连通路径。
步骤(1)所述偏射径定义为:
假定在树t中存在从s发出的两条路径p=(v1,v2,...,vl)和q=(u1,u2,...,uw),其中的数字及字母代表节点编号,如果存在一个整数x满足以下4个条件:
(1)x<l,并且x<w,节点x不是各自路径上最后一个节点;
(2)vi=ui(0≤i≤x),字母表示的两个节点是同一个节点;
(3)vx+1≠ux+1,节点x之后的节点不重合;
(4)(ux+1,ux+2,…,uw)是从ux+1到uw的最短路径;
则称(ux,ux+1)为q路径相对于p路径的偏离边,ux为q路径相对于p路径的偏离节点,路径(ux+1,ux+2,…,uw)为q路径相对于p路径在ux处的偏射径,公式中的数字和字母l和w是节点编号。
步骤(1)所述中继节点定义为:
如图2,工作路径是r→d的一条最短路径p,如果该工作路径存在一条与之没有共享边的保护路径r→3→d,且节点3不在工作路径上,那么我们就将节点3称为中继节点,保护路径上r→3段和3→d段称为保护路径的两条超边。
步骤(1)所述分段节点定义为:
如图3所示,r→2的保护路径r→4→2是基于中继节点的保护路径,2→d的保护路径在最短路径形成的路由表中不存在保护路径,所以节点2、节点3、节点d将工作路径上的端口暂时封闭,通过ospf协议生成次优路径后,得到2→5→d为2→d的保护路径,其中节点2就被称为分段节点。
步骤(2)所述单播保护路径构造算法1包括以下步骤:
1)如图3、图8所示,获取工作路径wp(s,d)=pl(s,d),工作路径的方向为s→d,s为源节点,d为目的节点。在目的节点d的路由表中,获取逆向工作路径wp(d,s)=pl(d,s),wp(d,s)上目的节点d的下一跳节点记为nd,设置保护路径path(s,d)的初始费用为cost_path=∞;
2)获取s→nd的保护路径:path(s,nd);若保护路径的类型为基于中继节点的保护路径则转入3,否则转入4;
3)计算path(s,nd)与pl#(nd,d)的路径的花费,若花费小于cost_path则更新cost_path,同时更新保护路径path(s,d)=path(s,nd)∪pl#(nd,d);否则不更新;
4)获取wp(nd,s)的下一跳节点用于更新nd;
5)若nd不为源节点s则返回步骤2,否则转入步骤6;
6)返回cost_path和path(s,d)。
所述单播保护路径构造算法2包括以下步骤:
1)如图4、图9所示,获取工作路径wp(s,d)=pl(s,d),工作路径的方向为s→d,s为源节点,d为目的节点,获取在最短路径wp(s,d)上的源节点s的下一跳节点,记为ns;设置保护路径path(s,d)的初始费用为cost_path=∞;
2)获取ns→d的保护路径:path(ns,d),若其类型为基于中继节点的保护路径转入步骤3,否则转入步骤4;
3)计算若cost(pl#(s,ns))+cost(path(ns,d))<cost_path则更新cost_path,并更新保护路径path(s,d)=pl#(s,ns)∪path(ns,d);否则不更新;
4)获取wp(ns,d)的下一跳节点用以更新ns;
5)若ns不是目的节点d则返回步骤2,否则转入步骤6;
6)返回cost_path和path(s,d)。
所述单播保护路径构造算法3包括以下步骤:
1)如图5、图10所示,获取工作路径wp(s,d)=pl(s,d),工作路径的逆向路径wp(d,s)=pl(d,s);
2)获取源节点在工作路径wp(s,d)的下一跳节点记为ns;获取目的节点在wp(d,s)上的下一跳节点记为nd;
3)获取ns→nd的保护路径:path(ns,nd),若保护路径类型为基于中继节点的保护路径,则转入步骤4,否则转入步骤5;
4)若cost(pl#(s,ns))+cost(path(ns,nd))+cost(pl#(nd,d))<cost_path则更新cost_path,并更新保护路径为path(s,d)=pl#(s,ns)∪path(ns,nd)∪pl#(nd,d);
5)获取逆向工作路径wp(nd,s)的下一跳节点用于更新nd,若nd≠ns转入步骤3,否则转入步骤6;
6)获取目的节点在wp(d,s)上的下一跳节点重新覆盖nd;
7)获取ns→d工作路径wp(ns,d)的下一跳节点用来更新ns;
8)若nd≠ns,转入步骤3,否则转入步骤9;
9)返回cost_path与path(s,d)。
步骤1:若源节点s有偏射径,目的节点无偏射径,且源节点偏射径上的节点与目的节点与目的节点d无连通径,转到步骤2,否则转步骤3;
步骤2:执行单播保护路径构造算法1;
步骤3:若源节点无偏射径,目的节点有偏射径,且目的节点偏射径上的节点与源节点无连通径,转到步骤4,否则转步骤5;
步骤4:执行单播保护路径路径构造算法2;
步骤5:若源节点与目的节点均无偏射径,转步骤6,否则转步骤7;
步骤6:使用单播保护路径构造算法3;
步骤7:结束。
结合图6网络拓扑,对具体实施流程进行分析。
如图6所示,工作路径为wp(s,d)=s→1→2→3→d,算法目标为对工作路径进行保护。
1.首先检测到源节点s存在偏射径s→4→5,而目标节点d无偏射径,所以采用第一类保护路径构造算法。
2.获取工作路径wp(s,d)=s→1→2→3→d,其中s为源节点,d为目的节点,获取工作路径的逆向路径wp(d,s)上目的节点d的下一跳节点3。设置保护路径path(s,d)的初始费用cost_path=∞。
3.计算源节点s到节点3的保护路径:path(s,3),发现不存在这样一条路径可以对源节点s到节点3进行保护。所以获取wp(3,s)的下一跳节点2。
4.因为节点2和源节点s不相同,所以计算源节点到节点2的保护路径path(s,2)。发现此时源节点有两条偏射径,其中一条基于中继节点的保护路径为s→4→5→2,它的花费为1+1+1=3,另一条可选的保护路径为s→7→2,他的花费为3+4=7,因为3<7,所以path(s,2)=s→4→5→2,花费为3。
5.将节点2、节点3与目的节点d之间工作路径上的端口封闭,使用ospf协议重新计算节点2→d的次短路径,发现有两条可选路径,其中一条为2→6→d,路径花费为1+2=3,另一条路径为2→8→9→d,花费为3+3+3=9,因为3<9,所以选择最短的路径为pl#(2,d)为2→6→d,花费为3。
6.源节点s到目的节点d的一条保护路径花费为3+3=6。因为6<cost_path,所以更新cost_path=6。
7.获取wp(2,s)下一跳节点1,发现不存在path(s,1)。
8.获取wp(1,s)下一跳节点s,发现下一跳节点是源节点s。
返回寻找到的保护路径path(s,d)为s→4→5→2→6→d。花费为6。
如图7所示,工作路径为wp(s,d)=s→1→2→3→d,算法目标为对工作路径进行保护。
1、首先检测到源节点s不存在偏射径,而目的节点d有变蛇精,所以采用第二类保护路径构造算法。
2、获取工作路径wp(s,d)=s→1→2→3→d,其中s为源节点,d为目的节点,获取工作路径的wp(s,d)上源节点s的下一跳节点1,记为ns。设置保护路径path(s,d)的初始费用为cost_path=∞。
3、计算目的节点d到节点1的保护路径:path(1,d),发现不存在这样一条保护路径可以对节点1到目的节点d进行保护,所以获取wp(1,d)的下一跳节点2。
4、因为节点2与目的节点d不相同,所以计算节点2到目的节点d的保护路径path(2,d),发现此时目的节点有两条偏射径,其中一条基于中继节点的保护路径为d→6→2,它的花费为1+2=3,另一条可选的保护路径为d→9→8→2,他的花费为3+3+3=9.因为3<9,所以path(2,d)为2→6→d。花费为3。
5、将节点s、1、2之间工作路径上的端口封闭,使用ospf协议重新计算s→2之间的次短路径,发现有两条可选路径,其中一条为s→4→5→2。花费为1+1+1=3,。另外一条为s→7→2,花费为3+4=7,因为3<7,所以选择最短路径为pl#(s,2)为s→4→5→2,花费为3。
6、所以源节点s到目的节点d的一条保护路径花费为3+3=6,因为6<cost_path,所以更新cost_path=6。
7、获取wp(s,2)下一跳节点3,发现不存在path(3,d)。
8、获取wp(s,1)下一跳节点d,发现下一跳节点是目的节点d。
9、返回寻找到的保护路径path(s,d)为s→4→5→2→6→d,花费为6。