实现端到端MPLS二层专线的方法、装置及计算机程序产品与流程

文档序号:15271042发布日期:2018-08-28 22:25阅读:338来源:国知局
本发明涉及网络传输技术,具体地,涉及一种实现端到端mpls二层专线的方法、装置及计算机程序产品。
背景技术
::随着公有云和私有云以及网络技术的发展,原先基于固定功能的asic解决方案不能很好的适应快速变化的市场需求。可编程的fpga等方案,增强了设计人员实现个性化功能的能力,然而需要牺牲太多的系统性能。在满足市场对转发效率和可编程性的要求时,这两种解决方案都不能令相关设计人员满意。技术实现要素:有鉴于此,本发明实施例期望提供一种实现端到端mpls二层专线的方法、装置及计算机程序产品,以解决传统的端到端二层专线依赖于相关的网络设备、兼容性差、网络功能开发缓慢的问题。为达到上述目的,本发明实施例的技术方案是这样实现的:本发明实施例提出了一种实现端到端mpls二层专线的方法,所述方法包括:接收第一帧数据,所述第一帧数据包括数据部分和第一二层头;在所述第一帧数据的二层头前面依次设置mpls内层标签、mpls外层标签和第二二层头生成第二帧数据;取出所述第二帧数据的mpls外层标签,在所述第二帧数据的mpls外层标签上压入新的mpls标签后再重新插入至所述第二帧数据中生成第三帧数据;根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签确定出口;将所述第三帧数据的mpls内层标签、压入新的mpls标签后生成的新的mpls外层标签以及第二二层头剔除后剩余的数据部分和第一二层头组成的第一帧数据通过所述确定的出口发送至外部网络。优选地,所述第一帧数据还包括第一vlan头,所述方法还包括:根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签更新所述第三帧数据的第一vlan头,生成第二vlan头,且将所述数据部分、第二vlan头和第一二层头构成的第四帧数据通过所述确定的出口发送至外部网络。优选地,所述方法还包括:根据所述第二帧数据的mpls外层标签进行选路的步骤。优选地,所述方法中实现端到端mpls二层专线的过程均采用p4语言实现。本发明实施例还提出了一种实现端到端mpls二层专线的装置,所述装置包括:第一可编程设备、第二可编程设备和第三可编程设备;所述第一可编程设备,用于接收外部网络发送的第一帧数据,所述第一帧数据包括数据部分和第一二层头;在所述第一帧数据的二层头前面依次设置mpls内层标签、mpls外层标签和第二二层头生成第二帧数据并发送至第二可编程设备;所述第二可编程设备,用于取出所述第二帧数据的mpls外层标签,在所述第二帧数据的mpls外层标签上压入新的mpls标签后再重新插入至所述第二帧数据中生成第三帧数据并发送至第三可编程设备;所述第三可编程设备,用于根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签确定出口,并将所述第三帧数据的mpls内层标签、压入新的mpls标签后生成的新的mpls外层标签以及第二二层头剔除后剩余的数据部分和第一二层头组成的第一帧数据通过所述确定的出口发送至外部网络。优选地,所述第一帧数据还包括第一vlan头,所述第三可编程设备,还用于根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签更新所述第三帧数据的第一vlan头,生成第二vlan头,且将所述数据部分、第二vlan头和第一二层头构成的第四帧数据通过所述确定的出口发送至外部网络。优选地,所述第二可编程设备还用于根据所述第二帧数据的mpls外层标签进行选路。优选地,所述装置还包括控制器,所述控制器用于向所述第一可编程设备、第二可编程设备和第三可编程设备发送数据处理指令,以使所述对第一可编程设备、第二可编程设备和第三可编程设备分别对第一帧数据、第二帧数据和第三帧数据进行处理。优选地,所述控制器、第一可编程设备、第二可编程设备和第三可编程设备均采用p4语言实现。本发明实施例还提出了一种计算机程序产品,所述计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行如上所述的实现端到端mpls二层专线的方法步骤。本发明的有益效果如下:本发明基于可编程设备实现端到端mpls二层专线,同时采用p4语言实现mpls专线的二层转发功能。本发明可应用在所有支持p4语言的网络设备上,通用性强,实现数据转发层语言一次开发,可重复使用在不同的可编程芯片上的能力。并同时解决了使用高级语言来快速实现mplsl2vpn专线的能力。附图说明图1为本发明实施例所述的一种实现端到端mpls二层专线的方法流程图;图2为本发明实施例所述的另一种实现端到端mpls二层专线的方法流程图;图3为本发明实施例所述的实现端到端mpls二层专线的装置原理图;图4为本发明实施例所述的帧数据走向示意图。具体实施方式为了使本发明实施例中的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。实施例1如图1所示,本实施例提出了一种实现端到端mpls二层专线的方法,所述方法包括:接收第一帧数据,所述第一帧数据包括数据部分和第一二层头;在所述第一帧数据的二层头前面依次设置mpls内层标签、mpls外层标签和第二二层头生成第二帧数据;取出所述第二帧数据的mpls外层标签,在所述第二帧数据的mpls外层标签上压入新的mpls标签后再重新插入至所述第二帧数据中生成第三帧数据;根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签确定出口;将所述第三帧数据的mpls内层标签、压入新的mpls标签后生成的新的mpls外层标签以及第二二层头剔除后剩余的数据部分和第一二层头组成的第一帧数据通过所述确定的出口发送至外部网络。实施例2如图2所示,本实施例提出了另一种实现端到端mpls二层专线的方法,所述方法包括:接收第一帧数据,所述第一帧数据包括数据部分、第一vlan头和第一二层头;在所述第一帧数据的二层头前面依次设置mpls内层标签、mpls外层标签和第二二层头生成第二帧数据;取出所述第二帧数据的mpls外层标签,在所述第二帧数据的mpls外层标签上压入新的mpls标签后再重新插入至所述第二帧数据中生成第三帧数据;根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签确定出口;根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签更新所述第三帧数据的第一vlan头,生成第二vlan头,且将所述数据部分、第二vlan头和第一二层头构成的第四帧数据通过所述确定的出口发送至外部网络。具体的,本实施例所述的第一帧数据中可不存在第一vlan头,只需数据部分以及第一二层头即可,如果根据实际需求需要在发送至外部网络的帧数据中增加vlan头的话,可以根据第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签更新所述第三帧数据的第一vlan头,生成第二vlan头,由此改变vlan头的id,然后发送至外部网络。进一步的,所述方法还包括:根据所述第二帧数据的mpls外层标签进行选路的步骤。更进一步的,所述方法中实现端到端mpls二层专线的过程均采用p4语言实现。实施例3如图3所示,本实施例提出了一种实现端到端mpls二层专线的装置,所述装置包括:第一可编程设备、第二可编程设备和第三可编程设备;所述第一可编程设备,用于接收外部网络发送的第一帧数据,所述第一帧数据包括数据部分和第一二层头;在所述第一帧数据的二层头前面依次设置mpls内层标签、mpls外层标签和第二二层头生成第二帧数据并发送至第二可编程设备;所述第二可编程设备,用于取出所述第二帧数据的mpls外层标签,在所述第二帧数据的mpls外层标签上压入新的mpls标签后再重新插入至所述第二帧数据中生成第三帧数据并发送至第三可编程设备;所述第三可编程设备,用于根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签确定出口,并将所述第三帧数据的mpls内层标签、压入新的mpls标签后生成的新的mpls外层标签以及第二二层头剔除后剩余的数据部分和第一二层头组成的第一帧数据通过所述确定的出口发送至外部网络。进一步的,所述第一帧数据还包括第一vlan头,所述第三可编程设备,还用于根据所述第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签更新所述第三帧数据的第一vlan头,生成第二vlan头,且将所述数据部分、第二vlan头和第一二层头构成的第四帧数据通过所述确定的出口发送至外部网络。具体的,本实施例所述的第一帧数据中可不存在第一vlan头,只需数据部分以及第一二层头即可,如果根据实际需求需要在发送至外部网络的帧数据中增加vlan头的话,可以根据第三帧数据的mpls内层标签和压入新的mpls标签后生成的新的mpls外层标签更新所述第三帧数据的第一vlan头,生成第二vlan头,由此改变vlan头的id,然后发送至外部网络。另外,本实施例所述的第二可编程设备的个数可以为多个,即可存在多个第二可编程设备以供实际使用,在实际使用过程中,多个第二可编程设备可提供多路传输通道,并分别针对不同的标签对帧数据的mpls外层标签进行重新设定。本实施例所述的实现端到端mpls二层专线的装置与外部网络之间可通过交换机进行数据传输,例如,在第一可编程设备与外部网络之间设置第一交换机,用于作为第一可编程设备与外部网络数据传输的桥梁,相应的,在第三可编程设备与外部网络之间同样可以设置第二交换机,作为第三可编程设备向外部网络发送帧数据的传输通道。进一步的,所述第二可编程设备还用于根据所述第二帧数据的mpls外层标签进行选路。进一步的,所述装置还包括控制器,所述控制器用于向所述第一可编程设备、第二可编程设备和第三可编程设备发送数据处理指令,以使所述对第一可编程设备、第二可编程设备和第三可编程设备分别对第一帧数据、第二帧数据和第三帧数据进行处理。更进一步的,所述控制器、第一可编程设备、第二可编程设备和第三可编程设备均采用p4语言实现。具体的,本发明实施例1和实施例2分别提出了一种实现端到端mpls二层专线的方法及装置,下面结合图1至图4具体说明本发明所述实现端到端mpls二层专线的具体工作过程。图3为本发明实施例3所述的实现端到端mpls二层专线的装置的原理示意图,其中第一帧数据中包含了数据部分、第一vlan头和第一二层头三部分,并通过第一交换机接入专线网中的第一可编程设备中。当然也可以仅包含数据部分和第一二层头。其中可以以独占端口和端口加vlan的方式提供接入服务。控制层的控制器可以通过相关的接口(openflow/restfulapi/netconf等)实时的改变可编程设备的转发行为。图4为图3所示装置中帧数据走向的一种情况展示图。第一帧数据从第一交换机流出,在被控制器控制的第一可编程设备进行处理,具体的,在第一帧数据的第一二层头的前面加上mpls内层标签、mpls外层标签和第二二层头,形成专线内部的转发帧结构,即第二帧数据。然后将所述第二帧数据发送至第二可编程设备,所述第二可编程设备的内部会先匹配第二帧数据的mpls外层标签,根据所述mpls外层标签的值去选路并且压入新的mpls标签,形成第三帧数据。在此过程中链路上可能有多个类似于第二可编程设备的转发设备,可依照上述转发逻辑进行处理。第三可编程设备接收所述第三帧数据,第三可编程设备会匹配第三帧数据的mpls内层标签以及压入新的mpls标签后的mpls外层标签的值,并根据该值来选择最后的出口和需要修改的vlanid的值以更新所述第一vlan头生成第二vlan头,且所述数据部分、第二vlan头和第一二层头构成第四帧数据。第三可编程设备将所述第四帧数据发送到第二交换机,由第二交换机发送至外部网络,完成整个专线的转发过程。在上述转发过程中,第一可编程设备、第二可编程设备和第三可编程设备的转发行为均通过相关的接口被控制器实时的控制转发行为,形成转发和控制分离的架构。本发明实施例1和实施例2中所述的端到端二层专线转发的过程均是采用p4语言来实现的。p4语言是一种通用的数据平面编程语言。p4源文件胫骨哦相关编译器编译之后,最终通过下配置的方式来控制转发芯片的转发行为,对应于本发明实施例中的可编程设备。从而可以达到设计人员的转发效率和可编程性的要求。下面对p4语言如何实现专线转发功能进行详细说明。本发明实施例所述的p4的代码实现分为三个阶段,分别是parser、match-action、deparser。parser阶段主要是解析所关注的数据部分部。match-action主要根据parser阶段取出来的数据做相关的逻辑处理。deparser阶段主要把match-action处理好之后的数据部分放回到原先的数据前,形成完整的数据报文。具体的,在p4代码的parser阶段需要解析二层头、mpls头、vlan头三种数据格式的帧头。相关的伪代码如下:parserparserimpl(packet_inpacket,outheadershdr,inoutmetadatameta,inoutstandard_metadata_tstandard_metadata){statestart{transitionparse_ethernet;}stateparse_ethernet{packet.extract(hdr.ethernet);transitionselect(hdr.ethernet.ethertype){type_vlan:parse_vlan;type_mpls:parse_mpls;default:accept;}}stateparse_mpls{packet.extract(hdr.mpls.next);meta.ifmpls=1w1;transitionselect(hdr.mpls.last.bos){0:parse_mpls;1:parse_inside_ethernet;default:accept;}}stateparse_inside_ethernet{packet.extract(hdr.inside_ethernet);transitionselect(hdr.inside_ethernet.ethertype){type_vlan:parse_vlan;default:accept;}}stateparse_vlan{packet.extract(hdr.vlan[0]);transitionselect(hdr.vlan[0].ethertype){type_mpls:parse_mpls;default:accept;}}}在p4代码的match-action阶段,由图3可知有三种table,分别处理图3中的三种逻辑。相关的伪代码如下:controlingress(inoutheadershdr,inoutmetadatameta,inoutstandard_metadata_tstandard_metadata){tableadd_double_mpls_and_mod_dst{key={standard_metadata.ingress_port:exact;hdr.vlan[0].vid:exact;}actions={adddoublemplsandmoddst;drop;noaction;}size=1024;default_action=noaction();}tablepopl2_pop1mpls_push1mpls_pushl2{key={standard_metadata.ingress_port:exact;hdr.mpls[0].label:exact;}actions={popl2pop1mplspush1mplspushl2;drop;noaction;}size=1024;default_action=noaction();}tablepopl2_pop2mpls_mod_vlanid{key={standard_metadata.ingress_port:exact;hdr.mpls[0].label:exact;hdr.mpls[1].label:exact;}actions={popl2pop2mplsmodvlanid;drop;noaction;}size=1024;default_action=noaction();}apply{add_double_mpls_and_mod_dst.apply();popl2_pop1mpls_push1mpls_pushl2.apply();popl2_pop2mpls_mod_vlanid.apply();}}在p4代码的deparser阶段,由图3可知需要压入4个帧头,分别是第一二层头、mpls外层标签、mpls内层标签、第二二层头和第一/第二vlan头。相关的伪代码如下:controldeparserimpl(packet_outpacket,inheadershdr){apply{packet.emit(hdr.ethernet);packet.emit(hdr.mpls);packet.emit(hdr.inside_ethernet);packet.emit(hdr.vlan);}}以上过程均是在第一帧数据中包含第一vlan头的情况下实现的,如果第一帧数据中不包含第一vlan头且也无需在最终生成的帧数据中添加vlan头的话,则删除上述过程中有关于vlan头的处理过程即可,其他处理过程和处理方式没有任何变化,如果第一帧数据中不包含第一vlan头,但根据实际需要必须在最终生成的帧数据中添加vlan头的话,最终生成的帧数据中vlan头的id只需要根据内外层mpls标签而定即可。实施例4本实施例提出了一种计算机程序产品,所述计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行实施例1或2所述实现端到端mpls二层专线的方法的具体过程。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1