第33周:Open vSwitch 与 SDN
目标:理解 OVS 架构和 OpenFlow 协议,能够使用 OVS 构建虚拟网络并通过 SDN 控制器管理流表。
1. OVS 概述
1.1 OVS 是什么
1 | OVS(Open vSwitch):生产级多层虚拟交换机 |
1.2 OVS 架构
1 | ┌──────────────────────────────────────────────────┐ |
1.3 数据路径分类
1 | ┌──────────────────────────────────────────────────┐ |
2. 安装 OVS
2.1 Ubuntu/Debian
1 | # 安装 |
2.2 源码编译(可选,获取最新版本)
1 | git clone https://github.com/openvswitch/ovs.git |
2.3 模块加载
1 | # 加载内核模块 |
3. OVS 基础操作
3.1 创建网桥和端口
1 | # === 创建一个简单的 bridge === |
3.2 端口类型
1 | # === OVS 支持的端口类型 === |
3.3 常用命令
1 | # === 配置查看 === |
4. OpenFlow 流表
4.1 OpenFlow 基础
1 | OpenFlow:SDN 控制器与交换机通信的标准协议 |
4.2 ovs-ofctl 操作
1 | # === 查看流表 === |
4.3 流表匹配字段速查
1 | 入端口: in_port=N |
4.4 完整示例
1 | # 创建网桥 |
5. 控制器模式
5.1 主动模式 vs 被动模式
1 | 主动模式(out-of-band): |
5.2 配置控制器
1 | # === 设置 OpenFlow 控制器 === |
5.3 简单 Python 控制器(POF / Ryu)
1 | # simple_controller.py — 简单的 OpenFlow 控制器 |
1 | # 安装 Ryu |
6. VLAN 隔离实验
6.1 Trunk 端口
1 | # === 简单 VLAN 隔离 === |
6.2 更细粒度流表控制
1 | # === 严格隔离:禁止 VLAN 10 访问 VLAN 20 === |
7. 完整多租户网络
7.1 拓扑设计
1 | 场景:3 个租户(tenant-a, tenant-b, tenant-c), |
7.2 配置脚本
1 |
|
8. OVS 性能调优
8.1 内核 datapath 调优
1 | # === 调整 netdev 最大长度 === |
8.2 巨型帧
1 | # 设置所有 OVS 端口 MTU |
8.3 监控
1 | # 实时流量统计 |
9. OVS 调试技巧
9.1 启用日志
1 | # 设置 vlog 级别 |
9.2 抓包
1 | # 在 OVS 上抓包(sFlow / 镜像) |
9.3 性能分析
1 | # 实时流量统计 |
10. 主流 SDN 控制器
| 控制器 | 语言 | 特点 | 适合场景 |
|---|---|---|---|
| OpenDaylight | Java | 大型,复杂 | 企业级 |
| ONOS | Java | 电信级 | 运营商 |
| Ryu | Python | 简单,API 友好 | 教学、快速开发 |
| Floodlight | Java | 中等 | 中小规模 |
| Faucet | Python | 简单 | 数据中心 |
| Tungsten Fabric | Java | 完整 SDN 平台 | 云服务 |
| Tungsten Fabric | Java | 完整 SDN 平台 | 云服务 |
1 | # 安装 Ryu(推荐入门) |
11. 实践:用 OVS 搭建虚拟网络
1 |
|
12. 主流 OVS 增强项目
1 | DPDK-OVS: |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/06/02/第33周:Open vSwitch 与 SDN/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!