理解 Open vSwitch (OVS)

Open vSwitch(简称 OVS)是一个开源的 虚拟交换机,主要用于 虚拟化环境(如 KVM、Xen、Docker)和 软件定义网络(SDN)。它类似于物理交换机,但在软件层面实现,可以灵活地管理虚拟网络流量。


1. Open vSwitch 的核心概念

(1) 虚拟交换机(vSwitch)

  • 物理交换机用于连接物理设备(如服务器、电脑),而 OVS 是软件实现的交换机,用于连接虚拟机(VM)、容器和物理网络。

  • 它支持 VLAN、VXLAN、STP、流量控制 等高级网络功能。

(2) 主要组件

组件说明
ovs-vswitchdOVS 的核心守护进程,负责数据包转发和流表管理。
ovsdb-server存储 OVS 的配置(如端口、网桥、流表规则)。
ovs-ofctl用于管理 OpenFlow 流表的命令行工具。
ovs-vsctl用于配置 OVS 网桥、端口的命令行工具。

(3) 关键术语

术语说明
Bridge (网桥)类似于物理交换机,用于连接多个端口(Port)。
Port (端口)可以是物理网卡(如 eth0)、虚拟接口(如 veth)或隧道(如 VXLAN)。
Flow Table (流表)决定数据包如何转发(类似路由表,但更灵活)。
OpenFlowSDN 协议,允许控制器(如 OpenDaylight)动态管理 OVS。

2. OVS 的典型应用场景

(1) 虚拟化网络(KVM、Xen、Docker)

  • OVS 可以连接多个虚拟机(VM),并让它们像在同一个物理网络中一样通信。

  • 示例:

    # 创建一个 OVS 网桥,并添加物理网卡 eth0
    ovs-vsctl add-br br0
    ovs-vsctl add-port br0 eth0

    这样,所有连接到 br0 的 VM 都可以通过 eth0 访问外部网络。

(2) 云计算(OpenStack、Kubernetes)

  • OpenStack Neutron 使用 OVS 作为默认的虚拟网络后端。

  • Kubernetes 的 CNI 插件(如 OVN-Kubernetes)也依赖 OVS。

(3) SDN(软件定义网络)

  • OVS 支持 OpenFlow,可以被 SDN 控制器(如 OpenDaylight、ONOS)集中管理。

  • 示例:

    # 设置 OVS 由 OpenFlow 控制器管理
    ovs-vsctl set-controller br0 tcp:192.168.1.100:6653

3. 如何管理 Open vSwitch?

(1) 查看 OVS 状态

ovs-vsctl show  # 查看所有网桥和端口

输出示例:

Bridge "br0"Port "eth0"Interface "eth0"Port "br0"Interface "br0"type: internal

(2) 创建网桥并添加端口

ovs-vsctl add-br br0          # 创建网桥 br0
ovs-vsctl add-port br0 eth0   # 把 eth0 加入 br0
ovs-vsctl add-port br0 vnet1  # 把虚拟机接口 vnet1 加入 br0

(3) 查看流表(类似交换机 MAC 表)

ovs-ofctl dump-flows br0

输出示例:

NXST_FLOW reply (xid=0x4):cookie=0x0, duration=10.123s, table=0, n_packets=5, n_bytes=490, priority=100,ip,in_port=1 actions=output:2
  • 这条规则表示:从 in_port=1 进入的 IP 数据包,会被转发到 output=2


4. OVS vs Linux Bridge(传统网桥)

特性Open vSwitchLinux Bridge
SDN 支持✅ 支持 OpenFlow❌ 不支持
VXLAN/GRE 隧道✅ 支持❌ 需额外配置
云计算集成✅ OpenStack/K8s 默认❌ 较少使用
性能⚡ 优化更好(DPDK 支持)⚡ 传统方式
配置复杂度⚠️ 较复杂(适合高级网络)✅ 简单易用

5. 总结

  • Open vSwitch 是一个强大的虚拟交换机,适用于虚拟化、云计算和 SDN。

  • 核心功能

    • 管理虚拟网络(VM、容器)。

    • 支持 OpenFlow,可被 SDN 控制器管理。

    • 提供 VLAN、VXLAN、流量控制等高级功能。

  • 常用命令

    • ovs-vsctl show(查看配置)

    • ovs-ofctl dump-flows br0(查看流表)

    • ovs-vsctl add-br/add-port(管理网桥)

如果你在 OpenStack、Kubernetes 或 SDN 环境 中看到 OVS,现在你应该明白它的作用了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79754.shtml

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

相关文章

S7-1500——零基础入门1、工业编程基本概念

