作为虚拟机与外界通信的途径,虚拟网络设备在Xen的虚拟设备中具有代表性。虚拟网络设备的前后端须要通过共享内存进行通信。由于后端须要为多个虚拟机提供网络服务,因此后端具有网桥的功能。每个虚拟机拥有一个或多个网络设备,通过软件模拟的网桥进行数据包转发。

虚拟网络设备包含位于Dom N中的前端和位于Dom 0中的后端,前端发送数据包都须要转发到后端,最终经过虚拟网桥,通过真实的物理网卡(peth0)发送到网络中。当Dom N启动时,创建了前端设备eth0,同时对应的后端设备是vif N.x,N是Domain ID,x代表第几个网络设备,如果是第1个网络设备,就是vif N.0,依次类推。

传统Linux在发送数据包时,数据包从应用程序传入内核,上层的协议(TCP、IP等)将数据封装成sk_buff格式,传给底层的网络设备(如以太网),然后由内核调用网络设备的发包函数完成发包过程。Xen虚拟网络的实现是在Linux 2.6网络模块的基础上修改的,在Dom U中,虚拟网络设备的前端与这个流程基本相同,应用程序将数据包从用户空间拷贝到内核空间,经过协议栈后封装成sk_buff,将包发送出去。只是由于前端是虚拟设备,因此不是真正将包发送到物理设备上,而是将包进一步转发到后端,由后端真正完成包的转发。具体的实现是通过把保存该数据包的内存页面授权给后端驱动域(包含对真实硬件驱动的虚拟机),后端设备驱动获到该页面后,通过协议栈转发到本地设备驱动,从而将数据包从真实的网络设备上发送出去。

虚拟网络设备后端是在驱动域(包含本地设备驱动的虚拟机,通常是Dom 0) 中创建的设备,后端转发前端发送的数据包,或者将接收的数据包转发给虚拟机。由于驱动域的后端通常须要为多个前端提供发送/接收数据包的功能,因此,需要虚拟网桥来根据MAC地址将数据包转发到各个虚拟机。

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