段路由中获取数据包的转发路径的信息的方法和装置与流程

文档序号:19729767发布日期:2020-01-18 03:48阅读:351来源:国知局
段路由中获取数据包的转发路径的信息的方法和装置与流程

本申请涉及通信领域,并且更具体地,涉及段路由(segmentrouting,sr)中获取数据包的转发路径的信息的方法和装置。



背景技术:

sr是一种源路由机制。如果sr隧道很长,例如部署在第六版本的互联网协议数据平面的段路由(internetprotocolversionsegmentrouting,srv6),那么用于指示数据包经过的路径的标识(identification,id)列表的长度就会很长。过长的id列表会降低数据包的传输效率,最终降低通信网络的性能。



技术实现要素:

本申请提供段路由中获取数据包的转发路径的信息的方法和装置,有利于减少用于指示数据包经过的路径的标识列表的长度,从而有利于提高数据包的传输效率,最终提高通信网络的性能。

第一方面,本申请提供了一种段路由中获取数据包的转发路径的信息的方法,该方法包括:获取数据包的转发路径的初始信息,所述初始信息包括多个路径标识;根据所述初始信息生成所述数据包的转发路径的目标信息,所述目标路径信息包括一个或多个节点段标识,所述目标信息中至少有一个节点段标识对应于所述初始信息中的多个路径标识,所述初始信息中对应于所述目标信息中的节点段标识的多个路径标识所指示的第一路径为所述段路由中所述第一路径的起始节点至所述第一路径的结束节点之间唯一的最短路径,所述目标信息中对应于所述初始信息中的多个路径标识的每个节点段标识为所述每个节点段标识对应的所有路径标识所指示的路径的结束节点的节点段标识。

该方法中,当初始信息中的多个路径标识所指示的第一路径为该第一路径的起始节点与该第一路径的结束节点间的唯一最短路径时,可以用该第一路径的结束节点的节点(node)段标识(segmentid,sid)来替代这多个路径标识指示该第一路径,从而可以减少路径标识的数量,进而可以提高数据包的传输效率,最终提高通信网络的性能。

此外,减少路径标识的数量,还可以减少转发数据包的入节点插入路径标识的次数,从而提高入节点的处理性能,进而提高通信网络的性能。

结合第一方面,在第一种可能的实现方式中,所述根据所述初始信息生成所述数据包的转发路径的目标信息,包括:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中的第j个节点作为结束节点,i的取值为1,j的取值为所述节点列表的长度值,执行步骤二;步骤二,判断所述起始节点与所述结束节点是否是同一个节点,若是,则结束执行,否则执行步骤三;步骤三,判断所述起始节点与所述结束节点是否为所述节点列表中相邻的节点,若是,则执行步骤四,否则执行步骤五;步骤四,在所述目标信息中记录所述起始节点至所述结束节点之间的邻接段标识,i的取值更新为与j的取值相等,之后,j的取值更新为与所述节点列表的长度值相等,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中的第j个节点作为所述结束节点,并重新执行步骤二;步骤五,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列时所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤六,否则执行步骤七;步骤六,在所述目标信息中记录所述结束节点的节点段标识,i的取值更新为与j的取值相等,之后,j的取值更新为与所述节点列表的长度值相等,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中的第j个节点作为所述结束节点,并重新执行步骤二;步骤七,j的取值更新为j-1,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二。

结合第一方面,在第二种可能的实现方式中,所述根据所述初始信息生成所述数据包的转发路径的目标信息,包括:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中的第j个节点作为结束节点,i的取值为1,j的取值为所述节点列表的长度值,执行步骤二;步骤二,判断所述起始节点与所述结束节点是否是同一个节点,若是,则结束执行,否则执行步骤三;步骤三,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列时所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤四,否则执行步骤五;步骤四,在所述目标信息中记录所述结束节点的节点段标识,i的取值更新为与j的取值相等,之后,j的取值更新为与所述节点列表的长度值相等,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中的第j个节点作为所述结束节点,并重新执行步骤二;步骤五,j的取值更新为j-1,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二。