工业编程基本概念 一,数制与基本数据类型二,数字量信号三,模拟量信号一,数制与基本数据类型 本节主要内容 类别内容主题数制与基本数据类型数制讲解十进制、十六进制、二进制及其进位规则;基数、位权概念数据类型介绍PLC 使用的数据类型:未序列数据类型(bit、byte、wor…

kotlin-协程(什么是一个协程)

1.什么指一个协程对于线程来说一个thread就是就是指一个线程,thread为什么成为线程呢?因为他实现了对线程的一个抽象管理,可以管理这个线程,启动,可以查看各种信息 那么协程呢? public fun CoroutineScop…

七、深入 Hive DDL:管理表、分区与洞察元数据

作者:IvanCodes 日期:2025年5月13日 专栏:Hive教程 内容导航 一、表的 DDL 操作 (非创建)二、分区的 DDL 操作三、洞察元数据:SHOW 命令的威力结语:DDL 与 SHOW,Hive 管理的双翼练习题一、选择题二、代码题…

【 Redis | 实战篇 短信登录 】

前言: 主要完成了基于Session实现登录,解决集群的Session共享问题,从而实现了基于Redis来实现共享Session登录 1.基于Session实现登录 1.1.发送短信验证码 步骤: 前端提交手机号 》校验手机号 》不符合返回错误信息&#xff0…

蓝桥杯14届国赛 合并数列

问题描述 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 {a1,a2,...,an} 和 {b1,b2,...,bm}。两个数组的和相同。 定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是…

Doris和Clickhouse对比

目录 一、Doris和Clickhouse对比1. 底层架构**DorisClickHouse** 2. 运行原理DorisClickHouse 3. 使用场景DorisClickHouse 4. 优缺点对比总结 二、MPP架构和Shared-Nothing 架构对比1. 什么是 MPP 架构?定义特点典型代表 2. 什么是 Shared-Nothing 架构&#xff1f…

niushop单商户V5多门店版V5.5.0全插件+商品称重、商家手机端+搭建环境教程

一.系统介绍 【全开源】niushop单商户V5多门店版V5.5.0版本,我看很多人都想要 商品称重、商家手机端等插件这套是全插件版本,整合起来本博主也花了不少啦~ Niushop系统是应用thinkphp6开发的完善的电商系统,拥有完善的商品机制,…

内存、磁盘、CPU区别,Hadoop/Spark与哪个联系密切

1. 内存、磁盘、CPU的区别和作用 1.1 内存(Memory) 作用: 内存是计算机的短期存储器,用于存储正在运行的程序和数据。它的访问速度非常快,比磁盘快几个数量级。在分布式计算中,内存用于缓存中间结果、存储…

Jenkins linux安装

jenkins启动 service jenkins start 重启 service jenkins restart 停止 service jenkins stop jenkins安装 命令切换到自己的下载目录 直接用命令下载 wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm 下载直接安装 rpm -ivh jenkins-2.190.3-…

RabbitMQ ②-工作模式

RabbitMQ 工作模式 官方提供了七种工作模式 Simple(简单模式) P:生产者,发布消息到队列C:消费者,从队列中获取消息并消费Queue:消息队列,存储消息。 一个生产者,一个…

(2)python开发经验

文章目录 1 pyside6加载ui文件2 使用pyinstaller打包 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 👈 1 pyside6加载ui文件 方法1: 直接加载ui文件 from PySide6.QtWidgets import QAp…

【C++】互斥锁(Mutex)

在C中,互斥锁(Mutex)是用于线程同步的重要工具,用于保护共享资源,防止多线程同时访问导致的数据竞争(Data Race)问题。 以下是C中互斥锁的核心用法和示例: 一、基本互斥锁 std::mut…

Jsoup与HtmlUnit:两大Java爬虫工具对比解析

Jsoup:HTML解析利器 定位:专注HTML解析的轻量级库(也就是快,但动态页面无法抓取) 核心能力: DOM树解析与CSS选择器查询 HTML净化与格式化 支持元素遍历与属性提取 应用场景:静态页面数据抽…

小白成长之路-vim编辑

文章目录 Vim一、命令模式二、插入模式3.a:进入插入模式,在当前光标的后一个字符插入![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fd293c3832ed49e2974abfbb63eeb5bb.png)4.o: 在当前光标的下一行插入5.i:在当前光标所在字符插入,返回命令模…

[redis进阶六]详解redis作为缓存分布式锁

目录 一 什么是缓存 缓存总结板书: 二 使⽤Redis作为缓存 三 缓存的更新策略 1) 定期⽣成 2) 实时⽣成 四 面试重点:缓存预热,缓存穿透,缓存雪崩 和缓存击穿 1)缓存预热 2)缓存穿透 3)缓存雪崩 4)缓存击穿 五 分布式锁 板书: 1)什么是分布式锁 2)分布式锁的基…

【MySQL】数据表插入数据

个人主页:Guiat 归属专栏:MySQL 文章目录 1. 插入数据概述1.1 插入数据的重要性1.2 插入数据的基本原则 2. 基本插入语句2.1 INSERT INTO语法2.2 插入多行数据2.3 不指定列名的插入2.4 插入NULL和默认值 3. 高级插入技术3.1 使用子查询插入数据3.2 IGNOR…

软考-软件设计师中级备考 14、刷题 算法

一、考点归纳 1)排序 2、查找 3、复杂度 4、经典问题 0 - 1 背包动态规划0 - 1 背包问题具有最优子结构性质和重叠子问题性质。通过动态规划可以利用一个二维数组来记录子问题的解,避免重复计算,从而高效地求解出背包能装下的最大价值。分…

【阿里云】阿里云 Ubuntu 服务器无法更新 systemd(Operation not permitted)的解决方法

零、前言 目前正在使用的Ubuntu服务器中,仅阿里云(不止一台)出现了这个问题,因此我判定是阿里云服务器独有的问题。如果你的服务器提供商不是阿里云,那么这篇文章可能对你没有帮助。 如果已经因为升级错误导致依赖冲突…

css 点击后改变样式

背景: 期望实现效果:鼠标点击之后,保持选中样式。 实现思路:在css样式中,:active 是一种伪类,用于表示用户当前正在与被选定的元素进行交互。当用户点击或按住鼠标时,元素将被激活,此…

采用AI神经网络降噪算法的语言降噪消回音处理芯片NR2049-P

随着AI时代来临.通话设备的环境噪音抑制也进入AI降噪算法时代. AI神经网络降噪技术是一款革命性的语音处理技术,他突破了传统单麦克风和双麦克风降噪的局限性,利用采集的各种日常环境中的噪音样本进行训练学习.让降噪算法具有自适应噪声抑制功能,可以根…