Open vSwitch 源码阅读笔记(1)OVS 的总体架构

一、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 源代码阅读icon-default.png?t=N7T8https://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 测试相关的内容

结语:

        由于本人水平有限,以上内容如有不足之处欢迎大家指正(评论区/私信均可)。

参考资料:

Open vSwitch 官网

Open vSwitch 源代码 GitHub

2015 FOSDEM - OVS Stateful Services

OVS Deep Dive

Open vSwitch v3.3.0 源代码阅读

OVS 总体架构、源码结构及数据流程全面解析-腾讯云开发者社区

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值