一种报文封装方法与设备
技术领域
本发明涉及网络虚拟化环境下的技术,尤其涉及网络虚拟化环境下的一种报文封装方法与设备。
背景技术
随着虚拟化和云环境的逐步发展,为了控制不同虚拟机和虚拟机之间,以及虚拟机和租户之间的通信,隧道封装技术被越来越多地运用,例如VXLAN(Virtual eXtensibleLocal Area Network,虚拟可扩展局域网)、NVGRE(Network Virtualization usingGeneric Routing Encapsulation,网络虚拟化通用路由封装)。
隧道封装需要在原始的IP报文前面增加隧道协议报头,因此将使得所传输的报文的长度变长。
在现有技术中,虚拟主机一般会根据自身接口的MTU(Maximum TransmissionUnit,最大传输单元值),通常是1500字节,来控制所发送的数据报文的大小,但是由于需要采用隧道封装技术,使得隧道协议封装后的IP报文的长度增加,从而使得IP报文超出运行虚拟主机的宿主机的MTU,因而宿主机需要将IP报文进行分片,以满足宿主机MTU,再由宿主机将分片后的IP报文向外传输。
由于以上原因,会导致网络设备之间在传输IP报文时产生大量的分片报文,降低了端到端的传输性能,同时由于需要宿主机CPU(Central Processing Unit,中央处理器)对IP报文进行分片,因此增加了CPU的消耗。
发明内容
针对以上现有问题,本发明的目的在于在网络虚拟化的云环境下,提供一种报文封装方法与设备,能够有效避免分片报文。
根据本发明的第一个方面,提供一种报文封装方法,包括步骤:接收虚拟主机发出的第一报文;将第一报文的默认分段值进行调整,以使按调整后的分段值对第一报文进行分段并隧道封装后大小不超过最大传输单元值;按调整后的分段值对第一报文进行分段;将分段后的第一报文进行隧道封装,以获得数个第二报文,每个第二报文大小不超过最大传输单元值;将数个第二报文向外发送。
优选地,将第一报文的默认分段值进行调整,以使按调整后的分段值对第一报文进行分段并隧道封装后不超过最大传输单元值的步骤包括:判断按默认分段值对第一报文进行分段并隧道封装后大小是否超过最大传输单元值;当超过时,减小默认分段值至修改分段值,修改分段值满足修改分段值加上传输协议报头以及隧道封装报头后大小不超过最大传输单元值;当未超过时,保持默认分段值不变。
优选地,使用通用分段延后处理对第一报文进行分段以及隧道封装。
优选地,按调整后的分段值对第一报文进行分段的步骤,以及将分段后的第一报文进行隧道封装,以获得数个第二报文的步骤由宿主机的物理网卡执行。
优选地,将第一报文的默认分段值进行调整,以使按调整后的分段值对第一报文进行分段并隧道封装后不超过最大传输单元值的步骤由宿主机的虚拟交换机执行。
根据本发明的第二个方面,提供一种报文封装设备,包括接收单元,接收单元用于接收虚拟主机发出的第一报文;调整单元,调整单元用于调整第一报文的默认分段值,以使按调整后的分段值对第一报文进行分段并隧道封装后大小不超过最大传输单元值;分段单元,分段单元用于按调整后的分段值对第一报文进行分段;封装单元,封装单元用于将分段后的第一报文进行隧道封装,以获得数个第二报文,每个第二报文不超过最大传输单元值;发送单元,发送单元用于将第二报文向外发送。
优选地,调整单元判断按默认分段值对第一报文进行分段并隧道封装后大小是否超过最大传输单元值;当超过时,调整单元减小默认分段值至修改分段值,修改分段值满足修改分段值加上传输协议报头以及隧道封装报头后大小不超过最大传输单元值;当未超过时,调整单元保持默认分段值不变。
优选地,报文封装设备使用通用分段延后处理对第一报文进行分段以及隧道封装。
优选地,分段单元以及封装单元运行于报文封装设备的物理网卡中。
优选地,调整单元运行于报文封装设备的中央处理器中。
本发明中通过对第一报文的分段值进行调整,以使得按调整后的分段值对第一报文进行分段并隧道封装后大小不超过宿主机MTU,从而使得宿主机CPU不需要再对隧道封装后的报文进行分片,从而减少了网络设备间的分片报文,提高了传输性能,减少了宿主机CPU消耗。
附图说明
以下结合附图和具体实施例对本发明的技术方案进行详细的说明,以使本发明的特性和优点更为明显。
图1为现有技术中虚拟网络环境下报文封装传输数据流向图;
图2为本发明的一个实施例的报文封装传输数据流向图;
图3为本发明的一个实施例的报文封装设备的模块示意图;
图4为本发明的一个实施例的报文封装方法的流程图;
图5为图4中步骤S102的详细流程图。
具体实施方式
以下将对本发明的实施例给出详细的说明。尽管本发明将结合一些具体实施方式进行阐述和说明,但需要注意的是本发明并不仅仅只局限于这些实施方式。相反,对本发明进行的修改或者等同替换,均应涵盖在本发明的权利要求范围当中。
一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元或是数据,但是这些单元或数据不应当受这些术语限制。使用这些术语仅仅是为了将一个数据与另一个数据进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一报文可以被称为第二报文,并且类似地第二报文可以被称为第一报文。
图1为现有技术中虚拟网络环境下报文封装传输数据流向图。下面通过图1对现有技术中虚拟网络环境下报文封装以及传输进行介绍。
如图1所示,虚拟主机1运行在宿主机2中,虚拟主机1通常由客户进行管控。宿主机2的硬件通常包括CPU以及物理网卡22,其中CPU运行软件OVS(Open VSwitch,虚拟交换机)21,通过OVS21以及物理网卡22对宿主机2的报文进行处理。
现有技术中,当虚拟主机1需要向网络4发送报文时,首先由虚拟主机1发出第一报文31,宿主机2的OVS21接收第一报文31。OVS21根据第一报文31的默认分段值对第一报文31进行分段,从而获得数个分段后第一报文32。接着OVS21对分段后第一报文32进行隧道封装,以获得数个第二报文33。当第二报文33的长度超出宿主机2的MTU时,OVS21会对第二报文33进行分片,即将超出MTU的第二报文33分成数个分片报文34。OVS21将上述的第二报文33以及分片报文34发送给物理网卡22,由物理网卡22发向网络4。
根据上述描述可看出,由于第二报文33被分为分片报文34,从而使得设备间传输的报文的总数量增加。在网络设备接收时,需要接收所有分片报文34,并对分片报文34进行重组,即将分片报文34重新组成为一个完整报文后再处理,因此使得网络设备处理能力下降。对于宿主机2而言,由于需要增加分片处理,增加了宿主机2CPU消耗。在一些情况下,更可能由于未进行有效分片而导致物理网卡22发出的报文被网络设备丢弃。
本发明正是针对以上现有技术中的报文分片问题。
图2为本发明的一个实施例的报文封装传输数据流向图。图3为本发明的一个实施例的报文封装设备的模块示意图。图4为本发明的一个实施例的报文封装方法的流程图。
结合图2,图3以及图4所示,本发明提供的报文封装设备即宿主机2,包括接收单元51,调整单元52,分段单元53,封装单元54以及发送单元55。其中,接收单元51用于接收虚拟主机1发出的第一报文31。调整单元52用于调整第一报文31的默认分段值。分段单元53用于将第一报文31进行分段,以获得数个分段后第一报文32。封装单元54用于将分段后第一报文32进行隧道封装,以获得数个第二报文33。发送单元55用于将第二报文33向网络4发送。
在本实施例中,接收单元51以及调整单元52被设置在宿主机2的OVS21中,OVS21由宿主机2的CPU运行,也就是说接收单元51以及调整单元52运行于宿主机2的CPU中。分段单元53,封装单元54以及发送单元55运行于宿主机2的物理网卡22中。
本发明的报文封装方法包括步骤:
S101:接收虚拟主机1发出的第一报文31。
S102:将第一报文31的默认分段值进行调整。
S103:按调整后的分段值对第一报文31进行分段。
S104:将分段后第一报文32进行隧道封装,以获得数个第二报文33。
S105:将数个第二报文33向外发送。
首先如步骤S101,接收单元51接收来自虚拟主机1发出的第一报文31。为了节省虚拟主机1对CPU的消耗,第一报文31可以为超大数据包,即第一报文31的大小超过虚拟主机1以及宿主机2的MTU。
接着如步骤S102,调整单元52对第一报文31的默认分段值进行调整。
具体而言,图5为图4中步骤S102的详细流程图,首先如步骤S1021,调整单元52判断按默认分段值对第一报文31进行分段并隧道封装后大小是否超过宿主机2的MTU。
通常默认分段值为虚拟主机1的MTU减去传输协议报头。
作为可选的一种实施方式,调整单元52可以针对特定的隧道封装方式设定分段值阈值,当默认分段值超出分段值阈值时,则判定按默认分段值对第一报文31进行分段并隧道封装后大小超过宿主机2的MTU。
接着调整单元52根据不同判定结果对默认分段值进行调整。如步骤S1022,若判定超过时,调整单元52减小默认分段值至修改分段值。修改分段值满足修改分段值加上传输协议报头以及隧道封装报头后大小不超过宿主机2的MTU。
作为一可选的实施方式,调整单元52针对不同第一报文31计算优选的修改分段值,以使得第一报文31被分段的数量最少。
在本发明中,修改分段值是基于所有传输层协议的,并不限于TCP(TransmissionControl Protocol,传输控制协议)协议,对于基于UDP协议(User Datagram Protocol,用户数据报协议)的报文同样适用。
如步骤S1021和S1023,当调整单元52判定按默认分段值对第一报文31进行分段并隧道封装后大小未超过宿主机2的MTU时,调整单元52保持默认分段值不变。
继续参考图2,图3以及图4,如步骤S103,分段单元53按调整后的分段值对第一报文31进行分段,以获得数个分段后第一报文32。
如步骤S104,封装单元54对分段后第一报文32进行隧道封装,以获得数个第二报文33。具体而言,封装单元54对于分段后第一报文32加上传输协议报头以及隧道封装报头。这里的传输协议报头例如可以是IP协议报头,隧道封装报头例如可以是VXLAN报头。
最后如步骤S105,发送单元55将数个第二报文33向网络5发送。
通过以上描述可看出,由于对第一报文1的默认分段值进行了调整,因此本发明中的第二报文33不会超过宿主机2的MTU。与现有技术相比,本发明不再需要对第二报文33进行分片,从而避免了设备间传输的报文的总数量增加。网络设备也不再需要对分片报文进行重组,从而提高了网络设备处理能力。对于宿主机2而言,由于避免了分片处理步骤,减少了宿主机2CPU的消耗。同时,也防止报文被网络设备丢弃,增加了传输可靠性。
在本发明中,接收单元51以及调整单元52运行于宿主机2的CPU中,具体而言,步骤S102将第一报文31的默认分段值进行调整的步骤由宿主机2的OVS21执行。由于对于默认分段值的调整是由OVS21实现的,不需要虚拟主机1做任何变动,对于客户运营不会产生影响。
在一优选的实施例中,宿主机2使用GSO技术(Generic Segmentation Offload,通用分段延后处理),即宿主机2判断物理网卡22是否支持分段延后处理,如支持,则宿主机2将第一报文31分段以及隧道封装的工作延迟到由物理网卡22处理,如不支持,则宿主机2通过OVS21处理第一报文31分段以及隧道封装。
作为一种可选的实施方式,本实施例中,步骤S103以及步骤S104,即按调整后的分段值对第一报文31进行分段的步骤,以及将分段后第一报文32进行隧道封装以获得数个第二报文33的步骤由宿主机2的物理网卡22执行。也就是说,分段单元53,封装单元54以及发送单元55均运行于宿主机2的物理网卡22中。
通过这样的设置,使得OVS21不再需要对第一报文31进行分段以及隧道封装,而只需要对默认分段值进行调整。从而减少了宿主机2CPU的能耗,整体上提高报文处理速度。
由于本发明不需要对第二报文33进行分片,因此不会发生后续步骤再次由物理网卡22转回CPU执行分片的情况,在保证了报文处理速率的同时,也防止了由于后续OVS未进行有效分片而导致物理网卡22发出的报文被网络设备丢弃的情况。
在其他实施例中,对于步骤S103以及步骤S104也可以不由物理网卡22执行,而通过OVS21执行。
需要说明的是,本发明是网络虚拟化环境下的报文封装的一种应用。在本发明的实现过程中,会涉及到多个软件功能模块的应用。如在仔细阅读申请文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本领域技术人员完全可以运用其掌握的软件编程技能实现本发明。前述报文封装方法中对报文的具体分段以及隧道封装的方法,均可参考现有技术中的方法,前述报文封装设备还包括但不限于存储单元等,凡本发明申请文件提及的均属此范畴,申请人不再一一列举。
以上仅是本发明的具体应用范例,对本发明的保护范围不构成任何限制。除上述实施例外,本发明还可以有其它实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明所要求保护的范围之内。