近两年来SDN的概念被越来越广泛地宣传与接受,咨询与研究机构也频频调高其对SDN领域市场规模的预期。全球分析机构Dell'Oro集团的预测数据显示:SDN的市场价值在2016年之前将达到15.9亿英镑,5年内将实现17倍的增长;IDC也预测,到2016年,SDN产业产值将达到37亿美元以上。从研究机构到高校,从企业到网络厂商,越来越多的人和组织都参与到SDN的宣传推广与使用中来。如成立于2011年3月份的开放网络基金会(ONF)就致力于推动SDN的发展,同时负责制定与维护OpenFlow协议。又比如IETF最近新提交了I2RS的草案,其面向的目标直指OpenFlow协议。其他的如NETCONFTCL/Python/等可能是用户很熟悉的通信协议或接口,也已经开始在SDN中有所应用。面对蓬勃发展的SDN技术,最终用户是否会感到无所适从呢?本文将为您将揭开SDN技术的神秘面纱,带您了解目前主流的SDN技术。
目前业界通用的SDN架构主要包括以下特征:控制与数据平面解耦合,网络智能与控制逻辑集中,抽象的底层网络基础设施。因此不少SDN实践者是从将控制与数据平面解耦合入手,将原来固化于网络设备当中的控制层抽取到设备之外,并进行逻辑上的集中处理;同时,在SDN的发展过程中,还发展出一种折衷的方案,在网络设备中抽取控制层时仍保留部分控制能力,以求做到类似混合(Hybrid)的方式,以期可以带来更大的灵活性:按用户需要对控制进行集中管理,或者仍按原有控制方式运行。
上面介绍了目前主流的SDN实现方案的形态,其主要思路还是将控制层提到设备外面来以便进行统一的控制与管理,这里涉及到一个概念就是Controller与Agent,提取出来的控制层被定义为Controller(控制器),而被抽离了控制层的网络设备的数据层被定义为Agent(代理),刚刚提到的解耦合的控制层如何与原有的数据层通信的问题也就转化为Controller如何与Agent通信,具体到实现技术涉及到OpenFlow/I2RS等协议,下面分别进行简单的介绍。
OpenFlow协议最早的思想是出现在Stanford里的实验项目Clean Slate中,后来被Stanford的Nick McKeown教授发现并进行了更通用化的设计,在2008年同其他人共同发表了题为《OpenFlow: Enabling Innovation in Campus Networks》的论文,首次提出了OpenFlow的概念,将传统的网络设备的数据转发平面与控制平面进行了分离,通过将控制平面集中为Controller(控制器)并以标准化的接口对网络设备进行管理与配置,因此OpenFlow会将传统网络设备分离为数据转发平面的交换机(也可以是路由器)与控制器(Controller),他们之间通过OpenFlow协议进行通信。在OpenFlow交换机中存在一个流表,用于接收控制器发来的流转发策略。
(上图摘自ONF的OpenFlow白皮书)
与目前网络设备所采用的二层(MAC)与三层(IP)转发不同,OpenFlow从软件(控制器)层面支持了比传统硬件更多的控制转发的能力,包括网络报文中从1层到4层的关键信息,如MAC地址、IP地址、端口、VLAN、IP协议号等。
(上图摘自ONF的OpenFlow白皮书)
通过支持OpenFlow协议可以将传统网络设备的控制平面与数据转发平面进行解耦合,同时将控制器集中,这样用户就可以通过集中的控制器来对整个网络的数据转发行为进行全局的控制,而不是按网络设备自己的协议来进行处理,同时由于每一台网络设备都需要同控制器通信,控制器可以很容易就得到全局的拓扑信息,进而在控制器向上再提供开放API接口,供最终用户在此基础上开发针对自己网络业务的应用,为网络资源的管理与使用提供更多的选择,从而让用户拥有更多对自己网络的编程与定制化能力。
目前OpenFlow的标准化工作是由ONF组织进行维护与发展,最新的OpenFlow协议版本为1.3.1。很多厂商已经推出支持OpenFlow的交换机与Controller,不少大型企业用户也开始尝试使用OpenFlow/SDN来解决他们的网络问题,但目前仍存在一些问题制约着OpenFlow的发展,比如传统设备硬件及芯片对OpenFlow流表的支持程度及流表数量的问题,都是需要针对OpenFlow的芯片及硬件设计来解决的,这些问题都在限制着OpenFlow的大规模应用。
除了在针对OpenFlow的芯片上的努力外,业界还有人提出在现有的路由系统基础上设计新的通信协议,这也就是我们下面要介绍的I2RS(Interface to the Routing System),这一协议是由IETF制定的标准,目前还处于草案阶段。I2RS的核心思想是在目前传统网络设备的路由及转发系统基础上开放新的接口来与外部控制层通信,外部控制层通过设备反馈的事件、拓扑变化、流量统计等信息来动态地下发路由状态、策略等到各个设备上去。从上面的介绍中可以看出I2RS与OpenFlow最大的区别是I2RS并没有像OpenFlow提出流那样较新的概念,而是延用了传统网络设备中正在使用的路由、转发等结构与功能,并在此基础上进行功能的扩展与丰富。
就目前SDN应用来看,除了新部署的网络,还有大量的现存网络,这些现存网络如何应用SDN也是众企业、用户所关心的。不少网络设备厂商适时地推出了可以帮助用户平滑演进SDN的开放API方案即是为解决此问题而出现的。
相对于Controller & Agent结构,开放API方案直接在设备层面上提供新的开放的API接口,包括NETCONF/RESTful等基于XML结构化标记语言的接口,也有基于TCL/Python/Javascript等基于脚本语言的接口,更有的直接开放更为底层的Java/C++/C语言接口,让用户可以深入到设备操作系统底层对硬件进行更深入地管理与操作,从而取得设备更大的控制权限。这种开放API的方案省略掉了Controller控制层,等于在用户的应用程序中直接嵌入了控制层的接口,从而实现了结构的简化,减少了用户在Controller层的技术负担;同时由于对现有设备的改动小(只需要更新软件以支持新的开放API接口即可),更利于保护用户的投资。当然,这种方案的缺点也是有的,主要在于目前开放API没有形成业界统一的标准,可能会出现不同厂商设备提供的开放API接口不兼容的问题,这可能还需要漫长的时间才会有公司或组织出面进行相关的标准化工作。
随着SDN在用户中应用的展开,当前各种协议、接口、方案必将会碰到更多的问题,可能哪种方案或协议都无法完全符合每一个用户的具体需求,我们有理由猜测,最后SDN的支撑技术可能会包含多种不同的协议与方案,他们既相互竞争,又互为补充,互相启发,并呈现出一个螺旋上升的发展趋势,这实际上也是我们所接触到的大多数技术的演进方式。