SDN软件定义网络 学习笔记(2)--南向协议

1. 简介

       南向接口协议完成控制平面与数据平面间的交互及部分管理配置功能。

       SDN南向协议尝试为网络数据平面提供统一的、开放的和具有更多编程能力的接口,使得控制器可以基于这些接口对数据平面设备进行编程控制,指导网络流量的转发等行为。

       在众多协议中,OpenFlow是目前主流的南向协议接口之一,本文将着重介绍OpenFlow协议。
 

2. 常见协议与特点

 
下表列出了常用的SDN南向协议,以及他们的特点。

协议特点
OpenFlow 通过下发流表项对数据平面设备的网络数据处理逻辑进行编程,从而实现可编程定义的网络。但是此协议并没有规定如何去管理和配置 OpenFlow 交换机。
OF-Config只对网络设备的资源进行配置,无法指导数据交换。可以作为OpenFlow的伴侣协议使用,规定如何去管理和配置这些 OpenFlow交换机。
OVSDB与OF-Config类似,区别就是OVSDB仅用于Open vSwich交换机的配置与管理,而OF-Config可以用于所有支持OpenFlow的软硬件交换机。
OpFlex应用于ACI架构,ACI架构数据平面依然保留了很多控制逻辑,OpFlex下发策略,并不规定实现策略的具体方式,具体方式由底层设备实现。OpFlex只具有比较弱的编程能力。
PCEPPCEP 原本是用于 PCE(路径计算单元) 与 PCC(路径计算客户端)/PCE 之间通信的协议,由于其特性,后常被用于SDN领域中。
XMPP可被应用于网络聊天等场景,被应用于SDN只是因为其功能适合携带南向数据。 OpenFlow 相比,XMPP 所提供的流粒度较粗,无法实现OpenFlow 协议那么细粒度的灵活控制。
I2RS最大程度地保留传统路由技术的优势,同时引入SDN 可编程的新思想。
POF不仅可以实现软件定义的网络数据处理,而且还可以实现软件定义的网络协议解析。具有数据平面可编程能力,还支持协议无关的转发。
P4不仅是南向协议,还是一种编程语言。P4也是一个对数据解析逻辑和数据处理逻辑编程的语言或者框架。P4和POF同时支持数据平面和控制平面的软件定义。

 

3. OpenFlow协议

3.1 简介

       OpenFlow是基于网络中流的概念设计的一种 SDN 南向接口协议。

       控制器可以根据某次通信中流的第一个数据分组的特征,使用 OpenFlow 协议提供的接口对OpenFlow 交换机部署策略——OpenFlow 称之为流表,而这次通信的后续流量则按照相应流表在硬件层次上进行匹配、转发。
 

3.2 流的概念

       IP 网络是一种基于数据分组转发的分组交换网络,一次网络通信会产生大量的数据分组,虽然前后数据分组之间它们有千丝万缕的联系,但是传统网络设备对它们的处理却是独立的(每个分组都需要独立的进行查表、匹配然后动作),这大大降低了处理的效率。

       因此,如果能通过提取出这次通信产生的数据分组的共同特征(如 MAC 地址、IP 地址等),把它们抽象成一个流,使网络设备统一看待这些数据分组,将能很好地解决上面提到的问题。
 

3.3 OpenFlow v1.0 流表

       OpenFlow 流表是一些针对特定流的策略表项的集合,负责数据分组的查询和转发,主要包含数据分组匹配特征和数据分组处理方法。
       以OpenFlow v1.0为例,流表项的基本结构如下图所示:

       流表项各部分功能如下:

  • 分组头域:数据分组匹配流表项时参照的依据
  • 计数器:用来统计相关流的一些信息,例如查找次数、收发分组数、生存时间等。
  • 动作表:指定了 OF 交换机处理相应流的行为。流表项根据指定动作字段来指导 OF 交换机如何处理流,交换机会按照这些动作的先后顺序依次执行。

       流表的匹配流程如下图所示:

       OpenFlow v1.0 中每台 OF 交换机只有一张流表,这张流表中存储着许多的表项,每一个表项都表征了一个流及其对应的处理方法——动作表,一个数据分组进入 OF 交换机后需要先与流表中的分组头域进行匹配,若符合其中某条表项的特征,则按照相应的动作进行转发, 否则封装为 Packet-in 消息通过安全通道交给控制器,再由控制器决定如何处理。另外,每条流表项都存在一个有效期,过期之后流表会自动删除。
 

3.4 OpenFlow 通信过程

       如下左图所示是OpenFlow v1.0的架构原理图,右图是OpenFlow通信流程。

       当交换机和控制器建立完Socket通信后,相互发送Hello报文,用于协商协议版本。完成协商后,控制器会向交换机下发Features Request报文,交换机则需回复Feature Reply报文。控制器根据交换机支持的特性,完成对交换机的配置。配置完成后,进入正常通信状态。如果OpenFlow版本支持多级流表,控制器还需要下发Table-Miss流表项到交换机。

       当数据包匹配流表项失败或者匹配到Table-Miss时,交换机将其Packet-in到控制器,控制器根据控制逻辑可选择回复Packet-out或者下发Flow-mod指导交换机处理数据流。如果配置了Flow-Removed标志位,则当流表项过期时,交换机将向控制器回复Flow-Removed报文。
 

3.4 OpenFlow 协议的演进

  • 多级流表的协议架构
           OpenFlow后续版本设计了“流水线+组表”的结构,多张串联起来的流表就形成了流水线,数据分组在多张流表间跳转以完成匹配。架构如下左图所示,流水线对数据分组的处理流程如下右图所示。
  • 流表项结构
           如下图所示,是与多级流表匹配的流表项结构。从 OpenFlow v1.3.0 开始,用户可以按需自定义匹配域字段。
  • 组表项结构
           由于流水线匹配是按照流的特征决定处理的方法,所以流表项都有相应的指令集。但是对于一些特殊情况,不同流有可能能够复用同样的一些指令以提高效率,因此提出组表概念。
           OF 交换机中只存在一个组表,它独立于流水线之外,包含多个组表项,每个组表项可以包含很多的动作桶。
  • 其他变化
           OpenFlow后续版本中还对Flow-mod 机制、匹配域、虚拟端口、流表等等众多方面进行了改进。
     

参考资料:
《软件定义网络核心原理与应用实践》
《重构网络:SDN架构与实现》

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页