一种VXLAN报文分片方法和装置与流程

文档序号:14942806发布日期:2018-07-13 21:28阅读:1615来源:国知局

本申请涉及通信技术领域,尤其涉及一种vxlna报文分片方法和装置。



背景技术:

所谓分片报文是指在物理层会限制通过的每个数据帧的最大长度。当ip(internetprotocol,互联网协议)层收到一个ip报文需要发送时,首先要查询出接口的mtu(maximumtransmissionunit,最大传输单元)的值,并将mtu与数据报文的长度相比较,如果报文长度超过mtu,则需要对该ip报文进行分片。vxlan(virtualextensiblelan,可扩展虚拟局域网络)报文走ip转发时也有可能会出现因报文超大而分片的情况。



技术实现要素:

有鉴于此,本申请提供一种vxlan报文分片方法和装置,用以解决超大报文在vxlan组网中转发可能会被丢弃的问题。

具体地,本申请是通过如下技术方案实现的:

本申请第一方面,提供了一种vxlan报文分片方法,应用于本端vtep,所述方法包括:

针对需要通过vxlan隧道转发的报文,判断所述报文添加vxlan封装后的报文长度是否超过vxlan隧道的mtu;

如果超过,则先对所述报文进行分片,再为分片得到的每个报文添加相同的vxlan封装。

本申请第二方面,提供了一种vxlan报文分片装置,应用于本端vtep,所述装置包括:

判断单元,用于针对需要通过vxlan隧道转发的报文,判断所述报文添加vxlan封装后的报文长度是否超过vxlan隧道的mtu;

处理单元,用于如果所述报文添加vxlan封装后的报文长度超过vxlan隧道的mtu时,则先对所述报文进行分片,再为分片得到的每个报文添加相同的vxlan封装。

由以上技术方案可以看出,本申请通过调整vxlan封装和报文分片的顺序,对超大报文先进行报文分片后进行vxlan封装,使得每个分片报文可以具有相同的vxlan头,这样添加vxlan封装后的各个分片报文从本端vtep发出后,可以经过p设备到达对端vtep,对端vtep对各个分片报文进行vxlan解封装后继续转发到目的vm,最终由目的vm对解封装后的各个分片报文进行重组得到原始的超大报文,如此便实现了超大报文在vxlan组网中的正常转发。

附图说明

图1是现有技术中vxlan报文的分片和转发过程示意图;

图2是本申请实施例提供的一种vxlan报文分片方法的流程图;

图3是本申请实施例提供的一种vxlan隧道的mtu协商流程图;

图4是本申请实施例提供的一种vxlan隧道的mtu协商的详细流程图;

图5是本申请实施例提供的vxlan报文的分片和转发过程示意图;

图6是本申请实施例提供的装置结构图;

图7是本申请实施例提供的图6所示装置的硬件结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以下,首先对本申请中的部分概念进行解释说明。

mtu:由于以太网最大的数据帧是1518字节,刨去14字节的以太网帧头和4字节的帧尾crc(cyclicredundancycheck,crc)校验部分,那么剩下承载上层协议的地方也就是data域,最大只有1500字节。这个值我们把它称之为mtu。

mss(maximumsegmentsize,最大分段大小):mss就是tcp(transmissioncontrolprotocol,传输控制协议)数据包每次能够传输的最大数据分段,为了达到最佳的传输效能,tcp协议在建立连接的时候通常要协商双方的mss值。通讯双方会将双方提供的mss值中的较小值确定为这次连接的mss值。通常,tcp协议在实现的时候,往往会用mtu值来计算mss值,只要用mtu值减去20字节的ip头和20字节的tcp头即可。例如,mtu为1500字节,则mss为1460字节。

下面结合说明书附图和各实施例对本申请技术方案进行说明。

图1显示了一种vxlan的组网情况,包括了以下类型的设备:vm(virtualmachine,虚拟机),vtep(vxlantunnelendpoint,vxlan隧道端点)和p设备(核心设备)。以下以图1中vm1向vm2发送报文为例,说明vxlan报文的分片和转发过程:

1)vm1发送目标是vm2的报文;

2)在vxlan隧道起始点,vtep1收到上述报文,根据报文的vlan(virtuallocalareanetwork,虚拟局域网)信息和ac(attachmentcircuit,接入电路)口确定该报文的vxlan隧道出接口;

