基于虚拟机的数据包发送和接收方法及装置与流程

文档序号:14835443发布日期:2018-06-30 12:12阅读:497来源:国知局
基于虚拟机的数据包发送和接收方法及装置与流程

本发明涉及计算机技术领域,尤其涉及一种基于虚拟机的数据包发送和接收方法及装置。



背景技术:

随着虚拟化技术的产生和发展,用户可以在一台物理服务器上(物理机可以作为两个或更多虚拟机的主机)模拟出一个或者多个虚拟机(Virtual Machine,简称VM),所谓虚拟机,即为通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。这些虚拟机系统完全就像真正的计算机那样进行工作,例如可以安装操作系统、安装应用程序、访问网络资源等等。用户创建虚拟机后为使其能够如物理机一样收发数据,需建立虚拟网络并为其分配IP地址,以便根据该IP地址来发送数据或者接收数据。

因为虚拟机是在物理机上一个虚拟的模块,也就是说,其不存在实体的网卡或者网卡设备,其发送数据或者接收数据都需要经过相应的主机上的网卡设备。具体的,在主机侧安装后端驱动,在虚拟机侧安装前段驱动,主机的后端驱动直接与主机上的网卡的硬件交互,完成具体的收发数据包,而虚拟机的前段驱动不与网卡的硬件直接进行交互,而是与主机侧的后端驱动进行交互,从而间接完成与网卡的交互。也就是说,所有发送到虚拟机的数据包或者由虚拟机发送的数据包都会通过主机侧的后端驱动,然后在主机侧对虚拟机的网络通信进行数据包的封装/解封装等网络IP虚拟化的操作。

发明人经研究发现,在上述虚拟机对于数据包的发送和接收的过程中,所有的数据包的发送或接收都需要经过主机侧的后端驱动与虚拟机端的前段驱动之间的数据传输、主机侧的后端驱动对数据包的封装或者解封装等多个步骤,一个数据包的发送或接收的完成需要经过多个模块之间的数据的传输和数据的处理。这就导致了,在计算机的物理网卡处理能力较大、网络吞吐量较大时,基于虚拟机的数据包接收和发送的计算量会大幅的增加,从而导致了对物理机的CPU的消耗。也就是说,上述基于虚拟机的数据包的发送存在无法充分利用网卡的处理能力以及过度消耗CPU资源的问题,即对系统资源的有效利用率不足。



技术实现要素:

基于此,为解决现有技术中基于虚拟机的数据包的发送存在的系统资源的有效利用率不足的技术问题,在本发明的第一发面,提出了一种基于虚拟机的数据包发送方法。

一种基于虚拟机的数据包发送方法,包括:

建立虚拟机与网卡之间的直通连接;

检测所述虚拟机的驱动层发出的数据包;

向与所述虚拟机对应的虚拟机监控器发送封装参数获取请求,接收所述虚拟机监控器返回的封装信息和封装参数;

根据所述封装信息和所述封装参数将所述数据包封装,将所述封装后的数据包通过所述直通连接添加到所述网卡的硬件发送队列进行发送。

可选的,在其中一个实施例中,所述封装信息包括封装格式,所述封装格式包括数据包封装层的封装协议。

可选的,在其中一个实施例中,所述封装参数包括数据包封装层的IP地址和/或MAC地址。

可选的,在其中一个实施例中,所述建立虚拟机与网卡之间的直通连接还包括:

在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围,并将所述目标物理地址范围映射给所述虚拟机的驱动层。

可选的,在其中一个实施例中,所述将所述封装后的数据包通过所述直通连接添加到所述网卡的硬件发送队列进行发送还包括:

将所述封装后的数据包发送至所述网卡上的目标物理地址范围对应的硬件发送队列进行发送。

为解决现有技术中基于虚拟机的数据包的发送存在的系统资源的有效利用率不足的技术问题,在本发明的第二发面,提出了一种基于虚拟机的数据包接收方法。

一种基于虚拟机的数据包接收方法,包括:

建立虚拟机与网卡之间的直通连接;

获取所述网卡的硬件接收队列中的数据包;

向与所述虚拟机对应的虚拟机监控器发送解封装参数获取请求,获取所述虚拟机监控器返回的解封装信息和解封装参数;

根据所述解封装信息和所述解封装参数对所述获取到的数据包进行解封装,将所述解封装后的数据包发送到所述虚拟机的驱动层。

