首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

基于QEMU的虚拟网络设备物理层通信的研究

作者:李汶洁 来源:电子技术与软件工程

摘 要

介绍虚拟机的基本概念和体系结构,并重点描述了主流虚拟机QEMU。本文介绍的网络虚拟设备就是基于QEMU的,着重介绍物理层的通信机制,特别是接口的连接方式,并提供实验方法和过程。这对网络虚拟设备方面的研究具有很大的参考价值。

【关键词】虚拟机 QEMU 虚拟网卡 接口

近年来,虚拟机技术重新得到重视并得以快速发展,基于虚拟机的虚拟网络环境成为当前网络计算领域的热点研究问题。虚拟网络设备能够满足实验和学习的需求,提供较为灵活的组网环境,所需成本也相对较低。

对于虚拟网络设备而言,虚拟机是承载网络设备操作系统的硬件资源,虚拟机支持的启动参数中,可以指定一定类型的虚拟网卡,虚拟机上的虚拟网卡和模拟的网络设备的接口是一一对应的。只有网卡正常通信,设备才能通信,对于虚拟设备而言,各个模块的收发包要依赖网卡来收发数据,这就需要及时获得网卡收发包功能是否正常的信息,因此对网卡的管理就显得尤为重要了。

本文围绕解决虚拟网卡物理层通信问题,主要介绍网卡状态的管理,保证虚拟网卡正常的收发报文,维护网卡的状态,以便快速响应用户的操作和感知对端在线情况,将网卡的实时状态通知其它模块,便于其它模块进行本模块的收发包。使用的虚拟机为QEMU,采用的设计方法是借助宿主机自身的通信机制实现数据的交互,这样使得具有良好的扩展性,也简化了用户的操作。

1 相关工作

1.1 虚拟机介绍

对于虚拟机来讲,“虚拟”实际上就是指的一些虚拟指令集。每个虚拟机都有一个用户可以访问的虚拟指令集,虚拟机把这些虚拟指令“映射”到计算机的实际指令集。

在虚拟机领域,主要有四种不同的模型。第一种以IBM虚拟机模型为代表,它几乎是一种一一映射,用户实际上就是在访问并执行机器的指令。第二种流派由抽象计算机实现对操作系统和机器指令的映射,它以Java虚拟机为代表。第三、第四种分别为UNIX虚拟机模型和OSI虚拟机模型,这两种模型直接映射一部分指令,而其它的指令则是对操作系统函数的直接调用。

1.2 QEMU虚拟机

QEMU虚拟机属于UNIX虚拟机模型一类,QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有这两者所不具备的特性,如高速及跨平台的特性。经由Kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

QEMU是开源界广泛使用的虚拟机软件,它支持多种硬件架构的模拟,支持的硬件器件类型和数量都很丰富。重要的是,它可以支持最大128个网口,并且支持丰富的网络模拟连接方式,非常适合承载网络设备模拟器。

2 物理层通信的设计与实现

2.1 物理层通信基础分析

QEMU借助宿主机Socket进行通信,这里可以将虚拟网卡发送的数据交给宿主机的Socket,从而能够将数据发送到宿主机网络中去。同样的,从Socket获取的数据也能交给虚拟网卡,这样就能实现互通。这种方式得益于QEMU提供一种方式能够将虚拟网卡和Socket关联到一起,并且一一对应起来,这里我们选取使用一个tag标记的方式将两者关联。采用这样的通信方式可以免去安装大量虚拟网卡的麻烦,节省了资源。

虚拟网卡的转发模块维护网卡的收发包功能,各模块设定模块ID在转发模块注册,转发模块以模块ID为标记来维护各个模块的收发数据。QEMU虽然实现了网卡之间的数据传输,但是没有提供网卡状态的通知机制,即网卡的开启和关闭,没有实时通知其它模块,这样各模块无法获取网卡的开启和关闭状态,影响了各个模块数据的收发。例如,两台虚拟设备的两个接口相连,

2.1.1 虚拟设备间通信

虚拟设备间通信是通过UDP单播[8]来进行点对点通信,需指定源端口和目的端口号,以及目的ip地址,采用这种方式来模拟接口的点对点通信。