3)vtep1为报文封装vxlan头、udp(userdatagramprotocol,用户数据报协议)头和ip头;

4)如果封装后的报文的大小超过出接口的mtu,则vtep1需要对报文进行分片,得到的多个分片报文中只有一个报文有vxlan头、udp头和以太网(ethernet)头,剩余报文皆没有;这里假设得到2个分片报文,报文格式可参见图1中所示,其中一个报文包括ip头、udp头、vxlan头、ethernet头和data1,另一个报文仅包括ip头和data2,data1加data2等于分片前报文的原始data;

5)分片报文从vtep1发出,经过p设备到达vtep2;其中p设备不参与vxlan处理,仅需要根据分片报文的目的ip地址对分片报文进行三层转发;

6)在vxlan隧道终结点,vtep2针对其中有vxlan头的分片报文进行vxlan解封装后继续转发到vm2,针对剩余没有vxlan头的分片报文在去掉报文外层的ethernet头和ip头后,此时报文只剩下data域,比如图1中没有vxlan头的分片报文最终只剩下data2,vtep2会丢弃此报文;

7)分片报文被发送到最终目标vm2后,由于该分片报文不完整,vm2会丢弃该分片报文或者返回异常。

由上述过程可以看到,超大报文在vxlan组网中转发可能会被丢弃,这将导致部分业务不能正常运行,例如ping(packetinternetgroper)外网地址能通但打不开网页,就可能是http(hypertexttransferprotocol,超文本传输协议)报文超大被丢弃导致的。

针对上述问题,一种解决方案是:通过改小vm出接口的mtu来避免vxlan报文因超大被分片。但此方案需要手工修改vm的出接口mtu,增加了使用vxlan网络的难度和成本;如果vm的出接口mtu设置太小,则影响报文转发效率;如果vm的出接口mtu设置太大,则不能避免vxlan报文被分片。

本申请提供了一种vxlan报文分片方案,通过调整vxlan封装和报文分片的顺序,来解决目前所面临的困境。

参考图2,图2为本申请提供的方法流程图。如图2所示,该流程可包括以下步骤:

步骤201:本端vtep针对需要通过vxlan隧道转发的报文,判断该报文添加vxlan封装后的报文长度是否超过vxlan隧道的mtu。

本端vtep从vm收到的初始报文包括一个ethernet头和data域;添加vxlan封装后的报文,其ethernet头外封装了一个vxlan头、一个udp头和一个ip头;因此,这里判断报文添加vxlan封装后的报文长度是否超过vxlan隧道的mtu,具体是判断报文的原始报文长度(包括14字节的ethernet头和data域)加上8字节的vxlan头、8字节的udp头和20字节的ip头后的报文长度,是否大于vxlan隧道的mtu。

如果该报文添加vxlan封装后的报文长度不超过vxlan隧道的mtu,则本端vtep为报文添加vxlan封装后正常转发即可,无需进行报文分片。反之,如果该报文添加vxlan封装后的报文长度超过vxlan隧道的mtu,那么在转发报文之前,本端vtep还需执行以下步骤:

步骤202:如果超过,则本端vtep先对上述报文进行分片,再为分片得到的每个报文添加相同的vxlan封装。

其中,分片得到的每个报文的data域的长度,均不大于vxlan隧道的mtu减去14字节的ethernet头、8字节的vxlan头、8字节的udp头和20字节的ip头后的字节数。举例来说,如果vxlan隧道的mtu等于1440字节,那么分片得到的每个报文的data域的长度均不大于1390字节。这样可以保证添加vxlan封装后的分片报文的报文长度一定小于等于vxlan隧道的mtu。

添加vxlan封装后的各个分片报文具有相同的报文头和不同的data域,且各个分片报文的data域可以组成分片前报文的原始data域。添加vxlan封装后的各个分片报文从本端vtep发出后,经过p设备到达对端vtep,对端vtep对各个分片报文进行vxlan解封装后继续转发到目的vm,由目的vm对解封装后的各个分片报文进行重组得到原始的超大报文,如此便实现了超大报文在vxlan组网中的正常转发。

vxlan报文在转发过程中会经过ip核心网络中的设备,即p设备。p设备不参与vxlan处理,仅需要根据封装后报文的目的ip地址对报文进行三层转发。但在实际应用中,p设备可能因为过大帧长的缘故对vxlan封装报文分片,这将导致目的vtep丢弃这些分片了的vxlan报文。为了避免端到端报文的可能分片,本申请还提出了一种针对vxlan隧道mtu的协商流程,该流程参考图3,可包括以下步骤:

步骤301:当任一vxlan隧道的状态从down变为up时,本端vtep向该vxlan隧道的对端vtep发送mss协商报文,mss协商报文中携带本端vtep负责发送该mss协商报文的接口的mss。

实际应用中,vxlan隧道初始建立时,或者已建立的vxlan隧道经过的真实物理路径发生变化时,都可能导致该vxlan隧道的状态从down变为up。

步骤302:p设备收到上述mss协商报文后,将mss协商报文中携带的mss与p设备负责接收和发送该mss协商报文的接口的mss进行比较得到最小值,并将该最小值携带在该mss协商报文中转发给对端vtep。

步骤303:对端vtep收到上述mss协商报文后,将mss协商报文中携带的mss与对端vtep负责接收该mss协商报文的接口的mss进行比较得到较小值,并将该较小值携带在mss确认报文中返回给本端vtep。

步骤304:p设备收到上述mss确认报文后,直接转发给本端vtep。

步骤305:本端vtep收到对端vtep针对上述mss协商报文返回的mss确认报文后,根据mss确认报文中携带的mss计算vxlan隧道的mtu。

从上述步骤301-304可知,这里mss确认报文中携带的mss为本端vtep负责发送mss协商报文的接口的mss、p设备负责接收和发送mss协商报文的接口的mss、对端vtep负责接收mss协商报文的接口的mss四者中的mss最小值。而接口的mss与接口的mtu之间的关系是,接口的mss等于同一接口的mtu减去20字节的ip头和20字节的tcp头,vtep和p设备可以依据这一关系计算接口的mtu或接口的mss。

在一种实施方式中,上述mss协商报文和mss确认报文可以通过tcp/ip建立连接时使用的握手信号来实现,比如mss协商报文可以为syn(synchronous)报文,mss确认报文可以为syn/ack(acknowledgement)报文。

通过以上描述可以看出,本申请能够很好地解决超大报文在vxlan网络中被丢弃的问题。并且,本申请还通过协商vxlan隧道的mtu,在转发时使用该mtu进行分片,能够最大限度的利用网络带宽,提高报文的转发效率。

为了使本领域技术人员更加清楚和明白,以下仍结合图1所示的vxlan组网场景来描述本申请提供的vxlan报文分片过程。

首先,可以先协商vxlan隧道的mtu。

假设图1中vtep1的ip地址为1.1.1.1,vtep2的ip地址为2.2.2.2,vxlan隧道tunnel1在vtep1上的出接口mtu为1500字节,在p设备上的入接口mtu和出接口mtu分别为1460字节和1440字节,在vtep2上的入接口mtu为1460字节;则tunnel1的mtu协商过程参考图4所示,包括以下步骤:

1)在vtep1上当tunnel1状态从down变为up时,vtep1根据隧道的出接口mtu(1500字节)计算出接口mss,出接口mss等于出接口mtu减去20字节的ip头和20字节的tcp头,即1460字节;继而vtep1向隧道目的地址2.2.2.2发送syn报文,syn报文的出接口为tunnel1,syn报文携带的mss为1460字节;

2)中间设备p设备收到上述syn报文后,根据该syn报文的入接口的mtu(1460字节)计算入接口mss为1420字节,根据该syn报文的出接口的mtu(1420字节)计算出接口mss为1400字节,与syn报文中的mss相比,发现p设备的出接口mss更小,从而修改syn报文中的mss修改为p设备的出接口mss(即修改为1400字节),并转发修改后的syn报文;

在其它示例中,如果计算出的p设备的入接口mss或p设备的出接口mss比syn报文中的mss更大或者相同,则直接转发该syn报文;

3)vtep2收到来自vtep1的上述syn报文后,根据该syn报文的入接口的mtu(1460字节)计算入接口mss为1420字节,与syn报文中mss相比,发现计算出的vtep2的入接口mss比syn报文中的mss更大,从而将syn报文中的mss携带在生成的syn/ack报文中发送给vtep1;

4)中间设备p设备收到syn/ack报文后,直接转发该syn/ack报文;

5)vtep1收到syn/ack报文后,根据其携带的mss计算mtu为1440字节,并把该mtu记录为tunnel1的mtu。

