定义

一句话:openvswitch 就是软件(虚拟)交换机。

  1. Open vSwitch 是一个高质量的、多层虚拟交换机,
  2. 使用开源 Apache2.0 许可协议,由 Nicira Networks 开发,主要实现代码为可移植的 C 代码。
  3. 目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如 NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。
  4. 此外,它被设计位支持跨越多个物理服务器的分布式环境,类似于 VMware 的 vNetwork 分布式 vswitch 或 Cisco Nexus 1000 V。Open vSwitch 支持多种 linux 虚拟化技术,包括 Xen/XenServer, KVM 和 irtualBox。

功能

  • 具有中继和访问端口的标准 802.1Q VLAN 模型
  • 带或不带 LACP 的 NIC 绑定在上游交换机上
  • NetFlow,sFlow(R)和镜像可提高可见性
  • QoS(服务质量)配置以及策略
  • Geneve,GRE,VXLAN,STT 和 LISP 隧道
  • 802.1ag 连接故障管理
  • OpenFlow 1.0 以及众多扩展
  • 具有 C 和 Python 绑定的事务配置数据库
  • 使用 Linux 内核模块的高性能转发

核心组件

核心组件

  1. ovsdb-sever: OVS 的数据库服务器,用来存储虚拟交换机的配置信息。它于 manager 和 ovs-vswitchd 交换信息使用了 OVSDB(JSON-RPC) 的方式。

  2. ovs-vswitchd: OVS 的核心部件,它和上层 controller 通信遵从 OPENFLOW 协议,它与 ovsdb-server 通信使用 OVSDB 协议,它和内核模块通过 netlink 通信,它支持多个独立的 datapath(网桥),它通过更改 flow table 实现了绑定,和 VLAN 等功能。

  3. ovs kernel module: OVS 的内核模块,处理包交换和隧道,缓存 flow,如果在内核的缓存中找到转发规则则转发,否则发向用户空间去处理。

基本概念

  1. Packet

    网络转发的最小数据单元,每个包都来自某个端口,最终会被发往一个或多个目标端口,转发数据包的过程就是网络的唯一功能。

  2. Bridge

    OpenvSwitch 中的网桥对应物理交换机,其功能是根据一定流规则,把从端口收到的数据包转发到另一个或多个端口。

  3. Port

    端口是收发数据包的单元。OpenvSwitch 中,每个端口都属于一个特定的网桥。端口收到的数据包会经过流规则的处理,发往其他端口;也会把其他端口来的数据包发送出去。主要有

    类型 说明
    Normal 用户可以把操作系统中的网卡绑定到 ovs 上,ovs 会生成一个普通端口处理这块网卡进出的数据包。
    Internal 端口类型为 internal 时,ovs 会创建一块虚拟网卡,端口收到的所有数据包都会交给该网卡,发出的包会通过该端口交给 ovs。当 ovs 创建一个新网桥时,默认会创建一个与网桥同名的 Internal Port.
    Patch 当机器中有多个 ovs 网桥时,可以使用 Patch Port 把两个网桥连起来。Patch Port 总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。
    Tunnel 隧道端口是一种虚拟端口,支持使用 gre 或 vxlan 等隧道技术与位于网络上其他位置的远程端口通讯。
  4. Interface

    接口是 ovs 与外部交换数据包的组件。一个接口就是操作系统的一块网卡,这块网卡可能是 ovs 生成的虚拟网卡,也可能是物理网卡挂载在 ovs 上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在 ovs 上。

  5. FlowTable

    流定义了端口之间数据包的交换规则。下面会对 FlowTable 做了详细的说明。

结构/组件详细探索

流表

安装与卸载

常用命令

参考

  1. OpenStack 网络基础知识:OpenvSwitch 使用指南
  2. 官网
  3. 【Network】OVS 基础知识
  4. OVS 初级教程:使用 Open vSwitch 构建虚拟网络