Open-vSwitch Inside(0)--overview
Open vSwitch简介
Open vSwitch
是一个开源的虚拟交换机,主要用于在虚拟化服务器环境中,灵活转发虚拟机(VM)或容器之间以及与物理网络之间的网络流量,如图Figure 1所示。
Figure.1 Open vSwitch Application
为什么需要OVS?从Figure 1来看,Linux自带的bridge似乎也能完成传统意义上的交换机二层转发功能。那么与bridge相比,OVS好在哪里呢?答案是:可扩展和精确控制。如果说bridge是功能机,那么OVS就是智能机,我们能利用OVS来更自由地控制流量转发。
OVS在其官网上罗列了它具有的特性:
- 支持NetFlow, sFlow等流量监控协议
- 支持LACP、STP、RSTP等L2协议
- 支持802.1Q VLAN协议
- 支持QoS控制功能
- 支持多种隧道协议(GRE、VXLAN、Geneve、IPsec)
- 支持OpenFlow协议(它是OpenFlow交换机,根据流表来转发流量)
- ……
Open vSwitch源码获取
OVS源码下载地址有各个版本的Open vSwitch源代码
Open vSwitch架构
Figure.1 Open vSwitch Architecture
Figure.1展示了OVS的架构。架构中最核心的部分是vswitchd和ovsdb是两个进程,vswitchd是OVS的核心进程,它管理本机上所有的OpenFlow交换机。而这些交换机的配置从ovsdb中实时读取。当用户希望创建一个OpenFlow交换机或者对已有的交换机进行配置时,它需要借助于ovs-vsctl命令行工具,将配置写入ovsdb中,vswitchd会自动同步这些配置。除了ovs-vsctl外,OVS还提供了如下一些常用的用户态命令行工具
- ovs-ofctl:管理OpenFlow交换机的命令行工具
- ovsdb-tool:OVS数据库管理工具
- ovs-dpctl:管理OVS内核模块的工具,实际用得比较少。
随着OVS的演进,更多的命令行工具被开发出来,详见官网列表。
而在内核空间中,内核模块datapath负责真正的报文转发,转发规则通过维护的流表计算。当然这些流表都是vswitchd通过Netlink消息下发的。如果没有查找到匹配的流表,报文会从内核空间送到用户空间,再送到控制器,这是OpenFlow基本的处理过程。
Open vSwitch with DPDK架构
Figure.2 Open vSwitch DPDK Architecture
如Figure.2所示,OVS还支持使用DPDK下的用户态datapath, 与Figure.1的那种架构相比,它只是将报文的实际转发路径从内核上移到用户空间,其余并没有什么不同。因此,在本系列的后续中,将主要分析Figure.1架构下的OVS实现。
REF
- https://www.slideshare.net/ThomasGraf5/2015-fosdem-ovs-stateful-services
- https://www.slideshare.net/rajdeep/openvswitch-deep-dive
- https://tonydeng.github.io/sdn-handbook/ovs/internal.html