1. openflow

OpenFlow 是 SDN(Software Definded Network) 的一种,采用控制转发分离架构,将控制逻辑从网络设备盒子中引出来,可以通过一组定义明确的接口对网络设备进行任意的编程实现新型的网络协议、拓扑架构而无需改动网络设备本身。

1.1 控制与转发分离

控制和转发分离的架构对于L2交换设备而言,意味着MAC地址的学习由
Controller来实现,V-LAN和基本的L3路由配置也由Controller下发给交换机;对于L3设备,各类IGP/EGP路由运行在Controller之上,Controller根据需要下发给相应的路由器。
无论是交换机还是路由器,其核心信息都保存在 Flow Table 里面,这些 Flow Table 被用来实现诸如转发、防火墙、Qos、统计分析等各种功能。OpenFlow的思路很简单,网络设备维护一个FlowTable并且只按照FlowTable进行转发,FlowTable本身的生成、维护、下发完全由外置的Controller来实现。
openflow和open vSwitch简介
图1. openflow控制与转发分离

1.2 openflow交换机

一个 OpenFlow 的交换设备至少由下面三个部分组成:
Flow Table:Flow Table 里面的每个条目都会与一个动作相关联,来告诉网络交换设备来如何处理与这个条目相关联的 data Flow;
Secure Channel:用于连接网络交换设备和远程网络控制器,在控制器和网络交换设备之间互相发送命令和数据包;
OpenFlow Protocol:提供一个开放标准统一的接口,使得控制器和网络交换设备之间可以相互通信。
openflow和open vSwitch简介
图2. openflow交换设备

1.3 FlowTable

这里的FlowTable并非是指IP五元组,事实上OpenFlow 1.0定义了包括端口号、VLAN、L2/L3/L4信息的10个关键字,用户可以决定采用哪些字段,以实现不同粒度的流。
流表的下发可以是主动的,也可以是被动的,主动模式下,Controller将自己收集的流表信息主动下发给网络设备,随后网络设备可以直接根据流表进行转发;被动模式是指网络设备收到一个报文没有匹配的FlowTable记录时,将该报文转发给Controller,由后者进行决策该如何转发,并下发相应的流表。
openflow和open vSwitch简介
图3. openflow协议
我们来看看几个利用 Flow table 的例子。
openflow和open vSwitch简介
图4. flow table定义路由
openflow和open vSwitch简介
图5. flow table定义防火墙

2. Open vSwitch

openflow和open vSwitch简介
图6. 虚拟交换机的架构

openflow和open vSwitch简介
图7. 虚拟交换机中报文的转发流程

2.1 Open vSwitch

Open vSwitch(下面简称为 OVS)就是一个主要通过OpenFlow协议进行控制转发的虚拟交换机。
在 OVS 中, 有几个非常重要的概念:
Bridge: Bridge 代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。
Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge。
Interface: 连接到 Port 的网络接口设备。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。
Controller: OpenFlow 控制器。OVS 可以同时接受一个或者多个 OpenFlow 控制器的管理。
datapath: 在 OVS 中,datapath 负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。
Flow table: 每个 datapath 都和一个“flow table”关联,当 datapath 接收到数据之后, OVS 会在 flow table 中查找可以匹配的 flow,执行对应的操作, 例如转发数据到另外的端口。
openflow和open vSwitch简介
图8. Open vSwitch架构

  1. 内核中的datapath模块首先从物理NIC或VM的虚拟NIC接收数据包。
  2. 用户态ovs-vswitchd要么指示datapath如何处理这种类型的数据包,要么没有。
    2.1 在前一种情况下,datapath模块简单地遵循ovs-vswitchd给出的称为操作的指令,其中列出要传输数据包的物理端口或隧道。操作还可以指定包修改、包取样或删除包的指令。
    2.2 另一种情况下,datapath没有被告知如何处理包,它将它交付给ovs-vswitchd。在用户空间中,ovs-vswitchd决定如何处理包,然后用所需的处理将包传递回datapath。
  3. ovs-vswitchd从SDN控制器接收OpenFlow流表,将从datapath模块接收到的任何数据包与这些OpenFlow表匹配,收集应用的操作,最后将结果缓存到内核datapath中。

相关文章: