技术周 | qemu网络收发包流程

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

通常我们使用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也是处于断开的状态,如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值