结合第一方面,在第三种可能的实现方式中,所述根据所述初始信息生成所述数据包的转发路径的目标信息,包括:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中第j个节点作为结束节点,设置临时结束节点为空节点,i的取值为1,j的取值为i+1,执行步骤二;步骤二,判断所述结束节点是否是所述节点列表中的最后一个节点,若是,则执行步骤十,否则执行步骤三;步骤三,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤四,否则执行步骤五;步骤四,将所述临时结束节点更新为所述结束节点,j的取值更新为j+1,再将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤五,判断所述临时结束节点是否为空,若不是,则执行步骤六,否则执行步骤七;步骤六,判断所述临时结束节点是否为所述起始节点的相邻节点,若是,则执行步骤八,否则执行步骤九;步骤七,在所述目标信息中记录用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,i的取值更新为与j的取值相等,之后,j的取值更新为j+1,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤八,在所述目标信息中记录所述起始节点至所述临时结束节点之间的路径的邻接段标识,i的取值更新为与j-1相等,之后,j的取值更新为j,将所述节点列表中第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,将所述临时结束节点置空,并重新执行步骤二;步骤九,在所述目标信息中记录所述临时结束节点的节点段标识,i的取值更新为与j-1相等,之后,j的取值更新为j,将所述节点列表中第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,将所述临时结束节点置空,并重新执行步骤二;步骤十,判断所述起始节点是否为所述节点列表中的倒数第二个节点,若不是,则执行步骤十一,否则执行步骤十二;步骤十一,在所述目标信息中记录所述结束节点对应的节点段标识,并结束执行;步骤十二,在所述目标信息中记录用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,并结束执行。

结合第一方面,在第四种可能的实现方式中,所述根据所述初始信息生成所述数据包的转发路径的目标信息,包括:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中第j个节点作为结束节点,设置临时结束节点为空节点,i的取值为1,j的取值为i+1,执行步骤二;步骤二,判断所述结束节点是否是所述节点列表中的最后一个节点,若是,则执行步骤八,否则执行步骤三;步骤三,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤四,否则执行步骤五;步骤四,将所述临时结束节点更新为所述结束节点,j的取值更新为j+1,再将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤五,判断所述临时结束节点是否为空,若不是,则执行步骤六,否则执行步骤七;步骤六,在所述目标信息中记录所述临时结束节点的节点段标识,i的取值更新为与j-1相等,之后,j的取值更新为j,将所述节点列表中第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,将所述临时结束节点置空,并重新执行步骤二;步骤七,在所述目标信息中记录用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,i的取值更新为与j的取值相等,之后,j的取值更新为j+1,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤八,判断所述起始节点是否为所述节点列表中的倒数第二个节点,若不是,则执行步骤九,否则执行步骤十;步骤九,在所述目标信息中记录所述结束节点的节点段标识,并结束执行;步骤十,在所述目标信息中记录所述用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,并结束执行。

结合第一方面或第一种至第四种任意一种可能的实现方式,在第五种可能的实现方式中,初始信息为邻接段标识列表,即初始信息中的路径标识为邻接段标识。

结合第一方面或第一种至第五种任意一种可能的实现方式,在第六种可能的实现方式中,该方法由数据包的转发路径的入节点执行。

其中,该方法还包括:根据目标信息发送数据包,该数据包括中包括目标信息。

结合第一方面或第一种至第五种任意一种可能的实现方式,在第七种可能的实现方式中,该方法还包括:控制器向数据包的转发路径的入节点发送目标信息,以便于该入节点根据目标信息发送包括该目标信息的数据包。

第二方面,提供了一种段路由中获取数据包的转发路径的信息的装置,该装置包括用于执行第一方面或第一方面的任意一种可能的实现方式中的方法的模块。

第三方面,提供了一种段路由中获取数据包的转发路径的信息的装置,该装置包括处理器,处理器用于执行程序,当处理器执行程序时,实现第一方面或第一方面的任意一种可能的实现方式中的方法。

可选地,该装置还可以包括存储器。存储器用于存储处理器执行的程序。

可选地,该装置还可以包括接收器。接收器用于从其他设备或装置接收信息。

可选地,该装置还可以包括发送器。用于向其他设备或装置发送信息。

该装置的一种示例为网络节点或网络控制器。

第四方面,提供一种计算机可读存储介质,该计算机可读存储介质存储用于通信装置或通信设备执行的程序代码,该程序代码包括用于实现第一方面或第一方面的任意一种可能的实现方式中的方法的指令。

第五方面,提供一种芯片,该芯片包括处理器和通信接口,该通信接口用于与外部器件进行同行,该处理器用于实现第一方面或第一方面的任意一种可能的实现方式中的方法。

可选地,该芯片还可以包括存储器,该存储器中存储有指令,处理器用于执行存储器中存储的指令,当该指令被执行时,处理器用于实现第一方面或第一方面的任意一种可能的实现方式中的方法。

可选地,该芯片可以集成在网络节点或网络控制器上。

第六方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第一方面所述的方法。

附图说明

图1是可以应用本申请实施例的方法和装置的通信系统的示意性架构图;

图2是本申请一个实施例的获取数据包的转发路径的信息的方法的示例性流程图;

图3是本申请另一个实施例的获取数据包的转发路径的信息的方法的示例性流程图;

图4是本申请另一个实施例的获取数据包的转发路径的信息的方法的示例性流程图;

图5是本申请另一个实施例的获取数据包的转发路径的信息的方法的示例性流程图;

图6是本申请另一个实施例的获取数据包的转发路径的信息的方法的示例性流程图;

