报文转发方法、装置、隧道创建方法、装置及网络设备与流程

文档序号:22141220发布日期:2020-09-08 13:42阅读:151来源:国知局
报文转发方法、装置、隧道创建方法、装置及网络设备与流程

本申请属于通信领域,具体涉及一种报文转发方法、装置、隧道创建方法、装置及网络设备。



背景技术:

下一代组播虚拟专用网络(nextgenerationmulticastvpn,简称ng-mvpn)是ip组播数据穿越边界网关协议(bordergatewayprotocol,简称:bgp)或多协议标签交换(multi-protocollabelswitching,简称:mpls)网络的组播协议。

在现有的ng-mvpn解决方案中,使用bgp传递私网组播协议报文和私网组播路由,使用rsvp-te(基于资源预留协议的流量工程)或者mldp(组播标签转发协议)建立点到多点(point-to-multipoint,简称p2mp)公网mpls隧道。然而,使用mldp及rsvp-te时,不仅需要多配置一个协议,而且需要与igp(interiorgatewayprotocol,内部网关协议)之间进行复杂的协议交互,导致公网隧道的建立过程以及后期的维护较为复杂,同时也增加报文转发的复杂度。



技术实现要素:

有鉴于此,本申请的目的在于提供一种报文转发方法、装置、隧道创建方法、装置及网络设备,使用mplssr-te(multiprotocollabelswitchingsegmentroutingtrafficengineering,基于多协议标签交换的分段路由流量工程)技术作为ng-mvpn的公网隧道,简化mpls控制平面,简化报文的转发流程,灵活简便地实现公网路径的控制和调整,降低后期维护的成本。

本申请的实施例是这样实现的:

第一方面,本申请实施例提供一种报文转发方法,应用于点到多点p2mp公网隧道所包括的节点,所述p2mp公网隧道基于mplssr-te作为控制信令而创建,所述方法包括:获取组播虚拟专用网络mvpn的组播数据报文及与自身对应的分支标签栈;根据所述与自身对应的分支标签栈,确定用于对所述组播数据报文进行转发控制的控制标签栈;将所述控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈;根据所述控制标签栈的最外层标签,将所述组播数据报文及所述与下一跳节点对应的分支标签栈转发至所述下一跳节点;其中,当所述节点为根节点时,所述与自身对应的分支标签栈为所述根节点在所述公网隧道在被创建时根据所述公网隧道的网络拓扑建立的公网隧道的标签栈。在此过程中,通过使用mplssr-te点到多点隧道作为公网隧道转发数据流量隧道,通过sr技术对段路由或网络节点进行有序编码排序,以获得转发路径,无须使用控制面复杂的p2mpte隧道或者mldp隧道,只需要在各个分支链路的头节点中把报文的转发路径设置好即可实现转发,可以简化mpls控制平面,简化报文的转发流程,灵活简便地实现公网路径的控制和调整,降低后期维护的成本。

结合第一方面实施例,在一种可能的实施方式中,所述根据所述与自身对应的分支标签栈,确定用于对所述组播数据报文进行转发控制的控制标签栈,包括:判断所述与自身对应的分支标签栈的最外层标签是否为分段路由sr组播标签;在为否时,将所述与自身对应的述分支标签栈确定为所述控制标签栈;在为是时,根据所述sr组播标签,从所述与自身对应的分支标签栈中确定出所述控制标签栈。

结合第一方面实施例,在一种可能的实施方式中,每个sr组播标签包括标签个数字段,用于表征该sr组播标签所对应的分支链路中所包含的标签个数;所述根据所述sr组播标签,从所述与自身对应的分支标签栈中确定出所述控制标签栈,包括:获取所述与自身对应的分支标签栈中与最外层的sr组播标签连续的sr组播标签的个数n,n为整数,其中,有几个连续的sr组播标签表征自身存在几个分支链路;设置自身对所述组播数据报文的转发次数i,i为不大于n的正整数;

针对i所对应的每个取值,执行如下步骤:读取所述与自身对应的分支标签栈中第i个sr组播标签的标签个数字段的值j,j为整数;根据i与1之间的大小关系,确定所述与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和j’;根据n、j及j’计算与自身对应的第i条分支链路在所述与自身对应的分支标签栈中的标签起始偏移值及标签终止偏移值;将所述与自身对应的分支标签栈中,从与所述标签起始偏移值对应的标签到与所述标签终止偏移值对应的标签之间的标签确定为所述控制标签栈。

结合第一方面实施例,在一种可能的实施方式中,所述根据i与1之间的大小关系,确定所述与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和j’,包括:在i>1时,确定j’的值为所述与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和;否则,确定j’=0。

结合第一方面实施例,在一种可能的实施方式中,所述根据n、j及j’计算与自身对应的第i条分支链路在所述与自身对应的分支标签栈中的标签起始偏移值及标签终止偏移值,包括:基于公式start_offset=n+1+j’计算所述标签起始偏移值;基于公式end_offset=n+j’+j计算所述标签终止偏移值;其中,start_offset为所述标签起始偏移值,end_offset为所述标签终止偏移值。

结合第一方面实施例,在一种可能的实施方式中,所述控制标签栈的最外层标签包括标签值,所述根据所述控制标签栈的最外层标签,将所述组播数据报文及所述与下一跳节点对应的分支标签栈转发至下一跳节点,包括:根据所述标签值匹配预先建立的多协议标签交换mpls转发表,并根据匹配结果确定所述下一跳节点。

