SDN(Software-defined Network,软件定义网络),在学习SDN之前,首先要了解控制平面和数据平面,网络层能够被分解为两个相互作用的部分,即数据平面和控制平面,传统上控制平面路由选择协议(如OSPF、BGP)和数据平面转发功能已被实现成一个整体,位于一台路由器中。
数据平面:即网络层中每台路由器的转发的功能,该数据平面功能决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一。
控制平面:作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。
SDN通过将这些控制平面功能作为一种单独服务,明确地分离数据平面和控制平面,控制平面功能通常置于一台远程“控制器”中。
两种重要地网络层功能:
-
转发。当一个分组到达某路由器地一条输出链路时,该路由器必须将该分组移动到适当地输出链路。
将分组从一个输入链路接口转移到适当地输出链路接口地路由器本地动作,转发地时间尺度很短(通常为几纳秒),因此通常用硬件来实现。 -
路由选择。当分组从发送方流向接收方时,网络层必须决定这些分组所采用地路由或路径。计算这些路径地算法被称为路由选择算法,计算出路径之后会生成转发表。
确定分组从源到目的地所采取地端到端路径的网络范围处理过程,路由选择发生的时间尺度长得多(通常为几秒),因此通常用软件来实现。
1. 控制平面:传统方法
路由选择算法决定了插入该路由器转发表的内容,路由选择算法运行在每台路由器中,并且在每台路由器中都包含转发和路由选择两种功能。
这是路由选择厂商在其产品中采用的传统方法,使用该方法,每台路由器都有一个与其他路由器的路由选择组件通信的路由选择组件。
2. 控制平面:SDN方法
该图显示了从路由器物理上分离的另一种方法,远程控制器计算和分发转发表以供每台路由器所使用。控制平面路由选择功能与物理的路由器是分离的,即路由选择设备仅执行转发,而远程控制器计算并分发转发表。远程控制器可能实现在具有高可靠性和冗余的远程数据中心中,并可能由ISP或某些第三方管理。路由器和远程控制器通过交换包含转发表和其他路由选择信息的报文来通信。
在SDN文献中,将网络的转发设备称之为“分组交换机”(或直接称为交换机),因为能够根据网络层源/目的地址、链路层源/目的地址以及传输层、网络层和链路层中分组首部字段做出转发决定。
OpenFlow是一个得到高度认可和成功的标准,它已经成为匹配加动作转发抽象、控制器以及更为一般的SDN革命等概念的先驱。匹配加动作转发表在OpenFlow中称为流表(flow table),它的每个表项包括:
1)首部字段值的集合,入分组将于之匹配。
2)计数器集合(当分组与流表项匹配时更新计数器)。
3)当分组匹配流表项时所采取的动作集合(action)。这些动作可能将分组转发到给定的输出端口,丢弃该分组、复制该分组和将它们发送到多个输岀端口,和/或重写所选的首部字段。
SDN体系结构有4个关键特征:
1)基于流的转发。SDN控制的交换机的分组转发工作,能够基于运输层、网络层或链路层首部中任意数量的首部字段值进行。分组转发规则被精确规定在交换机的流表中,SDN控制平面的工作是计算、管理和安装所有网络交换机中的流表项。
2)数据平面与控制平面分离。从上面两张图对比可以明显看出来。数据平面由网络交换机组曾,交换机是相对简单(但快速)的设备,该设备在它们的流表中执行“匹配加动作”的规则。控制平面由服务器以及决定和管理交换机流表的软件组成。
3)网络控制功能。位于数据平面交换机外部。SDN中的“S”表示“软件”,与传统的路由器不同,这个软件在服务器上运行,该服务器与网络交换机截然分开且与之远离。如下图所示,控制平面由两个组件组成:一个SDN控制器(或网络操作系统),以及若干网络控制应用程序。
控制器维护准确的网络状态信息(如远程链路、交换机和主机的状态),为运行在控制平面中的网络控制应用程序提供这些信息;提供方法,这些应用程序通过这些方法能够监视、编程和控制下面的网络设备。
4)可编程的网络。通过运行在控制平面中的网络控制应用程序,该网络是可编程的。这些应用程序代表了SDN控制平面的“智力”,使用了由SDN控制器提供的API来定义和控制网络设备中的数据平面。例如,一个路由选择网络控制应用程序可以决定源和目的地之间的端到端路径(例如,通过使用由SDN控制器维护的节点状态和链路状态信息,执行Dijkstra算法)。另一个网络应用程序可以执行访问控制,即决定交换机阻挡哪个分组。
SDN控制器和SDN网络控制应用程序
如上所示,SDN控制平面大体划分为两个部分,即SDN控制器和SDN网络控制应用程序。下图显示了一个通用SDN控制器的更为详细的视图。控制器的功能可大体组织为3个层次。
1)通信层:SDN控制器和受控网络设备之间的通信。如果SDN控制器要控制远程SDN使能的交换机、主机或其他设备的运行,需要一个协议来传送控制器与这些设备之间的信息。此外,设备必须能够向控制器传递本地观察到的事件(例如一个报文指示一条附属链路已经激活或停止,一个设备刚刚加入了网络),这些事件向SDN控制器提供该网络状态的最新视图。这个协议构成了控制器体系结构的最底层。
2)网络范围状态管理层。由SDN控制平面所做出的最终控制决定(例如配置所有交换机的流表以取得所希望的端到端转发,实现负载均衡,或实现一种特定的防火墙能力),将要求控制器具有有关网络的主机、链路、交换机和其他SDN控制设备的最新状态信息少交换机的流表包含计数器,其值也可以由网络控制应用程序很好地使用;因此这些值应当为应用程序所用。既然控制平面的终极目标是决定用于各种受控设备的流表,控制器也就可以维护这些表的拷贝。这些信息都构成了由SDN控制器维护的网络范围“状态”的例子。
3)对于网络控制应用程序层的接口。控制器通过它的“北向”接口与网络控制应用程序交互。该API允许网络控制应用程序在状态管理层之间读/写网络状态和流表。当状态改变事件出现时,应用程序能够注册进行通告。
SDN控制器被认为是“逻辑上集中”的,即该控制器可以被外部视为一个单一、整体的服务。但是在时间中这些服务和用于保持状态信息的数据库一般通过分布式服务器集合实现。
数据平面和控制平面交互的例子
说明
- Dijkstra算法作为一个单独的程序来执行,位于分组交换机的外部。
-
分组交换机向SDN控制器发送链路更新并且不互相发送。
此例中,假设交换机s1和s2之间的链路断开;实现了最短路径路由选择,因此除了s3操作未改变外,s1、s2和s4的入和出流转发规则都受到影响。假定OpenFlow被用作通信层协议,控制平面只执行链路状态路由选择而不执行其他功能。
1)交换机s1经历了自己与s2之间的链路故障,使用OpenFlow“端口状态”报文向SDN控制器通报该链路状态的更新。
2)SDN控制器接收指示链路状态更新的OpenFlow报文,并且通告链路状态管理器,由管理器更新链路状态库。
3)实现Dijkstra链路状态路由选择的网络控制应用程序先前进行了注册,当链路状态更新时将得到通告。应用程序接收该链路状态更新的通告。
4)链路状态路由选择应用程序与链路状态管理器相互作用,以得到更新的链路状态;它也会参考状态管理层中的其他组件。然后它计算新的最低开销路径。
5)链路状态路由选择应用则与流表管理器交互,流表管理器决定更新的流表。
6)流表管理器则使用OpenFlow协议更新位于受影响的交换机s1、s2和s4的流表项,其中s1此时将经s4将分组的目的地指向s2,s2此时将经中间交换机s4开始接收来自s1的分组,s4此时必须转发来自s1且目的地为s2的分组。
上面流程显示了SDN控制平面如何提供控制平面服务(此时为网络层路由选择),而该服务以前是以每路由器控制在每台路由器中实现的。SDN使能的ISP能够容易地将最低开销路径的路由选择转变为更加定制的路由选择方法。因为控制器的确能够随心所欲地定制流表,因此能够实现它喜欢的任何形式的转发,即只是通过改变它的应用控制软件。这种改变的便利性与传统的每路由器控制平面的情况形成对照,传统的情况必须要改变所有路由器中的软件,而这些路由器可能是由多个不同厂商提供给ISP的。
SDN革命正在导致颠覆性地替代专用的整体交换机和路由器(它们同时具有数据平面和控制平面)。类似地,称之为网络功能虚拟化(NFV)的通用SDN的目标是用简单的商用服务器、交换机和存储器来颠覆性地替代复杂的中间盒(例如用于媒体高速缓存/服务的具有专用硬件和专有软件的中间盒)。第二个重要研究领域是寻求将SDN概念从AS内部设置扩展到AS之间设置。
来源:计算机网络-自顶向下方法第七版。