图7是本申请一个实施例的获取数据包的转发路径的信息的装置的示例性结构图;

图8是本申请另一个实施例的获取数据包的转发路径的信息的装置的示例性结构图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

可以应用本申请实施例的方法和装置的通信系统的示意性架构图如图1所示。应理解,图1仅是一种示例,可以应用本申请实施例的方法和装置的通信系统中可以包括节点的数量以及节点之间的连接关系可以不限于此,节点之间的连接方式可以是有线的,也可以是无线的。

图1所示的通信系统中可以应用多协议标签交换(multiprotocollabelswitching,mpls)数据平面,也可以应用第六版本的互联网协议(internetprotocol,ip),简称ipv6。

可以应用本申请实施例的方法和装置的通信系统中包括的节点,例如节点a、节点b、节点c、节点d、节点n、节点o、节点p和节点z中的任意一个可以是路由器,交换机,或者能够支持sr的任意网络设备。

在如图1所示的网络结构中,网络控制器可以计算出数据包所要经过的路径。该数据包所要经过路径的路径信息可以通过路径上的节点的ip地址或sid等来指示。

应理解,本申请中,数据包的转发路径可以称为数据包的隧道。数据包组成的集合可以称为数据流。

sr中,主要有三种sid,分别为前缀(prefix)-sid、节点(node)-sid和邻接(adjacency)-sid。

其中,adjacency-sid(adj-sid)可以用于将数据包通过指定的链路来转发到对应的邻节点。因此,在sr-te中需要实现按照指定的路径转发数据包的场景下,sid列表(list)中的sid均为adj-sid。

例如,图1所示的网络结构中,以mpls为例,若为数据包的转发路径为a->b->c->o->p->z,且节点a与节点b之间的adj-sid为9101,节点b与节点c之间的adj-sid为9105,节点c与节点o之间的adj-sid为9107,节点o与节点p之间的adj-sid为9103,节点p与节点z之间的adj-sid为9105时,数据包的sid列表中可以依次包括{9101,9105,9107,9103,9105}。

节点a作为数据包的转发路径的入节点(ingressnode),获取到上述sid列表后,可以根据该sid列表中的9101向节点b发送数据包,所述数据包中包含sid列表{9105,9107,9103,9105};节点b接收到节点a发来的数据包后,可以根据sid列表{9105,9107,9103,9105}中的9105向节点c发送数据包,该数据包中包括sid列表{9107,9103,9105};节点c接收到节点b发送的数据包后,可以根据sid列表{9107,9103,9105}向节点o发送数据包,该数据包中包括sid列表{9103,9105};节点o接收到节点c发送的数据包后,可以根据sid列表{9103,9105}向节点p发送数据包,该数据包中包括sid列表{9105};节点p从节点o接收到数据包后,可以根据sid列表{9105}向节点z发送数据包。

上述仅是以数据包的转发路径的信息为邻接sid列表,即以数据包的转发路径标识(或标签)为邻接sid为示例来介绍根据路径信息转发数据包的过程。数据包的转发路径的信息包括其他路径标识时,数据包的转发过程类似。

由上述过程可以看出,如果网络规模很大,sr-隧道很长,那么数据包的转发路径的信息(例如sid列表)就会很长。过长的路径信息会降低节点间的传输效率,从而影响网络的传输性能。

为了减少数据包的转发路径的信息的长度,以提高节点间的传输效率,从而提高网络的传输性能,本申请提出了sr中获取数据包的转发路径的信息的新方法。

图2为本申请一个实施例的sr中获取数据包的转发路径的信息的方法的示意性流程图。应理解,图2示出了该通信方法的步骤或操作,但这些步骤或操作仅是示例,本申请实施例还可以执行其他操作或者图2中的各个操作的变形。

s201,获取数据包的转发路径的初始信息,该初始信息包括多个路径标识。

例如,根据限制条件,计算出数据包所要经过的路径包括哪些节点,这些节点的标识(例如节点的ip地址、节点的sid或其他标识)作为路径标识从而组成数据包的转发路径的初始信息。或者说,这些节点的标识共同组成的初始信息可以指示数据包的转发路径。

又如,根据限制条件,计算出数据包所要经过的路径包括哪些节点,这些节点之间的adj-sid作为路径标识从而组成数据包的转发路径的初始信息。或者说,这些节点间的adj-sid共同组成的初始信息可以指示数据包的转发路径。

例如,在sr-te中,可以根据带宽要求,或者时延要求等限制条件计算出数据包所要经过的路径包括哪些节点。

例如,在sr-mpls中,初始信息可以是adj-id列表。以图1中所述的路径为例,该初始信息可以是{9101,9105,9107,9103,9105}。

