一种分段路由路径计算方法、装置及计算机存储介质与流程

文档序号:19382954发布日期:2019-12-11 00:36阅读:255来源:国知局
一种分段路由路径计算方法、装置及计算机存储介质与流程

本发明涉及数据通信领域,尤其涉及一种分段路由路径计算方法、装置及计算机存储介质。



背景技术:

ieft草案“draft-ietf-spring-segment-routing-15”中描述了分段路由(sr,segmentrouting)的架构,分段路由技术使得一个节点可以为特定的报文指定其转发路径,而不是按一般的最短路径转发,通过在报文中附加由段(segment)组成的段列表(segmentlist)等相关的信息,不需要在中间节点上维护每条路径的状态信息。典型的segment类型包括node_segment和adjacency_segment,前者表示一个节点,用于指导报文沿最短路径至该节点,后者表示一条链路(或链路集合),用于指导报文向该链路(或该链路集合)转发。

ieft草案“draft-bashandy-rtgwg-segment-routing-uloop-02”中讨论了如何使用sr以避免微环的方法,即将路由收敛分成两步:在最坏收敛时间之内走sr转发;在最坏收敛时间之后走普通路由转发。但是,该草案中没有讨论具体如何计算sr路径。

ieft草案“draft-hegde-rtgwg-microloop-avoidance-using-spring-03”中也讨论了如何使用sr以避免微环的方法,该方法同样将路由收敛分成两步:在最坏收敛时间之内,先将报文沿分段路由标记交换路径(lsp,labelswitchpath)向局部修复节点(plr,pointoflocalrepair)转发,然后由plr沿快速重路由(frr,fastre-route)路径向目的节点转发;在最坏收敛时间之后走普通路由转发。但是,该草案中所讨论的计算sr路径的方法不支持网络拓扑中多节点或链路同时发生变化时的收敛,导致重收敛过程中存在微环,并且计算过程复杂,比如需要扩展内部网关协议(interiorgatewayprotocol,igp)以用于网络拓扑中的所有节点,从而确定离拓扑变化最近的局部修复节点(plr,pointoflocalrepair),以及需要识别出拓扑变化时哪些目的节点受到影响等。



技术实现要素:

为解决现有存在的技术问题,本发明实施例提供一种计算过程简单、且能够有效避免重收敛过程中存在微环的分段路由路径计算方法、装置及计算机存储介质。

为达到上述目的,本发明实施例的技术方案是这样实现的:

第一方面,本发明实施例提供了一种分段路由路径计算方法,包括:

根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径;

按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。

上述方案中,所述按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径,包括:

以所述源节点为初始的当前根节点;

从所述收敛后的分段路由路径中沿第一方向选取一段为当前段;

检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的目的节点作为更新的当前根节点,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

上述方案中,所述将所述当前段进行压缩,包括:

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的第一个段,则将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则不将所述当前段保留至所述目标分段路由路径;

若所述当前根节点与上一个段对应的目的节点不相同,则将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段。

上述方案中,所述将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段,包括:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段,且将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段。

上述方案中,所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,包括:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前根节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前根节点至所述当前段对应的目的节点的最短路径、及在网络拓扑发生变化之后所述当前根节点至所述当前段对应的目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

上述方案中,所述按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径,包括:

以所述目的节点为初始的当前目的节点;

从所述备选修复路径中沿第二方向选取一段为当前段;

检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的源节点作为更新的当前目的节点,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

上述方案中,所述将所述当前段进行压缩,包括:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点相同,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段。

上述方案中,所述保留所述当前段至目标分段路由路径,包括:

若所述当前段为第一类型段,则将所述当前段按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,且所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的第一个段和最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段按照所述第二方向依序保留至所述目标分段路由路径。

上述方案中,所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,包括:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前段对应的源节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前段对应的源节点至所述当前目的节点的最短路径、及在网络拓扑发生变化之后所述当前段对应的源节点至所述当前目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征所述最短路径未经过所述网络拓扑发生变化的位置。

第二方面,本发明实施例提供了一种分段路由路径计算装置,包括:

获取单元,用于根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径;

处理单元,用于按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。

上述方案中,所述处理单元,具体用于:

以所述源节点为初始的当前根节点;

从所述收敛后的分段路由路径中沿第一方向选取一段为当前段;

检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的目的节点作为更新的当前根节点,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

上述方案中,所述处理单元,具体用于:

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的第一个段,则将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则不将所述当前段保留至所述目标分段路由路径;

若所述当前根节点与上一个段对应的目的节点不相同,则将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段。

上述方案中,所述处理单元,具体用于:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段,且将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段。

上述方案中,所述处理单元,具体用于:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前根节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前根节点至所述当前段对应的目的节点的最短路径、及在网络拓扑发生变化之后所述当前根节点至所述当前段对应的目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

上述方案中,所述处理单元,具体用于:

以所述目的节点为初始的当前目的节点;

从所述备选修复路径中沿第二方向选取一段为当前段;

检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的源节点作为更新的当前目的节点,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

上述方案中,所述处理单元,具体用于:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点相同,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段。

上述方案中,所述处理单元,具体用于:

若所述当前段为第一类型段,则将所述当前段按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,且所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的第一个段和最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段按照所述第二方向依序保留至所述目标分段路由路径。

上述方案中,所述处理单元,具体用于:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前段对应的源节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前段对应的源节点至所述当前目的节点的最短路径、及在网络拓扑发生变化之后所述当前段对应的源节点至所述当前目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征所述最短路径未经过所述网络拓扑发生变化的位置。

第三方面,本发明实施例提供了一种分段路由路径计算装置,所述装置包括处理器和用于存储能够在处理器上运行的计算机程序的存储器;其中,

所述处理器用于运行所述计算机程序时,执行第一方面所述分段路由路径计算方法的步骤。

第四方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述分段路由路径计算方法的步骤。

上述实施例所提供的分段路由路径计算方法,根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径;按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。如此,通过设定的路径压缩算法对源节点至目的节点的收敛后的分段路由路径进行压缩,以获得能够有效避免重收敛过程中存在微环的源节点至目的节点的目标分段路由路径,由于目标分段路由路径是直接通过对源节点至目的节点的收敛后的分段路由路径压缩后得到的,因此计算过程更简单。

附图说明

图1为本发明一实施例中分段路由路径计算方法的流程示意图;

图2为本发明一实施例中对所述收敛后的分段路由路径进行压缩的流程示意图;

图3为本发明另一实施例中对所述收敛后的分段路由路径进行压缩的流程示意图;

图4为本发明另一实施例中分段路由路径计算方法的流程示意图;

图5为本发明又一实施例中分段路由路径计算方法的流程示意图;

图6为本发明一实施例中网络拓扑的结构示意图;

图7为本发明另一实施例中网络拓扑的结构示意图;

图8为本发明一实施例中分段路由路径计算装置的结构示意图;

图9为本发明另一实施例中分段路由路径计算装置的结构示意图。

具体实施方式

以下结合说明书附图及具体实施例对本发明技术方案做进一步的详细阐述。除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。

参见图1,为本发明实施例提供的一种分段路由路径计算方法,包括以下步骤:

s101:获取根据网络拓扑发生变化的位置所获得的源节点至目的节点之间的收敛后的分段路由路径;

可以理解地,所述源节点和所述目的节点是指网络拓扑中任意两个节点之间根据其相对的位置或功能而言的,例如,就同一个网络拓扑中的两个节点a、b而言,a可以以自身作为源节点计算至包含b在内的其它目的节点的路由,b也可以以自身作为源节点计算至包含a在内的其它目的节点的路由,所述路由即为路径。所述节点可以是网络设备或网元等,所述网络设备可以是交换机、路由器等。网络拓扑发生变化的位置是指网络拓扑中发生变化的节点和\或链路所对应的位置。其中,所述节点和/或链路发生变化可以是节点和\或链路的状态从有效变为无效,也可以是节点和/或链路的状态从无效变为有效。本实施例中,以源节点根据网络拓扑发生变化的位置所获得的源节点至目的节点之间的收敛后的分段路由路径为例。所述网络拓扑发生变化的位置可以是状态由有效变为无效、或由无效变为有效的与所述源节点相邻的节点或非相邻的节点;也可以是状态由有效变为无效、或由无效变为有效的与所述源节点直连的链路或非直连的链路,所述链路可以是单条链路,也可以是共享风险链路组。比如,当网络拓扑中一条链路x的状态从有效变为无效时,若源节点感知到该链路x的状态发生变化即网络拓扑发生变化,则根据该链路x所在的位置获得源节点至目的节点的收敛后的分段路由路径。

这里,所述收敛后的分段路由路径是指网络拓扑发生变化后,通过路由重收敛机制所获得的收敛后的路径。由于大部分的网络使用链路状态协议作为域内路由协议,如中间系统到中间系统(is-is,intermediatesystem-to-intermediatesystem)协议或开放式最短路径优先(ospf,openshortestpathfirst)协议,而当节点或链路的状态发生变化即网络拓扑发生变化时,链路状态协议会启动路由重收敛机制,即发布新的链路状态通告并在节点之间泛洪使得网络拓扑信息被全网获知,从而保证所有网络节点的链路状态数据库是相同的,继而计算新路由并更新转发表。因此,当源节点检测到网络拓扑发生变化后,基于链路状态数据库,可以根据网络拓扑发生变化的位置,获取源节点至目的节点的收敛后的分段路由路径。

在一可选的实施例中,所述根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径,为:根据最短路径优先(spf,shortestpathfirst)算法和所述网络拓扑发生变化的位置获取所述源节点对应的最短路径树,根据所述最短路径树确定所述源节点至所述目的节点的最短路径,并将所述最短路径作为所述源节点至所述目的节点的收敛后的分段路由路径。如此,根据网络拓扑发生变化的位置获得的源节点至目的节点的最短路径、并作为所述源节点至所述目的节点的收敛后的分段路由路径,能够使得所述源节点与所述目的节点之间数据传输的距离尽量最短,从而节省传输时间。

s102:按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。

这里,路径压缩算法是指根据设定的压缩规则对分段路由路径中的对应节点和/或链路进行压缩的算法,其中,该设定的压缩规则可以根据收敛后的分段路由路径中各节点与网络拓扑发生变化的位置之间的关系而确定,如当分段路由路径中多个相邻节点至同一目的节点的最短路径均不经过网络拓扑发生变化的位置时,可以保留其中之一节点;或者,当分段路由路径中任一节点至同一目的节点的最短路径均不经过网络拓扑发生变化的位置时,则删除对应的所述节点等,以达到对分段路由路径压缩的目的。目标分段路由路径是通过对收敛后的分段路由路径根据路径压缩算法进行压缩后得到的路径,由于目标分段路由路径是根据收敛后的分段路由路径压缩得到,其中不论网络拓扑发生变化的位置是否为单个或者多个节点和/或链路,均可以根据网络拓扑发生变化的位置而得到的收敛后的分段路由路径作为获取该目标分段路由路径的范围,从而目标分段路由路径的获取过程相对更加简单。

在一可选的实施例中,请参阅图2,所述按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径,包括:

s1020:以所述源节点为初始的当前根节点;

s1021:从所述收敛后的分段路由路径中沿第一方向选取一段为当前段;

s1022:检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,若是,则执行s1023,否则执行s1024;

s1023:保留所述当前段至目标分段路由路径,并将所述当前段对应的目的节点作为更新的当前根节点,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回s1022;

具体地,若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的目的节点作为更新的当前根节点,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回s1022,所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

s1024:将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回s1022。

具体地,若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,并返回s1022,所述检查所述当前根节点至所述当前段对应的目的节点之间的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

其中,所述第一方向是指顺沿该收敛后的分段路由路径从头至尾的方向,即是指从源节点至目的节点的方向。段包括节点类型的段和链路类型的段,分别采用node_segment和adjacency_segment两种标签表示,当所述段为node_segment时,所述段对应的源节点和目的节点为相同节点,即节点类型的段中的节点node;而当所述段为adjacency_segment时,所述段对应的源节点为该adjacency所属的源节点(localnode),所述段对应的目的节点为该adjacency所连接的目的节点(remotenode)。比如,若段为源节点(s)的node_segment,则所述段对应的源节点和目的节点就是s;若段为源节点(s)至目的节点(f)的adjacency_segment(s->f),则所述段对应的源节点为s,目的节点为f。

通过根据第一方向对收敛后的分段路由路径中的段进行遍历,检查当前根节点至当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,根据检查的结果保留对应的段或将对应的段进行压缩,如此,通过对源节点至目的节点的收敛后的分段路由路径进行压缩,可以简化获得的目标分段路由路径,且通过对网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过网络拓扑发生变化的位置的段进行压缩,可以通过目标分段路由路径进行报文等数据转发时避免出现微环。

在一可选的实施例中,所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,包括:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前根节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前根节点至所述当前段对应的目的节点的最短路径、及在网络拓扑发生变化之后所述当前根节点至所述当前段对应的目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

这里,可以通过在所述源节点上按照网络拓扑发生变化之前和网络拓扑发生变化之后根据最短路径优先算法分别维护以网络拓扑中每个节点为根的最短路径树,然后以在网络拓扑发生变化之前所述当前根节点为根的最短路径树确定在网络拓扑发生变化之前所述当前根节点至所述当前段对应的目的节点的最短路径、以及以在网络拓扑发生变化之后所述当前根节点为根的最短路径树确定在网络拓扑发生变化之后所述当前根节点至所述当前段对应的目的节点的最短路径。可以理解地,所述以当前根节点对应为根的最短路径树包含了所述当前根节点至网络拓扑中其它每个节点的最短路径。由于所述最短路径是由节点和/链路对应的段表示的,因此,根据所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中、可以获知所述最短路径是否经过所述网络拓扑发生变化的位置,即当所述网络拓扑发生变化的位置对应的段包含在组成所述最短路径的段中时,表征所述最短路径经过所述网络拓扑发生变化的位置;当所述网络拓扑发生变化的位置对应的段不包含在组成所述最短路径的段中时,表征所述最短路径不经过所述网络拓扑发生变化的位置。需要说明的是,所述最短路径经过所述网络拓扑发生变化的位置包括在网络拓扑发生变化之前,所述当前目标节点至所述当前段对应的目的节点的最短路径经过所述网络拓扑发生变化的位置,和/或,在网络拓扑发生变化之后,所述当前目标节点至所述当前段对应的目的节点的最短路径经过所述网络拓扑发生变化的位置。所述最短路径未经过所述网络拓扑发生变化的位置是指在网络拓扑发生变化之前,所述当前目标节点至所述当前段对应的目的节点的最短路径未经过所述网络拓扑发生变化的位置,且在网络拓扑发生变化之后,所述当前目标节点至所述当前段对应的目的节点的最短路径也未经过所述网络拓扑发生变化的位置。

如此,通过计算在网络拓扑发生变化之前、以及网络拓扑发生变化之后,当前根节点至所述当前段对应的目的节点的最短路径,并根据网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,判断所述最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,从而计算过程更加简单,提升计算速度。

在一可选的实施例中,所述将所述当前段进行压缩,包括:

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的第一个段,则将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则不将所述当前段保留至所述目标分段路由路径;

若所述当前根节点与上一个段对应的目的节点不相同,则将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段。

可以理解地,所述分段路由路径通常包含多个段,也即,所述分段路由路径的源节点至目的节点之间可能存在多个中间节点,而路径中一些不影响数据传输的中间节点对应的段可以被删除,因此,当所述当前根节点与上一个段对应的目的节点不相同时,表征所述当前根节点至所述当前段对应的目的节点的多个中间节点的最短路径可能都不经过网络拓扑发生变化的位置,这些中间节点不影响数据从源节点向目的节点传输,从而将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段,以减少目标分段路由路径中包含的段数量,从而简化目标分段路由路径,并尽可能的降低目标分段路由路径中存在微环的风险。

在一可选的实施例中,所述将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段,包括:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段,并将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段。

