1. Open vSwitch简介
Open vSwitch(OVS)作为一款开源的OF软件交换机,基于与平台无关的C代码实现,容易移植到其他环境,既能够作为虚拟机管理平台的软件交换机,也可以作为交换芯片的控制堆栈。
1.1 OVS重要概念
Bridge代表一个以太网交换机(Switch);
交换机包含端口(Ports):Normal、Internal、Patch、Tunnel
一个端口可以有一个或多个接口,允许每个端口连接不止一个的接口
包是通过流转发的
1.2 OVS系统架构
OVS架构分为内核空间、用户空间、配置管理层三部分。
1.2.1 OVS内核空间
内核空间包含了流表和一个或多个datapath模块,datapath模块类似于网桥,主要负责对数据分组进行操作。另外,内核空间中维护的流表规定了针对数据分组应该进行的操作,datapath通过关联流表与其协同完成分组处理过程。
(1)datapath:主要负责实际的数据分组处理,它同时于vswitched和流表保持关联,使OVS上层可以对数据分组处理进行控制。
(2)流表:流表中存储着分组处理的依据----流表项,它指导datapath做出正确的分组处理判断,同时它还与vswitched上下关联,是OVS上层对底层分组处理过程进行管理的接口。
1.2.2 OVS用户空间
用户空间中运行着OVS的守护进程(vswitched)和数据库(ovsdb),它们是OVS的核心功能模块。vswitched类似于OVS的心脏,用来维持OVS的声明周期,而ovsdb就像OVS的大脑,它存储着OVS的配置信息和数据流信息,vswitched和ovsdb协调工作确保OVS健康的运行状态。
(1)vswitched:OVS的守护进程,属于核心模块。负责检索和更新数据库信息,并根据数据库中的配置信息维护和管理OVS。vswitched可以配置一系列特性:基于MAC地址学习的二层交换、支持IEEE 802.1Q VLAN、端口镜像、sFlow监测、连接OF控制器等。vswitched也可以通过Netlink协议与内核模块datapath直接通信。
(2)ovsdb:一个轻量级的OVS数据库,用于管理OVS的配置信息,主要负责保存OVS配置信息和数据流信息等。轻量级数据库服务器ovsdb-server直接管理ovsdb,与ovsdb通信进行数据库的增删改查操作;同时负责向vswitched提供操作ovsdb的能力。vswitched可以通过UNIX Socket机制与ovsdb-server进行通信,用于查询和更新数据库信息,或者在检索数据库信息后做出首个分组的转发策略。
1.2.3 OVS配置管理工具
配置管理层包括ovs-dpctl、ovs-ofctl、ovs-appctl-ovs-vsctl和ovsdb-tool等,主要用于和vswitched、ovsdb之间进行交互操作以及OVS的安装配置和部署。
(1)ovs-dpctl:管理OVS datapath的实用工具,用来匹配交换机内核模块,控制数据分组的转发规则。用户使用该工具可以创建、删除和修改datapath。
(2)ovs-ofctl:OF交换机的命令行管理工具,用于管理OVS作为OF交换机时的各种参数。用户使用该工具可以查询或修改OF交换机的状态、配置和流表项等信息。
(3)ovs-appctl:用于向运行时的OVS守护进程发送命令的工具。
(4)ovs-vsctl:查询和配置OVS数据库的实用工具,用于查询或者变更vswitched的配置信息,该工具会直接更新ovsdb数据库。
2. OVS代码结构
其中,datapath目录是OVS的内核模块,包括VLAN、Tunnel、datapath等C文件以及vport管理,实现普通以太网交换机,具有处理 VLAN、网络访问控制、基于流的控制等功能;ofproto 目录是 OpenFlow 协议相关文件;ovsdb 目录是数据库相关代码;vswitchd目录保存OVS守护进程的源代码;utilities目录包括一些工具代码,如ofctl、vsctl、appctl等;include目录包含常用的头文件;lib目录则保存所有公共模块的实现,如OpenFlow协议解析、JSON数据解析、ovsdb数据解析以及日志模块等。
2.1 守护进程vswitched
OVS守护进程主要负责检索和更新数据库信息,并根据数据库中的配置信息维护和管理OVS,通过守护进程可以配置一系列特性:基于MAC地址学习的二层交换、支持IEEE 802.1Q