KVM网络桥接模式底层网络原理解说

news/2025/2/6 5:55:49/

文章目录

  • 前言
  • 一、tap设备在kvm中的应用
    • 1. tap虚拟网络设备
    • 2. Tap/Tun工作原理
    • 3. 结论
  • 二、KVM网络桥接模式细节解说
    • 1.查看虚拟网卡
    • 2.vnet虚拟网卡说明
  • 总结

前言

在以下两篇文章中我们介绍了虚拟网卡技术以及虚拟交换机技术,今天我们再来详细说说在在kvm网络模式下这两种技术的具体应用情况。

网络虚拟化之 tun/tap 网络设备

linux网桥简单理解和持久化配置

以下是常见的kvm网络桥接模式的结构示意图,vnet就是虚拟网卡,br0就虚拟交换机,整体如下图所示:

在这里插入图片描述
以下是我们测试环境中运行的4台虚拟机,以及桥接模型下网络连接关系,如下图所示:
在这里插入图片描述

从上面的结构图中我们可以看出,虚拟机和物理机之间通信需要依赖vnet虚拟网卡才可以通信,网络上大部分资料都未明确说明具体使用的是tun设备还是tap设备,下面就揭开神秘的面纱。


一、tap设备在kvm中的应用

1. tap虚拟网络设备

由于我们虚拟机是使用kvm技术创建的,因此我们可以从qemu-kvm进程中查找相关信息,我们执行命令:

# ps -ef | grep kvm | grep tap

结果返回值(kvm创建虚拟机参数):

虚拟机创建参数
关注其中的网卡配置参数:

• 从HOST角度:

-netdev tap,fd=29,id=hostnet0,vhost=on

• 从GUEST角度:

-device virtio-net-pci,netdev=hostnet0,id=net0,mac=00:55:77:e3

可以看到,host上使用tap类型的网卡,开启了vhost-net技术。

因此我们可以明确在kvm网络桥接模式中使用的虚拟网卡是tap设备。

2. Tap/Tun工作原理

Tun/Tap虚拟网络设备的原理比较简单,它都是在Linux内核中添加了一个Tun/Tap虚拟网络设备的驱动程序和一个与之相关连的字符设备/dev/net/tun,字符设备tun作为用户空间和内核空间交换数据的接口。

用户空间的应用程序可以通过这个设备文件来和内核中的驱动程序进行交互,其操作方式和普通的文件操作无异。当内核将数据包发送到虚拟网络设备时,数据包被保存在设备相关的一个队列中,直到用户空间程序通过打开的字符设备tun的描述符读取时,它才会被拷贝到用户空间的缓冲区中,其效果就相当于,数据包直接发送到了用户空间。通过系统调用write发送数据包时其原理与此类似。

从结构上来说,Tun/tap驱动并不单纯是实现网卡驱动,同时它还实现了字符设备驱动部分。以字符设备的方式连接用户态和核心态,下面是示意图:
在这里插入图片描述

我们从kvm创建虚拟机参数截图中可以看出,当前有一个fd=29的文件描述符,这个就是读写/dev/net/tun文件的文件描述符。

我们使用lsof -p 4519 | grep tun验证下:
在这里插入图片描述
可以看到,PID 为 4519 的进程打开了文件 /dev/net/tun,分配的文件描述符 fd 为 29

3. 结论

因此,我们可以得出以下结论:在 kvm 虚机启动时,会向内核注册 tap 虚拟网卡,同时打开设备文件 /dev/net/tun,拿到文件描述符 fd,然后将 fd 和 tap 关联,tap 就成了一端连接着用户空间的 qemu-kvm,一端连着主机上的 bridge 的端口,促使两者完成通信

二、KVM网络桥接模式细节解说

1.查看虚拟网卡

在我们测试环境下,我们已经运行了4台虚拟机,此时我们在主机上用ifconfig命令,可以看到会多出几个vnet开头的虚拟网卡,如下所示:

在这里插入图片描述
vnet这几个虚拟网卡没有ip信息,在/etc/sysconfig/network-scripts目录下也没有对应的配置文件,因此这个几个设备是虚拟的。

若我们把虚拟机1给关机,对应vnet0虚拟网卡也不在显示,因为tap设备是一个点对点的设备,同虚拟机的一起创建和消失。