同理,在vtep2上的vxlan隧道的mtu也是根据以上步骤进行协商。

基于以上协商得到的tunnel1的mtu,在与图1所示的相同vxlan组网场景下,当vm1向vm2发送报文时,vxlan报文的分片和转发过程参考图5所示,包括以下步骤:

1)vm1发送目标是vm2的报文;

2)在vxlan隧道起始点,vtep1收到上述报文,根据报文的vlan(virtuallocalareanetwork,虚拟局域网)信息和ac(attachmentcircuit,接入电路)口确定该报文的vxlan隧道出接口;

3)假设该报文的data域为1500字节,显然该报文添加vxlan封装后的报文长度超过tunnel1的mtu1440字节,所以vtep1需要对报文进行分片;

分片后的每个报文的data域的长度均不大于1390(即1440-14-8-8-20)字节;一种分片方式是,可以将上述报文分成data域分别为1390字节和110字节的两个报文,这两个报文添加vxlan封装后的报文长度分别为1440字节和160字节,这两个报文均有vxlan头、udp头和ethernet头;

4)vtep1为分片后的报文添加vxlan封装后从tunnel1发出;

5)分片报文从vtep1发出,经过p设备到达vtep2;

6)在vxlan隧道终结点,vtep2对上述两个分片报文进行vxlan解封装后继续转发到vm2;

7)分片报文在最终目标vm2进行重组。

以上对本申请提供的方法进行了描述。下面对本申请提供的装置进行描述:

参见图6,图6为本申请提供的装置结构图。该装置应用于vxlan组网中的本端vtep。如图6所示,该装置包括:

判断单元601,用于针对需要通过vxlan隧道转发的报文,判断所述报文添加vxlan封装后的报文长度是否超过vxlan隧道的mtu。

处理单元602,用于如果所述报文添加vxlan封装后的报文长度超过vxlan隧道的mtu时,则先对所述报文进行分片,再为分片得到的每个报文添加相同的vxlan封装。

在其中一种实施方式中,经所述处理单元602分片得到的每个报文的data域的长度,均不大于所述vxlan隧道的mtu减去14字节的ethernet头、8字节的vxlan头、8字节的udp头和20字节的ip头后的剩余字节数。

在其中一种实施方式中,所述装置还可以包括发送单元,接收单元和隧道mtu计算单;其中:

发送单元,用于当所述vxlan隧道的状态从down变为up时,向所述vxlan隧道的对端vtep发送mss协商报文,mss协商报文中携带本端vtep负责发送所述mss协商报文的接口的mss;

接收单元,用于接收对端vtep针对所述mss协商报文返回的mss确认报文,所述mss确认报文中携带一mss,所述一mss为本端vtep负责发送所述mss协商报文的接口的mss、核心设备负责接收和发送所述mss协商报文的接口的mss、对端vtep负责接收所述mss协商报文的接口的mss四者中的mss最小值;

隧道mtu计算单元,用于根据所述mss确认报文中携带的mss计算所述vxlan隧道的mtu。

在其中一种实施方式中,所述发送单元,用于向所述vxlan隧道的对端vtep发送mss协商报文,以便核心设备将mss协商报文中携带的mss与核心设备负责接收和发送所述mss协商报文的接口的mss进行比较得到最小值,并将该最小值携带在所述mss协商报文中转发给对端vtep;对端vtep将mss协商报文中携带的mss与对端vtep负责接收所述mss协商报文的接口的mss进行比较得到较小值,并将该较小值携带在mss确认报文中返回给本端vtep;核心设备收到mss确认报文后直接转发给本端vtep。

在其中一种实施方式中,所述mss协商报文为syn报文,所述mss确认报文为syn/ack报文。

上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

至此,完成图6所示装置的描述。

参见图7,本申请还提供一种vtep设备的硬件架构图,该vtep设备包括:通信接口701、处理器702、存储器703和总线704;其中,通信接口701、处理器702和存储器703通过总线704完成相互间的通信。

其中,通信接口701,用于发送和接收报文。处理器702可以是一个中央处理器(cpu),存储器703可以是非易失性存储器(non-volatilememory),并且存储器703中存储有vxlan报文分片逻辑指令,处理器702可以执行存储器703中存储的vxlan报文分片逻辑指令,以实现上述图2所示流程中的本端vtep的功能。

至此,完成图7所示的硬件结构描述。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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