可选的,在其中一个实施例中,所述解封装信息包括封装格式,所述封装格式包括数据包封装层的封装协议。

可选的,在其中一个实施例中,所述解封装参数包括数据包封装层的IP地址和/或MAC地址。

可选的,在其中一个实施例中,所述建立虚拟机与网卡之间的直通连接还包括:

在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围,并将所述目标物理地址范围映射给所述虚拟机的驱动层。

可选的,在其中一个实施例中,所述获取所述网卡的硬件接收队列中的数据包还包括:

获取所述网卡上的目标物理地址范围对应的硬件接收队列中的数据包。

为解决现有技术中基于虚拟机的数据包的发送存在的系统资源的有效利用率不足的技术问题,特提出了一种基于虚拟机的数据包发送装置。

一种基于虚拟机的数据包发送装置,包括:

直通连接建立模块,用于建立虚拟机与网卡之间的直通连接;

数据包检测模块,用于检测所述虚拟机的驱动层发出的数据包;

封装参数获取模块,用于向与所述虚拟机对应的虚拟机监控器发送封装参数获取请求,接收所述虚拟机监控器返回的封装信息和封装参数;

封装模块,用于根据所述封装信息和所述封装参数将所述数据包封装,将所述封装后的数据包通过所述直通连接添加到所述网卡的硬件发送队列进行发送。

可选的,在其中一个实施例中,所述封装信息包括封装格式,所述封装格式包括数据包封装层的封装协议。

可选的,在其中一个实施例中,所述封装参数包括数据包封装层的IP地址和/或MAC地址。

可选的,在其中一个实施例中,所述直通连接建立模块还用于:在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围,并将所述目标物理地址范围映射给所述虚拟机的驱动层。

可选的,在其中一个实施例中,所述封装模块还用于将所述封装后的数据包发送至所述网卡上的目标物理地址范围对应的硬件发送队列进行发送。

为解决现有技术中基于虚拟机的数据包的发送存在的系统资源的有效利用率不足的技术问题,特提出了一种基于虚拟机的数据包接收装置。

一种基于虚拟机的数据包接收装置,包括:

直通连接建立模块,用于建立虚拟机与网卡之间的直通连接;

数据包获取模块,用于获取所述网卡的硬件接收队列中的数据包;

解封装参数获取模块,用于向与所述虚拟机对应的虚拟机监控器发送解封装参数获取请求,获取所述虚拟机监控器返回的解封装信息和解封装参数;

解封装模块,用于根据所述解封装信息和所述解封装参数对所述获取到的数据包进行解封装,将所述解封装后的数据包发送到所述虚拟机的驱动层。

可选的,在其中一个实施例中,所述解封装信息包括封装格式,所述封装格式包括数据包封装层的封装协议。

可选的,在其中一个实施例中,所述解封装参数包括数据包封装层的IP地址和/或MAC地址。

可选的,在其中一个实施例中,所述直通连接建立模块还用于:

在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围,并将所述目标物理地址范围映射给所述虚拟机的驱动层。

可选的,在其中一个实施例中,所述解封装模块还用于获取所述网卡上的目标物理地址范围对应的硬件接收队列中的数据包。

实施本发明实施例,将具有如下有益效果:

采用了上述基于虚拟机的数据发送和接收方法及装置之后,物理主机上的虚拟机建立与网卡之间的直通连接,虚拟机通过与该网卡之间的直通连接直接进行数据的发送和接收,而不需要经过主机上的网卡驱动的中转;并且,在虚拟机发送数据的过程中,需要向主机上的虚拟机监控器请求需要发送的数据对应的数据包封装参数,然后根据主机上的虚拟机监控器给出的封装参数对需要进行封装的数据进行封装之后再发送到网卡进行发送;在虚拟机的直通网卡接收的已经被封装的数据时,也需要向主机上的虚拟机监控器请求解封装参数之后才能根据虚拟机监控器给出的解封装参数对接收到的数据进行解封装,然后才能将该数据发送至虚拟机的驱动层。也就是说,在虚拟机侧通过建立与网卡之间的直通连接之后,可以自行完成对数据包的封装以及解封装,但是其对于数据包的封装和解封装的策略还是由主机侧完成的,即将数据包的收发的控制面和数据面进行了分离,其数据的发送和接收对于虚拟机来讲是透明的;对于物理主机来讲,在虚拟机进行数据包的发送或接收的过程中,不需要主机侧的网卡驱动进行多次的数据传输以及数据包的封装和解封装,减少了对于系统资源尤其是对CPU资源的占用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