可以理解地,当所述当前根节点与上一个段对应的目的节点不相同时,说明当前根节点至所述收敛后的分段路由路径中所述当前段的上一个段对应的目的节点的最短路径不经过网络拓扑发生变化的位置,从而可以不将所述当前段的上一个段对应的目的节点保留在所述目标分段路由路径,也即,删除所述目标分段路由路径顺沿所述第一方向的最后一个段。如此,通过减少目标分段路由路径中包含的段数量,从而简化目标分段路由路径,并尽可能的降低目标分段路由路径中存在微环的风险。

在一可选的实施例中,请参阅图3,所述按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径,包括:

s2020:以所述目的节点为初始的当前目的节点;

s2021:从所述收敛后的分段路由路径中沿第二方向选取一段为当前段;

s2022:检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;若是,则执行s2023,否则执行s2024;

s2023:保留所述当前段至目标分段路由路径,并将所述当前段对应的源节点作为更新的当前目的节点,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回s2022;

具体地,若所述当前段对应的源节点至所述当前目的节点的最短路径经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,将所述当前段对应的源节点作为更新的当前目的节点,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,并返回s2022,检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

s2024:将所述当前段进行压缩,并从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回s2022。

具体地,若所述当前段对应的源节点至所述当前目的节点的最短路径不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,并返回s2022,检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

其中,所述第二方向是指顺沿该收敛后的分段路由路径从尾到头的方向,即是指从目的节点至源节点的方向。段包括节点类型的段和链路类型的段,分别采用node_segment和adjacency_segment两种标签表示,当所述段为node_segment时,所述段对应的源节点和目的节点为相同节点,即节点类型的段中的节点node;而当所述段为adjacency_segment时,所述段对应的目的节点为该adjacency所连接的remotenode,所述段对应的源节点为该adjacency所属的localnode。比如,若段为源节点(s)的node_segment,则所述段对应的源节点和目的节点就是s;若段为源节点(s)至目的节点(f)的adjacency_segment(s->f),则所述段对应的源节点为s,目的节点为f。

通过根据第二方向对收敛后的分段路由路径中的段进行遍历,检查当前段对应的源节点与当前目的节点的最短路径是否经过所述网络拓扑发生变化的位置,根据检查的结果保留对应的段或将对应的段进行压缩,如此,通过对根据所述网络拓扑发生变化的位置获得的源节点至目的节点之间的收敛后的分段路由路径进行压缩,可以简化获得的目标分段路由路径。

在一可选的实施例中,所述检查所述当前段对应的源节点至所述当前目的节点之间的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,包括:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前段对应的源节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前段对应的源节点至所述当前目的节点之间的最短路径、及在网络拓扑发生变化之后所述当前段对应的源节点至所述当前目的节点之间的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

这里,可以通过在所述源节点上按照网络拓扑发生变化之前和网络拓扑发生变化之后根据最短路径优先算法分别维护以网络拓扑中每个节点为根的最短路径树,从而以在网络拓扑发生变化之前所述当前段对应的源节点为根的最短路径树确定在网络拓扑发生变化之前所述当前段对应的源节点至所述当前目的节点之间的最短路径、以及以在网络拓扑发生变化之后所述当前段对应的源节点为根的最短路径树确定在网络拓扑发生变化之后所述当前段对应的源节点至所述当前目的节点之间的最短路径。可以理解地,所述以当前段对应的源节点为根的最短路径树包含了所述当前段对应的源节点至网络拓扑中其它每个节点的最短路径。由于所述最短路径是由节点和/链路对应的段表示的,因此,根据所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中、可以获知所述最短路径是否经过所述网络拓扑发生变化的位置,即当所述网络拓扑发生变化的位置对应的段包含在组成所述最短路径的段中时,表征所述最短路径经过所述网络拓扑发生变化的位置;当所述网络拓扑发生变化的位置对应的段不包含在组成所述最短路径的段中时,表征所述最短路径不经过所述网络拓扑发生变化的位置。

如此,通过获取在所述网络拓扑发生变化之前及之后、所述当前段对应的源节点至当前目的节点的最短路径,并根据网络拓扑发生变化的位置对应的段是否包含在所述最短路径中、判断所述最短路径是否经过所述网络拓扑发生变化的位置,从而计算过程更加简单,提升计算速度。

在一可选的实施例中,所述将所述当前段进行压缩,包括:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点相同,或者所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段。

这里,当从第二方向对所述收敛后的分段路由路径进行压缩时,若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,说明上一个段对应的源节点与所述当前目的节点的多个中间节点至所述当前目的节点的最短路径可能都不经过网络拓扑发生变化的位置,这些中间节点不影响数据从源节点向目的节点传输,从而删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径。若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且所述当前段对应的源节点至所述当前目的节点的最短路径不经过所述网络拓扑发生变化的位置、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径。如此,通过删除所述收敛后的分段路由路径中不影响数据从源节点向目的节点传输的中间节点,以减少目标分段路由路径中包含的段数量,从而简化目标分段路由路径,并尽可能的降低目标分段路由路径中存在微环的风险。

在一可选的实施例中,所述保留所述当前段至目标分段路由路径,包括:

若所述当前段为第一类型段,则将所述当前段按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,且所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的第一个段和最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段按照所述第二方向依序保留至所述目标分段路由路径。

这里,所述第一类型段表示段为node_segment,所述第二类型段表示段为adjacency_segment。当从第二方向对所述分段路由路径进行压缩时,若所述当前段对应的源节点至所述当前目的节点的最短路径经过所述网络拓扑发生变化的位置,则需要根据当前段的类型、位置以及当前段与目标分段路由路径中已存在的段的关系对应、将当前段或者当前段与所述当前段对应的源节点保留至所述目标分段路由路径,使得在网络拓扑发生变化后,源节点通过保留在目标分段路由路径中的段向目的节点传输数据时,能够不经过所述络拓扑发生变化的位置,确保数据正常传输,避免目标分段路由路径中存在微环,并简化目标分段路由路径。

综上,上述实施例提供的分段路由路径计算方法,通过设定的路径压缩算法对源节点至目的节点的收敛后的分段路由路径进行压缩,以获得能够有效避免重收敛过程中存在微环的源节点至目的节点的目标分段路由路径,由于目标分段路由路径是直接通过对源节点至目的节点的收敛后的分段路由路径压缩后得到的,从而计算过程更简单。

下面通过具体示例对本申请实施例作进一步详细说明,假设源节点为s,目的节点为d,s节点上可以在感知网络拓扑变化(统称为x)时,计算至目的节点d的且能够避免微环的目标分段路由路径。所述x可以是节点或链路。本实施例中以node_sid为nodesegment、adajcencysegment为adjacency_sid进行说明。

参见图4,为本发明实施例提供的一种分段路由路径计算方法,本实施例中以第一方向即从头至尾的方向对源节点至目的节点的收敛后的分段路由路径进行压缩为例,本实施例中,所述收敛后的分段路由路径为最短路径、目标分段路由路径为目标最短路径,该方法包括以下步骤:

s201:s节点上维护以自身为根的spt,获取网络拓扑变化后s节点至目的节点d的收敛后的最短路径old_sr_path,目标最短路径new_sr_path初始为空,当前根节点current_root初始设置为s。

这里,为了判断当前根节点至某个目的节点的最短路径是否经过x,采取了在s节点上维护所有以其它节点为根的最短路径树(spt,shortestpathtree)。将网络拓扑变化前s节点上以自身为根的spt记为old_spt(s),old_spt(s)给出了网络拓扑变化前至目的节点d的最短路径。而将网络拓扑变化后s节点上以自身为根的spt记为new_spt(s,x),new_spt(s,x)给出了网络拓扑变化后至目的节点d的最短路径。old_spt(d)表示维护的是网络拓扑变化前以节点d为根的spt,new_spt(d,x)表示维护的是网络拓扑变化后以节点d为根的spt。所述old_sr_path可以是一条表示严格逐跳路径的纯adajcencysegment组成的segmentlist,或者是纯nodesegment组成的segmentlist,或者,所述old_sr_path也可以是由nodesegment和adjacencysegment混合组成的segmentlist。此外,将old_sr_path通过计算所需得到的目标最短路径记为new_sr_path,而new_sr_path初始为空,并将当前根节点记为current_root,current_root初始设置为s。

s202:从头至尾遍历old_sr_path,依次取segment。

具体地,从头至尾遍历old_sr_path,依次取old_sr_path中的segment。

