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

news2025/1/4 19:19:27

文章目录

  • 前言
  • 一、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.coloradmin.cn/o/581377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:为什么Python在SEO中不见了?

为什么Python在SEO中不见了? Python是众所周知的一种流行的编程语言,它被广泛地用于各种应用程序,从人工智能和机器学习到数据科学和Web应用程序。然而,在最近的一次更新中,有些人注意到Python似乎在搜索引擎优化&…

【LAMP平台建构】

一.LAMP介绍 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP(…

使用JS来实现tab栏切换

这是我今天从学习的知识点,今天试着做了一个tab栏切换,学到很多的知识点,讲师也比学校的老师讲的更加详细明白 个人名片: 😊作者简介:一名大一在校生,web前端开发专业 🤡 个人主页…

c#快速入门

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析2 目录 👉🏻 c#和c不同之处👉🏻程序文件的…

三门问题的实验验证:贝叶斯概率公式实战

引言 数理统计与概率论经常出现在我们的日常生活中,如果能灵活掌握,可以起到很大的帮助。下面通过几个经典问题的探讨,浅入深出,更加深刻的理解贝叶斯全概率公式和贝叶斯公式的作用。 我的最深的体会就是,当某些已发生…

基于Go开发PaaS平台3

Go开发PaaS平台核心功能 代码仓库地址GitHub - yunixiangfeng/gopaas 10-18 中间件前端页面以及核心API开发(中) C:\Users\Administrator\Desktop\gopaas\middlewareapi\handler\middlewareApiHandler.go package handlerimport ("context"…

【技术解决方案】企业如何从SpringBoot应用平滑迁移到云原生K8s平台

文章目录 在K8S上部署Spring Cloud Alibaba在Kubernetes上部署Spring Cloud Kubernetes在Kubernetes上部署Spring Boot应用方案对比分析拥抱Service Mesh关于DevopsServerless最佳实践 好久不见了,小伙伴们,你们最近还好吗?有没有想我&#x…

常量池介绍

什么是“字面量”和“符号引用”和"直接引用" 最近看jvm时遇到了“字面量”和“符号引用”这两个概念,它们被存放在运行时常量池,看了一些博客以后对这两个概念有了初步认识。 字面量可以理解为实际值,int a 8中的8和String a …

linux互斥锁(pthread_mutex)知识点总结

对于多线程程序来说,我们往往需要对这些多线程进行同步。同步(synchronization)是指在一定的时间内只允许某一个线程访问某个资源。而在此时间内,不允许其它的线程访问该资源。我们可以通过互斥锁(mutex)&a…

1、Vue.js---Vue核心

目录 Vue是什么 什么是渐进式: Vue 的特点 与其它 JS 框架的关联 Vue 周边库 搭建Vue开发环境(2种方式) 1、直接用 2、NPM Hello小案例 小结: 模板语法 代码 小结: 数据绑定 代码: 小结&…

11、渗透性测试及验收测试

目录 什么是安全测试 安全测试与常规测试的区别 SQL注入漏洞 SQL注入漏洞会带来以下几种常见的后果: SQL注入漏洞攻击流程 注入点类型 SQL注入的防范措施 XSS跨站脚本漏洞 XSS原理解析 XSS类型 1、反射型XSS 2、存储型XSS 3、存储型XSS 查找XSS漏洞的…

1.4. 运算符与表达式

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

C语言基础习题讲解

C语言基础习题讲解 运算符判断简单循环 运算符 1. 设计一个程序, 输入三位数a, 分别输出个,十,百位. (0<a<1000) 样例输入: 251 样例输出: 2 5 1 #include <stdio.h> int main() {int input 0;int x 0;int y 0;int z 0;scanf("%d", &input);x …

chatgpt赋能python:Python三次方函数介绍

Python三次方函数介绍 Python是一种流行的编程语言&#xff0c;用于各种应用程序&#xff0c;包括数据分析和机器学习。Python三次方函数是Python语言中的一个内置函数&#xff0c;可用于计算一个数字的三次方。本文将介绍Python三次方函数的相关内容并提供一些示例。 Python…

chatgpt赋能python:Python三个数相加的方法与应用

Python三个数相加的方法与应用 在现代编程语言中&#xff0c;Python是一个非常流行的语言。Python语言的的特点是易学易用、功能强大、语法简洁等。在Python中&#xff0c;运算也是非常方便的&#xff0c;特别是对于数值计算。本文将讨论如何在Python中实现三个数的加法运算&a…

LeetCode高频算法刷题记录11

文章目录 1. 最大正方形【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 在排序数组中查找元素的第一个和最后一个位置【中等】2.1 题目描述2.2 解题思路2.3 代码实现 3. 搜索二维矩阵 II【中等】3.1 题目描述3.2 解题思路3.3 代码实现 4. 翻转二叉树【简单】4.1 题目描述4.2…

POWERLINK协议在stm32单片机+w5500移植成功经验分享

连续折腾了多个晚上&#xff0c;又趁周末又花了一天时间&#xff0c;终于把powerlink协议移植成功到单片机上啦。本想放弃&#xff0c;但想了下不管我能不能用上&#xff0c;结个尾吧&#xff0c;分享给有需要的人。放弃并不难&#xff0c;但坚持一定很酷。为了移植测试这个协议…

Arcgis小技巧【13】——和数据统计相关的各种工具

在Arcgis中可以通过属性表中字段的【统计】功能或使用统计相关的工具对属性表进行数据统计。 在Arcgis工具箱中有一组【统计分析】工具集&#xff0c;不仅包含对属性数据执行标准统计分析&#xff08;例如平均值、最小值、最大值和标准差&#xff09;的工具&#xff0c;也包含…

表的增删改查

目录 表的增删改查create(创建)单行数据 全列插入多行数据 指定列插入插入否则更新替换 retrieve(读取)SELECT 列全列查询指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件英语不及格的同学及英语成绩 ( < 60 )&#xff08;<&#xff09;语文成绩在 […

个人博客-SpringBoot+Vue3项目实战(6)- 二次封装Axios

目录 前言新建axiosUtil.js 文件基本配置统一URL.env文件与环境变量示例参考资料 请求头超时时间 request 拦截器response 拦截器统一Api管理测试 前言 在上文中&#xff0c;我们封装了统一的后端数据返回结果&#xff0c;有了标准化的接口数据&#xff0c;我们就可以针对它&a…