其中:

图1为一个实施例中包含多个虚拟机的计算机设备的逻辑结构图;

图2为一个实施例中一种基于虚拟机的数据包发送方法的流程示意图;

图3为一个实施例中一种基于虚拟机的数据包接收方法的流程示意图;

图4为一个实施例中一种基于虚拟机和主机的逻辑结构图;

图5为一个实施例中一种基于虚拟机的数据包发送装置的结构示意图;

图6为一个实施例中一种基于虚拟机的数据包接收装置的结构示意图;

图7为一个实施例中运行前述基于虚拟机的数据包发送方法和基于虚拟机的数据包接收方法的计算机设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为解决现有技术中基于虚拟机的数据包的发送存在的系统资源的有效利用率不足的技术问题,在本实施例中,特提出了一种基于虚拟机的数据包发送方法和一种基于虚拟机的数据包接收方法,该方法的实现可依赖于计算机程序,该计算机程序可运行于基于冯诺依曼体系的计算机系统之上,该计算机程序可以是基于虚拟机的数据收发管理的应用程序或者虚拟机管理程序。该计算机系统可以是运行上述计算机程序的例如智能手机、平板电脑、个人电脑等服务器或终端。

参考图1,图1给出了本发明实施例所基于的计算机系统的逻辑结构示意图。如图1所示,在物理主机上包含了VM_1、…、VM_N等N个虚拟机,并且,对于每一个虚拟机VM_i来讲,其对应的计算机系统中安装了相应的网卡驱动,即DVM_i。对于一个虚拟机来讲,其在发送数据或者其他虚拟机或者设备发送的数据时,都需要通过该虚拟机上安装的网卡驱动进行数据的接收和发送。

如图1所示,在物理主机上还包含了虚拟机监控器(Virtual Machine Monitor,简称VMM),具体的,VMM是一个系统软件,用来创建和管理在物理主机上的虚拟机,并对虚拟资源进行动态管理。即,虚拟机监控器VMM是安装在物理主机上的虚拟机管理程序,具体可用于为虚拟机呈现虚拟硬件平台,实现虚拟机的调度和隔离;其中,虚拟硬件平台对其上运行的各个虚拟机提供各种硬件资源,如提供虚拟CPU、内存、虚拟磁盘、虚拟网卡等等。

进一步的,在本实施例中,上述基于虚拟机的数据包发送方法是基于Overlay(叠加)网络技术,例如,VXLAN(virtual Extensible LAN,虚拟可扩展局域网)技术,即数据在发送之前需要进行封装,封装成预设的VXLAN报文的格式之后再进行发送,网络中间设备在接收到VXLAN报文之后,根据报文中相应的包头中国的地址进行转发。在本实施例中,具体表现为,虚拟机在发送数据之前首先需要对数据进行封装,没有进行封装的数据是不能直接进行发送的;相应的,接收的数据也是已经被封装之后的数据,并且,虚拟机在接收到数据之后需要对数据进行解封装。

在下述具体描述中,虚拟机发送数据之前需要对需要发送的数据包进行封装,接收到是数据包是封装后的,因此需要对接收到的数据进行解封装才能进行下一步的处理。

具体的,如图2所示,上述基于虚拟机的数据包发送方法包括如下步骤S102-S108:

步骤S102:建立虚拟机与网卡之间的直通连接。

在相关技术中,虚拟机上安装的前端网卡驱动只能通过主机上安装的后端网卡驱动来间接的访问主机上的物理网卡,也就是说,主机以及主机上集成的多个虚拟机是共用同一个物理网卡的,并且用虚拟机控制器和主机的网卡驱动来对网卡进行管理;也就是说,虚拟机上安装的网卡驱动不能直接访问主机上的物理网卡。