需要说明的是,segment的目的节点是指报文沿该segment所能到达的目的节点,如nodesegment的目的节点就是该node,adjacencysegment的目的节点就是该adjacency所连接的remotenode。而segment的源节点是指该segment的归属节点,如nodesegment的源节点就是该node,adjacencysegment的源节点就是该adjacency所属的localnode。

s203:检查current_root至segment的目的节点的最短路径是否经过x,如果是,则执行s204,否则执行s205。

这里,可以借助以current_root为根节点的spt来判断current_root节点至当前segment的目的节点的最短路径是否经过x,若x对应的段包含在old_spt(current_root)对应的current_root节点至当前segment的目的节点的最短路径中、和/或new_spt(current_root,x)对应的current_root节点至当前segment的目的节点的最短路径中,说明current_root至当前segment的目的节点的最短路径经过x;若x对应的段不包含在old_spt(current_root)对应的current_root节点至当前segment的目的节点的最短路径中以及new_spt(current_root,x)对应的current_root节点至当前segment的目的节点的最短路径中,说明current_root至当前segment的目的节点的最短路径不经过x。

s204:将segment添加至new_sr_path尾部,添加r标志,并将current_root更新成该segment的目的节点,跳转至s202。

这里,current_root至当前segment对应的目的节点的最短路径经过x,说明在网络拓扑发生变化后,报文在到达上一个segment后需要显式经过当前segment向d节点传输数据不会存在微环,因此需要将当前segment保留至new_sr_path中,并用r标志标识该segment不能够被覆盖。

s205:检查new_sr_path中最尾部是否已存在segment且为p标志,如果是,则执行s206,否则执行s207。

这里,new_sr_path中带有p标志的segment表示current_root至该segment对应的目的节点的最短路径不经过x,该segment可以被old_sr_path中与其相邻的下一个segment(current_root至该下一个segment对应的目的节点的最短路径也不经过x)所覆盖,而该segment被覆盖后不影响数据从s节点向d节点传输。因此,通过检查new_sr_path中最尾部的segment是否带有p标志,从而对带有p标志的该segment进行覆盖,以简化获得的new_sr_path。

s206:检查segment是否为old_sr_path中的最后一个segment,如果是,则执行s209,否则执行s208。

这里,当current_root至当前segment对应的目的节点的最短路径不经过x、且当前segment是old_sr_path中的最后一个segment、current_root至old_sr_path中倒数第二个segment对应的目的节点的最短路径也不经过x时,说明删除当前segment以及old_sr_path中倒数第二个segment后不影响数据从s节点向d节点传输,因此,通过检查当前segment是否为old_sr_path中的最后一个segment,从而对new_sr_path中最尾部已存在的segment进行删除或覆盖,以简化获得的new_sr_path。

s207:将segment的目的节点添加至new_sr_path尾部,并添加p标志,跳转至s202。

可以理解地,如果segment是old_sr_path中的最后一个segment,则可以不执行s207。这里,当new_sr_path中最尾部已存在segment且带有r标志时,说明new_sr_path中最尾部已存在的segment不能被覆盖,因此将当前segment的目的节点添加至new_sr_path尾部,并添加p标志。

s208:将segment的目的节点改写new_sr_path中最尾部已存在的segment,并添加p标志,跳转至s202。

这里,current_root至当前segment对应的目的节点的最短路径不经过x、且当前segment不是old_sr_path中的最后一个segment、且current_root至old_sr_path中与当前segment相邻的上一个segment对应的目的节点的最短路径也不经过x,说明删除与当前segment相邻的上一个segment即删除new_sr_path中最尾部已存在的segment不影响数据从源节点向目的节点传输,因此,将当前segment的目的节点改写new_sr_path中最尾部已存在的segment,并添加p标志。

s209:移除new_sr_path中最尾部已存在的segment,并跳转至s202。

这里,current_root至old_sr_path中最后一个segment对应的目的节点的最短路径不经过x、同时current_root至old_sr_path中倒数第二个segment对应的目的节点的最短路径也不经过x时,说明删除new_sr_path中最后一个segment不影响数据从源节点向目的节点传输,以减少new_sr_path中包含的segment数量,从而简化new_sr_path。

上述针对old_sr_path按照从头至尾的方向遍历并处理完后,将得到new_sr_path,即期望的用于避免微环的目标分段路由路径,从而在最坏收敛时间之内将报文等数据沿该new_sr_path转发以避免微环,在最坏收敛时间之后再走普通路由转发。

参见图5,为本发明实施例提供的另一种分段路由路径计算方法,本实施例中以第二方向即从尾至头的方向对源节点至目的节点之间的收敛后的分段路由路径进行压缩,本实施例中,所述分段路由路径为最短路径、目标分段路由路径为目标最短路径,该方法包括以下步骤:

s301:s节点上维护以自身为根的spt,获取网络拓扑变化后s节点至目的节点d的收敛后的最短路径old_sr_path,目标最短路径new_sr_path初始为空,当前目的节点current_destination初始设置为d。

这里,为了判断某个节点至当前目的节点的最短路径是否经过网络拓扑发生变化的位置x,采取了在s节点上维护所有以其它节点为根的spt。将网络拓扑变化前s节点上以自身为根的spt记为old_spt(s),old_spt(s)给出了网络拓扑变化前至目的节点d的最短路径。而将网络拓扑变化后s节点上以自身为根的spt记为new_spt(s,x),new_spt(s,x)给出了网络拓扑变化后至目的节点d的最短路径。old_spt(d)表示维护的是网络拓扑变化前以节点d为根的spt,new_spt(d,x)表示维护的是网络拓扑变化后以节点d为根的spt。所述old_sr_path可以是一条严格逐跳路径的纯adajcencysegment组成的segmentlist,或者是纯nodesegment组成的segmentlist,所述old_sr_path也可以是由nodesegment和adjacencysegment混合组成的segmentlist。此外,将所述old_sr_path通过计算所需得到的目标最短路径记为new_sr_path,而new_sr_path初始为空,并将当前目标节点记为current_destination,current_destination初始设置为d。

s302:从头至尾遍历old_sr_path,依次取segment。

具体地,从头至尾遍历old_sr_path,依次取old_sr_path中的segment。

需要说明的是,segment的目的节点是指报文沿该segment所能到达的目的节点,如nodesegment的目的节点就是该node,adjacencysegment的目的节点就是该adjacency所连接的remotenode。而segment的源节点是指该segment的归属节点,如nodesegment的源节点就是该node,adjacencysegment的源节点就是该adjacency所属的localnode。

s303:检查segment的源节点至current_destination的最短路径是否经过x,如果是,则执行s304,否则执行s305。

这里,可以借助以segment的源节点为根的spt来判断segment的源节点至current_destination的最短路径是否经过x,若x对应的段包含在old_spt(segment的源节点)对应的segment的源节点至current_destination的最短路径中、和/或new_spt(segment的源节点,x)对应的segment的源节点至current_destination的最短路径中,说明segment的源节点至current_destination的最短路径经过x;若x对应的段不包含在old_spt(segment的源节点)对应的segment的源节点至current_destination的最短路径中以及new_spt(segment的源节点,x)对应的segment的源节点至current_destination的最短路径中,说明segment的源节点至current_destination的最短路径不经过x。

s304:如果segment为nodesegment,则向new_sr_path头部添加此nodesegment并添加d标志;如果segment为adjacencysegment,则向new_sr_path头部添加此adjacencysegment,再添加此adjacencysegment的源节点并添加d标志,将current_destination更新成此adjacencysegment的源节点。

具体地,如果segment为nodesegment,则简单的向new_sr_path头部添加此nodesegment,并给此nodesegment添加d标志,即给此nodesegment打上d标志;如果segment为adjacencysegment,则先向new_sr_path头部添加此adjacencysegment,此时若检查出new_sr_path头部已存在nodesegment并且与待添加的adjacencysegment的目的节点相同,则可以移除new_sr_path头部已存在的nodesegment,然后向new_sr_path头部添加此adjacencysegment后,再检查该segment是否为old_sr_path中的第一个segment,如果该segment是old_sr_path中的第一个segment,则还需要向new_sr_path头部添加此adjacencysegment的源节点并给此adjacencysegment添加d标志。然后,将current_destination更新成此adjacencysegment的源节点。