在sr-mpls中,初始信息也可以是ip地址(address)列表。以图1中所述的路径为例,该初始信息可以是{ipaddressa,ipaddressb,ipaddressc,ipaddresso,ipaddressp,ipaddressz)。

又如,在srv6中,初始信息可以是srv6sid列表,该列表中的sid是声明为sid的ipv6地址。以图1中所述的路径为例,该初始信息可以是{a::12,b::23,c::34,o::45,p::56,z::67}。

s202,根据该初始信息生成该数据包的转发路径的目标信息,目标信息包括一个或多个节点段标识,目标信息中至少有一个节点段标识对应于初始信息中的多个路径标识,初始信息中对应于目标信息中的节点段标识的多个路径标识所指示的第一路径为段路由中第一路径的起始节点至第一路径的结束节点之间唯一的最短路径,目标信息中对应于初始信息中的多个路径标识的每个节点段标识为每个节点段标识对应的所有路径标识所指示的第一路径的结束节点的节点段标识。

其中,目标信息指示的路径与初始信息指示的路径相同。在mpls中,节点段标识的一种表现形式是标签;在srv6中,节点段标识的一种变现形式是声明为sid的ipv6地址。

该方法中,当初始信息中的多个路径标识所指示的第一路径为该第一路径的起始节点与该第一路径的结束节点间的唯一最短路径时,可以用该第一路径的结束节点的node-sid来替代这多个路径标识指示该第一路径;否则可以使用第一路径的起始节点至结束节点之间的adj-sid来指示该第一路径。这样,第一路径的结束节点的node-sid和/或第一路径的起始节点至结束节点之间的adj-sid即组成了目标信息。

这样,可以减少路径标识的数量,进而可以提高数据包的传输效率,最终提高通信网络的性能。

例如,数据包的初始sid列表包括{9101,9105,9107,9103,9105}时,若前两个sid,即“9101”和“9105”共同指示的路径“a->b->c”为节点a至节点c之间唯一的最短路径,由于“9101”和“9105”作为整体为数据包的初始sid列表中的第一个sid,则数据包的目标sid列表中的第一个sid可以为节点c的sid。

又如,若数据包的初始sid列表中的后两个sid,即“9103”和“9105”共同指示的路径“o->p->z”为节点o至节点z之间唯一的最短路径,由于“9103”和“9105”作为整体为数据包的初始sid列表中的第四个sid,则数据包的目标sid列表中的第四个sid可以为节点z的sid。

可以通过多种实现方式来根据数据包的转发路径的初始信息确定数据包的转发路径的目标信息。

一种根据数据包的转发路径的初始信息确定数据包的转发路径的目标信息的实现方式如图3所示。

s301,获取数据包的转发路径对应的节点列表,将节点列表中的第一个节点作为起始节点,将节点列表中的最后一个节点作为结束节点,获取空列表作为临时路径信息列表。

s302,判断起始节点与结束节点是否是同一个节点,若是,则执行s308,否则执行s303。

s303,判断起始节点与结束节点是否为节点列表中相邻的节点,若是,则执行s304,否则执行s305。

s304,在目标信息中记录起始节点至结束节点之间的邻接段标识,将结束节点作为新的起始节点,将节点列表中的最后一个节点作为新的结束节点,并重新执行s302。

s305,判断节点列表中由起始节点至结束节点之间的所有节点按顺序排列时所指示的路径是否为sr中起始节点至结束节点之间唯一的最短路径,若是,则执行s306,否则执行s307。

s306,将结束节点对应的节点段标识加入到临时路径信息列表,将结束节点作为新的起始节点,将节点列表中的最后一个节点作为新的结束节点,并重新执行s302。

s307,将节点列表中结束节点之前的第一个节点作为新的结束节点,并重新执行s302。

s308,将临时路径信息列表作为目标信息。

下面以初始信息是用于指示数据包所经过的路径的adj-sid列表,该adj-sid列表中包括多个adj-sid为例,介绍本申请根据初始信息生成目标信息的一种伪代码实现方式。执行该伪代码可以实现图3所示的方法。

该伪代码中,strict[]表示初始信息标识的路径对应的节点列表,loose[]表示临时路径信息列表,node表示起始节点,last表示结束节点,spt(node,last)表示获取sr中起始节点至结束节点间的最短路径,adj_sid(node,last)表示获取adj-sid列表中node至last之间的adj-sid,loose.add(adj_sid(node,last))表示将adj-sid列表中node至last之间的adj-sid加入到loose中,node_sid(node)表示获取node的node-sid。

以图1所示的sr为例,数据包的转发路径的初始信息包括{9101,9105,9107,9103,9105},根据图3所示的方法或上述伪代码可以得到的目标信息可以包括{节点c的sid,9107,节点z的sid}。

另一种根据数据包的转发路径的初始信息确定数据包的转发路径的目标信息的实现方式如图4所示。