在本实施例中,对于某一个虚拟机来讲,建立其与主机上的网卡之间的直通连接,使得虚拟机的驱动层可以直接访问和使用该网卡,而不需要通过主机上的网卡驱动的中转或转发。需要说明的是,在建立了该虚拟机与该网卡之间的直通连接之后,该网卡只能被该虚拟机所使用,而不能再被主机或者主机上的其他虚拟机所使用。并且,在虚拟机与网卡之间的直通连接建立之后,虚拟机的驱动层可以直接将数据或数据包发送给建立了直通连接的网卡,而不需要通过主机侧的驱动的中转或者转发。

在本实施例中,与虚拟机建立直通连接的网卡可以是独立的物理网卡,也就是说,在主机上集成了多个虚拟机的情况下,若每一个虚拟机均需要建立与网卡之间的直通连接,则需要每一个虚拟机都对应了一个独立的网卡设备,例如,在物理主机上包含了多个物理网卡,且每一个虚拟机均对应了一个物理网卡,并建立该虚拟机与该物理网卡之间的直通连接。

在另一个实施例中,与虚拟机建立直通连接的网卡还可以是物理网卡上一段物理地址范围,并且,将网卡上的这一段物理地址范围映射给虚拟机的驱动层,驱动层在发送数据时,将数据发送至网卡上相应的物理地址范围。

具体的,所述建立虚拟机与网卡之间的直通连接还包括:在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围,并将所述目标物理地址范围映射给所述虚拟机的驱动层。

在一个具体的实施例中,上述网卡为SR-IOV(Single Root I/O Virtualization)网卡,为虚拟机分配的目标物理地址范围及对应该SR-IOV网卡上的一个VF(Virtual Functions,虚拟功能)网卡。具体的,在主机上包含的物理网卡还可以是SR-IOV(Single Root I/O Virtualization,单根I/O虚拟化)网卡,即将物理网卡的一个PF(Physical Functions,物理功能)扩展出若干个VF,并且,每一个VF以一个独立网卡的形式呈现,有独立的PCI(Peripheral Component Interconnect,外设部件互连标准)配置区域和资源范围,并可以与其它VF共享同一个物理资源(共用同一个物理网口)。也就是说,将单一的物理网卡扩展出来的多个VF当成具体的网卡来进行部署,每一个VF对应了一个VF接口,每个VF接口都有单独的虚拟PCIe通道(即PCI-Express通道,也就是说,每一个VF对应的虚拟机与外部I/O设备之间独立的进行通信),这些虚拟的PCIe通道共用物理网卡的PCIe通道。每个虚拟机可占用一个或多个VF接口,这样虚拟机就可以直接访问自己的VF接口,即访问自己的虚拟网卡,而不需要VMM的协调干预。在此种情况下,虚拟机建立了与网卡的直通连接,即相当于建立与物理网卡下的VF接口的直通连接,并且,该VF接口只能被当前的虚拟机所使用,而不能被其他虚拟机或者设备所使用或调用。

步骤S104:检测所述虚拟机的驱动层发出的数据包。

在虚拟机上的应用程序或者系统需要向网络或者其他虚拟机或设备发送数据时,会将相应的数据包发送给虚拟机的驱动层,由虚拟机的驱动层进行进一步的处理,例如,将数据包发送给虚拟机的网卡驱动进行处理。在本步骤中,在检测到虚拟机的驱动层发出的数据包时,获取该发送的数据包,并获取与该数据包的包头信息。具体的,包头信息可以包括源虚拟机的地址、源虚拟机的端口、目的地地址/端口等。进一步的,在数据包的包头信息中还可以包括TCP(Transmission Control Protocol,传输控制协议)等满足要求的协议,在本发明中不做限制。

步骤S106:向与所述虚拟机对应的虚拟机监控器发送封装参数获取请求,接收所述虚拟机监控器返回的封装信息和封装参数。

在本实施例中,虚拟机发送出的数据包的封装的具体操作是由虚拟机完成的,但是,虚拟机在对数据包进行封装的过程中具体的操作以及相应的参数是由主机上的虚拟机监控器(VMM)决定的。

具体的,在本实施例中,在虚拟机需要发送数据包时,向管理该虚拟机的虚拟机监控器请求与封装数据包对应的参数请求,即向虚拟机监控机发送封装参数获取请求。虚拟机监控器在接收到虚拟机发送的封装参数获取请求之后,根据封装参数获取请求中包含的虚拟机标识以及具体需要发送的数据包,确定相应的封装策略,并将与封装策略相关的数据返回给虚拟机,以供虚拟机对数据包进行封装。