这里,若当前segment为adjacencysegment,当前segment的源节点至current_destination的最短路径经过故障x、且new_sr_path最头部已存在的nodesegment与待添加的adjacencysegment的目的节点相同时,则移除new_sr_path最头部已存在的nodesegment,然后向new_sr_path头部添加此adjacencysegment,使得在故障x发生后,s节点可以经过该当前segment向d节点传输数据,并简化new_sr_path。

s305:检查new_sr_path中最头部是否已存在nodesegment且带有q标志,如果是,则执行s306,否则执行s307;

这里,当当前segment的源节点至current_destination的最短路径不经过故障x、并且new_sr_path中最头部已存在nodesegment且带有q标志时,说明上一个segment的源节点至current_destination的最短路径也不经过故障x。

s306:检查segment是否为old_sr_path中的第一个segment,如果是,则执行s309,否则执行s308。

具体地,当前segment的源节点至current_destination的最短路径不经过故障x、new_sr_path中最头部已存在nodesegment且带有q标志、并且当前segment为old_sr_path中的第一个segment,说明在故障x发生后,源节点通过当前目的节点能够向目的节点传输数据,new_sr_path中可以不保留上一个segment或当前segment。

s307:将segment的源节点添加至new_sr_path头部,并添加q标志,跳转至s302。

这里,如果segment是old_sr_path中的第一个segment,则可以不执行此步骤s307。

s308:将segment的源节点改写new_sr_path的最头部的nodesegment,并添加q标志,跳转至s302。

这里,当前segment的源节点至current_destination的最短路径不经过故障x、且当前segment不是old_sr_path中的第一个segment,而上一个segment的源节点至current_destination的最短路径也不经过故障x,用当前segment的源节点覆盖new_sr_path中保留的上一个segment后不影响数据从s节点向d节点传输,且能够简化获得的new_sr_path。

s309:从new_sr_path中删除已存在的最头部nodesegment,跳转至s302。

这里,当前segment的源节点至current_destination的最短路径不经过故障x、且当前segment是old_sr_path中的第一个segment,而上一个segment的源节点至current_destination的最短路径也不经过x,删除new_sr_path中保留的上一个segment后不影响数据从s节点向d节点传输,且能够简化获得的new_sr_path,并且通过new_sr_path进行数据传输不存在微环。

以上流程中,向new_sr_path中添加的segment的d标志表示该segment的源节点为当前目的节点,q标志表示该segment的源节点至当前目的节点的最短路径不需经过x。带有d标志的segment向new_sr_path添加时总是添加在头部,带有q标志的segment向new_sr_path添加时,可以直接覆盖new_sr_path中已存在的最头部带有q标志的segment,但不允许覆盖最头部带有d标志的segment。

上述针对old_sr_path按照从尾至头的方向遍历并处理完后,将得到new_sr_path,即期望的用于避免微环的目标分段路由路径,从而在最坏收敛时间之内将报文等数据沿该new_sr_path转发以避免微环,在最坏收敛时间之后再走普通路由转发。

下面通过具体示例对上述实施例进行具体说明,参见图6,图6中除了链路r4->r3的metric为200以外,其它链路的metric均为10,所有链路都是双向链路,每条链路的两个方向的metric都一致。两个节点之间的最短路径是指在两个节点之间的所有路径中,链路的metric之和最小的路径。参见图6,在链路r2->r3失效前,s至d的一条路径{s->r0,r0->r1,r1->r2,r2->r3,r3->d}的metric之和为50,s至d的另一条路径{s->r0,r0->r5,r5->r4,r4->r3,r3->d}的metric之和为240,因此,s至d的最短路径为{s->r0,r0->r1,r1->r2,r2->r3,r3->d}。本实施例中以链路r2->r3从有效变为无效导致网络拓扑发生变化后,计算源节点s至目的节点d的用于避免微环的目标分段路由路径为例。

当s节点通过igp泛洪感知到链路r2->r3失效,则根据最短路径优先算法计算出new_spt(s,x),此时x仅包含链路r2->r3。s节点根据new_spt(s,x)查找出至目的节点d的收敛后的分段路由路径即old_sr_path。本实施例中,old_sr_path的具体内容为:{s->r0,r0->r5,r5->r4,r4->r3,r3->d},old_sr_path是一条由纯adjacencysegment组成的segmentlist。目标分段路由路径new_sr_path初始为空。

(1)当从头至尾遍历old_sr_path时,初始的当前根节点current_root为s,上述目标分段路由路径的获取过程具体如下:

第一个segment为s->r0,该segment的目的节点为r0,由于s至r0的最短路径不需要经过x,所以将第一个segment的目的节点即r0添加到new_sr_path的尾部并添加p标志,此时new_sr_path变为{r0},current_root保持不变。

这里,所述s至r0的最短路径不需要经过x是指:检查链路r2->r3有效时对应的old_spt(s)发现s至r0的最短路径不需要经过x,以及检查链路r2->r3无效时对应的new_spt(s,x)发现s至r0的最短路径不需要经过x。

第二个segment为r0->r5,该segment的目的节点为r5,由于s至r5的最短路径不需要经过x,所以将第二个segment的目的节点即r5添加到new_sr_path的尾部并添加p标志,由于new_sr_path的尾部已经存在带有p标志的segment即r0,则用r5改写r0,此时new_sr_path变为{r5},current_root保持不变。

第三个segment为r5->r4,该segment的目的节点为r4,由于s至r4的最短路径不需要经过x,所以将第三个segment的目的节点即r4添加到new_sr_path的尾部并添加p标志,由于new_sr_path的尾部已经存在带有p标志的segment即r5,则用r4改写r5,此时new_sr_path变为{r4},current_root保持不变。

第四个segment为r4->r3,该segment的目的节点为r3,由于s至r3的最短路径需要经过x,所以将r4->r3添加到new_sr_path的尾部并添加r标志,此时new_sr_path变为{r4,r4->r3},并将current_root更新为r3。

这里,所述s至r3的最短路径需要经过x具体为:检查链路r2->r3有效时对应的old_spt(s)发现s至r3的最短路径需要经过x。

第五个segment为r3->d,且是old_sr_path中最后一个segment,该segment的目的节点为d,由于r3至d的最短路径不需要经过x,所以将new_sr_path中最尾部带有p标志的segment删除,得到{r4,r4->r3},遍历结束。

(2)当从尾至头遍历old_sr_path时,初始的当前目的节点current_destination为d,上述目标分段路由路径的获取过程具体如下:

第一个segment为r3->d,该segment的源节点为r3,由于r3至d的最短路径不需要经过x,所以将该segment的源节点r3写入new_sr_path头部并给c3打上q标志,new_sr_path变为{r3},current_destination保持不变,继续遍历下一个segment。

第二个segment为r4->r3,该segment的源节点为r4,由于r4至d的最短路径需要经过x,所以将r4->r3添加到new_sr_path的头部,先添加adjacencysegment(r4->r3),再添加adjacencysegment(r4->r3)的源节点即nodesegment(r4)并给r4打上d标志。在添加时发现adjacencysegment(r4->r3)的目的节点r3与new_sr_path头部已有的nodesegment(r3)一致,则需要移除new_sr_path头部已有的nodesegment(r3),new_sr_path变为{r4,r4->r3},current_destination更新为r4。

这里,所述r4至d的最短路径需要经过x具体为:检查链路r2->r3有效时对应的old_spt(r4)发现r4至d的最短路径需要经过x。

第三个segment为r5->r4,该segment的源节点为r5,由于r5至r4的最短路径不需要经过x,所以将该segment的源节点r5写入new_sr_path头部并给r5打上q标志,new_sr_path变为{r5,r4,r4->r3},current_destination保持不变,继续遍历下一个segment。

第四个segment为r0->r5,该segment的源节点为r0,由于r0至r4的最短路径不需要经过x,所以将该segment的源节点r0写入new_sr_path头部并给r0打上q标志,由于new_sr_path的头部已存在带有q标志的且为nodesegment的r5,则直接用r0覆盖r5,new_sr_path变为{r0,r4,r4->r3},current_destination保持不变,继续遍历下一个segment。