第二方面,本申请实施例提供一种报文转发装置,应用于p2mp公网隧道所包括的节点,所述p2mp公网隧道基于mplssr-te作为控制信令而创建,所述装置包括:获取模块、确定模块及转发模块。获取模块,用于获取组播虚拟专用网络mvpn的组播数据报文及与自身对应的分支标签栈;确定模块,用于根据所述与自身对应的分支标签栈,确定用于对所述组播数据报文进行转发控制的控制标签栈;所述确定模块,还用于将所述控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈;转发模块,用于根据所述控制标签栈的最外层标签,将所述组播数据报文及所述与下一跳节点对应的分支标签栈转发至所述下一跳节点;其中,当所述节点为根节点时,所述与自身对应的分支标签栈为所述根节点在所述公网隧道在被创建时根据所述公网隧道的网络拓扑建立的公网隧道的标签栈。

结合第二方面实施例,在一种可能的实施方式中,所述确定模块,用于判断所述与自身对应的分支标签栈的最外层标签是否为sr组播标签;在为否时,将所述与自身对应的述分支标签栈确定为所述控制标签栈;在为是时,根据所述sr组播标签,从所述与自身对应的分支标签栈中确定出所述控制标签栈。

结合第二方面实施例,在一种可能的实施方式中,每个sr组播标签包括标签个数字段,用于表征该sr组播标签所对应的分支链路中所包含的标签个数;所述确定模块,用于获取所述与自身对应的分支标签栈中与最外层的sr组播标签连续的sr组播标签的个数n,n为整数,其中,有几个连续的sr组播标签表征自身存在几个分支链路;设置自身对所述组播数据报文的转发次数i,i为不大于n的正整数;

针对i所对应的每个取值,确定模块,还用于:读取所述与自身对应的分支标签栈中第i个sr组播标签的标签个数字段的值j,j为整数;根据i与1之间的大小关系,确定所述与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和j’;根据n、j及j’计算与自身对应的第i条分支链路在所述与自身对应的分支标签栈中的标签起始偏移值及标签终止偏移值;将所述与自身对应的分支标签栈中,从与所述标签起始偏移值对应的标签到与所述标签终止偏移值对应的标签之间的标签确定为所述控制标签栈。

结合第二方面实施例,在一种可能的实施方式中,所述确定模块,用于在i>1时,确定j’的值为所述与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和;否则,确定j’=0。

结合第二方面实施例,在一种可能的实施方式中,所述确定模块,用于基于公式start_offset=n+1+j’计算所述标签起始偏移值;基于公式end_offset=n+j’+j计算所述标签终止偏移值;其中,start_offset为所述标签起始偏移值,end_offset为所述标签终止偏移值。

结合第二方面实施例,在一种可能的实施方式中,所述控制标签栈的最外层标签包括标签值,所述转发模块,用于根据所述标签值匹配预先建立的多协议标签交换mpls转发表,并根据匹配结果确定所述下一跳节点。

第三方面,本申请实施例提供一种隧道创建方法,应用于预先创建的组播树中的根节点,所述组播树中存在分支链路的节点预先被配置分段路由sr组播标签,所述方法包括:确定所述组播树的隧道协议类型为点到多点p2mp公网隧道协议;通过bgp协议向所述组播树中的各个节点发送包含所述p2mp公网隧道协议的属性信息;获取所述组播树中的与各个节点对应的sr邻接标签、所述组播树中的各个叶子节点为自身分配与所述属性信息对应的mvpn标签以及所述组播树中的与所述存在分支链路的节点对应的sr组播标签;根据所述组播树的结构,根据所述sr邻接标签、所述mvpn标签以及所述sr组播标签,生成p2mp公网隧道的标签栈;其中,所述存在分支链路的节点的每个分支链路各对应一个sr组播标签,且所述sr组播标签中包括用于表征对应的分支链路所包括的标签个数的字段;在每个节点上,保存有与其对应的mvpn标签和/或sr邻接标签对应的mpls转发表项。

第四方面,本申请实施例提供一种隧道创建装置,应用于预先创建的组播树中的根节点,所述组播树中存在分支链路的节点预先被配置分段路由sr组播标签,所述装置包括:确定模块、发送模块、获取模块以及生成模块。确定模块,用于确定所述组播树的隧道协议类型为点到多点p2mp公网隧道协议;发送模块,用于通过bgp协议向所述组播树中的各个节点发送包含所述p2mp公网隧道协议的属性信息;获取模块,用于获取所述组播树中的与各个节点对应的sr邻接标签、所述组播树中的各个叶子节点为自身分配与所述属性信息对应的mvpn标签以及所述组播树中的与所述存在分支链路的节点对应的sr组播标签;生成模块,用于根据所述组播树的结构,根据所述sr邻接标签、所述mvpn标签以及所述sr组播标签,生成p2mp公网隧道的标签栈;其中,所述存在分支链路的节点的每个分支链路各对应一个sr组播标签,且所述sr组播标签中包括用于表征对应的分支链路所包括的标签个数的字段;在每个节点上,保存有与其对应的mvpn标签和/或sr邻接标签对应的mpls转发表项。

第五方面,本申请实施例还提供一种网络设备包括:存储器和处理器,所述存储器和所述处理器连接;所述存储器用于存储程序;所述处理器调用存储于所述存储器中的程序,以执行上述第一方面实施例和/或结合第一方面实施例的任一种可能的实施方式提供的方法,或者执行上述第二方面实施例和/或结合第二方面实施例的任一种可能的实施方式提供的方法。

第六方面,本申请实施例还提供一种非易失性计算机可读取存储介质(以下简称存储介质),其上存储有计算机程序,所述计算机程序被计算机运行时执行上述第一方面实施例和/或结合第一方面实施例的任一种可能的实施方式提供的方法,或者执行上述第二方面实施例和/或结合第二方面实施例的任一种可能的实施方式提供的方法。