进一步的,在本实施例中,上述由虚拟机监控器确定的封装策略的相关数据包括了封装信息和封装参数。具体的,封装信息包括了是否进行封装、以及采用何种格式对数据包进行封装的封装格式;封装参数包括了源IP地址、源MAC地址、目的地IP地址、目的地MAC地址等发送数据时的必要信息,还包括了封装层采用的协议。

对于基于TCP/IP网络协议栈的数据包封装,主要是分为应用程序、传输层、网络层以及链路层的分层封装,在经过上述分层封装之后,数据被封装成帧发送到网卡中进行传输,封装格式可以是上述任意一个层的格式,例如,网络层(IP层)的格式为GRE数据报文格式(Generic Routing Encapsulation,通用路由封装)或VXLAN数据报文格式(virtual Extensible LAN,虚拟可扩展局域网)。

步骤S108:根据所述封装信息和所述封装参数将所述数据包封装,将所述封装后的数据包通过所述直通连接添加到所述网卡的硬件发送队列进行发送。

在虚拟机接收到返回的封装信息以及封装参数之后,即可根据该封装信息和封装参数对数据包进行封装。

具体的,在封装信息中标识了不需要对当前需要发送的数据包进行封装时,只需要将相应的封装参数添加到该数据包的包头信息中即可完成对该数据包的封装。在另一个实施例中,若在封装信息中指示需要对数据包进行封装,并且使用GRE数据报文格式对当前需要发送的数据包进行封装时,即根据GRE数据报文格式的对数据包进行封装,并且将相应的封装参数封装到该数据包中对应的分层封装中。

在虚拟机将待发送的数据包进行封装之后,即将该封装后的数据包通过虚拟机与网卡之间的直通连接发送给网卡由网卡进行进一步的发送;具体操作中,即封装后的数据包通过虚拟机与网卡之间的直通连接添加到网卡的硬件发送队列中,由网卡对硬件发送队列中的数据或数据包逐一进行发送。

在一个具体的实施例中,若在建立虚拟机与网卡之间的直通连接时是通过在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围并将所述目标物理地址范围映射给所述虚拟机的驱动层来建立的,则在将数据添加到网卡的硬件发送队列时,是将数据发送至网卡上与该目标物理地址范围对应的硬件发送队列的。具体的,所述将所述封装后的数据包通过所述直通连接添加到所述网卡的硬件发送队列进行发送还包括:将所述封装后的数据包发送至所述网卡上的目标物理地址范围对应的硬件发送队列进行发送。

参考图3所示,图3展示了上述基于虚拟机的数据包接收方法,具体的该方法包括如下步骤S202-S208:

步骤S202:建立虚拟机与网卡之间的直通连接。

具体可参见步骤S102。

步骤S204:获取所述网卡的硬件接收队列中的数据包。

在本实施例中,在有其他虚拟机或者其他设备、服务器向当前虚拟机发送数据时,是将数据发送给与该虚拟机建立了直通连接的网卡,然后转而由该网卡将数据发送给虚拟机的驱动层。具体的,在存在发送给当前虚拟机对应的IP地址或者MAC地址的数据包时,将该数据包发送给网卡的硬件接收队列,由网卡根据硬件接收队列中的数据包一一进行接收处理。

在本实施例中,在网卡的硬件接收队列中存在数据包时,获取该数据包。需要说明的是,在本实施例中,由网卡的硬件接收队列中获取的数据包是封装了的数据包,也就是说,虚拟机需要对接收到是被封装了的数据包进行解封装操作。

在一个具体的实施例中,若在建立虚拟机与网卡之间的直通连接时是通过在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围并将所述目标物理地址范围映射给所述虚拟机的驱动层来建立的,则在获取网卡的硬件接收队列中的数据包时,是从上述为虚拟机分配的网卡上的目标物理地址范围对应的硬件接收队列中获取的。具体的,所述获取所述网卡的硬件接收队列中的数据包还包括:获取所述网卡上的目标物理地址范围对应的硬件接收队列中的数据包。

步骤S206:向与所述虚拟机对应的虚拟机监控器发送解封装参数获取请求,获取所述虚拟机监控器返回的解封装信息和解封装参数。

在本实施例中,虚拟机接收的数据包的解封装的具体操作是由虚拟机完成的,但是,虚拟机在对数据包进行解封装的过程中具体的操作以及相应的参数是由主机上的虚拟机监控器(VMM)决定的。

