Switch-Router

Open-vSwitch Inside(0)--overview

Published at 2018-10-22 | Last Update 2018-10-22

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