Xen的虚拟网络设备
作为虚拟机与外界通信的途径,虚拟网络设备在Xen的虚拟设备中具有代表性。虚拟网络设备的前后端须要通过共享内存进行通信。由于后端须要为多个虚拟机提供网络服务,因此后端具有网桥的功能。每个虚拟机拥有一个或多个网络设备,通过软件模拟的网桥进行数据包转发。虚拟网络设备包含位于Dom N中的前端和位于Dom 0中的后端,前端发送数据包都须要转发到后端,最终经过虚拟网桥,通过真实的物理网
作为虚拟机与外界通信的途径,虚拟网络设备在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地址将数据包转发到各个虚拟机。
更多推荐
所有评论(0)