s401,获取数据包的转发路径对应的节点列表,将节点列表中的第一个节点作为起始节点,将节点列表中的最后一个节点作为结束节点,获取空列表作为临时路径信息列表。

s402,判断起始节点与结束节点是否是同一个节点,若是,则执行s406,否则执行s403。

s403,判断节点列表中由起始节点至结束节点之间的所有节点按顺序排列时所指示的路径是否为sr中起始节点至结束节点之间唯一的最短路径,若是,则执行s404,否则执行s405。

s404,将结束节点对应的节点段标识加入到临时路径信息列表,将结束节点作为新的起始节点,将节点列表中的最后一个节点作为新的结束节点,并重新执行s402。

s405,将节点列表中结束节点之前的第一个节点作为新的结束节点,并重新执行s402。

s406,将临时路径信息列表作为目标信息。

下面以初始信息是用于指示数据包所经过的路径的adj-sid列表,该adj-sid列表中包括多个adj-sid为例,介绍本申请根据初始信息生成目标信息的一种伪代码实现方式。执行该伪代码可以实现图4所示的方法。

该伪代码中,strict[]表示初始信息标识的路径对应的节点列表,loose[]表示临时路径信息列表,node表示起始节点,last表示结束节点,spt(node,last)表示获取sr中起始节点至结束节点间的最短路径,adj_sid(node,last)表示获取adj-sid列表中node至last之间的adj-sid,loose.add(adj_sid(node,last))表示将adj-sid列表中node至last之间的adj-sid加入到loose中,node_sid(node)表示获取node的node-sid。

以图1所示的sr为例,数据包的转发路径的初始信息包括{9101,9105,9107,9103,9105},根据图4所示的方法或上述伪代码可以得到的目标信息可以包括{节点c的sid,节点o的sid,节点z的sid}。

应理解,图3和图4所示的方法中使用临时路径信息列表仅是一种示例,也可以不使用临时路径信息列表来得到目标信息。

另一种根据数据包的转发路径的初始信息确定数据包的转发路径的目标信息的实现方式如图5所示。

s501,获取初始信息标识的路径对应的节点列表,将节点列表中的第一个节点作为起始节点,将节点列表中位于起始节点后的第一个节点作为结束节点,将空列表作为临时路径信息列表,将空节点作为临时结束节点。

s502,判断结束节点是否是所述节点列表中的最后一个节点,若是,则执行s510,否则执行s503。

s503,判断节点列表中由起始节点至结束节点之间的所有节点按顺序排列所指示的路径是否为sr中起始节点至结束节点之间唯一的最短路径,若是,则执行s504,否则执行s505。

s504,将结束节点作为临时结束节点,将节点列表中结束节点之后的第一个节点作为新的结束节点,并执行s502。

s505,判断临时结束节点是否为空,若不是,则执行s506,否则执行s507。

s506,判断临时结束节点是否为起始节点的相邻节点,若是,则执行s508,否则执行s509。

s507,将用于指示起始节点至结束节点之间的路径的邻接段标识加入到临时路径信息列表,将结束节点作为新的起始节点,将节点列表中结束节点后的第一个节点作为新的结束节点,并执行s502。

s508,将用于指示起始节点和临时结束节点之间的路径的邻接段标识加入到临时路径信息列表,,将临时结束节点作为新的起始节点,将临时结束节点置空,并执行s502。

s509,将临时结束节点对应的节点段标识加入到临时路径信息列表,将临时结束节点作为新的起始节点,将临时结束节点置空,并执行s502。

s510,判断起始节点是否为节点列表中的倒数第二个节点,若不是,则执行s511,否则执行s512。

s511,将结束节点对应的节点段标识加入到临时路径信息列表,并执行s513。

s512,将用于指示起始节点和结束节点之间的路径的邻接段标识加入到临时路径信息,并执行s513。

s513,将临时路径信息列表作为目标信息。

下面以初始信息是用于指示数据包所经过的路径的adj-sid列表,该adj-sid列表中包括多个adj-sid为例,介绍本申请根据初始信息生成目标信息的一种伪代码实现方式。执行该伪代码可以实现图5所示的方法。

该伪代码中,strict[]表示初始信息标识的路径对应的节点列表,loose[]表示临时路径信息列表,node表示起始节点,ten表示临时结束节点,next表示结束节点,adj_sid(node,next)表示获取adj-sid列表中node至next之间的adj-sid,loose.add(adj_sid(node,tent))表示将adj-sid列表中node至tent之间的adj-sid加入到loose中,node_sid(tent)表示获取tent的node-sid,loose.add(node_sid(next))表示将next的node-sid加入到loose中。

以图1所示的sr为例,数据包的转发路径的初始信息包括{9101,9105,9107,9103,9105},根据图5所示的方法或上述伪代码可以得到的目标信息可以包括{节点c的sid,9107,节点z的sid}。

