通常我们使用qemu创建虚拟机时,会使用下面的选项指定虚拟网卡设备的类型,以及桥接、tap设备参数等,如下:

-device选项用于给虚拟机分配虚拟设备,如磁盘设备、网卡设备等
-netdev选项用于配置虚拟设备的后端,对于网卡设备,常见的有tap、bridge、vhost-user等,tap设备是非常常见的一个后端,如使用libvirt创建虚拟机时,libvirt生成的qemu参数中,使用的就是tap设备,直接使用tap设备更加灵活。vhost-user通常用在dpdk等环境。
本文主要使用tap设备为后端,介绍数据包是如果从tap设备中读取出来,发送给虚拟机设备,以及如果从虚拟机中读取数据包,然后发送给tap设备。
tap设备是一个虚拟机设备,在kernel中没有相对应的物理设备,因此只创建出一个tap设备是没有任何用途的,我们可以使用以下命令在linux中创建一个tap设备:

tap设备主要由内核的tun模块实现,使用'ip tuntap'命令创建设备时,有两种模式,一种是tun,另一个是tap,分别对应点对点设备和以太网设备,或者说一个是三层设备,另一个是二层设备。
即使手工把网卡设置成UP状态,tap也是处于断开的状态,如下:


本文详细介绍了QEMU如何使用tap设备进行虚拟机的网络通信。tap设备作为虚拟网卡的后端,在Linux内核中通过tun模块实现,它在没有应用连接时保持断开状态。当QEMU启动并注册tap设备的文件描述符到事件循环后,能接收和发送数据包给虚拟机。数据包的处理涉及预处理、队列选择、中断触发等步骤,通过rtl8139等虚拟设备模拟真实硬件的行为。
最低0.47元/天 解锁文章
789

被折叠的 条评论
为什么被折叠?



