Open vSwitch

关注
义项:虚拟交换机软件
Open vSwitch

Open vSwitch(简称 OVS)是一个基于 Apache 2.0 开源协议的多层软件交换机,通常在虚拟化服务器环境中充当虚拟交换机[1]。它既能把同一物理主机上不同虚拟机之间的流量互相转发,也能在虚拟机与物理网络之间转发数据[2]。与普通的 Linux 网桥相比,它开放了可编程扩展接口,支持 OpenFlow 与 OVSDB 等协议,因而被广泛用于云计算数据中心的网络虚拟化和软件定义网络场景[3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Open vSwitch 是一个生产级质量、多层的以太网虚拟交换机软件,采用 Apache 2.0 许可发布,目标平台是虚拟化服务器环境[4]。它的出发点是让大规模网络自动化能够通过编程扩展来实现,同时保留标准的管理接口与协议,例如 NetFlow、IPFIX、sFlow、SPAN、RSPAN、CLI、LACP 和 802.1ag[4]。作为软件实现的交换部件,Open vSwitch 也被称为软件交换机,其端口和交换机的数量可以按需灵活配置[5]。

网络术语中「网桥」与「交换机」是同义的,Open vSwitch 实现的是以太网交换机,因此也可以被看作一个以太网网桥[2]。它本身并不是一个分布式交换机,而是运行在每一台物理主机上,并提供便于远程管理的能力,使虚拟化与云管理平台的开发者能够据此提供分布式交换功能[2]。

原理

Open vSwitch 由内核态与用户态两部分组成,用户态的主要模块是 ovsdb-server 与守护进程 ovs-vswitchd,内核中的模块则是 datapath[6]。datapath 负责数据交换,从网口读取数据后先快速匹配流表项,匹配成功的直接转发,失败的上交 ovs-vswitchd 处理[6]。ovs-vswitchd 是负责管理与控制的守护进程,它通过 Unix Socket 把配置信息保存到 ovsdb,并通过 Netlink 与内核模块交互[6]。

从报文处理路径看,当 datapath 收到来自物理网卡或虚拟网卡的数据包时,会先查找自身的缓存;若有匹配的流表项就直接执行对应动作,否则把数据包送入用户空间,由 ovs-vswitchd 在其 OpenFlow 流表中查询[3]。用户空间查询到匹配的流之后,会把所需的动作返回给 datapath,并在其中写入一条精确匹配的流作为缓存,后续同类型的数据包就能在内核中直接处理,不必再次进入用户空间[3]。这种设计保持了数据面尽可能简单快速,把大部分逻辑留在用户空间。

OpenFlow 是控制器用来控制网络设备的协议,支持它的交换机保存一张或多张流表,数据包到达时按优先级在每张流表中查找匹配的流规则,再依据匹配结果执行相应指令[3]。每条流规则由流描述与行为两部分构成,前者用于匹配,后者是匹配成功后执行的操作[3]。Open vSwitch 的 OpenFlow 流支持通配符、优先级和多张表,而内核中缓存的精确匹配流只支持单张表且不支持通配符与优先级,因而适合做缓存[2]。

发展历程

Open vSwitch 的直接前身可以追溯到 2006 年前后在斯坦福大学围绕 Martin Casado 开展的 Ethane 项目,那是一个基于流的企业网络架构,OpenFlow 协议也由此逐步发展而来[7]。2007 年,Nick McKeown、Scott Shenker 与 Martin Casado 在硅谷共同创办了 Nicira,这是 SDN 领域最早的初创公司之一[8]。2009 年,「Open vSwitch」这一名称首次被使用,同年公开代码仓库与邮件列表相继建立,Nicira 也发布了这一开源虚拟交换机[8]。2009 年,Open vSwitch Database Management Protocol 也被实现出来[7]。

2010 年,Open vSwitch 增加了对 OpenFlow 1.0 的支持,并在同年发布了 1.0 版本[7]。2012 年,Nicira 被 VMware 收购,此后 Open vSwitch 的多数提交由 VMware NSX 开发部门的团队完成[9]。2012 年起 Open vSwitch 的内核模块进入 Linux 内核主干,2016 年该项目成为 Linux 基金会下的项目,当时已有来自 Cisco、Ericsson、华为、IBM、Intel、Red Hat 与 VMware 等企业的 300 多名贡献者[7]。

应用

Open vSwitch 最常见的使用场景是在虚拟机环境中充当虚拟交换机,支持 KVM、VirtualBox、Xen 等多种基于 Linux 的虚拟化技术[1]。它既可以在内核模块支持下运行,也可以完全在用户空间运行,用户空间实现还能访问 Linux 或 DPDK 设备[1]。在容器与虚拟机场景中,它除了对外提供虚拟网络层的标准控制接口和可视化接口,还提供跨多个物理节点的分布式支持[6]。

在云计算栈中,Open vSwitch 被 OpenStack 等项目用作网络后端[7]。OVN 即开放虚拟网络,是对 Neutron 的 SDN 控制器进行增强、复用 Open vSwitch 转发能力实现的分布式 SDN 网络,它让 ovn-northd 接管 OpenStack 等管控界面下发的网络配置[10]。自 2023.1 版本起,OpenStack-Ansible 默认配置的机制驱动从 ML2/OVS 改为 ML2/OVN,以 OVN 配合 Open vSwitch 部署虚拟网络与路由器[11]。在容器编排方面,OpenShift SDN 也使用了 Open vSwitch 与 VXLAN 隧道、OpenFlow 规则等组件[12]。

局限

作为软件交换机,Open vSwitch 的转发依赖通用处理器的分类与查表,转发性能受限于 CPU 能力[13]。使用用户空间数据面且不经 DPDK 加速时,该实现被视为测试性质并存在性能代价[1]。用户空间数据面还不支持隧道虚拟端口,也无法使用与队列相关的动作[2]。

OpenFlow 流表在通用处理器上做多级流水线匹配的开销较大,Open vSwitch 因此采用缓存机制;但缓存也带来新的问题,例如控制器下发更高优先级规则时容易导致缓存抖动,且规则统计需要遍历相关缓存条目,在大规模流表下扩展性受限[14]。基于 OVN 的分布式实现在端口创建与绑定等操作上会随逻辑网络规模扩大而延迟增加,云调度策略对虚拟网络的可扩展性有明显影响[15]。

使用 OVS-DPDK 时也存在若干限制,例如需要巨页支持,经由 tap 设备的服务性能会下降,同一计算节点上不宜混用不同类型网桥,否则会影响性能[16]。此外,ERSPAN 作为未公开的专有协议并不被支持,Open vSwitch 只能以镜像到 GRE 隧道的方式作为替代[2]。

参见

  • OpenFlow —— Open vSwitch 用来接受控制器下发转发策略的核心协议。

  • 软件定义网络 —— Open vSwitch 常被用作这一架构中的数据面组件。

  • OVN —— 在 Open vSwitch 转发能力之上实现的分布式虚拟网络方案。

  • OpenStack —— 广泛采用 Open vSwitch 作为网络后端的云计算软件栈。

  • 虚拟局域网 —— Open vSwitch 支持的 802.1Q VLAN 所对应的网络技术。

  • KVM —— 常与 Open vSwitch 搭配使用的 Linux 虚拟化技术。

参考资料

  1. What Is Open vSwitch?¶ [引用日期2026-10-14]
  2. Frequently Asked Questions [引用日期2026-10-14]
  3. openvswitch原理简介 [引用日期2026-10-14]
  4. 软件包:openvswitch-switch(3.1.0-2+deb12u1) [引用日期2026-10-14]
  5. google.com 上的网页 [引用日期2026-10-14]
  6. kunpengovs_03_0001 [引用日期2026-10-14]
  7. „Open vSwitch“ – Versionsunterschied – Wikipedia [引用日期2026-10-14]
  8. SDN发展历史 [引用日期2026-10-14]
  9. 54322_ext_90_0(PDF) [引用日期2026-10-14]
  10. OVN技术栈优劣浅析 [引用日期2026-10-14]
  11. doc-openstack-ansible-os_neutron(PDF) [引用日期2026-10-14]
  12. 第11章 ネットワークの最適化 [引用日期2026-10-14]
  13. The Design and Implementation of Open vSwitch [引用日期2026-10-14]
  14. google.com 上的网页 [引用日期2026-10-14]
  15. acm.org 上的网页 [引用日期2026-10-14]
  16. r-ovsdpdk-limitations [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T22:00:05Z

历史版本

本条目引用的词条
OpenFlow 软件定义网络 OVN OpenStack 虚拟局域网 KVM