2.1.2 虚拟设备和宿主机通信

QEMU的启动参数支持虚拟网卡的关联,在启动参数中指定关联的虚拟网卡,可以将虚拟网卡和宿主机上的虚拟网卡绑定,如tap网卡,这样就实现了虚拟机和宿主机的通信。

2.1.3 虚拟设备和物理设备通信

将虚拟tap网卡和宿主机的物理网卡桥接,这样,虚拟网卡发出的报文,会发送给tap网卡,tap网卡再将报文通过桥接通道发送给物理网卡,从而达到利用宿主机网卡发送报文的目的。接收报文流程类同。这样就实现了和物理设备的互通。

2.2 物理层通信的设计与实现

网卡状态管理,管理的是虚拟网络设备的接口,用户看到的每个接口是QEMU启动参数中指定的虚拟网卡,所以用户对接口的操作实际是对虚拟网卡的操作。

2.2.1 接口连线分析

通过2.1节虚拟网络设备的连网工作模式,可以获知网卡的连接对象,即用户在虚拟网络设备看到接口的连接对象,对于2.1.1虚拟网络设备间通信,接口的对端是另一个虚拟设备的接口,即连线的两端是虚拟设备的两块虚拟网卡;对于2.1.2虚拟设备和宿主机通信,接口的对端是安装在宿主机上的tap网卡,即连线的两端一端是虚拟设备的网卡,另一端是宿主机的虚拟网卡;对于2.1.3虚拟设备和物理网络设备通信,接口的对端是安装在宿主机上的tap虚拟网卡,但是物理网络设备一个接口与宿主机的物理网卡连接在一起,两者又通过桥接通道间接连接。

因此,对于虚拟网络设备的网卡的连接对象有两个:一个是虚拟设备的网卡,一个是安装在宿主机上的tap网卡。

2.2.2 接口状态设计

由上面的分析可知,接口的连线有三种:有对端连线、无对端连线,对端为tap网卡。用户的操作有打开、关闭接口,另外,有连线的两端要实时探测到对端是否在线。设计了接口的三种状态:关闭状态(网卡关闭收发包)、探测状态(开启网卡收发包、只发送接口状态管理私有协议的报文)、就绪状态(各协议报文都能收发)。

(1)用户关闭网卡;

(2)用户打开网卡;

(3)对端有连线,探测到对端在线,接口切成就绪状态;

(4)探测不到对端,对端下线,接口切成探测状态。

2.2.3 网卡状态管理实现

下面是网卡状态管理实现的主要内容:

(1)创建hash表。Hash表以网卡id为key,hash节点内存放的结构体有网卡id、本端接口状态、定时器超时计数次数、接口对端信息(无连接、接口、tap网卡)。节点创建后不需删除,因为对于虚拟网络设备是不支持动态删除网卡的。

(2)封装报文。接口状态管理需要用到两种类型以太报文:hello报文(用来探测)、stop标识报文(网卡关闭前通知对端,本端下线),协议为模块私有协议。

探测报文格式:

以太头+网卡ID+协议标识(ifstate)+HELLO+以太尾。

Stop标识报文:

以太头+网卡ID+协议标识(ifstate)+STOP+以太尾。

(3)IFSTATE_OPEN函数。该函数是完成用户打开接口,有以下动作:

①开启网卡收发包。

②接口状态为探测状态。

③创建定时器,超时时间为500ms,超时次。

数为6次,即超时周期为3s,超时处理函数中负责发送探测报文(Hello报文),如果本端处于就绪状态,超时周期内没有收到对端的探测报文,认为对端不在线,将本端状态切成探测状态,并通知其它模块,同时将定时器超时计数清零。如果本端处于探测状态,不做任何处理,直到收到对端的探测报文。如果本端接口没有对端,或者是对端是tap网卡,则不用创建定时器,也不用发送探测报文,另外,如果对端是tap网卡直接将接口切成就绪状态,除非用户手动关闭接口。

(4)IFSTATE_CLOSE函数。该函数是完成用户关闭接口,有以下动作:

①发送stop标识报文,通知对端,本端下线。

②将本端状态切成关闭状态。

③删除定时器。

④关闭网卡收发包。

(5)IFSTATE_RECEIVE函数。该函数为收包函数,有以下动作:

①收到对端的Hello标识报文。

如果对端处于就绪状态,不做任何处理;

如果对端处于探测状态,将本端接口状态切成就绪状态,发送一个探测报文,通知对端本端就绪。

②收到对端的Stop标识报文。

如果本端处于探测状态,不做任何处理。

如果本端处于就绪状态,将本端切成就绪状态,直到收到对端的探测报文。

采用上述管理机制,每个接口只需维护此状态切换机制,也就能正确维护链路状态了,从而保证了虚拟设备的物理层接口正常运转,报文数据能够正常的收发,上层协议能够在物理层就绪的基础上正常协商,进而实现了虚拟设备的通信。

3 实验结果

本节以一个组网来验证设计物理层的通信机制,基于QEMU的虚拟设备是运行在宿主机上的,一台宿主机可以起一台或多台虚拟网络设备。

实验目标:验证网卡状态管理是否正常,能否达到预期。

实验预期:网卡处于就绪状态,链路通过ping报文验证,两端能够互相ping通,网卡处于探测或关闭状态,两端不能ping通。

实验环境:选择两台虚拟网络设备和一台真实物理交换机,虚拟网络设备分别模拟的是路由器VM1和高端交换机VM2。其中VM1和VM2位于两台PC上,两者是跨PC组网,PC1和PC2位于同一局域网内,能够正常通信,而PC2和物理交换机能够通信,VM2和物理交换机之间的通信是虚拟网络交换机和真实物理设备的通信,即VM2的GE1/0/10绑定tap网卡,并通过桥接通道和物理交换机的Ge1/0/10口相连,测试前已验证能够正常通信。按图中所示,给每个接口配置相应的ip地址。

实验结果:

(1)通过命令行查看,VM1端口GE1/0/4和VM2端口GE1/0/4、GE1/0/10,以及物理交换机端口GE1/0/10均处于就绪状态。Ping命令结果显示PC1能ping通物理交换机。

(2)将VM2端口GE1/0/4手动切成探测状态,通过命令行查看VM1端口GE1/0/4自动切成探测状态,而物理交换机端口GE1/0/10和VM2端口GE1/0/10处于就绪状态。Ping命令结果显示PC1不能ping通物理交换机。

4 结语

基于QEMU的通信方式的设计,更加的简单、高效,这也得益于QEMU对Windows的兼容性。当然此套设计方案也是有不足之处的,比如在Windows操作系统上QEMU的性能比运行在Linux操作系统上低,也存在多处bug,还有tap网卡的缺陷。对于接口状态管理模块,设计方案是排除了多种设计方案后选取的设计方案,该方案在模块上更加内聚、处理上也更加高效,没有使用两端的频繁的握手,当然还是存在不足,就是对宿主机的cpu对报文的处理效率有很大的依赖,如果cpu处理效率低,很容易产生接口震荡的问题。

参考文献

[1]董耀祖,周正伟.基于x86架构的系统虚拟机技术与应用[J].计算机工程,2006,32(13):71-72.

[2]刘真.虚拟机技术的复兴[J].计算机工程与科学,2008,30(2):105-107.

[3]马向玲,范宇明,赵安兴等.虚拟机在嵌入式系统实验教学中的应用[J].实验技术与管理,2008,25(6):87-88.

[4]Vmware.TimeKeeping in VMware virtual machines[EB/OL].[2008-8-14].http://www.vmware.com/pad/vmware_timekeeping.pdf.

[5]王春海.虚拟机技术与动手实验[M].北京:机械工业出版社,2003.

[6]刑仲景,浅谈虚拟机在网络实验课程中的作用[J].实验室研究与探索,2007,26(12):304-306.

[7]成思越,基于Hash函数的RFID认证协议研究[J].铜业工程,2012(4),47-50.

[8]谢希仁.计算机网络(第4版)[M].北京:电子工业出版社,2003.

作者单位

上海空间电源研究所 上海市 200154