另一种根据数据包的转发路径的初始信息确定数据包的转发路径的目标信息的实现方式如图6所示。

s601,获取初始信息标识的路径对应的节点列表,将节点列表中的第一个节点作为起始节点,将节点列表中位于起始节点后的第一个节点作为结束节点,将空列表作为临时路径信息列表,将空节点作为临时结束节点。

s602,判断结束节点是否是所述节点列表中的最后一个节点,若是,则执行s608,否则执行s603。

s603,判断节点列表中由起始节点至结束节点之间的所有节点按顺序排列所指示的路径是否为sr中起始节点至结束节点之间唯一的最短路径,若是,则执行s604,否则执行s605。

s604,将结束节点作为临时结束节点,将节点列表中结束节点之后的第一个节点作为新的结束节点,并执行s602。

s605,判断临时结束节点是否为空,若不是,则执行s606,否则执行s607。

s606,将临时结束节点对应的节点段标识加入到临时路径信息列表,将临时结束节点作为新的起始节点,将临时结束节点置空,并执行s602。

s607,将用于指示起始节点和结束节点之间的路径的邻接段标识加入到临时路径信息列表,将结束节点作为新的起始节点,将节点列表中结束节点后的第一个节点作为新的结束节点,并执行s602。

s608,判断起始节点是否为节点列表中的倒数第二个节点,若不是,则执行s609,否则执行s610。

s609,将结束节点对应的节点段标识加入到临时路径信息列表,并执行s611。

s610,将用于指示起始节点和结束节点之间的路径的邻接段标识加入到临时路径信息,并执行s611。

s611,将临时路径信息列表作为目标信息。

下面以初始信息是用于指示数据包所经过的路径的adj-sid列表,该adj-sid列表中包括多个adj-sid为例,介绍本申请根据初始信息生成目标信息的一种伪代码实现方式。执行该伪代码可以实现图6所示的方法。

该伪代码中,strict[]表示初始信息标识的路径对应的节点列表,loose[]表示临时路径信息列表,node表示起始节点,ten表示临时结束节点,next表示结束节点,adj_sid(node,next)表示获取adj-sid列表中node至next之间的adj-sid,loose.add(adj_sid(node,tent))表示将adj-sid列表中node至tent之间的adj-sid加入到loose中,node_sid(tent)表示获取tent的node-sid,loose.add(node_sid(next))表示将next的node-sid加入到loose中。

以图1所示的sr为例,数据包的转发路径的初始信息包括{9101,9105,9107,9103,9105},根据图6所示的方法或上述伪代码可以得到的目标信息可以包括{节点c的sid,节点o的sid,节点z的sid}。

应理解,图5和图6所示的方法中使用临时路径信息列表和/或临时结束节点仅是一种示例,也可以不使用临时路径信息列表和/或临时结束节点来得到目标信息。

本申请的实施例中,可选地,图2至图6中的方法可以由数据包所经过的路径的入节点来执行,也可以由网络中的控制器来执行。

应理解,图3至图6中所示的方法仅是一种示例,对图3至图6中任意一个所示的方法中的步骤进行变换或改进后所得的方法也属于本申请的保护范围。

若图2至图6中的方法由数据包所经过的路径的入节点来执行,则本申请实施例中的方法还可以包括:该入节点根据目标信息来发送数据包,该数据包中包括目标信息。若图2至图6中的方法由网络中的控制器(controller)来执行,则本申请实施例中的方法还可以包括:该控制器向数据包所经过的路径的入节点发送目标信息,然后入节点根据目标信息来发送数据包,该数据包中目标信息。控制器可以是路径计算客户端(pathcomputationclient,pce),或其他运行该算法的服务器。

下面以图1所示的“a->b->c->o->p->z”为数据包的转发路径,以图3所示的方法为例,介绍根据本申请的方法得到的目标信息发送数据包的流程。从该流程中可知,根据本申请的方法得到的目标信息来转发数据包,可以较少节点间的数据包的转发路径的信息的长度,从而可以提高通信效率。

例如,节点a获得初始信息为adj-id列表{9101,9105,9107,9103,9105}或为ip地址列表{ipaddressa,ipaddressb,ipaddressc,ipaddresso,ipaddressp,ipaddressz}时,目标信息可以为{c的node-sid,c-o的adj-sid和z的node-sid}。假设c的node-sid为1003,z的node-sid为1008,则目标信息为{1003,9107,1008}.