第五个segment为s->r0,该segment的源节点为s,由于s至r4的最短路径不需要经过x,而检查发现new_sr_path的头部已存在带有q标志的r0,则删除new_sr_path头部的r0,此时new_sr_path变为{r4,r4->r3}。

从以上处理可知,最终得到的用于避免微环的目标分段路由路径的表示形式为{r4,r4->r3},则在最坏收敛时间之内报文等数据可以沿该目标分段路由路径转发以避免微环,在最坏收敛时间之后再走普通路由转发。例如,当s节点需要向节点d传输报文时,先将报文和上述目标分段路由路径发送给节点r0,节点r0根据上述目标分段路由路径包含的节点r4查找路由表获知向节点r4传输报文需要经过的下一跳节点r5,并将报文向节点r5传输,以使节点r5再传输给r4,最后将报文传输给节点d。这样,避免了当节点r1完成了路由表的更新计算而节点r0未完成路由表的更新计算时,节点r0会将节点d传输过来的报文发送给节点r1,节点r1又会将该报文发送给节点r0,使得节点r0和r1之间出现微环。

请再次参阅图5,以链路r2->r3从无效变为有效导致网络拓扑发生变化后,计算源节点s至目的节点d的用于避免微环的目标分段路由路径为例。

当s节点通过igp泛洪感知到链路r2->r3从无效变为有效,则根据最短路径优先算法计算出new_spt(s,x),此时x仅包含链路r2->r3。s节点根据new_spt(s,x)查找出至目的节点d的收敛后的分段路由路径即old_sr_path。本实施例中,old_sr_path的具体内容为:{s->r0,r0->r1,r1->r2,r2->r3,r3->d},old_sr_path是一条由纯adjacencysegment组成的segmentlist。目标分段路由路径new_sr_path初始为空。

(1)当从头至尾遍历old_sr_path时,初始的当前根节点current_root为s,上述目标分段路由路径的获取过程具体如下:

第一个segment为s->r0,该segment的目的节点为r0,由于s至r0的最短路径不需要经过x,所以将第一个segment的目的节点即r0添加到new_sr_path的尾部并添加p标志,此时new_sr_path变为{r0},current_root保持不变。

第二个segment为r0->r1,该segment的目的节点为r1,由于s至r1的最短路径不需要经过x,所以将第二个segment的目的节点即r1添加到new_sr_path的尾部并添加p标志,由于new_sr_path尾部已经存在带有p标志的segment即r0,则用r1改写r0,此时new_sr_path变为{r1},current_root保持不变。

第三个segment为r1->r2,该segment的目的节点为r2,由于s至r2的最短路径不需要经过x,所以将第三个segment的目的节点即r2添加到new_sr_path的尾部并添加p标志,由于new_sr_path尾部已经存在带有p标志的segment即r1,则用r2改写r1,此时new_sr_path变为{r2},current_root保持不变。

第四个segment为r2->r3,该segment的目的节点为r3,由于s至r3的最短路径需要经过x,所以将r2->r3添加到new_sr_path的尾部并添加r标志,此时new_sr_path变为{r2,r2->r3},并将current_root更新为r3。

这里,所述s至r3的最短路径需要经过x具体为:根据链路r2->r3有效时对应的new_spt(s,x)发现s至r3的最短路径需要经过x。

第五个segment为r3->d,且是old_sr_path中最后一个segment,该segment的目的节点为d,由于r3至d的最短路径不需要经过x,所以将new_sr_path中最尾部的带有p标志的segment删除,得到{r2,r2->r3},遍历结束。

(2)当从尾至头遍历old_sr_path时,初始的当前目的节点current_destination为d,上述目标分段路由路径的获取过程具体如下:

第一个segment为r3->d,该segment的源节点为r3,由于r3至d的最短路径不需要经过x,所以将该segment的源节点r3添加到new_sr_path头部并给c3打上q标志,new_sr_path变为{r3},current_destination保持不变,继续遍历下一个segment。

第二个segment为r2->r3,该segment的源节点为r2,由于r2至d的最短路径需要经过x,所以将r2->r3添加到new_sr_path的头部,先添加adjacencysegment(r2->r3),再添加adjacencysegment(r2->r3)的源节点即nodesegment(r2)并给r2打上d标志。在添加时发现adjacencysegment(r2->r3)的目的节点r3与new_sr_path头部已有的nodesegment(r3)一致,则需要移除new_sr_path头部已有的nodesegment(r3),此时new_sr_path变为{r2->r3},将current_destination更新为r2。

这里,所述r2至d的最短路径需要经过x具体为:检查链路r2->r3有效时对应的new_spt(r2,x)发现r2至d的最短路径需要经过x。

第三个segment为r1->r2,该segment的源节点为r1,由于r1至r2的最短路径不需要经过x,所以将该segment的源节点r1写入new_sr_path头部并给r1打上q标志,new_sr_path变为{r1,r2,r2->r3},current_destination保持不变,继续遍历下一个segment。

第四个segment为r0->r1,该segment的源节点为r0,由于r0至r2的最短路径不需要经过x,而检查发现new_sr_path的头部已存在带有q标志的r1,所以删除new_sr_path头部的r1,将r0写入new_sr_path头部并打上q标志,new_sr_path变为{r0,r2,r2->r3},current_destination保持不变,继续遍历下一个segment。

第五个segment为s->r0,该segment的源节点为s,由于s至r2的最短路径不需要经过x,而检查发现new_sr_path的头部已存在带有q标志的nodesegment(r0),则删除new_sr_path头部的r0,此时new_sr_path变为{r2,r2->r3},将current_destination更新为s。

从以上处理可知,最终得到的用于避免微环的目标分段路由路径的表示形式为{r2,r2->r3},则在最坏收敛时间之内报文等数据可以沿该目标分段路由路径转发以避免微环,在最坏收敛时间之后再走普通路由转发。例如,当s节点需要向节点d传输报文时,先将报文和上述目标分段路由路径发送给节点r0,节点r0根据上述目标分段路由路径包含的节点r4查找路由表获知向节点r4传输报文需要经过的下一跳节点r5,并将报文向节点r5传输,以使节点r5再传输给r4,最后将报文传输给节点d。这样,避免了当节点r5完成了路由表的更新计算而节点r0未完成路由表的更新计算时,节点r0会将节点d传输过来的报文发送给节点r5,节点r5又会将该报文发送给节点r0,使得节点r0和r5之间存在微环情形的出现。

下面通过具体示例对上述实施例进行具体说明,参见图7,图7中除了链路r4->r3的metric为200以外,其它链路的metric均为10,所有链路都是双向链路,每条链路的两个方向的metric都一致。本实施例中以链路r2->r3从有效变为无效、以及链路r6->r3从无效变为有效同时导致网络拓扑发生变化后,计算源节点s至目的节点d的用于避免微环的目标分段路由路径为例。

当s节点通过igp泛洪感知到链路r2->r3失效以及链路r6->r3从无效变为有效,一般根据拓扑震荡抑制的相关配置,会将这两个事件合并处理,则根据最短路径优先算法计算出new_spt(s,x),此时x包含链路r2->r3和链路r6->r3。s节点根据new_spt(s,x)查找出至目的节点d的收敛后的分段路由路径即old_sr_path。本实施例中,old_sr_path的具体内容为:{s->r0,r0->r5,r5->r4,r4->r6,r6->d},old_sr_path是一条由纯adjacencysegment组成的segmentlist。目标分段路由路径new_sr_path初始为空。

(1)当从头至尾遍历old_sr_path时,初始的当前根节点current_root为s,上述目标分段路由路径的获取过程具体如下:

第一个segment为s->r0,该segment的目的节点为r0,由于s至r0的最短路径不需要经过x,所以将第一个segment的目的节点即r0添加到new_sr_path的尾部并添加p标志,此时new_sr_path变为{r0},current_root保持不变。

第二个segment为r0->r5,该segment的目的节点为r5,由于s至r5的最短路径不需要经过x,所以将第二个segment的目的节点即r5添加到new_sr_path的尾部并添加p标志,由于new_sr_path的尾部已经存在带有p标志的segment即r0,则用r5改写r0,此时new_sr_path变为{r5},current_root保持不变。