如果我们有权限的话,可以对某一台虚拟机的xml配置文件查看的话,在interface段会有如下的相关信息。(说明:这里查看的是另外台服务器上的虚拟机xml配置文件)
在这里插入图片描述
从以上配置中可以看出,当前虚拟机采用桥接模式并且与网桥设备br0进行关联。

2.vnet虚拟网卡说明

在当前服务器上虚拟网桥设备名称为mgmtnet,目前从属4个虚拟网卡以及一个物理网卡en01,如下图所示:
在这里插入图片描述

几点说明

1、虚拟网卡vnet#是创建虚拟机的时候自动创建的。我们要做的就是将网桥设备关联到虚拟网卡vnet#上。

2、虚拟网卡vnet#,#代表数字序号,比如0,1,2,3…这个顺序是你先后创建虚拟机的次序排出来的,从0开始计数。

3、一般上,我们创建虚拟机好之后,无需关心vnet#虚拟网卡。你只要在虚拟机里面配置网卡eth0即可,这样就可以上网了。


总结

以上就是对KVM网络桥接模式底层网络原理进行解说,综合了虚拟网卡设备和虚拟交换机在实际当中的应用。

参考文档:
1、https://blog.csdn.net/xiakewudi/article/details/76851076
2、https://www.cnblogs.com/FengGeBlog/p/10452700.html
3、https://cloud.tencent.com/developer/article/1432484


http://www.ppmy.cn/news/100525.html

相关文章

1.4. 运算符与表达式

在 Java 中,运算符是用于执行特定操作的符号,而表达式是由变量、常量和运算符组成的一段代码,用于计算值。本节将介绍 Java 中的常用运算符和表达式的使用。 1.4.1. 算术运算符 Java 支持以下算术运算符: 加法(&…

【嵌入式烧录/刷写文件】-3.3-Bin文件转换为S19/Hex文件

案例背景(共8页精讲): 该篇将告诉您:如何使用Vector HexView工具,j将一个bin文件转换为Intel Hex或Motorola S-record(S19/SREC/mot/SX)文件。 目录 1 Intel Hex,Motorola S-record(S19/SREC/mot/SX),Bin文件之间的…

pytorch基础学习-tensorboardX

最近训练总是出问题,听取建议,在pytorch环境下引入了tensorboard 1、安装tensorboardX tensorboardX是在tensorboard前提下进行安装的,所以我们需要先安装tensorboard pip install tensorboardpip install tensorboardX2、简单使用 这里我…

常用服务端口号-你知道的和不知道的都在这(全家桶)

网络服务: Xwindow:6000 RDP:3389 VNC:5900 telnet:23 ssh:22 FTP:21 SMTP:25 samba:UDP137,138,TCP,139,445 POP3:110 业务服务: apache:80 &am…

34.Mybatis-plus延续

一、Mybatis-Plus。 (1)ActiveRecord。 简介:ActiveRecord 是一种常见的设计模式之一。ActiveRecord 是一种面向对象的数据库操作模式,它将数据库表映射为类,将表中的行映射为对象。在 ActiveRecord 模式中&#xff…

WiFi 6 vs WiFi 5

在现代无线通信领域,WiFi已经成为人们日常生活中不可或缺的一部分。随着技术的不断发展,WiFi标准也在不断更新和演进。WiFi 6(802.11ax)和WiFi 5(802.11ac)是当前两个主要的WiFi标准。 本文将详细介绍WiFi …

VMware Workstation17下载安装、环境搭建、网络配置最小化安装操作步骤

一、VMware Workstation17下载安装 1、官网下载 官网网址:https://www.vmware.com/cn/products/workstation-pro.html 安装Workstation 17 Pro for Windows版本 2、进行安装 点击下一步,进入最终用户许可协议界面后,点击接受,继…

前端项目搭建以及项目配置

前端项目搭建 - vitevue3.0ant vite比起webpack速度更快 vite搭建项目 https://cn.vitejs.dev/ 步骤: 1.打开cmd 2.找到项目应该建的文件夹 比如直接建到桌面上 cd desktop3.创建项目 使用创建项目命令,然后根据提示填写项目名称,以及要…