节点a可以根据c的node-sid,查找节点a上的转发表获知下一跳为节点b,并向节点b发送数据包,该数据包中携带路径信息,该路径信息为{c的nodeid,c-o的adj-id和z的nodeid}。节点b从节点a收到数据包后,查询节点b上的转发表,获知下一跳为节点c,并向节点c发送数据包,该数据包中携带路径信息,此时的路径信息可以是{c的nodeid,c-o的adj-id和z的nodeid},也可以是{c-o的adj-id和z的nodeid}。节点c从节点b收到数据包后,根据“c-o的adj-idc”查询节点c的转发表,找到下一跳为节点o,并向节点o发送数据包,该数据包包括路径信息,该路径信息为{z的nodeid}。节点o从节点c接收数据包后,查询节点o上的转发表,确定下一跳为节点p,并向节点p发送数据包,该数据包包括路径信息,该路径信息为{z的nodeid}。节点p从节点o接收数据包后,查询节点p上的转发表,确定下一跳为节点z,并向节点z发送数据包。

例如,初始信息为srv6sid列表,该列表中的sid是声明为sid的ipv6地址,例如初始信息是{a::12,b::23,c::34,o::45,p::56,z::67}时,根据图3所示的方法的处理或运行上述伪代码后,目标信息可以为{c的nodeid,c-o的adj-id和z的nodeid},例如目标信息可以是{c::1,c::34,z::1}。

然后,节点a根据c::1,向节点b发送数据包,该数据包包括路径信息,该路径信息包括{c::1,c::34,z::1}。后续转发流程遵循srv6转发流程,为了简洁,此处不再赘述。

图3至图6中的方法均可以使得在目标信息中,用相应的node-sid来指示初始信息中所有对应唯一最短路径的路径标识,从而可以最大化的减少目标信息中的路径标识的数量,即减小目标信息的长度。

当然,在执行本申请实施例中的方法时,也可以根据需求确定目标信息能被接受的最大长度,然后根据该最大长度来确定目标信息。目标信息能被接受的最大长度可以由控制器或入节点的路径标识(或称为标签)的最大插入能力来确定。

例如,当初始信息中的部分路径标识可以通过目标信息中相应地的node-sid来替代,且目标信息中的路径标识的数量已小于或等于控制器或入节点的最大插入能力,则可以不用再继续检测初始信息是否还有路径标识可以通过对应的node-sid来指示了。

从上述分析可以看出,本申请实施例中的方法减少指示数据包的转发路径的路径标识的数量,还可以减少控制器或入节点的插入次数,从而可以提高控制器或入节点的性能。

图7是本申请实施例的获取数据包的转发路径的信息的装置700的示意性框图。应理解,装置700仅是一种示例。本申请实施例的装置还可包括其他模块或单元,或者包括与图7中的各个模块的功能相似的模块,或者并非要包括图7中的所有模块。

获取模块710,用于获取数据包的转发路径的初始信息,所述初始信息包括多个路径标识。

生成模块720,用于根据所述初始信息生成所述数据包的转发路径的目标信息,所述目标路径信息包括一个或多个节点段标识,所述目标信息中至少有一个节点段标识对应于所述初始信息中的多个路径标识,所述初始信息中对应于所述目标信息中的节点段标识的多个路径标识所指示的第一路径为所述段路由中所述第一路径的起始节点至所述第一路径的结束节点之间唯一的最短路径,所述目标信息中对应于所述初始信息中的多个路径标识的每个节点段标识为所述每个节点段标识对应的所有路径标识所指示的路径的结束节点的节点段标识。

可选地,所述生成模块具体用于执行以下步骤:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中的第j个节点作为结束节点,i的取值为1,j的取值为所述节点列表的长度值,执行步骤二;步骤二,判断所述起始节点与所述结束节点是否是同一个节点,若是,则结束执行,否则执行步骤三;步骤三,判断所述起始节点与所述结束节点是否为所述节点列表中相邻的节点,若是,则执行步骤四,否则执行步骤五;步骤四,在所述目标信息中记录所述起始节点至所述结束节点之间的邻接段标识,i的取值更新为与j的取值相等,之后,j的取值更新为与所述节点列表的长度值相等,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中的第j个节点作为所述结束节点,并重新执行步骤二;步骤五,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列时所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤六,否则执行步骤七;步骤六,在所述目标信息中记录所述结束节点的节点段标识,i的取值更新为与j的取值相等,之后,j的取值更新为与所述节点列表的长度值相等,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中的第j个节点作为所述结束节点,并重新执行步骤二;步骤七,j的取值更新为j-1,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二。

可选地,所述生成模块具体用于执行以下步骤:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中的第j个节点作为结束节点,i的取值为1,j的取值为所述节点列表的长度值,执行步骤二;步骤二,判断所述起始节点与所述结束节点是否是同一个节点,若是,则结束执行,否则执行步骤三;步骤三,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列时所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤四,否则执行步骤五;步骤四,在所述目标信息中记录所述结束节点的节点段标识,i的取值更新为与j的取值相等,之后,j的取值更新为与所述节点列表的长度值相等,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中的第j个节点作为所述结束节点,并重新执行步骤二;步骤五,j的取值更新为j-1,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二。