本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例而了解。本申请的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本申请的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本申请的主旨。

图1示出本申请实施例提供的mplssr-te点到多点的公网隧道的网络拓扑图。

图2示出本申请实施例提供的一种隧道创建方法的流程图。

图3示出本申请实施例提供的一种报文转发方法的流程图。

图4示出本申请实施例提供的一种隧道创建装置的结构框图。

图5示出本申请实施例提供的一种报文转发装置的结构框图。

图6示出本申请实施例提供的一种网络设备的结构示意图。

标号:100-网络设备、110-处理器;120-存储器;300-隧道创建装置;310-确定模块;320-发送模块;330-获取模块;340-生成模块;400-报文转发装置;410-获取模块;420-确定模块;430-转发模块。

具体实施方式

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

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。术语“包括”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。再者,本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。

此外,针对现有技术中的ng-mvpn建立的公网隧道在对报文的转发时所存在的缺陷是申请人在经过实践并仔细研究后得出的结果,因此,上述缺陷的发现过程以及在下文中本申请实施例针对上述缺陷所提出的解决方案,都应该是申请人在本申请过程中对本申请做出的贡献。

为了解决上述问题,本申请实施例提供一种报文转发方法、装置、隧道创建方法、装置及网络设备,基于mplpsr-te技术作为ng-mvpn的公网隧道,可以简化mpls控制平面,简化报文转发流程的复杂度,灵活简便地实现公网路径的控制和调整,降低后期维护的成本。

该技术可采用相应的软件、硬件以及软硬结合的方式实现。以下对本申请实施例进行详细介绍。

首先,对本申请实施例中的mplssr-te点到多点的公网隧道的建立过程进行介绍。

在建立mplssr-te点到多点的公网隧道时,在公网mplssr(segmentrouting,分段路由)域中,各网络设备需要获取与自身对应的sr邻接标签。

可选的,各网络设备可以通过获取静态配置参数的形式获取sr邻接标签,此外,各网络设备还可以通过igpsr为链路分配sr邻接标签。由于此部分为现有技术,此处不再赘述。

sr邻接标签的标签格式可以为[label-value|exp|s|ttl],其中,label-value字段表示标签值;exp字段表示该标签的优先级;s字段表征该标签是否为标签栈的栈底,其中,当s为0时表征该标签不为栈底,当s不为0时表征该标签为栈底;ttl字段表征生存时间。

当然,值得指出的是,上述对于sr邻接标签的标签格式举例只是示范性的,可以理解,在一些实施方式中,可以根据实际需要增加sr邻接标签所包括的字段。此外,值得指出的是,由于在本申请实施例中不关心sr邻接标签的exp字段以及ttl字段,因此,直接以exp以及ttl进行代替。

针对某个网络设备而言,其sr邻接标签用于表征与自身相连且相邻的网络设备和自身之间的链路信息。各个网络设备在获取到对应的sr邻接标签后,在本地安装与自身的sr邻接标签匹配的mpls转发表项。

在与sr邻接标签相应的mpls转发表项中,包括in-label字段、out-link字段以及opcode字段。其中,in-label字段表征匹配的sr邻接标签所包括的标签值,out-link字段表征具备匹配的sr邻接标签的报文发往下一跳时所需要经过的链路,opcode字段表征网络设备在将具备匹配的sr邻接标签的报文发往下一跳前需要对sr邻接标签进行的操作方式,例如当opcode字段为pop时,表征将sr邻接标签弹出。

此外,还需要在公网mplssr域中配置mvpn,包括配置mvpn的标识以及mvpn的成员。

其中,mvpn的标识用于表征该mvpn(例如在本申请的举例中,以mvpn-1作为mvpn的标识)。

各个作为mvpn成员的网络设备自动发现加入组播后,形成组播树,以图1所示的网络拓扑为例,在图1中,包括根节点root,3个分支节点branch-1、branch-2、branch-3,5个叶子节点leaf-1、leaf-2、leaf-3、leaf-4、leaf-5。由于此部分为现有技术,此处不再赘述。

根节点root为该组播树创建对应的隧道接口、分配隧道标识(tunnelid),并指定隧道的协议类型。其中,常用的隧道协议为rsvp-tep2mp或者mldp。在本申请实施例中,新定义一种点到多点公网隧道协议类型(tunneltype):mplssr-te,及其对应的隧道标识(tunnelidentifier):sr-tep2mptunnelid。

根节点root指定隧道的协议类型为mplssr-te以及隧道标识后,可以通过扩展bgp,通过bgp协议向各个叶子节点发送包含mplssr-te点到多点公网隧道属性信息(隧道类型:sr-tep2mplsp、隧道标识:tunnelid)的mvpnnlri(networklayerreachableinformation,网络层可达信息)。

各个叶子节点收到root节点发送的mvpnnlri后,基于bgp协议为自身分配对应于该公网隧道的mvpn标签,并通过bgp协议将mvpn标签通告至root节点。

其中,与sr邻接标签类似,mvpn标签的标签格式可以为[label-value|exp|s|ttl],其中,label-value字段表示标签值;exp字段用于作为扩展字段,例如可以作为用于表征服务等级的字段;s字段表征该标签是否为标签栈的栈底,其中,当s为0时表征该标签不为栈底,当s不为0时表征该标签为栈底;ttl字段表征生存时间。

当然,值得指出的是,上述对于mvpn标签的标签格式举例只是示范性的,可以理解,在一些实施方式中,可以根据实际需要增加mvpn标签所包括的字段。此外,值得指出的是,由于在本申请实施例中不关心mvpn标签的exp字段以及ttl字段的具体数值,因此,直接以exp以及ttl进行代替。

