具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
根据本申请的一个实施例,提供了一种多路径路由方法,如图1所示,该方法包括步骤S101、步骤S102和步骤S103。
步骤S101:确定源节点和目的节点。
具体地,源节点为发起数据传输的节点,目的节点为接收源节点发送的数据的节点。
步骤S102:基于针对预设的网络拓扑结构图的邻接矩阵,以源节点为起始节点进行遍历,得到源节点至目的节点间的各个中间节点,以及源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点。
具体地,邻接矩阵用于表征网络拓扑结构图中顶点之间相邻关系的矩阵。更具体地,邻接矩阵一般包括“0”和“1”两个值,其中,“1”表示相邻的两个节点,即具有链路连接的相邻两个节点。
具体地,以源节点为起始节点对邻接矩阵遍历逐层遍历邻接节点。例如,在遍历到与源节点相邻的邻接节点后,再遍历分别与这些邻接节点相邻的邻接节点,依次类推直至遍历到目的节点,停止遍历。
在本申请实施例中,前置节点用于表示遍历到的节点的上一跳节点,即,作为开始遍历的节点。例如,源节点为与源节点相邻的各个邻接节点的前置节点。
步骤S103:依据源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点,确定源节点至目的节点间的多条最短路径。
具体的,通过以目的节点为起始节点进行追溯,以每个被追溯的节点的前置节点逐步查找到源节点至目的节点间的多条最短路径。
本申请实施例通过确定源节点和目的节点,从而基于针对预设的网络拓扑结构图的邻接矩阵,以源节点为起始节点进行遍历,得到源节点至目的节点间的各个中间节点,以及源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点,依据源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点,确定源节点至目的节点间的多条最短路径,这种以邻接矩阵进行遍历的方式,不仅缩短了遍历邻接节点的时间,还通过确定各个中间节点的所有前置节点的方式,实现了搜索源节点至目的节点间所有最短路径的目的,以在通信过程中在多条最短路径中进行路径选择,避免因数据均通过同一最短路径,导致的网络系统通信时数据流量拥塞的问题,进而提高了远距离数据传输效率。
在一些实施例中,如图2所示,步骤S102进一步包括:
步骤S1021:基于预创建的队列,确定队首节点;
步骤S1022:确定队首节点的各个邻接节点;
步骤S1023:对各个邻接节点分别进行入队判断;
步骤S1024:若任一邻接节点已入队,且源节点至该任一邻接节点的路由跳数最小,则将队首节点确定为该任一邻接节点的前置节点,确定源节点至该任一邻接节点的最短路由跳数,直至完成队首节点的各个邻接节点的入队判断。
在一些实施例中,如图2所示,步骤S102进一步还包括以下至少一个步骤:
步骤S1025:若任一邻接节点已入队,且源节点至该任一邻接节点的路由跳数并非最小,则跳过该任一邻接节点,对队首节点的下一个邻接节点进行入队判断,直至完成队首节点的各个邻接节点的入队判断;
步骤S1026:若任一邻接节点已出队,则跳过该任一邻接节点,对队首节点的下一个邻接节点进行入队判断,直至完成队首节点的各个邻接节点的入队判断。
步骤S1027:若任一邻接节点未入队,则计算源节点至该任一邻接节点的最短路由跳数,将队首节点确定为该任一邻接节点的前置节点,确定源节点至该任一邻接节点的最短路由跳数,并将该任一邻接节点进行入队。
本申请实施例通过对各次遍历到的所有邻接节点的入队判断,起到了计算源节点至各个节点的路由跳数最小值的计算,从而为后续追溯路由路径提供的数据依据。
应用时,各次遍历到的各个节点需要执行步骤S1021至步骤S1023,从而依据步骤S1023的判断结果,来执行步骤S1024至步骤S1027中至少一个步骤,进而实现从源节点至目的节点的遍历,快速确定源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的前置节点。
在一些实施例中,步骤S1021包括:
若对邻接矩阵进行首次遍历,则基于预创建的队列对源节点进行入队处理,以将源节点作为队首节点。
本申请实施例通过首次遍历判断来确定首个队首节点,为遍历邻接矩阵提供启动条件。
在一些实施例中,在步骤S102之前,该方法还包括:
步骤S1028(图中未示出):获取网络结构拓扑图;
步骤S1029(图中未示出):将网络结构拓扑图转换为邻接矩阵。
具体地,可以通过预设接口获取结构拓扑图,也可以在绘制完成网络结构拓扑图并进行存储过程中,获取到网络结构拓扑图。
例如,若网络结构拓扑图为图3,图中各个网络节点均周期性接收全网拓扑信息,根据全网节点间链路连接状态计算当前链路邻接矩阵,任意两移动节点间有链路则说明该两节点互为邻居节点,标记该两节点邻接矩阵值为1,否则标记该两节点邻接矩阵值为0,将图3网络拓扑结构进行转换,得到邻接矩阵AdjMatr[i][j]:
其中,二维数组AdjMatr[i][j]下标i,j映射节点地址,矩阵元素表示节点i与节点j之间链路值,有链路值为1。
在一些实施例中,在步骤S1029之前,该方法还包括:
若检测到针对网络结构拓扑图的更新信息,则依据更新信息,确定新网络结构拓扑图。
具体地,更新信息可以包括新增的节点、退出的节点,相邻节点的链路连接变化等信息。
在一些实施例中,该方法还包括:
基于所选定的业务需求条件,在源节点至目的节点间的多条最短路径中,选定目标最短路径。
具体地,可以预先设定多种最优路径选定策略以供用户进行选择,例如,若检测到用户所选定的最优路径选定策略为负载最低的业务需求条件,那么对多条最短路径分别进行负载计算,从而选定负载最低的最短路径作为目标最短路径。
本申请实施例提供的这种根据业务需求条,从所有最短路径中选择合适的最短路径的方式,不仅能够避免源节点的某个邻居节点一直被用来进行超负载的通信转发的问题,还进一步减少了网络传输流量,起到了避免网络系统通信时数据流量拥塞的效果,从而达到了提高远距离数据传输效率的目的。
下面结合图3的网络结构拓扑图对本申请实施例提供的方法进行详细说明。
应用时,图3所示的网络结构拓扑图中任意两移动节点间有链路则说明该两节点互为邻居节点,标记该两节点邻接矩阵值为1,否则标记该两节点邻接矩阵值为0,因此,将图1网络拓扑结构进行转换,得到邻接矩阵AdjMatr[i][j]:
其中,二维数组AdjMatr[i][j]下标i,j映射节点地址,矩阵元素表示节点i与节点j之间链路值,有链路值为1。
以源节点为起始节点对该邻接矩阵AdjMatr[i][j]进行遍历,遍历过程如下:
首先,将源节点从队尾放入队列,作为队首节点,初始化距离源节点的跳数HopCount[HeadAddr]为0,遍历所有邻居节点邻接矩阵AdjMatr[i][j]=1,设定其中一跳邻居节点网络地址为AdjAddr。若该邻居节点状态Enqueue=Faulse,则将该邻居节点AdjAddr距离源节点的最短跳数HopCount[AdjAddr]=HopCount[HeadAddr]+1,将本次遍历的队首节点作为前置节点放入预设的前置节点容器FrontPoint[i]=HeadAddr,FrontPoint[i]中i=0,1,…n,前置节点计数器FrontCount加1,最后将该邻居节点放入队列Queue中标记该邻居节点状态Enqueue为真;若该邻居节点状态Enqueue=True,表示该邻居节点也是其他节点的邻居节点且已经入队,则比较本次循环最短跳数HopCount是为否最小值。若本次循环计算得到的最短跳数最小,说明该条链路是最优路径,则将该邻居节点的最短距离更新为本次计算的最短距离,将前置节点更新为当前队首节点,维持前置节点计数器FrontCount不变;否则本次循环得到的路径不是最优的,直接跳出本次循环。如果该邻居节点状态Dequeue=True,表示该邻居节点已经出队。为避免重复计算,对于已出队节点不再记录任何信息,直至所有邻居节点均已遍历完成,将该队首节点的状态置为Dequeue为真。
至此一轮队首节点遍历流程已经结束,将当前队首节点出队操作,依次从队列内产生下一个新队首节点,重复执行上述操作,直至队列中节点数量为空,则源节点到所有其他节点的最短路径以及其他所有节点的前置节点均已得出。以图1为例,假设源节点为V7,目的节点分别为图3中其它节点,通过遍历可知,源节点到各个目的节点分别对应的前置节点和最短跳数如表1。
表1
因此,参照表1以源节点为根节点根据前置节点可以逐层回溯,得到源节点到其他各个目的节点的所有最短路径。
例如,首先回溯一跳节点的路径,紧接着回溯二跳节点的路径,一直回溯直到获取网络中最远距离节点的最短路径。下面根据表1进行回溯得到以V7为源节点的所有的最短路径。
一跳路径包括的目的节点及其路径:
目的节点为V1的路径为:V7->V1;
目的节点为V2到路径为:V7->V2;
目的节点为V8的路径为:V7->V8;
目的节点为V10的路径为:V7->V10。
二跳路径包括的目的节点及其路径:
目的节点为V0的路径为:V7->V1->V0或V7->V2->V0;
目的节点为V6的路径为:V7->V2->V6;
目的节点为V9的路径为:V7->V8->V9或V7->V8->V19;
目的节点为V11的路径为:V7->V2->V11或V7->V10->V11。
三跳路径包括的目的节点分别包括V3、V5、V12、V13,其中,
目的节点为V3的路径:
V7->V1->V0->V3:
V7->V2->V0->V3;
V7->V2->V6->V3,
目的节点为V5的路径:V7->V2->V6->V5;
目的节点为V12的路径为:
V7->V8->V9->V12;
V7->V10->V9->12;
V7->V2->V11->V12;
V7->V10->V11->V12。
目的节点为V13的路径为:
V7->V2->V6->V13;
V7->V2->V11->V13;
V7->V10->V11->V13。
四跳路径包括的目的节点为V14,路径为:
V7->V2->V6->V5->V14;
V7-V2-V6->V13->V14;
V7->V2->V11->V13->V14;
V7->V10->V11->V13->V14。
五跳路径包括的目的节点为V15,其中,路径为:
V7->V1->V0->V3->V4->V15;
V7-V2-V0->V3->V4->V15;
V7-V2-V6->V3->V4->V15;
V7-V2-V6->V5->V4->V15;
V7-V2-V6->V5->V14->V15;
V7-V2-V6->V13->V14->V15;
V7->V2->V11->V13->V14->V15;
V7->V10->V11->V13->V14->V15。
由上可知,本申请实施例提供的方法能够得到源节点到其他各个目的节点的所有最短路径,使最优路径的选择符合更多的需求,避免了只有一条最短路径的局限性。
本申请的又一实施例提供了一种多路径路由装置,如图4所示,该装置40包括:节点确定模块401、矩阵遍历模块402以及路径确定模块403。
节点确定模块401,用于确定源节点和目的节点;
矩阵遍历模块402,用于基于针对预设的网络拓扑结构图的邻接矩阵,以源节点为起始节点对邻接矩阵进行遍历,得到源节点至目的节点间的各个中间节点,以及源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点;
路径确定模块403,用于依据源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点,确定源节点至目的节点间的多条最短路径。
本申请实施例通过确定源节点和目的节点,从而基于针对预设的网络拓扑结构图的邻接矩阵,以源节点为起始节点进行遍历,得到源节点至目的节点间的各个中间节点,以及源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点,依据源节点至各个中间节点分别对应的最短路由跳数和各个中间节点分别对应的各个前置节点,确定源节点至目的节点间的多条最短路径,这种以邻接矩阵进行遍历的方式,不仅缩短了遍历邻接节点的时间,还通过确定各个中间节点的所有前置节点的方式,实现了搜索源节点至目的节点间所有最短路径的目的,以在通信过程中在多条最短路径中进行路径选择,避免因数据均通过同一最短路径,导致的网络系统通信时数据流量拥塞的问题,进而提高了远距离数据传输效率。
进一步地,矩阵遍历模块包括:
队首节点确定子模块,用于基于预创建的队列,确定队首节点;
邻接节点遍历子模块,用于确定队首节点的各个邻接节点;
邻接节点入队判断子模块,用于对各个邻接节点分别进行入队判断;
第一邻接节点处理子模块,用于若任一邻接节点已入队,且源节点至该任一邻接节点的路由跳数最小,则将队首节点确定为该任一邻接节点的前置节点,确定源节点至该任一邻接节点的最短路由跳数,直至完成队首节点的各个邻接节点的入队判断。
进一步地,矩阵遍历模块还包括以下至少一个子模块:
第二邻接节点处理子模块,用于若任一邻接节点已入队,且源节点至该任一邻接节点的路由跳数并非最小,则跳过该任一邻接节点,对队首节点的下一个邻接节点进行入队判断,直至完成队首节点的各个邻接节点的入队判断;
第三邻接节点处理子模块,用于若任一邻接节点已出队,则跳过该任一邻接节点,对队首节点的下一个邻接节点进行入队判断,直至完成队首节点的各个邻接节点的入队判断;
第四邻接节点处理子模块,用于若任一邻接节点未入队,则计算源节点至该任一邻接节点的最短路由跳数,将队首节点确定为该任一邻接节点的前置节点,确定源节点至该任一邻接节点的最短路由跳数,并将该任一邻接节点进行入队。
进一步地,队首节点确定子模块包括:
初始队首确定单元,用于若对邻接矩阵进行首次遍历,则基于预创建的队列对源节点进行入队处理,以将源节点作为队首节点。
进一步地,矩阵遍历模块在执行基于针对预设的网络拓扑结构图的邻接矩阵,以源节点为起始节点对邻接矩阵进行遍历之前,还包括:
拓扑图确定子模块,用于获取网络结构拓扑图;
拓扑图转换子模块,用于将网络结构拓扑图转换为邻接矩阵。
进一步地,拓扑图转换子模块在将网络结构拓扑图转换为邻接矩阵的步骤之前,还包括:
拓扑图更新检测单元,用于若检测到针对网络结构拓扑图的更新信息,则依据更新信息,确定新网络结构拓扑图。
进一步地,该装置还包括:
最优路径确定装置,用于基于所选定的业务需求条件,在源节点至目的节点间的多条最短路径中,选定目标最短路径。
本实施例的多路径路由装置可执行本申请实施例提供的多路径路由方法,其实现原理相类似,此处不再赘述。
本申请又一实施例提供了一种终端,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时以实现上述多路径路由方法。
具体地,处理器可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
具体地,处理器通过总线与存储器连接,总线可包括一通路,以用于传送信息。总线可以是PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。
存储器可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
可选的,存储器用于存储执行本申请方案的计算机程序的代码,并由处理器来控制执行。处理器用于执行存储器中存储的应用程序代码,以实现上述实施例提供的多路径路由装置的动作。
本申请又一实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,该计算机可执行指令用于执行上述多路径路由方法。
以上所描述的装置实施例仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本申请的较佳实施进行了具体说明,但本申请并不局限于上述实施方式,熟悉本领域的技术人员在不违背本申请精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。