可选地,所述生成模块具体用于执行以下步骤:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中第j个节点作为结束节点,设置临时结束节点为空节点,i的取值为1,j的取值为i+1,执行步骤二;步骤二,判断所述结束节点是否是所述节点列表中的最后一个节点,若是,则执行步骤十,否则执行步骤三;步骤三,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤四,否则执行步骤五;步骤四,将所述临时结束节点更新为所述结束节点,j的取值更新为j+1,再将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤五,判断所述临时结束节点是否为空,若不是,则执行步骤六,否则执行步骤七;步骤六,判断所述临时结束节点是否为所述起始节点的相邻节点,若是,则执行步骤八,否则执行步骤九;步骤七,在所述目标信息中记录用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,i的取值更新为与j的取值相等,之后,j的取值更新为j+1,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤八,在所述目标信息中记录所述起始节点至所述临时结束节点之间的路径的邻接段标识,i的取值更新为与j-1相等,之后,j的取值更新为j,将所述节点列表中第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,将所述临时结束节点置空,并重新执行步骤二;步骤九,在所述目标信息中记录所述临时结束节点的节点段标识,i的取值更新为与j-1相等,之后,j的取值更新为j,将所述节点列表中第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,将所述临时结束节点置空,并重新执行步骤二;步骤十,判断所述起始节点是否为所述节点列表中的倒数第二个节点,若不是,则执行步骤十一,否则执行步骤十二;步骤十一,在所述目标信息中记录所述结束节点对应的节点段标识,并结束执行;步骤十二,在所述目标信息中记录用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,并结束执行。

可选地,所述生成模块具体用于执行以下步骤:所述根据所述初始信息生成所述数据包的转发路径的目标信息,包括:步骤一,获取所述数据包的转发路径的节点列表,将所述节点列表中的第i个节点作为起始节点,将所述节点列表中第j个节点作为结束节点,设置临时结束节点为空节点,i的取值为1,j的取值为i+1,执行步骤二;步骤二,判断所述结束节点是否是所述节点列表中的最后一个节点,若是,则执行步骤八,否则执行步骤三;步骤三,判断所述节点列表中由所述起始节点至所述结束节点之间的所有节点按顺序排列所指示的路径是否为所述段路由中所述起始节点至所述结束节点之间唯一的最短路径,若是,则执行步骤四,否则执行步骤五;步骤四,将所述临时结束节点更新为所述结束节点,j的取值更新为j+1,再将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤五,判断所述临时结束节点是否为空,若不是,则执行步骤六,否则执行步骤七;步骤六,在所述目标信息中记录所述临时结束节点的节点段标识,i的取值更新为与j-1相等,之后,j的取值更新为j,将所述节点列表中第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,将所述临时结束节点置空,并重新执行步骤二;步骤七,在所述目标信息中记录用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,i的取值更新为与j的取值相等,之后,j的取值更新为j+1,再将所述节点列表中的第i个节点作为所述起始节点,将所述节点列表中第j个节点作为所述结束节点,并重新执行步骤二;步骤八,判断所述起始节点是否为所述节点列表中的倒数第二个节点,若不是,则执行步骤九,否则执行步骤十;步骤九,在所述目标信息中记录所述结束节点的节点段标识,并结束执行;步骤十,在所述目标信息中记录所述用于指示所述起始节点至所述结束节点之间的路径的邻接段标识,并结束执行。

可选地,所述初始信息为邻接段标识列表,所述初始信息中的路径标识为邻接段标识。

可选地,所述装置700为所述数据包的转发路径的入节点。其中,所述装置700还包括发送模块730,用于根据所述目标信息发送数据包,该数据包包括所述目标信息。

可选地,所述装置700为所述段路由的控制器。其中,所述装置700还包括发送模块730,用于向所述数据包的转发路径的入节点发送所述目标信息。

装置700可以用于执行图2至图6描述的方法的步骤,为了简洁,此处不再赘述。

图8是本申请另一个实施例的获取数据包的转发路径的信息的装置的示意性结构图。应理解,图8示出的装置800仅是示例,本申请实施例的装置还可包括其他模块或单元,或者包括与图8中的各个模块的功能相似的模块。

装置800可以包括一个或多个处理器810、一个或多个存储器820、接收器830和发送器840。接收器830和发送器840可以集成在一起,称为收发器。存储器820用于存储处理器810执行的程序代码。其中,处理器810中可以集成有存储器820,或者处理器810耦合到一个或多个存储器820,用于调取存储器820中的指令。

处理器810可以用于实现图7中的获取模块710和生成模块720能够实现的操作或步骤,发送器840可以用于实现图7中的发送模块730能够实现的操作或步骤。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

应理解,本申请实施例中的处理器可以为中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

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

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