在本申请实施例中,各个叶子节点所分配的mvpn标签只具有本地意义,用于表示自身在公网隧道内的标识。各个叶子节点在获取到对应的mvpn标签后,在本地安装与自身分配的mvpn标签匹配的mpls转发表项。

在与mvpn标签相应的mpls转发表项中,包括in-label字段、out-link字段以及opcode字段。其中,in-label字段表征匹配的mvpn标签所包括的标签值,out-link字段一般为空,opcode字段表征叶子节点所在的网络设备在将具备匹配的mvpn标签的报文发往下一跳前需要对mvpn标签进行的操作方式,例如当opcode字段为pop时,表征将mvpn标签弹出。

值得指出的是,在本申请实施例中,还新增定义一种sr组播标签,便于组播报文在公网隧道中进行转发时寻找路径。

下面将针对sr组播标签进行介绍。

与sr邻接标签类似,sr组播标签的标签格式可以为[label-value|exp|s|ttl],其中,label-value字段表示标签值;exp字段用于作为扩展字段,例如可以作为用于表征服务等级的字段;s字段表征该标签是否为标签栈的栈底,其中,当s为0时表征该标签不为栈底,当s不为0时表征该标签为栈底;ttl字段表征该sr组播标签所对应的分支链路中所包含的标签个数。

在本申请实施例中,sr组播标签的标签值具有唯一性。可以通过固定分配以及动态分配两种方式来确定。

其中,作为一种可选的实施方式,当采用固定分配的方式时,可以在0-15的mpls保留标签值中确定出一个尚未被使用的标签值,并将该值定义为sr组播标签的标签值。

目前已使用的mpls保留标签值为:0-ipv4(第四版互联网协议)显式空标签、1-路由器告警标签、2-ipv6(第六版互联网协议)显式空标签、3-隐式空标签、7-eli(entropylabelindicator)标签、13-gal(genericassociatedchannellabel通用关联通道标签)标签、14-mplsoam(mpls操作)告警标签、15-扩展标签。其他标签值均未使用,因此,可以将0-15中其他未被使用的保留标签值确定为sr组播标签的标签值,该值一旦被确定,只要获取到与该标签值对应的标签,则说明该标签为sr组播标签。为便于说明,本方案做如下定义:8-sr组播标签。

作为另一种可选的实施方式,当采用动态分配的方式时,组播树内的各个节点在其srgb标签范围中,选择一个未被使用的标签值配置为该节点的sr组播标签值。配置sr组播标签值后,该标签值不能再分配给任何前缀。如果支持igpsr,可以通过扩展igp将该节点的sr组播标签值通告给mplssr域内的其他所有节点。

为了便于说明,在本申请实施例中,采用固定分配的方式为sr组播标签确定标签值,即确定sr组播标签的标签值为8。

在本申请实施例中,root节点将基于组播树的结构,使用各个节点的sr邻接标签、各个leaf节点分配的mvpn标签、sr组播标签生成该mplssr-te点到多点公网隧道的标签栈,即将各个节点的标签信息压入到公网隧道的标签栈。其中,约定标签栈的格式为{},其内用于存放标签。

root节点生成公网隧道的标签栈的过程如下:

root节点首先将自身与邻接节点之间的sr邻接标签压入公网隧道的标签栈内,以图1中的网络拓扑为例,root节点在{}内压入标签[101|exp|0|ttl],得到{[101|exp|0|ttl]}。

其次,root节点根据与其邻接的branch节点上的分支链路的数量,先在公网隧道的标签栈内压入与其分支链路的数量相等的sr组播标签,然后在完成sr组播标签的压入后,根据sr组播标签的排列顺序依次压入该sr组播标签所表征的分支链路上的其他branch节点、transit节点(没有分叉的中间节点)、leaf节点的标签信息。

以图1中的网络拓扑为例,由于branch-1节点存在两个分支链路,因此存在两个sr组播标签。

对于branch-1节点而言,与第一个sr组播标签对应的第一条分支链路(与branch-2连接的链路)上又存在两个分支链路,因此后续在branch-1节点的基础上会再次增加两个sr组播标签,再加上branch-1节点与branch-2节点之间的sr邻接标签、branch-2节点与leaf-1节点之间的sr邻接标签、branch-2节点与leaf-2节点之间的sr邻接标签、leaf-1节点的mvpn标签、leaf-2节点的mvpn标签,对于branch-1节点而言,在其第一条分支链路上将会存在七个标签。因此,对于branch-1节点而言,其第一个sr组播标签为[8|exp|0|7]。与上述分析类似的,对于branch-1节点而言,其第二个sr组播标签为[8|exp|0|10]。

root节点在{[101|exp|0|ttl]}内依次压入[8|exp|0|7]、[8|exp|0|10],得到{[101|exp|0|ttl][8|exp|0|7][8|exp|0|10]}。

在将branch-1节点的sr组播标签压入标签栈后,root节点将根据branch-1节点的分支链路路径,先将第一条分支链路上的标签信息压入公网隧道的标签栈,再将后续分支链路上的标签信息压入公网隧道的标签栈。

其中,值得指出的是,当分支链路的路径途径到transit节点时,压入transit节点与其邻居节点之间的sr邻接标签,当分支链路的路径途径到leaf节点上时,压入leaf节点分配的mvpn标签。