第三个segment为r5->r4,该segment的目的节点为r4,由于s至r4的最短路径不需要经过x,所以将第三个segment的目的节点即r4添加到new_sr_path的尾部并添加p标志,由于new_sr_path的尾部已经存在带有p标志的segment即r5,则用r4改写r5,此时new_sr_path变为{r4},current_root保持不变。

第四个segment为r4->r6,该segment的目的节点为r6,由于s至r6的最短路径不需要经过x,所以将第四个segment的目的节点即r6添加到new_sr_path的尾部并添加p标志,由于new_sr_path的尾部已经存在带有p标志的segment即r4,则用r6改写r4,此时new_sr_path变为{r6},current_root保持不变。

第五个segment为r6->r3,该segment的目的节点为r3,由于s至r3的最短路径需要经过x,所以将r6->r3添加到new_sr_path的尾部并添加r标志,此时new_sr_path变为{r6,r6->r3},并将current_root更新为r3。

这里,所述s至r3的最短路径需要经过x具体为:检查链路r2->r3有效时对应的old_spt(s)发现s至r3的最短路径需要经过链路r2->r3,或者,根据链路r6->r3有效时对应的new_spt(s,x)发现s至r3的最短路径需要经过链路r6->r3。

第六个segment为r3->d,且是old_sr_path中最后一个segment,该segment的目的节点为d,由于r3至d的最短路径不需要经过x,所以将new_sr_path中最尾部带有p标志的segment删除,得到{r6,r6->r3},遍历结束。

(2)当从尾至头遍历old_sr_path时,初始的当前目的节点current_destination为d,上述目标分段路由路径的获取过程具体如下:

第一个segment为r3->d,该segment的源节点为r3,由于r3至d的最短路径不需要经过x,所以将该segment的源节点r3添加到new_sr_path头部并给c3打上q标志,new_sr_path变为{r3},current_destination保持不变,继续遍历下一个segment。

第二个segment为r6->r3,该segment的源节点为r6,由于r6至d的最短路径需要经过x,所以将r6->r3添加到new_sr_path的头部,先添加adjacencysegment(r6->r3),再添加adjacencysegment(r6->r3)的源节点即nodesegment(r6)并给r6打上d标志。在添加时发现adjacencysegment(r6->r3)的目的节点r3与new_sr_path头部已有的nodesegment(r3)一致,则需要移除new_sr_path头部已有的nodesegment(r3),此时new_sr_path变为{r6,r6->r3},将current_destination更新为r6。

这里,所述r6至d的最短路径需要经过x具体为:检查链路r2->r3有效时对应的old_spt(r6)发现r6至d的最短路径需要经过r2->r3,或者,检查链路r6->r3有效时对应的new_spt(r6,x)发现r6至d的最短路径需要经过r6->r3。

第三个segment为r4->r6,该segment的源节点为r4,由于r4至r6的最短路径不需要经过x,所以将该segment的源节点r4添加到new_sr_path头部并给r4打上q标志,new_sr_path变为{r4,r6,r6->r3},current_destination保持不变,继续遍历下一个segment。

第四个segment为r5->r4,该segment的源节点为r5,由于r5至r6的最短路径不需要经过x,所以将该segment的源节点r5添加到new_sr_path头部并给r5打上q标志,由于new_sr_path的头部已存在带有q标志的且为nodesegment的r4,则直接用r5覆盖r4,new_sr_path变为{r5,r6,r6->r3},current_destination保持不变,继续遍历下一个segment。

第五个segment为r0->r5,该segment的源节点为r0,由于r0至r6的最短路径不需要经过x,所以将该segment的源节点r0添加到new_sr_path头部并给r0打上q标志,由于new_sr_path的头部已存在带有q标志的且为nodesegment的r5,则直接用r0覆盖r5,new_sr_path变为{r0,r6,r6->r3},current_destination保持不变,继续遍历下一个segment。

第六个segment为s->r0,该segment的源节点为s,由于s至r6的最短路径不需要经过x,而检查发现new_sr_path的头部已存在带有q标志的r0,则删除new_sr_path头部的r0,此时new_sr_path变为{r6,r6->r3}。

从以上处理可知,最终得到的用于避免微环的目标分段路由路径的表示形式为{r6,r6->r3},则在最坏收敛时间之内报文等数据可以沿该目标分段路由路径转发以避免微环,在最坏收敛时间之后再走普通路由转发。

为实现上述方法,本发明实施例还提供了一种分段路由路径计算装置,如图8所示,该装置包括:获取单元10和处理单元20;其中,

所述获取单元10,用于根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径;

所述处理单元20,用于按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。

综上,上述实施例提供的分段路由路径计算装置,根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径;按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。如此,通过设定的路径压缩算法对源节点至目的节点的收敛后的分段路由路径进行压缩,以获得能够有效避免重收敛过程中存在微环的源节点至目的节点的目标分段路由路径,由于目标分段路由路径是直接通过对源节点至目的节点的收敛后的分段路由路径压缩后得到的,从而计算过程更简单。

在一可选的实施例中,所述处理单元20,具体用于:

以所述源节点为初始的当前根节点;

从所述收敛后的分段路由路径中沿第一方向选取一段为当前段;

检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的目的节点作为更新的当前根节点,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

通过根据第一方向对收敛后的分段路由路径的段进行遍历,检查当前根节点至当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,根据检查的结果保留对应的段或将对应的段进行压缩,如此,通过对源节点至目的节点的收敛后的分段路由路径进行压缩,可以简化获得的目标分段路由路径,且通过对网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过网络拓扑发生变化的位置的段进行压缩,可以通过目标分段路由路径进行报文等数据转发时避免出现微环。

在一可选的实施例中,所述处理单元20,具体用于:

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的第一个段,则将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则不将所述当前段保留至所述目标分段路由路径;

若所述当前根节点与上一个段对应的目的节点不相同,则将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段。

如此,能够减少目标分段路由路径中包含的段数量,从而简化目标分段路由路径,并尽可能的降低目标分段路由路径中存在微环的风险。

在一可选的实施例中,所述处理单元20,具体用于:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段,且将所述当前段对应的所述第二节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段。

如此,通过减少目标分段路由路径中包含的段数量,从而简化目标分段路由路径,并尽可能的降低目标分段路由路径中存在微环的风险。

在一可选的实施例中,所述处理单元20,具体用于:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前根节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前根节点至所述当前段对应的目的节点的最短路径、及在网络拓扑发生变化之后所述当前根节点至所述当前段对应的目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

在一可选的实施例中,所述处理单元20,具体用于:

以所述目的节点为初始的当前目的节点;

从所述备选修复路径中沿第二方向选取一段为当前段;

检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的源节点作为更新的当前目的节点,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

在一可选的实施例中,所述处理单元20,具体用于:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点相同,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段。

如此,通过删除所述收敛后的分段路由路径中不影响数据从源节点向目的节点传输的中间节点,以减少目标分段路由路径中包含的段数量,从而简化目标分段路由路径,并尽可能的降低目标分段路由路径中存在微环的风险。

在一可选的实施例中,所述处理单元20,具体用于:

若所述当前段为第一类型段,则将所述当前段按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,且所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的第一个段和最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段按照所述第二方向依序保留至所述目标分段路由路径。

如此,通过保留与当前目标节点之间的最短路径经过网络拓扑发生变化的位置的段,确保根据压缩后获得的目标分段路由路径不仅能够从源节点向目的节点传输数据,而且使得目标分段路由路径中避免存在微环。

在一可选的实施例中,所述处理单元20,具体用于:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前段对应的源节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前段对应的源节点至所述当前目的节点的最短路径、及在网络拓扑发生变化之后所述当前段对应的源节点至所述当前目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

如此,通过计算在网络拓扑发生变化之前、以及网络拓扑发生变化之后,所述当前段对应的源节点至当前目的节点的最短路径,并根据网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,判断所述最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置,从而计算过程更加简单,提升计算速度。

