OVS 目前有两种比较突出的架构,一种是原生的 OVS 架构(使用 kernel 作为 datapath),一种是基于 DPDK 的架构(使用用户空间作为 datapath)。
原生 OVS
原生 OVS 架构如下所示,主要包含两个组件:
-
openvswitch.ko :在内核态负责快速路径的数据转发。转发靠流表来完成,每一个流表都包含很多的匹配项(match fields)和相应的动作(actions)
-
match fields : 定义了能够标识一个数据包的头部字段
-
actions : 定义了能够对这个数据包操作的动作,比如添加或去除 VLAN 标签、修改数据包的某个头部字段,以及控制数据包从端口的进出等等。
-
-
ovs-vswitchd :在用户态负责慢速路径的数据转发。
-
ofproto: 实现 OpenFlow 交换机
-
netdev: 和网络设备(包括物理的和虚拟的)交互的抽象接口层
-
dpif: 用户空间数据转发路径的实现
-
OVS-DPDK
基