对应于图1(其内不存在transit节点)所示的网络拓扑,针对branch-1节点,当在公网隧道的标签栈内压入其两个sr组播标签后,按照其第一条分支链路的路径途径到branch-2节点,在公网隧道的标签栈内压入branch-1节点与branch-2节点之间的sr邻接标签[201|exp|0|ttl]。对于branch-2节点而言,存在两条分支链路,依次压入两个sr组播标签[8|exp|0|2]、[8|exp|0|2],针对branch-2节点的第一条分支链路,依次压入branch-2节点与leaf-1节点之间的sr邻接标签[301|exp|0|ttl]、leaf-1节点的mvpn标签[10000|exp|0|ttl](即配置leaf-1节点的在公网隧道内的标识为10000)。针对branch-2节点的第二条分支链路,依次压入branch-2节点与leaf-2节点之间的sr邻接标签[302|exp|0|ttl]、leaf-2节点的mvpn标签[20000|exp|0|ttl](即配置leaf-1节点的在公网隧道内的标识为20000)。

至此,root节点压入公网隧道的标签栈的标签为{[101|exp|0|ttl][8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl]}。

与上文类似的,在完成branch-1节点的第一条分支链路的标签压入后,root节点按照上述过程,将branch-1节点的第二条分支链路的标签压入公网隧道的标签栈,得到的公网隧道的标签栈为{[101|exp|0|ttl][8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}。至此,得到完整的公网隧道的标签栈。

值得指出的是,当组播成员加入或离开而导致组播树的结构发生变化时,root节点会根据变化后的组播树的结构,对mplssr-te点到多点公网隧道的标签栈进行更新。

root节点在生成公网隧道的标签栈后,mplssr-te点到多点公网隧道建立完成。后续,mplssr-te点到多点隧道可以根据该公网隧道的标签栈,指导接收到的mvpn的组播数据报文的转发。

其中,针对上述根节点而言,隧道的建立过程可以归纳为图2所示,包括以下步骤。

步骤a110:确定所述组播树的隧道协议类型为点到多点公网隧道协议。

步骤a120:通过bgp协议向所述组播树中的各个节点发送包含所述点到多点公网隧道协议的属性信息。

步骤a130:获取所述组播树中的与各个节点对应的sr邻接标签、所述组播树中的各个叶子节点为自身分配与所述属性信息对应的mvpn标签以及所述组播树中的与所述存在分支链路的节点对应的sr组播标签。

步骤a140:根据所述组播树的结构,根据所述sr邻接标签、所述mvpn标签以及所述sr组播标签,生成点到多点公网隧道的标签栈。

其中,所述存在分支链路的节点的每个分支链路各对应一个sr组播标签,且所述sr组播标签中包括用于表征对应的分支链路所包括的标签个数的字段;在每个节点上,保存有与其对应的mvpn标签和/或sr邻接标签对应的mpls转发表项。

下面将针对mvpn的组播数据报文在mplssr-te点到多点隧道进行转发的过程进行介绍。

请参阅图3,本申请实施例提供一种报文转发方法,应用于上述mplssr-te点到多点隧道所包括的各个节点。该方法包括以下步骤。

步骤s110:获取mvpn的组播数据报文及与自身对应的分支标签栈。

步骤s120:根据所述与自身对应的分支标签栈,确定用于对所述组播数据报文进行转发控制的控制标签栈。

步骤s130:将所述控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈。

步骤s140:根据所述控制标签栈的最外层标签,将所述组播数据报文及所述与下一跳节点对应的分支标签栈转发至所述下一跳节点。

root节点接收到mvpn实例的组播数据报文<m-data>后,可以根据<m-data>内所包括的组播实例号匹配对应的公网隧道,以便将该<m-data>通过匹配的公网隧道进行转发。

此外,针对公网隧道内的各个节点,当接收到<m-data>的节点为root节点时,root节点直接将创建的公网隧道的标签栈确定为当前的分支标签栈。当接收到<m-data>的节点为其他节点(例如branch节点、transit节点、leaf节点等)时,说明存在上一跳节点。此时,与自身对应的分支标签栈为上一跳节点所发送的分支标签栈。也就是说,在本申请实施例中,mplssr-te点到多点隧道内的节点在向下一跳节点发送报文时,还需要向下一跳节点发送与下一跳节点对应的分支标签栈,其中,可以将与下一跳节对应的分支标签栈及<m-data>一起发送给下一跳节点。

此外,在本申请实施例中,各个节点在获取到<m-data>以及与自身对应的分支标签栈后,还可以在<m-data>前压入与自身对应的分支标签栈。例如,root节点在获取到<m-data>时,在<m-data>前压入公网隧道的标签栈。以图1中的网络拓扑为例,root节点压入公网隧道的标签栈后的报文如下:

{[101|exp|0|ttl][8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}<m-data>。

无论是root节点还是其他节点,在获取到<m-data>及与自身对应的分支标签栈后,根据与自身对应的分支标签栈,来确定用于对<m-data>进行转发控制的控制标签栈。

确定控制标签栈的过程及其对应的转发过程如下。

节点先判断与自身对应的分支标签栈的最外层标签是否为sr组播标签。

在一种可选的实施方式中,当与自身对应的分支标签栈的最外层标签为除sr组播标签外的其他标签(即为sr邻接标签或者为mvpn标签)时,节点直接将与自身对应的分支标签栈确定为可以对<m-data>进行转发控制的控制标签栈。在确定出控制标签栈后,节点将控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈。

以图1中的root节点为例,与root节点对应的分支标签栈为{[101|exp|0|ttl][8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}。其中,最外层标签确定为[101|exp|0|ttl],不是sr组播标签,因此,root节点直接将与自身对应的分支标签栈{[101|exp|0|ttl][8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}确定为控制标签栈。

后续,root节点将控制标签栈{[101|exp|0|ttl][8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}的最外层标签[101|exp|0|ttl]弹出后所剩余的标签栈{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}确定为与下一跳节点对应的分支标签栈。

此外,节点还将根据控制标签栈的最外层标签[101|exp|0|ttl](为了便于说明,将控制标签栈的最外层标签称之为控制标签),控制对组播数据报文<m-data>以及与下一跳节点对应的分支标签栈{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}的转发。

其中,控制转发的过程即为选择转发所使用的转发路径的过程。由上文可知,除sr组播标签外的其他标签(sr邻接标签或者mvpn标签)可以作为控制标签。在控制标签中包括标签值,节点可以根据控制标签所包括的标签值匹配预先建立的mpls转发表(即上文中的与各个sr邻接标签匹配的mpls转发表项以及与各个mvpn标签匹配的mpls转发表项),找到与控制标签的标签值匹配的mpls转发表,然后根据匹配的mpls转发表中所表征的out-link字段找到发往下一跳时所需要经过的链路。

根据上文举例,root节点可以直接根据控制标签[101|exp|0|ttl]查询预先建立的mpls转发表,然后根据查询结果对<m-data>以及与下一跳节点对应的分支标签栈{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}进行转发。

假设与[101|exp|0|ttl]匹配的mpls转发表为:

in-labelout-linkopcode

101link1pop

此时,root节点将<m-data>以及与下一跳节点对应的分支标签栈{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}由link1发送至下一跳branch-1。在一种可选的实施方式中,root节点可以将与下一跳节点对应的分支标签栈压入<m-data>之前,并将与下一跳节点对应的分支标签栈和<m-data>的结合体{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}<m-data>一并由link1发送至branch-1。

branch-1接收到<m-data>以及分支标签栈后,将重复上述步骤s110-s140的过程对报文进行转发。

再以图1中的leaf-1节点为例,假设其接收到的报文为{[10000|exp|1|ttl]}<m-data>。按照上述过程,leaf-1节点确定{[10000|exp|1|ttl]}为控制标签栈,将[10000|exp|1|ttl]弹出后,确定[10000|exp|1|ttl]为控制标签,将根据控制标签[10000|exp|1|ttl]对<m-data>进行转发。

假设与[10000|exp|1|ttl]匹配的mpls转发表为:

leaf-1节点将<m-data>交给mvpn标识为mvpn-1对应的vrf的ip组播转发处理。至此,由于将[10000|exp|1|ttl]弹出后,分支标签栈为空,说明<m-data>在公网隧道内的转发流程结束。

虽然此处是以root节点以及leaf节点为例在进行介绍,可以理解,针对其他节点(例如transit节点),也可以按照上述流程进行处理。

在一种可选的实施方式中,当与自身对应的分支标签栈的最外层标签为sr组播标签时,节点根据位于最外层的sr组播标签,从与自身对应的分支标签栈中确定出用于对<m-data>进行转发控制的控制标签栈。在确定出控制标签栈后,节点将控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈。

下面将针对节点根据最外层的sr组播标签确定控制标签栈的过程进行介绍。

节点获取到与自身对应的分支标签栈后,先根据与自身对应的分支标签栈中的栈底位(标签中的s字段为1的标签为栈底)确定当前的分支标签栈的长度,并将当前的分支标签栈进行保存。

后续,节点获取与自身对应的分支标签栈中与最外层的sr组播标签连续的sr组播标签的个数n(n为整数)。值得指出的是,此处的n包含最外层的sr组播标签。对于节点自身而言,有几个连续的sr组播标签,即表征自身存在几个分支链路,也说明节点需要对报文转发几次。

以图1所示的网络拓扑中的branch-1节点为例,上文提及到,root节点将{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}<m-data>发送至branch-1节点。其中,<m-data>为组播报文部分,{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}为与branch-1对应的分支标签栈。

其中,对于branch-1节点而言,最外层标签确定为[8|exp|0|7],是sr组播标签,因此,根据上述流程,branch-1节点确定n=2(与最外层的sr组播标签[8|exp|0|7]连续的sr组播标签有[8|exp|0|10],因此,n=2),说明branch-1节点存在两个分支链路,branch-1需要对<m-data>转发两次,分别转发至每个分支链路。

在确定出n的大小后,节点在本地设置一个动态变量i,用于表征节点是第几次对<m-data>进行转发。每转发完成后,i的值自加一。其中,值得指出的是,i≤n,且为正整数。

此外,在一种可选的实施方式中,针对branch节点而言,还需要对报文<m-data>进行复制,因此,若是针对branch节点,i还可以表征节点对<m-data>的复制计数。

后续,针对i≤n的每个取值,节点读取与自身对应的分支标签栈中第i个sr组播标签的标签个数字段ttl的值j,并根据i与1之间的大小关系,确定与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和j’。

其中,作为一种可选的实施方式,在i>1时,节点确定j’的值为与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和;否则,确定j’=0。

在确定出j’的值后,节点根据n、j及j’的值计算与自身对应的第i条分支链路在与自身对应的分支标签栈中的标签起始偏移值以及标签终止偏移值。后续,节点与自身对应的分支标签栈中的,从与标签起始偏移值对应的标签到与标签终止偏移值对应的标签之间的标签确定为控制标签栈。

可选的,可以基于公式start_offset=n+1+j’计算得到标签起始偏移值。其中,start_offset为标签起始偏移值。可选的,可以基于公式end_offset=n+j’+j计算得到标签终止偏移值。其中,end_offset为标签终止偏移值。

对应于上文中的例子,针对branch-1节点而言,n为2,那么i可以取的值包括1以及2。

当第一次进行转发时,i=1,与第一层sr组播标签[8|exp|0|7]对应的j=7;由于i=1,不满足i>1,因此j’=0。此时,start_offset=2+1+0=3,end_offset=2+0+7=9。

在与自身对应的分支标签栈{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}中,第三个标签为[201|exp|0|ttl],第九个标签为[20000|exp|0|ttl]。因此,branch-1节点将[201|exp|0|ttl][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl]确定为本轮(i=1时)的控制标签栈。此外,节点在确定控制标签栈时,若控制标签栈的最后一个标签的栈底字段不为1,还需要将其置1,因此,对应于此处的举例,branch-1节点将{[201|exp|0|ttl][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|1|ttl]}确定为控制标签栈。

在确定出控制标签栈后,相应的,branch-1节点将控制标签栈的最外层标签[201|exp|0|ttl]确定为本轮转发的控制标签,并将控制标签栈的最外层标签[201|exp|0|ttl]弹出后所剩余的标签栈{[8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|1|ttl]}确定为下一跳节点对应的分支标签栈。

假设与该控制标签[201|exp|0|ttl]匹配的mpls转发表为:

in-labelout-linkopcode

201link1pop

因此,针对branch-1节点而言,在i=1时,将确定出的下一跳节点对应的分支标签栈{[8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|1|ttl]}以及<m-data>通过branch-1的link1转发至下一跳branch-2。转发完成后,i自加一为2。

对应于上文中的例子,针对branch-1节点而言,当第二次进行转发时,i=2,branch-1按照上文中的流程,读取与自身对应的分支标签栈中第2层sr组播标签[8|exp|0|10]的ttl字段的值j,j=10。由于i=2,满足i>1,因此j’=与自身对应的分支标签栈中前i-1层sr组播标签的ttl字段的值之和,即j’=7。

后续,branch-1计算第2条分支链路在与自身对应的分支标签栈中的标签起始偏移值start_offset、终结偏移值end_offset。

对应于上文中的例子,i=2时,start_offset=n+1+j’=2+1+7=10,end_offset=n+j’+j=2+7+10=19。在与自身对应的分支标签栈{[8|exp|0|7][8|exp|0|10][201|exp|0|ttl][8|exp|0|2][8|exp|0|2][301|exp|0|ttl][10000|exp|0|ttl][302|exp|0|ttl][20000|exp|0|ttl][202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}中,第十个标签为[202|exp|0|ttl],第十九个标签为[50000|exp|1|ttl]。

因此,当i=2时,branch-1将[202|exp|0|ttl][8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]确定为本轮(i=2时)的控制标签栈。

在确定出控制标签栈后,相应的,branch-1节点将控制标签栈的最外层标签[202|exp|0|ttl]确定为本轮转发的控制标签,并将控制标签栈的最外层标签[202|exp|0|ttl]弹出后所剩余的标签栈{[8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}确定为下一跳节点对应的分支标签栈。

假设与[202|exp|0|ttl]匹配的mpls转发表为:

in-labelout-linkopcode

202link2pop

因此,针对branch-1节点而言,在i=2时,将确定出的下一跳节点对应的分支标签栈{[8|exp|0|2][8|exp|0|2][8|exp|0|2][401|exp|0|ttl][30000|exp|0|ttl][402|exp|0|ttl][40000|exp|0|ttl][403|exp|0|ttl][50000|exp|1|ttl]}以及<m-data>通过branch-1的link2转发至下一跳branch-3。

由于上文中的n为2,说明branch-1节点每接到一次报文,只需要进行两次转发,因此,不存在i=3的情况。

当branch-1节点将报文分别转发至branch-2节点以及branch-3节点后,至此,对于branch-1的转发流程结束。

值得指出的是,针对i取不同值时所确定出的对应的控制标签以及与下一跳节点对应的分支标签栈,节点按照各个控制标签所确定的路径对<m-data>以及与下一跳节点对应的分支标签栈进行转发,互不干扰。

至于branch-2、leaf-2以及branch-3和下属的leaf-3、leaf-4、leaf-5的转发流程,与上文类似,此处不再赘述。

此外,值得指出的是,在上述举例中,未涉及到transit节点(没有分叉的中间节点)和bud节点(分叉中同时包含leaf节点和branch节点的特殊branch节点)的处理。可以理解,本方案的处理方式完全适用于transit节点与bud节点。

本申请实施例所提供的一种报文转发方法,点到多点公网隧道所包括的节点通过获取组播虚拟专用网络mvpn的组播数据报文及与自身对应的分支标签栈;根据所述与自身对应的分支标签栈,确定用于对所述组播数据报文进行转发控制的控制标签栈;将所述控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈;根据所述控制标签栈的最外层标签,将所述组播数据报文及所述与下一跳节点对应的分支标签栈转发至所述下一跳节点。在此过程中,通过使用mplssr-te点到多点隧道作为公网隧道转发数据流量隧道,通过sr技术对段路由或网络节点进行有序编码排序,以获得转发路径,无须使用控制面复杂的p2mpte隧道或者mldp隧道,只需要在各个分支链路的头节点中把报文的转发路径设置好即可实现转发,简化了mpls控制平面,也简化了报文转发过程,便于后期进行维护,尤其是灵活简便地实现公网路径的控制和调整,降低后期维护的成本。

此外,请参看图4,本申请实施例还提供一种隧道创建装置300,应用于预先创建的组播树中的根节点,所述组播树中存在分支链路的节点预先被配置sr组播标签。其中,隧道创建装置300可以包括确定模块310、发送模块320、获取模块330以及生成模块340。

其中,确定模块310,用于确定所述组播树的隧道协议类型为点到多点公网隧道协议;

发送模块320,用于通过bgp协议向所述组播树中的各个节点发送包含所述点到多点公网隧道协议的属性信息;

获取模块330,用于获取所述组播树中的与各个节点对应的sr邻接标签、所述组播树中的各个叶子节点为自身分配与所述属性信息对应的mvpn标签以及所述组播树中的与所述存在分支链路的节点对应的sr组播标签;

生成模块340,用于根据所述组播树的结构,根据所述sr邻接标签、所述mvpn标签以及所述sr组播标签,生成点到多点公网隧道的标签栈;

其中,所述存在分支链路的节点的每个分支链路各对应一个sr组播标签,且所述sr组播标签中包括用于表征对应的分支链路所包括的标签个数的字段;在每个节点上,保存有与其对应的mvpn标签和/或sr邻接标签对应的mpls转发表项。

本申请实施例所提供的隧道创建装置300,其实现原理及产生的技术效果和前述隧道创建方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

此外,请参看图5,本申请实施例还提供一种报文转发装置400,应用于点到多点公网隧道所包括的节点,所述点到多点公网隧道基于多协议标签交换的分段路由作为控制信令mplssr-te而创建。报文转发装置400可以包括:获取模块410、确定模块420及转发模块430。

获取模块410,用于获取组播虚拟专用网络mvpn的组播数据报文及与自身对应的分支标签栈;

确定模块420,用于根据所述与自身对应的分支标签栈,确定用于对所述组播数据报文进行转发控制的控制标签栈;

确定模块420,还用于将所述控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈;

转发模块430,用于根据所述控制标签栈的最外层标签,将所述组播数据报文及所述与下一跳节点对应的分支标签栈转发至所述下一跳节点;

其中,当所述节点为根节点时,所述与自身对应的分支标签栈为所述根节点在所述公网隧道在被创建时根据所述公网隧道的网络拓扑建立的公网隧道的标签栈。

在一种可能的实施方式中,所述确定模块420,用于判断所述与自身对应的分支标签栈的最外层标签是否为sr组播标签;在为否时,将所述与自身对应的述分支标签栈确定为所述控制标签栈;在为是时,根据所述sr组播标签,从所述与自身对应的分支标签栈中确定出所述控制标签栈。

在一种可能的实施方式中,每个sr组播标签包括标签个数字段,用于表征该sr组播标签所对应的分支链路中所包含的标签个数;所述确定模块420,用于获取所述与自身对应的分支标签栈中与最外层的sr组播标签连续的sr组播标签的个数n,n为整数,其中,有几个连续的sr组播标签表征自身存在几个分支链路;设置自身对所述组播数据报文的转发次数i,i为不大于n的正整数;

针对i所对应的每个取值,确定模块420,还用于:读取所述与自身对应的分支标签栈中第i个sr组播标签的标签个数字段的值j,j为整数;根据i与1之间的大小关系,确定所述与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和j’;根据n、j及j’计算与自身对应的第i条分支链路在所述与自身对应的分支标签栈中的标签起始偏移值及标签终止偏移值;将所述与自身对应的分支标签栈中,从与所述标签起始偏移值对应的标签到与所述标签终止偏移值对应的标签之间的标签确定为所述控制标签栈。

在一种可能的实施方式中,所述确定模块420,用于在i>1时,确定j’的值为所述与自身对应的分支标签栈中第一个sr组播标签到第i-1个sr组播标签的标签个数字段所代表的值的累加和;否则,确定j’=0。

在一种可能的实施方式中,所述确定模块420,用于基于公式start_offset=n+1+j’计算所述标签起始偏移值;基于公式end_offset=n+j’+j计算所述标签终止偏移值;其中,start_offset为所述标签起始偏移值,end_offset为所述标签终止偏移值。

在一种可能的实施方式中,所述控制标签栈的最外层标签包括标签值,所述转发模块430,用于根据所述标签值匹配预先建立的多协议标签交换mpls转发表,并根据匹配结果确定所述下一跳节点。

本申请实施例所提供的报文转发装置400,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

此外,本申请实施例还提供一种存储介质,该存储介质上存储有计算机程序,该计算机程序被计算机运行时,执行如上述的报文转发方法或者隧道创建方法。

此外,请参看图6,本发明实施例还提供一种网络设备100,包括处理器110以及与处理器110连接的存储器120,所述存储器内存储计算机程序,当所述计算机程序被所述处理器执行时,使得所述网络设备执行如上述的报文转发方法或者隧道创建方法。

综上所述,本发明实施例提出的报文转发方法、装置、隧道创建方法、装置及网络设备,点到多点公网隧道所包括的节点通过获取组播虚拟专用网络mvpn的组播数据报文及与自身对应的分支标签栈;根据所述与自身对应的分支标签栈,确定用于对所述组播数据报文进行转发控制的控制标签栈;将所述控制标签栈的最外层标签弹出后所剩余的标签栈确定为与下一跳节点对应的分支标签栈;根据所述控制标签栈的最外层标签,将所述组播数据报文及所述与下一跳节点对应的分支标签栈转发至所述下一跳节点。在此过程中,通过使用mplssr-te点到多点隧道作为公网隧道转发数据流量隧道,通过sr技术对段路由或网络节点进行有序编码排序,以获得转发路径,无须使用控制面复杂的p2mpte隧道或者mldp隧道,只需要在各个分支链路的头节点中把报文的转发路径设置好即可实现转发。此外,使用mplssr-te点到多点隧道作为公网隧道,可以简化mpls控制平面,简化网络部署的复杂性,从而降低网络的维护成本。再者,通过该方法,还可以将mplssr和mvpn结合起来使用,符合技术演进的趋势。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

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