本发明实施例提供了一种分段路由路径计算装置,如图9所示,该装置包括:至少一个处理器310和用于存储能够在处理器310上运行的计算机程序的存储器311;其中,图9中示意的处理器310并非用于指代处理器310的个数为一个,而是仅用于指代处理器310相对其他器件的位置关系,在实际应用中,处理器310的个数可以为一个或多个;同样,图9中示意的存储器311也是同样的含义,即仅用于指代存储器311相对其他器件的位置关系,在实际应用中,存储器311的个数可以为一个或多个。

其中,所述处理器310用于运行所述计算机程序时,执行如下步骤:

根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径;

按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。

综上,上述实施例提供的分段路由路径计算装置,通过设定的路径压缩算法对源节点至目的节点的收敛后的分段路由路径进行压缩,以获得能够有效避免重收敛过程中存在微环的源节点至目的节点的目标分段路由路径,由于目标分段路由路径是直接通过对源节点至目的节点的收敛后的分段路由路径压缩后得到的,从而计算过程更简单。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

以所述源节点为初始的当前根节点;

从所述收敛后的分段路由路径中沿第一方向选取一段为当前段;

检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的目的节点作为更新的当前根节点,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的第一个段,则将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则不将所述当前段保留至所述目标分段路由路径;

若所述当前根节点与上一个段对应的目的节点不相同,则将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段,且将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前目标节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前根节点至所述当前段对应的目的节点的最短路径、及在网络拓扑发生变化之后所述当前根节点至所述当前段对应的目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

以所述目的节点为初始的当前目的节点;

从所述备选修复路径中沿第二方向选取一段为当前段;

检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的源节点作为更新的当前目的节点,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点相同,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

若所述当前段为第一类型段,则将所述当前段按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,且所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的第一个段和最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段按照所述第二方向依序保留至所述目标分段路由路径。

在一可选的实施例中,所述处理器310还用于运行所述计算机程序时,执行如下步骤:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前段对应的源节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前段对应的源节点至所述当前目的节点的最短路径、及在网络拓扑发生变化之后所述当前段对应的源节点至所述当前目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征所述最短路径未经过所述网络拓扑发生变化的位置。

该分段路由路径计算装置还包括:至少一个网络接口312。该装置中的各个组件通过总线系统313耦合在一起。可理解,总线系统313用于实现这些组件之间的连接通信。总线系统313除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图9中将各种总线都标为总线系统313。

其中,存储器311可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,readonlymemory)、可编程只读存储器(prom,programmableread-onlymemory)、可擦除可编程只读存储器(eprom,erasableprogrammableread-onlymemory)、电可擦除可编程只读存储器(eeprom,electricallyerasableprogrammableread-onlymemory)、磁性随机存取存储器(fram,ferromagneticrandomaccessmemory)、快闪存储器(flashmemory)、磁表面存储器、光盘、或只读光盘(cd-rom,compactdiscread-onlymemory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,randomaccessmemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,staticrandomaccessmemory)、同步静态随机存取存储器(ssram,synchronousstaticrandomaccessmemory)、动态随机存取存储器(dram,dynamicrandomaccessmemory)、同步动态随机存取存储器(sdram,synchronousdynamicrandomaccessmemory)、双倍数据速率同步动态随机存取存储器(ddrsdram,doubledataratesynchronousdynamicrandomaccessmemory)、增强型同步动态随机存取存储器(esdram,enhancedsynchronousdynamicrandomaccessmemory)、同步连接动态随机存取存储器(sldram,synclinkdynamicrandomaccessmemory)、直接内存总线随机存取存储器(drram,directrambusrandomaccessmemory)。本发明实施例描述的存储器311旨在包括但不限于这些和任意其它适合类型的存储器。

本发明实施例中的存储器311用于存储各种类型的数据以支持分段路由路径计算装置的操作。这些数据的示例包括:用于在分段路由路径计算装置上操作的任何计算机程序,如操作系统和应用程序;联系人数据;电话簿数据;消息;图片;视频等。其中,操作系统包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序可以包含各种应用程序,例如媒体播放器(mediaplayer)、浏览器(browser)等,用于实现各种应用业务。这里,实现本发明实施例方法的程序可以包含在应用程序中。

本实施例还提供了一种计算机存储介质,例如包括存储有计算机程序的存储器311,上述计算机程序可由分段路由路径计算装置中的处理器310执行,以完成前述方法所述步骤。计算机存储介质可以是fram、rom、prom、eprom、eeprom、flashmemory、磁表面存储器、光盘、或cd-rom等存储器;也可以是包括上述存储器之一或任意组合的各种设备,如移动电话、计算机、平板设备、个人数字助理等。

一种计算机存储介质,所述计算机存储介质中存储有计算机程序,所述计算机程被处理器运行时,执行如下步骤:

根据网络拓扑发生变化的位置获取源节点至目的节点的收敛后的分段路由路径;

按照设定的路径压缩算法对所述收敛后的分段路由路径进行压缩,获得所述源节点至所述目的节点的目标分段路由路径。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

以所述源节点为初始的当前根节点;

从所述收敛后的分段路由路径中沿第一方向选取一段为当前段;

检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的目的节点作为更新的当前根节点,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第一方向依序选取下一段为更新的当前段,返回所述检查所述当前根节点至所述当前段对应的目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的第一个段,则将所述当前段对应的目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前根节点与上一个段对应的目的节点相同、且所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则不将所述当前段保留至所述目标分段路由路径;

若所述当前根节点与上一个段对应的目的节点不相同,则将所述当前段覆盖所述目标分段路由路径顺沿所述第一方向的最后一个段。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段,且将所述当前段对应的母目的节点保留至所述目标分段路由路径顺沿所述第一方向的末端;

若所述当前段是所述收敛后的分段路由路径顺沿所述第一方向的最后一个段,则删除所述目标分段路由路径顺沿所述第一方向的最后一个段。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前根节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前根节点至所述当前段对应的目的节点的最短路径、及在网络拓扑发生变化之后所述当前根节点至所述当前段对应的目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

以所述目的节点为初始的当前目的节点;

从所述备选修复路径中沿第二方向选取一段为当前段;

检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置;

若在网络拓扑发生变化之前和/或在网络拓扑发生变化之后经过所述网络拓扑发生变化的位置,则保留所述当前段至目标分段路由路径,并将所述当前段对应的源节点作为更新的当前目的节点,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤;

若在网络拓扑发生变化之前及在网络拓扑发生变化之后均不经过所述网络拓扑发生变化的位置,则将所述当前段进行压缩,从所述收敛后的分段路由路径中沿所述第二方向依序选取下一段为更新的当前段,返回所述检查所述当前段对应的源节点至所述当前目的节点的最短路径分别在网络拓扑发生变化之前、及在网络拓扑发生变化之后是否经过所述网络拓扑发生变化的位置的步骤。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点相同,或者若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段、并将所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段、且上一个段对应的源节点与所述当前目的节点不相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

若所述当前段为第一类型段,则将所述当前段按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,且所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的第一个段,则将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段不是所述收敛后的分段路由路径顺沿所述第二方向的第一个段和最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段以及所述当前段对应的源节点按照所述第二方向依序保留至所述目标分段路由路径;

若所述当前段为第二类型段,所述当前段是所述收敛后的分段路由路径顺沿所述第二方向的最后一个段,且所述目标分段路由路径顺沿所述第二方向的最后一个段对应的源节点与所述当前段对应的目的节点相同,则删除所述目标分段路由路径顺沿所述第二方向的最后一个段,并将所述当前段按照所述第二方向依序保留至所述目标分段路由路径。

在一可选的实施例中,所述计算机程序被处理器运行时,还执行如下步骤:

根据最短路径优先算法获取在网络拓扑发生变化之前、及在网络拓扑发生变化之后分别以所述当前段对应的源节点为根的最短路径树;

根据所述最短路径树分别确定在网络拓扑发生变化之前所述当前段对应的源节点至所述当前目的节点的最短路径、及在网络拓扑发生变化之后所述当前段对应的源节点至所述当前目的节点的最短路径;

查找所述网络拓扑发生变化的位置对应的段是否包含在所述最短路径中,若是,则表征所述最短路径经过所述网络拓扑发生变化的位置,若否,则表征在所述最短路径未经过所述网络拓扑发生变化的位置。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。本发明的保护范围应以所述权利要求的保护范围以准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1