OVS(Open vSwitch)是一种开源的、多层次的虚拟交换机,允许管理和控制计算机网络的数据流。OVS 主要用于虚拟化环境,如虚拟机和容器,以及用于构建和管理软件定义网络(SDN)和网络功能虚拟化(NFV)。
在2012年3月18日发布的内核版本 3.3 中,实现将Open vSwitch合并到Linux内核主线;官方 Linux 软件包适用于Debian、Fedora、openSUSE、Ubuntu、FreeBSD 和 NetBSD 等。
OVS整体架构
OVS模块说明
类型 | 名称 | 作用 |
内核空间 | openvswitch.ko | OVS的核心内核模块,它实现了虚拟交换机的核心功能,包括交换机的数据面和控制面。 |
用户空间 | ovs-vswitchd | 实现vswitch的守候进程daemon |
用户空间 | ovsdb-server | 轻量级数据库服务器,用于ovs的配置信息 |
工具集 | ovs-dpctl | 用来配置vswitch内核模块的一个工具 |
工具集 | ovs-ofctl | 查询和控制OpenFlow虚拟交换机的流表 |
工具集 | ovs-appctl | 发送命令消息到ovs进程 |
工具集 | ovs-vsctl | 通过和ovsdb-server通信,查询和更新vswitch的配置 |
工具集 | ovsdb-client | 用于与 OVSDB 服务器交互 |
OVS 特性
- 虚拟机之间通过 NetFlow、sFlow、IP 流信息导出(IPFIX)、交换端口分析器(SPAN)、远程交换端口分析器(RSPAN) 以及使用通用路由封装(GRE)建立隧道的端口镜像进行公开通信
- 通过链路聚合控制协议(LACP、IEEE 802.1AX -2008)进行链路聚合
- 用于网络分区的标准802.1Q 虚拟 LAN (VLAN) 模型,支持中继
- 支持使用互联网组管理协议(IGMP)版本 1、2 和 3 的多播侦听
- 支持最短路径桥接媒体访问控制(SPBM) 以及对链路层发现协议(LLDP)的相关基本支持
- 支持双向转发检测(BFD) 和 802.1ag 链路监控
- 支持生成树协议(STP、IEEE 802.1D -1998)和快速生成树协议(RSTP、IEEE 802.1D-2004)
- 针对不同应用程序、用户或数据流的细粒度服务质量(QoS) 控制
- 支持分层公平服务曲线(HFSC)排队规则(qdisc)
- 虚拟机接口级别的流量监管
- 网络接口控制器(NIC)绑定,通过源MAC地址进行负载平衡、主动备份和第 4 层 哈希
- 支持OpenFlow协议,包括各种虚拟化相关扩展
- 完整的IPv6支持
- 支持多种隧道协议,包括 GRE、虚拟可扩展 LAN (VXLAN)、无状态传输隧道 (STT) 和Geneve,并额外支持互联网协议安全(IPsec)分层
- 远程配置协议,具有C和Python编程语言的现有绑定
- 在内核空间或用户空间中实现数据包转发引擎,通过在不离开内核空间的情况下处理大多数转发的数据包以及使用多线程内核空间和用户空间组件来提供额外的灵活性和性能改进
- 带有流缓存引擎的多表转发管道
- 转发层抽象,使Open vSwitch更容易移植到新的软硬件平台
OVS内核模块
内核名称 | 作用 |
openvswitch | 实现了虚拟交换机的核心功能 |
brcompat | 向后兼容旧版的Linux网桥(bridge)模块,以确保OVS与旧版网络配置和工具兼容 |
openvswitch_mod | openvswitch_mod通常被openvswitch模块取代 |
vport | 用于创建和管理虚拟端口(vport) |
gre | 用于支持GRE(Generic Routing Encapsulation)隧道的模块 |
vxlan | 用于支持VXLAN(Virtual Extensible LAN)隧道的模块 |
geneve | 用于支持Geneve隧道协议的模块 |
nf_conntrack | Linux内核的连接跟踪模块,它用于在OVS上跟踪连接状态,以支持网络地址转换(NAT)和防火墙等功能。 |
tun | 用于支持TUN设备,它允许将网络流量从用户空间传递到内核空间和反之,以实现虚拟网络设备的通信。 |