具体的,在本实施例中,在虚拟机的网卡接收队列接收到数据包时,向管理该虚拟机的虚拟机监控器请求与解封装数据包对应的参数请求,即向虚拟机监控机发送解封装参数获取请求。虚拟机监控器在接收到虚拟机发送的解封装参数获取请求之后,根据解封装参数获取请求中包含的虚拟机标识以及具体接收到的数据包,确定相应的解封装策略,并将与解封装策略相关的数据返回给虚拟机,以供虚拟机对数据包解进行封装。

进一步的,在本实施例中,上述由虚拟机监控器确定的解封装策略的相关数据包括了解封装信息和解封装参数。具体的,解封装信息包括了采用何种格式对数据包进行解封装的封装格式;解封装参数包括了源IP地址、源MAC地址、目的地IP地址、目的地MAC地址等对接收到的封装数据进行解封装的必要信息,还包括了封装层采用的协议。

步骤S208:根据所述解封装信息和所述解封装参数对所述获取到的数据包进行解封装,将所述解封装后的数据包发送到所述虚拟机的驱动层。

在虚拟机接收到返回的解封装信息以及解封装参数之后,即可根据该解封装信息和解封装参数对数据包进行解封装。针对已经解封装的数据包,即可由网卡将该数据包发送给虚拟机的驱动层,即网卡驱动,然后由驱动层发送给相应的应用层进行进一步的处理。

参考图4,图4给出了一种基于虚拟机的数据包发送和接收的系统架构图。具体的,在主机上包括了一个虚拟机,还包括管理该虚拟机的虚拟机监控器(VMM),在主机上包含了物理网卡;在虚拟机上安装了与网卡对应的网卡驱动,并且,通过该网卡驱动与主机上的网卡直接进行通讯。具体的,在虚拟机上包含了前端管理模块,并具体包括了策略管理、通信前端、封/解数据包3个子模块。需要说明的是,该前端管理模块是放在虚拟机的网卡驱动下面的,即网卡驱动中即将发送到网卡的硬件发送队列和从硬件接收队列中接收数据包时,将数据包勾出来,送往前端管理模块进行封装或解封装,然后再发送到网卡或者网卡的驱动层。而在主机侧,包括了后端管理模块,用来处理虚拟机发送过来的请求并给予响应,例如,对虚拟机侧发送的封装参数获取请求或者解封装参数获取请求进行解析并给予对应的应答。

也就是说,将基于虚拟机的数据包的发送和接收过程中的控制面与数据面进行分离,在虚拟机侧至完成对数据包的封装和解封装,而具体的封装策略以及解封装策略依旧由主机侧完成。

此外,为解决现有技术中基于虚拟机的数据包的发送存在的系统资源的有效利用率不足的技术问题,在本实施例中,还提出了一种基于虚拟机的数据包发送装置和一种基于虚拟机的数据包接收装置。

具体的,如图5所示,上述基于虚拟机的数据包发送装置包括直通连接建立模块102、数据包检测模块104、封装参数获取模块106、封装模块108,其中:

直通连接建立模块102,用于建立虚拟机与网卡之间的直通连接;

数据包检测模块104,用于检测所述虚拟机的驱动层发出的数据包;

封装参数获取模块106,用于向与所述虚拟机对应的虚拟机监控器发送封装参数获取请求,接收所述虚拟机监控器返回的封装信息和封装参数;

封装模块108,用于根据所述封装信息和所述封装参数将所述数据包封装,将所述封装后的数据包通过所述直通连接添加到所述网卡的硬件发送队列进行发送。

可选的,在一个实施例中,所述封装信息包括封装格式,所述封装格式包括数据包封装层的封装协议。

可选的,在一个实施例中,所述封装参数包括数据包封装层的IP地址和/或MAC地址。

可选的,在一个实施例中,所述直通连接建立模块102还用于:在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围,并将所述目标物理地址范围映射给所述虚拟机的驱动层。

可选的,在一个实施例中,所述封装模块108还用于将所述封装后的数据包发送至所述网卡上的目标物理地址范围对应的硬件发送队列进行发送。

参考图6,图6展示了上述基于虚拟机的数据包接收装置的具体结构组成,如图6所示,该装置包括直通连接建立模块202、数据包获取模块204、解封装参数获取模块206、解封装模块208,其中:

直通连接建立模块202,用于建立虚拟机与网卡之间的直通连接;

数据包获取模块204,用于获取所述网卡的硬件接收队列中的数据包;

解封装参数获取模块206,用于向与所述虚拟机对应的虚拟机监控器发送解封装参数获取请求,获取所述虚拟机监控器返回的解封装信息和解封装参数;

解封装模块208,用于根据所述解封装信息和所述解封装参数对所述获取到的数据包进行解封装,将所述解封装后的数据包发送到所述虚拟机的驱动层。

可选的,在一个实施例中,所述解封装信息包括封装格式,所述封装格式包括数据包封装层的封装协议。

可选的,在一个实施例中,所述解封装参数包括数据包封装层的IP地址和/或MAC地址。

可选的,在一个实施例中,所述直通连接建立模块202还用于:在所述网卡对应的物理地址范围内为所述虚拟机分配与所述虚拟机对应的目标物理地址范围,并将所述目标物理地址范围映射给所述虚拟机的驱动层。

可选的,在一个实施例中,所述解封装模块208还用于获取所述网卡上的目标物理地址范围对应的硬件接收队列中的数据包。

实施本发明实施例,将具有如下有益效果:

采用了上述基于虚拟机的数据发送和接收方法及装置之后,物理主机上的虚拟机建立与网卡之间的直通连接,虚拟机通过与该网卡之间的直通连接直接进行数据的发送和接收,而不需要经过主机上的网卡驱动的中转;并且,在虚拟机发送数据的过程中,需要向主机上的虚拟机监控器请求需要发送的数据对应的数据包封装参数,然后根据主机上的虚拟机监控器给出的封装参数对需要进行封装的数据进行封装之后再发送到网卡进行发送;在虚拟机的直通网卡接收的已经被封装的数据时,也需要向主机上的虚拟机监控器请求解封装参数之后才能根据虚拟机监控器给出的解封装参数对接收到的数据进行解封装,然后才能将该数据发送至虚拟机的驱动层。也就是说,在虚拟机侧通过建立与网卡之间的直通连接之后,可以自行完成对数据包的封装以及解封装,但是其对于数据包的封装和解封装的策略还是由主机侧完成的,即将数据包的收发的控制面和数据面进行了分离,其数据的发送和接收对于虚拟机来讲是透明的;对于物理主机来讲,在虚拟机进行数据包的发送或接收的过程中,不需要主机侧的网卡驱动进行多次的数据传输以及数据包的封装和解封装,减少了对于系统资源尤其是对CPU资源的占用。

在一个实施例中,如图7所示,图7展示了一种运行上述基于虚拟机的数据包发送和接收方法的基于冯诺依曼体系的计算机系统的终端。该计算机系统可以是智能手机、平板电脑、掌上电脑、笔记本电脑或个人电脑等终端设备。具体的,可包括通过系统总线连接的外部输入接口1001、处理器1002、存储器1003和输出接口1004。其中,外部输入接口1001可选的可至少包括网络接口10012。存储器1003可包括外存储器10032(例如硬盘、光盘或软盘等)和内存储器10034,在内存储器10034上包含有虚拟机监控器VMM以及N各虚拟机VM_1、VM_2、……、VM_N,并且每一个虚拟机都对应有与之对应的网卡驱动DVM_1、DVM_2、……、DVM_N。输出接口1004可至少包括显示屏10042等设备。

在本实施例中,本方法的运行基于计算机程序,该计算机程序的程序文件存储于前述基于冯诺依曼体系的计算机系统的外存储器10032中,在运行时被加载到内存储器10034中,然后被编译为机器码之后传递至处理器1002中执行,从而使得基于冯诺依曼体系的计算机系统中形成逻辑上的直通连接建立模块102、数据包检测模块104、封装参数获取模块106、封装模块108和直通连接建立模块202、数据包获取模块204、解封装参数获取模块206、解封装模块208。且在上述基于虚拟机的数据包发送和接收方法执行过程中,输入的参数均通过外部输入接口1001接收,并传递至存储器1003中缓存,然后输入到处理器1002中进行处理,处理的结果数据或缓存于存储器1003中进行后续地处理,或被传递至输出接口1004进行输出。

以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

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