一、Open vSwitch 介绍
Open vSwitch(其中 v 表示 virtual)简称 OVS,是一个开源的多层虚拟交换机,也是当前市场上云环境中部署份额最大的交换机。Open vSwitch 支持标准管理接口、应用程序扩展和控制转发功能,非常适合在 VM 环境中用作虚拟交换机,目前 Open vSwitch 支持多种基于 Linux 的虚拟化技术。
Open vSwitch 具有以下特点和功能:
- 支持 802.1Q VLAN 标准的 trunk 和 access 端口
- 支持物理网卡绑定和 LACP(链路汇聚控制协议,802.3ad)
- 支持 NetFlow、sFlow(R) 和端口镜像增强通信过程的可视性
- 支持 QoS(服务质量)配置、监控和管理
- 支持多种隧道技术,如 Geneve、GRE、VXLAN、STT、ERSPAN、GTP-U、SRv6、Bareudp 和 LISP
- 支持 802.1ag 标准的连接故障管理
- 支持 OpenFlow 1.0 协议和后续的诸多扩展
- 具有支持事务的轻量级数据库和基于 C / Python 的远程配置协议
- 使用 Linux 内核模块的高性能转发(这里指 Datapath)
总而言之 Open vSwitch 提供了一种灵活、可扩展的虚拟交换机解决方案,适用于数据中心、云计算和网络虚拟化等应用场景,提供了高级网络功能和网络集中管理的能力。
Open vSwitch 在网络中扮演的角色如下图所示(虚拟交换机)。
可以简单理解:Open vSwitch 是 Linux Bridge 的加强版,加强的点主要体现在:
- Open vSwitch 的设计基于 SDN 的思想,支持多种标准管理接口和协议,如 OpenFlow 协议
- Linux Bridge 只支持Vxlan,而 Open vSwitch 支持 Vxlan、GRE、IPSec 等许多种隧道技术
- Open vSwitch 适用于多种虚拟化架构,如 Xen、KVM、VMware 等
二、Open vSwitch 总体架构
此处的上下两张图都是 Open vSwitch 的总体架构图,但是它们的模块内容都不够全面(毕竟是多年前的老图),可以对照着参考,就全面了。
Open vSwitch 的总体架构如上图所示,其中核心组件包括以下部分:
- ovs-vswitchd:实现交换机核心功能(如寻址、转发和端口绑定等)的守护进程
- Datapath:支持数据流转发的 Linux 内核模块(唯一工作在内核态的模块)
- ovsdb-server:轻量级数据库服务器(存储配置、日志和状态等信息)
- ovs-dpctl:用于配置交换机内核模块(Datapath)的工具
- ovs-vsctl:用于查询和更新 ovs-vswitchd 配置的工具
- ovs-appctl:用于向正在运行中的 ovs-vswitchd 发送命令的工具
此外还包括一些实用的附加模块:
- NetFlow / sFlow:网络监测模块
- ovsdb-tool:数据库 ovsdb 的工具库模块
- ovs-ofctl:用于查询和控制 OpenFlow 交换机和控制器的工具(仅 OpenFlow 协议可用)
- ovs-controller:一个简单的 OpenFlow 控制器(现在还有 ovs-testcontroller 功能类似)
- ovs-pki:用于创建和管理 OpenFlow 交换机的公钥基础设施的模块
- 还有一个 tcpdump 的补丁,使其能够解析 OpenFlow 协议的消息
由于 Open vSwitch 是参照软件定义网络 SDN 的思想设计的,所以 SDN 的三层架构(应用层、控制层、转发层)在 OVS 的架构中也有很好的体现:
- 应用层:OVS 提供的各种工具,如:ovs-dpctl,ovs-vsctl,ovs-appctl 等工具模块
- 控制层:主要由 ovs-ofctl 模块负责(因为它支持 OpenFlow 协议)
- 转发层:以 ovs-vswitchd 模块 + Datapath 模块为主,并使用 ovsdb 模块存储信息
三、Open vSwitch 源代码结构
为了避免歧义和混淆,我专门 Fork 了一份 Open vSwitch 的源码用于本系列的笔记,版本为 Open vSwitch v3.3.0(最近更新于 2024 年 5 月),此后内容均以此版本为准。
Open vSwitch v3.3.0 源代码阅读https://github.com/terryMTR5831/ovs
Open vSwitch 源代码的主目录 ovs-main 文件夹结构如下图:
图中红色方框标识出的文件夹为 OVS 功能实现的主要文件夹:
- vswitchd 文件夹:具有交换机核心功能的 ovs-vswitchd 守护进程的代码实现
- utilities 文件夹:包含 ovs-dpctl、ovs-vsctl、ovs-appctl、ovs-ofctl、ovs-pki 和 ovs-tcpdum 等各种管理和控制工具的代码实现,此外还包括 docker 相关的支持
- ovsdb 文件夹:包含 ovsdb-server、ovsdb-client 和 ovsdb-tool 等数据库相关模块的代码实现
- include 文件夹:包含一些协议和内核模块,如 OpenFlow 协议等
- ofproto 文件夹:包含监控、镜像和反馈等交换机功能的代码实现
- lib 文件夹:包含一些作者自己写的数据结构、底层逻辑、进程实现和日志等内容
- tests 文件夹:包含 Open vSwitch 测试相关的内容
结语:
由于本人水平有限,以上内容如有不足之处欢迎大家指正(评论区/私信均可)。