数据通信在过去的几年里经历了爆炸式的增长,这种增长逐渐暴露了传统数据网络的不足。软件定义网络就是在这种背景下,为解决传统交换或基于路由的网络部署的瓶颈问题而发展起来的。

SDN到底是什么?_java

SDN遵循下面三个原则:


1、 把控制平面功能从交换专用集成电路(the switching ASIC,交换ASIC)中分离出来(通过将控制平面功能移入控制器),并使交换ASIC仅用于数据平面功能(这样,可以就使得交换ASIC商品化并对特定ASIC的复杂性进行了简化)


2、 中央集中控制器和网络部署(包括网络设备、服务器及虚拟机)的中心观点是将复杂的网路进行具体细化地抽离(这需要基于复杂的路由/交换协议和虚拟机)


3、 通过开放标准的验证得出的可扩展性能够借助简单的外部应用程序进行网络编程


基于对SDN的不同理解,各生产商研发出几款不同的SDN应用产品。一些生产商专注基于OpenFlow协议的控制器,一些则试图从虚拟机的角度(实现网络交换机进行抽离)对网络进行改进,例如基于VxLAN的方案。但是从本质上来说,SDN均须满足上面三个原则。



SDN到底是什么?_java_02
在图1.1中,左边部分代表了目前的网络部署,以彼此相连的交换机/路由器及外部设施(服务器/虚拟机(VM))为特征。目前的网络部署使用分布式协议来建立控制通路。一旦控制通路建立完成,数据平面就已安装在硬件上,数据包一般通过已设定好的路径转发。在目前的网络部署中,为建立控制和数据转发通道,控制协议分布在整个网络,主要分布在第二和第三层协议中,比如BGP、OSPF、STP。


右边部分代表SDN定义的网络,其中,网络操作系统(OS)只在单一实体中运行(比如控制器),所有基于流的决策都由这种实体决定。决策做出后,控制器将对交换机的数据平面进行编程以建立网络。图1.1中右边虚线表示控制器和网络设备之间的关系,在这些关系中,控制器可以总揽所有的网络。实线表示交换/路由硬件安装完成后数据转发链路。



控制平面和数据平面的分离

SDN的目标是保证所有控制层面上的逻辑决策都由一个中心实体发出。而传统网络控制层面上的决策是从其所在位置发出,因此每个交换机都需要智能化。SDN的这种中心决策方法能够降低节点拓扑内对智能节点数的需求量。

SDN的发展基于ASIC硬件商品化的事实,而且,现在建立不同网络需要的ASIC并没有很大的不同,其真正的区别是软件。任何网络软件的使用都是通过编程,使数据通过特定的路径进行传输。现在,随着硬件的逐渐商品化和软件对硬件依赖性的减弱,已经没有在所有节点处都运行智能软件的必要了。SDN概念的实现是通过在某个集中部件(比如控制器)进行软件的逻辑运行,并通过使用南向协议/应用程序接口(API)对交换机(硬件商品)进行指令编程。



SDN控制器

中央控制器(SDN控制器)是一个软件实体,能够覆盖整个网络全局(包括虚拟机和业务流量)。正如在图1.1中所阐释的,网络操作系统要想实现所有路径选择的逻辑运算,就须以SDN中央控制器为基础,因为控制器了解整个网络的部署,决定最优数据转发路径并对硬件中的条目实现指令操作。现在,大多数的SDN控制器使用户图形界面,这样可以将整个网络以可视化的效果展示给管理员。

控制器可以被视为通过运行应用程序进而控制网络的平台。这些应用程序无需考虑控制器所管理的复杂物理网络结构。对流量分析和事件触发进行网络应用编程,就是此种应用的典例。

网络中可以有多个控制器,这样就使得控制平面的可用性增强。当网络中有多个控制器时,就可以进行常规的同步化操作。



网络编程的可扩展性

对物理网络拓扑和部署进行分离是SDN的主要优势之一。然而,SDN最吸引人的地方却不在于此。管理员可以编写运行在OpenFlow控制器最高层上的应用程序,而且控制器可以与布置数据流的OpenFlow交换机进行对话,进而将实际的交换层从应用层分离出来。编写这些应用程序的API由控制器提供。

举例来说,管理员可以编写应用程序,使其所在公司的CEO无论何时召开网络会议都能被赋予最高的优先级。管理员可以编写一个含有简单触发条件的的基本应用程序,并保存在控制器中,控制器与管理员编写的API进行对话,将程序译为控制平面流语言,当程序被触发时,就可以支持该应用程序的运行。控制器可以控制网络硬件设备为CEO的组播服务器提供最大的缓冲区,而其他的数据流缓冲区将减少。


SDN的逻辑层

SDN到底是什么?_java_03

图1.2解释了SDN的三层逻辑层。最低层是硬件交换层,中间层是控制器层,最高层是应用层,在最高层中用户可以自定义应用程序进而触发网络中的流定义。



南向API

南向API或协议是工作在两个最底层(交换ASIC或虚拟机)和中间层(控制器)之间一组API和协议。它主要用于通讯,允许控制器在硬件上安装控制平面决策从而控制数据平面。OpenFlow 协议有足够多的标准来控制网络,因而是最具发展前景的南向协议。

还有其他一些南向通讯实现方式正在研究中,比如VxLAN。VxLAN规范记录了终端服务器或虚拟机的详细框架,并把终端站地图定义为网络。VxLAN的关键假设是交换网络(交换机、路由器)不需要指令程序,而是从SDN控制器中提取。VxLAN对SDN的定义是通过控制虚拟机以及用SDN控制器定义基于这些虚拟机通信的域和流量而实现的,并不是对以太网交换机进行编程(这种假定可以使用现有协议为以太光纤网路提供路径)。

最后,在网络端到端视图方面(包括交换/路由设备和虚拟机/端节点),南向API需要改进,改进后,管理员可以借助单一的SDN控制器对网络设备(交换ASIC)和虚拟机进行指令控制。


北向API

在SDN的逻辑中层和高层存在一个API级别的通信,其特征是,用户可以定义应用程序,该应用程序可以通过北向API与控制器实现通信,然后控制器将其编译后发送至最底层(比如硬件交换层)。到目前为止,还没有太多关于北向API的使用,但是随着SDN的发展,越来越多的北向API将自然渐进的发展起来。就现在来说,Quantum API是一个与许多OpenFlow/SDN控制器集成在一起的开放的北向API。

可行性的技术


总结下来,下面这些是支持SDN所有可行性的技术:

1、 商品化(可编程)的交换机和服务器/虚拟机

2、 南向API/协议(OpenFlow协议)

3、 SDN控制器

4、北向API