CN103532861A - 基于生成树的域内动态多路径生成方法 - Google Patents
基于生成树的域内动态多路径生成方法 Download PDFInfo
- Publication number
- CN103532861A CN103532861A CN201310461708.2A CN201310461708A CN103532861A CN 103532861 A CN103532861 A CN 103532861A CN 201310461708 A CN201310461708 A CN 201310461708A CN 103532861 A CN103532861 A CN 103532861A
- Authority
- CN
- China
- Prior art keywords
- node
- root
- represent
- down hop
- hash table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于生成树的域内动态多路径生成方法,包括:按照优先级结构将根结点加入到创建的优先级队列中;判断优先级队列是否为空,若不空,则选取优先级队列的队首元素,并将其删除;访问队首元素的所有邻居结点,判断各结点是否被访问过,若未被访问过,则更新结点信息,并将更新后的信息添加到优先级队列中,否则,根据设定规则计算根结点到队首元素的下一跳以及根结点到当前邻居结点的下一跳;若访问完所有邻居结点,则返回判断优先级队列是否为空的步骤。当链路状态变化时,该方法动态调节生成的最短路径树并更新下一跳,而不需要重新计算。本发明方法在确保为根结点到所有目的结点计算出多条无环路径的同时降低了算法的复杂度。
Description
技术领域
本发明属于互联网技术领域,尤其涉及域内路由算法,具体地说,是涉及一种基于生成树的域内动态多路径生成方法。
背景技术
互联网由上万个独自运维的自治系统AS(Autonomous System)构成。
域内链路状态路由协议(OSPF和ISIS)控制着AS内部的报文转发路径,但是OSPF和ISIS协议没有很好的利用网络中固有的路径多样性,从结点c到结点d只能计算出一条最短路径,因此网络的可靠性和安全性都比较差。然而多路径路由算法很好的利用了网络中路径多样性,可以为结点c到结点d计算出多条路径,因此很容易实现负载均衡。
目前已经提出了很多种多路径路由的解决方案。等值多路径路由协议(EqualCostMultipathRouting,ECMP),ECMP可以为结点c到结点d计算出多条最短路径,网络管理员可以通过调节边的权值来构造多条最短路径,然而这个问题被证明是NP-Hard问题。多路径算法(Multiple Path Algorithm,MPA),MPA的核心思想是当结点c的邻居结点到结点d的最小代价小于结点c到结点d的最小代价时,结点c可以选择此邻居结点作为其到结点d的下一跳。如果要实现MPA,结点c必须得到其所有邻居结点到d的最小代价。可以通过两种方法得到结点c的所有邻居结点到结点d的最小代价,第一种方法是在结点c上构造以邻居结点为根的SPT,但是这种方法增加了算法的复杂度,另外一种方法是邻居结点将其计算的到结点d的最小代价传递给结点c,而这种方法则增加了通信开销。最近IETF提出了Multi-topology routing,该方法的特点是预先假设某些链路失效,在去除失效链路的网络拓扑图中计算最短路径,该方法同样需要在一个结点上计算多个SPT,因此算法的时间复杂度比较高。
因此,需要本领域研究人员迫切解决的一个问题就是如何计算出从结点c到结点d的多条路径的同时降低算法复杂度。
发明内容
本发明所要解决的技术问题之一是需要提供一种基于生成树的域内动态多路径生成方法,该方法在计算出根结点到所有目的结点的多条路径的同时,降低算法复杂度。
为了解决上述技术问题,本发明提供了一种基于生成树的域内动态多路径生成方法,包括:步骤1,初始化一网络的所有结点的结点信息;步骤2,创建优先级队列,按照优先级结构将根结点加入到所述优先级队列中,所述优先级结构包括结点的路由ID、结点的当前最小代价和结点的当前父结点;步骤3,判断所述优先级队列是否为空,若判断结果为否,则执行步骤4,否则结束操作;步骤4,根据出队列规则选取所述优先级队列中的队首元素,并将其从所述优先级队列中删除,其中,所述出队列规则为选取对应最小的当前最小代价的结点作为队首元素;步骤5,访问所述队首元素的邻居结点,判断当前邻居结点是否被访问过,其中,若当前邻居结点未被访问过,则更新关于当前邻居结点的结点信息,并将更新后的信息按照优先级结构添加到所述优先级队列中,否则,根据设定规则计算所述根结点到所述队首元素的下一跳以及所述根结点到当前邻居结点的下一跳;步骤6,判断当前邻居结点是否是该队首元素的最后一个邻居结点,若是,则返回步骤3,否则获取下一个邻居结点并返回步骤5。
在一个实施例中,在所述步骤4中,若对应最小的当前最小代价的结点为多个,则从中选取路由ID最小的结点作为队首元素。
在一个实施例中,假设以根结点c为根的最短路径树Tc中的两个结点u和v,并且结点u和v互为邻居关系,定义Dc(v,u)=Cc(v)-Cc(Bc(v))+L(u,v),如果Dc(v,u)<Cc(u)成立,则称v对u有贡献,
其中,Cc(v)和Cc(u)分别表示根结点c到结点v和结点u的最小代价,Bc(u)表示根结点c到结点v的最优下一跳,L(u,v)表示结点u和结点v的直连代价,
在所述步骤5中,所述设定规则为:
假设所述队首元素为v,所述当前邻居结点为u,如果v对u有贡献,则设置哈希表项hc[v,u]=1,并且将Bc(v)加入到Nc(u)中,同样,如果u对v有贡献,则设置哈希表项hc[u,v]=1,并且将Bc(u)加入到Nc(v)中,
其中,Nc(u)和Nc(v)分别表示根结点c到结点u和结点v的下一跳的集合,此外,将一个元素加入到一个下一跳集合时,需同时维护该元素被加入该集合的次数,用引用计数表示。
在一个实施例中,在所述步骤1中,进一步,
设置根结点的最小代价为0,将除所述根结点以外的结点的最小代价设置为无穷大;
将所有结点的父结点设置为空;
将所有结点的访问标记属性设置为未访问。
在一个实施例中,通过以下表达式来计算根结点c到结点v的最优下一跳Bc(v):
其中,Pc(v)表示v的父结点。
在一个实施例中,还包括:
当链路L(s,e)的代价增加时,判断以根结点c构造的最短路径树的结构是否变化,其中,根结点c到结点s的代价Cc(s)≥根结点c到结点e的代价Cc(e),
若判断结果为变化,则将结点e和e的所有子孙结点加入到所述优先级队列中,并对这些结点执行所述步骤3至所述步骤6;
若判断结果为不变化,则分为以下两种情况来调整所述最短路径树:如果哈希表项hc[s,e]=1并且Dc(s,e)≥Cc(e),则将Bc(s)从Nc(e)中删除,并且更新哈希表项hc[s,e]=0;如果哈希表项hc[e,s]=1并且Dc(e,s)≥Cc(s),则将Bc(e)从Nc(s)中删除,并且更新哈希表项hc[e,s]=0,
其中,其中,Bc(s)表示根结点c到结点s的最优下一跳,Nc(e)表示根结点c到结点e的下一跳的集合,Bc(e)表示根结点c到结点e的最优下一跳,Nc(s)表示根结点c到结点s的下一跳的集合,哈希表项hc[s,e]=1表示结点s对结点e有贡献,反之,hc[s,e]=0,哈希表项hc[e,s]=1表示结点e对结点s有贡献,反之,hc[e,s]=0。
在一个实施例中,当链路L(s,e)的代价减小时,判断以根结点c构造的最短路径树的结构是否变化,其中,根结点c到结点s的代价Cc(s)≥根结点c到结点e的代价Cc(e),
若判断结果为变化,则将结点e加入到所述优先级队列中,并对结点e执行所述步骤3至所述步骤6;
若判断结果为不变化,则分为以下两种情况来调整所述最短路径树:如果哈希表项hc[s,e]=0并且Dc(s,e)<Cc(e),则将Bc(s)添加至Nc(e)中并更新其引用计数,同时更新哈希表项hc[s,e]=1;如果哈希表项hc[e,s]=0并且Dc(e,s)<Cc(s),则将Bc(e)添加至Nc(s)中并更新其引用计数,同时更新哈希表项hc[e,s]=1,
其中,Bc(s)表示根结点c到结点s的最优下一跳,Nc(e)表示根结点c到结点e的下一跳的集合,Bc(e)表示根结点c到结点e的最优下一跳,Nc(s)表示根结点c到结点s的下一跳的集合,哈希表项hc[s,e]=1表示结点s对结点e有贡献,反之,hc[s,e]=0,哈希表项hc[e,s]=1表示结点e对结点s有贡献,反之,hc[e,s]=0。
在一个实施例中,在所述步骤5中,若队首元素v的当前邻居结点u未被访问,则将该结点u的当前最小代价TC更新为TC=Cc(v)+L(v,u),将该结点u的当前父结点TP更新为TP=v,将该结点u的访问标记属性设置为已访问,其中,Cc(v)表示根结点c到队首元素v的最小代价,L(v,u)表示结点u和结点v的直连代价。
与现有技术相比,本发明的一个或多个实施例可以具有如下优点:
在本发明提出的一种基于生成树的域内动态多路径生成方法中,每个结点只需运行一次就可以计算出该结点到所有目的结点的多条无环路径。该方法在每个结点上维护一个以该结点为根的最短路径树(Shortest Path Tree,SPT),当链路状态发生变化的时候,该方法不需要重新计算该结点到所有目的的下一跳,动态的调整该SPT的结构并且动态更新下一跳信息。
实验结果表明本发明在确保为c到所有目的计算出多条无环路径的同时降低了算法的复杂度。本发明充分利用了网络中路径的多样性,因此具有更高的可靠性。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明第一实施例的基于生成树的域内动态多路径生成方法的流程示意图;
图2是一简单网络的拓扑示意图;
图3是根据本发明一实施例的方法获取图2所示网络中根结点a的最短路径树和a到其它结点的下一跳的示例图;
图4是根据本发明一实施例的方法构造的另一网络中以结点a为根的最短路径树的示例图;
图5是一链路发生变化的最短路经树的示例图;
图6为根据本发明第二实施例的基于生成树的域内动态多路径生成方法的流程示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
为了弥补现有算法的不足,本发明提出了一种基于生成树的域内动态多路径生成方法。为了确保该方法计算出的从根结点到所有目的的路径是没有环路的,网络中所有的结点必须保持一致的计算信息,但是网络中所有的结点是分布式计算的,因此要想得到一致的计算信息,每个结点必须进行相同的计算或者通过邻居交换信息。本发明方法以链路状态路由协议(OSPF或者ISIS)为基础,每个结点构造以自身为根的SPT。
为了方便描述本实施例,先定义一些标记,这些标记适用于整个发明内容。我们将网络拓扑抽象为一个无向连通图G(V,E),其中V和E分别代表图的顶点和边,L(u,v)是结点u和结点v的直连代价,当结点u和结点v不是邻居时,该值为无穷大,R(v)表示结点v的路由ID(Router-ID),Tc表示以结点c为根的SPT。在Tc中,Cc(v)表示结点c到结点v的最小代价,Hc(v)表示结点v的所有孩子结点,Pc(v)表示结点v的父结点,Dc(v)表示结点v以及结点v的所有子孙结点。
特别是,该方法的目的是为结点c计算到目的结点的多个下一跳。我们用Nc(v)表示根结点c到结点v的下一跳的集合,Bc(v)表示根结点c到结点v的最优下一跳,并且Bc(v)∈Nc(v)。为了方便表述,后面相关内容或附图也可以使用N(v)和B(v)来分别表示根结点到结点v的下一跳的集合以及根结点到结点v的最优下一跳。
我们定义下述选取下一跳的规则。
规则1:[Next hop selection rule]
假设Tc中的两个结点u、v并且u和v互为邻居关系,定义Dc(v,u)=Cc(v)-Cc(Bc(v))+L(u,v),如果Dc(v,u)<Cc(u)成立,则称v对u有贡献,并且将Bc(v)加入到Nc(u)中。
需要说明的是,上述规则最重要的一点就是计算出的根结点到所有目的结点的多条路径是无环的。下面我们证明利用规则1计算的路径没有环路。
定理1:对于任意的目的v,如果c的邻居x满足条件Cx(v)<Cc(v),
结点c可以将报文发送给它该邻居结点x,则c到目的v的路径将不会出现环路。
证明:因为Cx(v)是结点x到结点v的最短路径,Cc(v)是结点c到结点v的最短路径,因此从c到目的v的代价是单调递减的,因此c到目的v的路径将不会出现环路。
定理2:假设Tc中的两个结点u、v并且u和v互为邻居关系,定义Dc(v,u)=Cc(v)-Cc(Bc(v))+L(u,v),如果Dc(v,u)<Cc(u)成立,则可以将Bc(v)加入到Nc(u)中。
证明:因为Dc(v,u)是结点Bc(v)到v再到u的这条实际存在的路径的代价,因此
第一实施例
图1是根据本发明第一实施例的基于生成树的域内动态多路径生成方法的流程示意图,本实施例是静态情况下的多路径生成方法,下面参考图1来详细说明构造以某一结点为根的SPT的各个步骤。在构造SPT的过程中可以计算出根结点到其它所有结点的多个下一跳。并且构造SPT是一个迭代的过程,每次都选择一个结点加入到SPT。
步骤S110,初始化一网络的所有结点的结点信息。
具体地,初始化的结点信息包括每个结点的代价、父亲结点、子孙结点以及访问标记属性(visited)。为每个结点定义一个访问标记属性,设置初值为未访问false,当该结点加入到SPT后,设置访问标记属性为已访问true。
更具体地,初步设置根结点,例如结点c的最小代价为0,即Cc(c)=0,将除根结点c以外的任意结点v的最小代价设置为无穷大,即Cc(v)=∞。将所有结点(例如结点v)的父结点设置为空NULL,即Pc(v)=NULL。将所有结点(例如结点v)的访问标记属性(visited)设置为未访问false,即v.visited=false。
如图2所示,其为一简单网络的拓扑图,在该网络中包括5个结点,分别为结点a、b、c、d和e。每条链路上的数字表示所连接的两结点之间的直连代价,例如,结点a到结点b的直连代价L(a,b)为10。在构造以结点a为根的最短路径树时,首先需要按照上述步骤将该网络中的所有结点进行初始化。
步骤S120,创建优先级队列Q,将结点c的优先级结构信息加入到优先级队列Q中。
需要说明的是,该优先级队列Q中元素的结构为QStruct(ID,TC,TP),其中ID表示结点的Router-ID,TC为结点的当前最小代价,TP表示结点的当前父结点。将根结点c的QStruct信息加入到Q中,完成该步骤后,Q中目前只有一个元素Q(c,0,NULL)。
步骤S130,判断优先级队列Q是否为空,若判断结果为否,则执行步骤S140,否则结束操作。
步骤S140,根据出队列规则取出优先级队列Q中的队首元素(Cur),设置该元素为当前结点,并且将该元素从队列Q中删除。
其中,定义ExtractMin为结点出队列的规则,该规则如下:
(1)选取TC最小的结点;
(2)当有多个结点有相同的TC,选择Router-ID最小的结点。
当一个结点出队列后,该结点的最小代价和父结点就确定了,并且将该结点的访问标记属性(visited)设置为true。
如果当前结点不是根结点c且访问属性为false,则变更当前结点v的visited属性为true(即v.visited=true),并且更新当前结点的最小代价:Cc(v)=tc;子孙结点:Hc(tp)=Hc(tp)∪{v},Hc(Pc(v))=Hc(Pc(v))\{v};父结点:Pc(v)=tp。并且通过以下表达式来计算根结点c到当前结点v的最优下一跳Bc(v)。
步骤S150,访问队首元素Cur的所有邻居Nei。
步骤S160,判断当前邻居结点是否被访问过。
如果该邻居结点未被访问过,则更新该邻居结点的结点信息,并将该邻居结点更新后的信息按照优先级结构加入到优先级队列Q中。
需要说明的是,在初次遍历当前结点v的所有邻居结点,由于所有邻居结点的访问标记属性(visited)设置为false,也就是所有邻居结点未被访问,此时需要对所有邻居结点进行信息更新并加入到优先级队列Q中。例如对于邻居结点u来说,计算u的TC:TC=Cc(v)+LC(v,u)和TP:TP=v。将计算的结点u的QStruct(u,TP,TC)加入到Q中。
如果该邻居结点已经被访问过,则根据上述规则1计算根结点c到队首元素Cur的下一跳以及根结点c到该邻居结点Nei的下一跳。
进一步地,如上述规则1可知,假设队首元素为v,当前邻居结点为u,如果v对u有贡献,则设置哈希表项hc[v,u]=1,并且将Bc(v)加入到Nc(u)中,同样,如果u对v有贡献,则设置哈希表项hc[u,v]=1,并且将Bc(u)加入到Nc(v)中。此外,将一个元素加入到一个下一跳集合时,需同时维护该元素被加入该集合的次数,用引用计数表示。也就是,将引用计数作加1计算。
步骤S170,判断当前邻居结点是否是该队首元素的最后一个邻居结点,若是则返回步骤S130,否则获取下一个邻居结点并返回步骤S160。
当队列Q中的元素为空时,算法执行完毕。此时已经计算出结点c到所有结点的下一跳,将这些下一跳存入到路由表中。
如图3所示,为根据本实施方法计算得到的关于图2所示网络中根结点a的最短路径树的整个过程。在图3中,依次访问并添加根结点a的邻居结点,如访问结点b的时候,得到了根结点a与结点b的关系,即B(b)=b,N(b)={b},直到访问完e,构造了关于根结点a的最短路径树。
图4所示为利用上述方法得到另一网络的以结点a为根的最短路径树,其中实线为SPT中的边,虚线为拓扑图中的边。该网络中所包含的结点较多,包括14个结点,同图2所示,每条链路上的数字表示所连接的两结点之间的直连代价,而圈内的数字表示连接的两结点之间的最小代价,例如⑩表示根结点a到结点b的最小代价为10。并且在该最短路径树中还标注了根结点到每个结点的下一跳的集合以及相关结点的贡献程度。
本发明提出的一种基于生成树的域内动态分布式多路径生成方法,本发明通过在每个结点上维护一个SPT,其时间复杂度类似于Dijkstra算法,具有较低的时间复杂度。另外,该方法具有较高的运行效率,在降低运行时间的同时大大提高了网络的可靠性。每一个结点只需要维护一个以自身为根结点的最短路径树SPT。当SPT构造完成时,该结点将计算出到所有目的的多个下一跳。
第二实施例
图6为根据本发明第二实施例的基于生成树的域内动态多路径生成方法的流程示意图,本实施例是在链路状态发生变化时的,即动态的多路径生成方法,下面参考图6来详细说明各个步骤。
为了描述方便,下面我们假设根结点c到结点s的最小代价Cc(s)≥根结点c到结点e的最小代价Cc(e)。
步骤S210,分析链路(边)L(s,e)的代价变化,当边L(s,e)的代价增加,则执行步骤S220,否则执行步骤S230。
步骤S220,判断静态构造的关于根结点c的最短路径树SPT的结构是否改变。
具体地,若判断结果为否,即该边不在SPT上时,则根结点c到结点s和结点e的下一跳将会受到影响。分为以下两种情况来动态调整SPT的结构:
如果哈希表项hc[s,e]=1并且Dc(s,e)≥Cc(e),函数Del(Bc(s),Nc(e))将被调用,即将根结点c到结点s的最优下一跳Bc{s)从根结点c到结点e的下一跳的集合Nc(e)中删除,并且更新哈希表项hc[s,e]=0。
需要说明的是,如果Bc(s)在Nc(e)中的引用计数大于1,则只引用计数减1,如果引用计数从1降为0,才真正从Nc(e)中删除Bc(s)。这是因为,由于有多个不同结点s、x、y、z,...,它们的最优下一跳相同,假设为b,而且都对e有贡献,则这个相同的最优下一跳b可能会被多次加入N(e),所以采用一个引用计数来记录相应的次数,当把b加入N(e)的时候,实际是增加其引用计数,当希望从N(e)中删除b时,实际是减小其引用计数,只有当引用计数降为0的时候,才需要将b真正从N(e)中删除。
反之,如果哈希表项hc[e,s]=1并且Dc(e,s)≥Cc(s),函数Del(Bc(e),Nc(s))将被调用,即将根结点c到结点e的最优下一跳Bc(e)从根结点c到结点s的下一跳的集合Nc(s)中删除,并且更新哈希表项hc[e,s]=0。
需要说明的是,如果Bc(e)在Nc(s)中的引用计数大于1,则只引用计数减1,如果引用计数从1降为0,才真正从Nc(s)中删除Bc(e)。
其中,对于任意两个结点u和v,hc[u,v]=1表示u对v有贡献,反之hc[u,v]=0。
如图5所示,在该最短路径树中链路ej和链路lm的权值(直连代价)发生变化。链路ej的权值从7增加到9,链路lm的权值从9增加到11。并且这两条链路均不是最短路径树的边,根据图4可以看出,链路ej符合上述第一种情况,因此,将根结点a到结点e的最优下一跳从根结点a到结点j的下一跳的集合中删除,即将结点b从{b,c}中删除,得到N(j)={c},并同时更新哈希表项hc[e,j]=0。
另一方面,当边L(s,e)的代价增加,并且SPT结构发生改变,即该边在SPT上时,e的所有子孙的下一跳将会受到影响,则将e和e的所有子孙加入到优先级队列中。对这些结点执行第一实施例中的步骤S130-S170,相应步骤请参考第一实施例的描述,在此不再赘述。
步骤S230,当边L(s,e)的代价减小,判断静态构造的关于结点c的最短路径树SPT的结构是否改变。
具体地,若不影响SPT的结构时,根结点c到结点s和结点e的下一跳将会受到影响。分为以下两种情况来动态调整SPT的结构:
如果哈希表项hc[s,e]=0并且Dc(s,e)<Cc(e),函数Add(Bc(s),Nc(e))将被调用,即将根结点c到结点s的最优下一跳Bc(s)添加至根结点c到结点e的下一跳的集合Nc(e)中并更新其引用计数,同时更新哈希表项hc[s,e]=1。
反之,如果哈希表项hc[e,s]=0并且Dc(e,s)<Cc(s),函数Add(Bc(e),Nc(s))将被调用,即将根结点c到结点e的最优下一跳Bc(e)添加至根结点c到结点s的下一跳的集合Nc(s)中并更新其引用计数,同时更新哈希表项hc[e,s]=1。
另一方面,当边L(s,e)的代价减小,并且影响SPT的结构时,将e加入到优先级队列中,执行第一实施例中的步骤S130-S170,相应步骤请参考第一实施例的描述,在此不再赘述。
本发明提出了一种基于生成树的域内动态分布式多路径生成方法,每一个结点只需要维护一个以自身为根结点的SPT(Shortest Path Tree)。当SPT构造完成时,该结点将计算出到所有目的的多个下一跳。当链路状态发生变化的时候,DMPA不需要重新构造SPT和下一跳信息,该方法可以动态的调整SPT和下一跳信息,因此该算法具有较高的效率。该生成方法的时间复杂度和构造SPT是相同的。实验表明本方法具有较高的运行效率,并且可以为源到目的提供多个下一跳,因此大大提高了网络的可靠性和快速恢复的能力。
本领域的技术人员应该明白,上述的本发明的各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (8)
1.一种基于生成树的域内动态多路径生成方法,包括:
步骤1,初始化一网络的所有结点的结点信息;
步骤2,创建优先级队列,按照优先级结构将根结点加入到所述优先级队列中,所述优先级结构包括结点的路由ID、结点的当前最小代价和结点的当前父结点;
步骤3,判断所述优先级队列是否为空,若判断结果为否,则执行步骤4,否则结束操作;
步骤4,根据出队列规则选取所述优先级队列中的队首元素,并将其从所述优先级队列中删除,其中,所述出队列规则为选取对应最小的当前最小代价的结点作为队首元素;
步骤5,访问所述队首元素的邻居结点,判断当前邻居结点是否被访问过,
其中,若当前邻居结点未被访问过,则更新关于当前邻居结点的结点信息,并将更新后的信息按照优先级结构添加到所述优先级队列中,否则,根据设定规则计算所述根结点到所述队首元素的下一跳以及所述根结点到当前邻居结点的下一跳;
步骤6,判断当前邻居结点是否是该队首元素的最后一个邻居结点,若是,则返回步骤3,否则获取下一个邻居结点并返回步骤5。
2.根据权利要求1所述的域内动态多路径生成方法,其特征在于,在所述步骤4中,若对应最小的当前最小代价的结点为多个,则从中选取路由ID最小的结点作为队首元素。
3.根据权利要求1或2所述的域内动态多路径生成方法,其特征在于,
假设以根结点c为根的最短路径树Tc中的两个结点u和v,并且结点u和v互为邻居关系,定义Dc(v,u)=Cc(v)-Cc(Bc(v))+L(u,v),如果Dc(v,u)<Cc(u)成立,则称v对u有贡献,
其中,Cc(v)和Cc(u)分别表示根结点c到结点v和结点u的最小代价,Bc(v)表示根结点c到结点v的最优下一跳,L(u,v)表示结点u和结点v的直连代价,
在所述步骤5中,所述设定规则为:
假设所述队首元素为v,所述当前邻居结点为u,如果v对u有贡献,则设置哈希表项hc[v,u]=1,并且将Bc(v)加入到Nc(u)中,同样,如果u对v有贡献,则设置哈希表项hc[u,v]=1,并且将Bc(u)加入到Nc(v)中,
其中,Nc(u)和Nc(v)分别表示根结点c到结点u和结点v的下一跳的集合,此外,将一个元素加入到一个下一跳集合时,需同时维护该元素被加入该集合的次数,用引用计数表示。
4.根据权利要求1至3中任一项所述的域内动态多路径生成方法,其特征在于,在所述步骤1中,进一步,
设置根结点的最小代价为0,将除所述根结点以外的结点的最小代价设置为无穷大;
将所有结点的父结点设置为空;
将所有结点的访问标记属性设置为未访问。
5.根据权利要求3所述的域内动态多路径生成方法,其特征在于,通过以下表达式来计算根结点c到结点v的最优下一跳Bc(v):
其中,Pc(v)表示结点v的父结点。
6.根据权利要求1至5中任一项所述的域内动态多路径生成方法,其特征在于,还包括:
当链路L(s,e)的代价增加时,判断以根结点c构造的最短路径树的结构是否变化,其中,根结点c到结点s的代价Cc(s)≥根结点c到结点e的代价Cc(e),
若判断结果为变化,则将结点e和e的所有子孙结点加入到所述优先级队列中,并对这些结点执行所述步骤3至所述步骤6;
若判断结果为不变化,则分为以下两种情况来调整所述最短路径树:如果哈希表项hc[s,e]=1并且Dc(s,e)≥Cc(e),则将Bc(s)从Nc(e)中删除,并且更新哈希表项hc[s,e]=0;如果哈希表项hc[e,s]=1并且Dc(e,s)≥Cc(s),则将Bc(e)从Nc(s)中删除,并且更新哈希表项hc[e,s]=0,
其中,Bc(s)表示根结点c到结点s的最优下一跳,Nc(e)表示根结点c到结点e的下一跳的集合,Bc(e)表示根结点c到结点e的最优下一跳,Nc(s)表示根结点c到结点s的下一跳的集合,哈希表项hc[s,e]=1表示结点s对结点e有贡献,反之,hc[s,e]=0,哈希表项hc[e,s]=1表示结点e对结点s有贡献,反之,hc[e,s]=0。
7.根据权利要求1至5中任一项所述的域内动态多路径生成方法,其特征在于,
当链路L(s,e)的代价减小时,判断以根结点c构造的最短路径树的结构是否变化,其中,根结点c到结点s的代价Cc(s)≥根结点c到结点e的代价Cc(e),
若判断结果为变化,则将结点e加入到所述优先级队列中,并对结点e执行所述步骤3至所述步骤6;
若判断结果为不变化,则分为以下两种情况来调整所述最短路径树:如果哈希表项hc[s,e]=0并且Dc(s,e)<Cc(e),则将Bc(s)添加至Nc(e)中并更新其引用计数,同时更新哈希表项hc[s,e]=1;如果哈希表项hc[e,s]=0并且Dc(e,s)<Cc(s),则将Bc(e)添加至Nc(s)中并更新其引用计数,同时更新哈希表项hc[e,s]=1,
其中,Bc(s)表示根结点c到结点s的最优下一跳,Nc(e)表示根结点c到结点e的下一跳的集合,Bc(e)表示根结点c到结点e的最优下一跳,Nc(s)表示根结点c到结点s的下一跳的集合,哈希表项hc[s,e]=1表示结点s对结点e有贡献,反之,hc[s,e]=0,哈希表项hc[e,s]=1表示结点e对结点s有贡献,反之,hc[e,s]=0。
8.根据权利要求1所述的域内动态多路径生成方法,其特征在于,在所述步骤5中,
若队首元素v的当前邻居结点u未被访问,则将该结点u的当前最小代价TC更新为TC=Cc(v)+L(v,u),将该结点u的当前父结点TP更新为TP=v,将该结点u的访问标记属性设置为已访问,其中,Cc(v)表示根结点c到队首元素v的最小代价,L(v,u)表示结点u和结点v的直连代价。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310461708.2A CN103532861B (zh) | 2013-09-30 | 2013-09-30 | 基于生成树的域内动态多路径生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310461708.2A CN103532861B (zh) | 2013-09-30 | 2013-09-30 | 基于生成树的域内动态多路径生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103532861A true CN103532861A (zh) | 2014-01-22 |
CN103532861B CN103532861B (zh) | 2016-09-21 |
Family
ID=49934550
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310461708.2A Active CN103532861B (zh) | 2013-09-30 | 2013-09-30 | 基于生成树的域内动态多路径生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103532861B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103763191B (zh) * | 2014-01-23 | 2017-01-18 | 清华大学 | 基于生成树的域内多路径生成方法 |
CN107276780A (zh) * | 2016-04-07 | 2017-10-20 | 中国科学院声学研究所 | 一种用于拓扑不完全可测网络的动态生成树方法 |
CN108712345A (zh) * | 2018-05-17 | 2018-10-26 | 山西大学 | 基于逐跳计算的分布式负载均衡方法 |
CN112612478A (zh) * | 2020-12-31 | 2021-04-06 | 江苏兴邦能源科技有限公司 | 燃料电池测试系统的二次开发编译工具的系统及方法 |
CN113328950A (zh) * | 2021-05-25 | 2021-08-31 | 桂林电子科技大学 | 一种基于树状结构的sdn路由系统构建方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109347741B (zh) * | 2018-08-01 | 2021-02-26 | 北京邮电大学 | 基于带内网络遥测技术的全网路径最优化遍历方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1359241A (zh) * | 2000-12-14 | 2002-07-17 | 朗迅科技公司 | 用于分组交换机和无源光网络的分布式调度器 |
CN101605096A (zh) * | 2009-07-15 | 2009-12-16 | 清华大学 | 基于ospf协议的增量最短路径树计算方法 |
-
2013
- 2013-09-30 CN CN201310461708.2A patent/CN103532861B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1359241A (zh) * | 2000-12-14 | 2002-07-17 | 朗迅科技公司 | 用于分组交换机和无源光网络的分布式调度器 |
CN101605096A (zh) * | 2009-07-15 | 2009-12-16 | 清华大学 | 基于ospf协议的增量最短路径树计算方法 |
Non-Patent Citations (3)
Title |
---|
E.W.DIJKSTRA: "A Note on Two Problems in Connexion with Graphs", 《NUMERISCHE MATHEMATIK》, vol. 1, no. 1, 31 December 1959 (1959-12-31), pages 269 - 271, XP000837527, DOI: doi:10.1007/BF01386390 * |
HAIJUN GENG 等: "MLSA:A Link一State Multipath Routing Algorithm", 《IEEE》, 10 July 2013 (2013-07-10), pages 000330 - 000335 * |
P.MERINDOL 等: "An efficient algorithm to enable path diversity in link state routing networks", 《COMPUTER NETWORKS》, vol. 55, no. 5, 1 April 2011 (2011-04-01), pages 1132 - 1149, XP028173548, DOI: doi:10.1016/j.comnet.2010.11.005 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103763191B (zh) * | 2014-01-23 | 2017-01-18 | 清华大学 | 基于生成树的域内多路径生成方法 |
CN107276780A (zh) * | 2016-04-07 | 2017-10-20 | 中国科学院声学研究所 | 一种用于拓扑不完全可测网络的动态生成树方法 |
CN107276780B (zh) * | 2016-04-07 | 2019-10-22 | 中国科学院声学研究所 | 一种用于拓扑不完全可测网络的动态生成树方法 |
CN108712345A (zh) * | 2018-05-17 | 2018-10-26 | 山西大学 | 基于逐跳计算的分布式负载均衡方法 |
CN108712345B (zh) * | 2018-05-17 | 2021-07-27 | 山西大学 | 基于逐跳计算的分布式负载均衡方法 |
CN112612478A (zh) * | 2020-12-31 | 2021-04-06 | 江苏兴邦能源科技有限公司 | 燃料电池测试系统的二次开发编译工具的系统及方法 |
CN113328950A (zh) * | 2021-05-25 | 2021-08-31 | 桂林电子科技大学 | 一种基于树状结构的sdn路由系统构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103532861B (zh) | 2016-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101965715B (zh) | 最短路径确定中的打破平局 | |
JP5551253B2 (ja) | 複数の等コストパスから選択するための方法および装置 | |
US8817665B2 (en) | Alternate down paths for directed acyclic graph (DAG) routing | |
CN103532861A (zh) | 基于生成树的域内动态多路径生成方法 | |
US9264243B2 (en) | Flooding and multicasting in a loop-free routing topology using routing arcs | |
EP2880826B1 (en) | Label distribution and route installation in a loop-free routing topology using routing arcs | |
CN101483610B (zh) | 链路状态路由协议的路由更新方法 | |
CN107294852B (zh) | 一种使用拓扑分散短路径集的网络路由方法 | |
CN102506849B (zh) | 寻找带约束的最短路径的方法 | |
US20120230222A1 (en) | Gravitational Parent Selection in Directed Acyclic Graphs | |
KR20150030644A (ko) | 최단 경로 결정에서의 타이 브레이킹 | |
CN111641557A (zh) | 一种时延容忍网络最小代价备份路径方法 | |
CN104602302A (zh) | 一种基于分簇结构的ZigBee网络能量均衡路由方法 | |
CN113179532A (zh) | 多路径路由方法及装置 | |
CN105282041A (zh) | 基于isis的洪泛方法及装置 | |
CN102573000B (zh) | 基于直接/间接矩阵的无线自组织网络保护路由生成方法 | |
CN103763191A (zh) | 基于生成树的域内多路径生成方法 | |
Sumitha | Routing algorithms in networks | |
CN100518382C (zh) | 自动交换光网络中多约束条件下最短路径查找方法及装置 | |
CN101702686B (zh) | 实现多下一跳路由的方法、装置及系统 | |
US9838946B2 (en) | Heuristic spanning method and system for link state routing | |
CN103347289B (zh) | 利用频谱空间可重用性的单路径路由方法 | |
Rath | Implementing and comparing dsr and dsdv routing protocols for mobile ad hoc networking | |
Kumar et al. | Hardware implementation of OLSR and improved OLSR (AOLSR) for AANETs | |
Abdullah et al. | Genetic routing Algorithm based on adjacency-constraint matrix |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |