1.SDN控制平面
2.SDN控制器体系架构
3.SDN控制器的关键技术
3.1 南向业务控制
3.1.1 链路发现
3.1.2 拓扑管理
3.1.3 策略制定
3.1.4 表项下发
3.2 北向业务支撑
4. 开源SDN控制器
SDN控制平面一般由一个或多个SDN控制器组成,是网络的大脑。控制器具有举足轻重的地位,它是连接底层交换设备与上层应用的桥梁。一方面,控制器通过南向接口协议对底层网络交换设备进行集中管理、状态监测、转发决策以处理和调度数据平面的流量;另一方面,控制器通过北向接口向上层应用开放多个层次的可编程能力,允许网络用户根据特定的应用场景灵活地制定各种网络策略。
南向接口层主要对各种南向接口协议的支持,控制器通过接口层的通道实现对底层网络的管理
抽象逻辑层主要是将服务抽象出来,实现各种通信协议的适配,为各模块和应用提供一致的服务。
基础网络层在任何控制器中都是必不可少的。这里的模块包括了控制器内部的实现逻辑,比如拓扑管理、链路计算等,也包括一些底层的网络实现逻辑,比如BGP、VxLAN的实现等。
内置应用层提供了基础的功能包,如L2网络、L3网络、Overlay APP、服务链APP等。
北向接口层中,控制器实现了Restful API的接口或者是嵌入式的API,提供给上层应用调用。
配置管理层提供了控制器服务器管理、集群管理和图形化界面,如ODL控制器提供了模块的启用、删除等功能;Floodlight等控制器提供了一个简单易用的UI界面,可以在Web界面中调用控制器的北向API,对控制器进行配置。
SDN控制器的关键技术主要是包括南向网络控制和北向业务支撑。
南向网络控制主要包括链路发现、拓扑管理、策略制定和表项下发等。
链路发现和拓扑管理:利用上行通道度底层交换设备上报信息进行统一监控和统计;策略指定和表项下发:利用下行通道对网络设备实施统一控制。
链路发现是获得SDN全网信息,是实现网络地址学习、VLAN、路由转发。与传统网络链路发现由各个网元自主进行不同,SDN网路中的链路发现工作由控制器统一完成。对于OF交换机直连链路的发现,SDN控制器通过链路层发现协议LLDP实现。OF交换机非直连链路的发现即两台OF交换机,通过其他多台非OF交换机连接,控制器在发送packet_out消息给OF交换机的时候,会同时要求交换机发出广播包,通过广播的机制实现链路发现。
拓扑管理是为了随时采集和监控网络中SDN交换机的信息,反馈工作状态和链路连接状态。控制器需要定时发送带LLDP数据包的packet_out消息给相连的SDN交换机,并根据反馈回来的packet_in消息获知交换机信息,以完成交换机工作状态的监测和网络拓扑视图的更新。但是当网络规模较大时,这种拓扑管理管理机制收敛速度很慢,会影响网络状态的实时反馈。
策略制定是南向网络中的核心技术之一。交换机流表生成算法是影响控制器智能化水平的关键因素,控制器要针对不同层次的传输需求,制定相应的转发策略并生成对应的流表项。
SDN中策略制定与传统网络相比有很大的优势,在传统网络中,在每台设备中进行相关算法的执行,通常只能根据设备自身所掌握的有限的局部网络链接情况进行数据处理决策;SDN具有集中化管控的优势,控制器能够拥有全局的网络视图,因此更容易获得优化的算法执行结果,处理压力较重。
策略计算的结果需要通过表项下发来实现。控制器下发表项有两种交互方式:主动下发和被动下发。主动下发是控制器在交换机还没收到数据包前,先给交换机下发流表,告诉交换机如何处理第一个数据包,好处是可以避免交换机启动时数据流对交换机的冲击,并且可以消除数据传输过程中流表项设置延迟的问题。被动下发是等到有数据流来,才发送给控制器,等待下发流表,这种在复杂网络中会产生流表项设置延迟的问题。
控制器的北向业务支撑主要是通过北向接口向上层业务应用提供灵活的网络资源抽象。与南向接口已有OF为代表的标准协议不同,SDN在北向接口标准方面存在争议,主要是因为北向接口直接为业务应用服务,其设计密切联系业务应用需求,具有多样化的特征,很难统一。
同时,北向接口设计的合理性和网络功能的开放性会直接影响到SDN控制器技术和产品的市场前景,这也是SDN标准难以统一的重要原因。
每种控制器都会对外提供北向接口,用于上层应用开发和资源编排。从技术实现上来看,目前REST API是用户比较容易接收的方式
名称 |
编程语言 |
简介 |
Mul |
C |
由Kucloud公司开发,内核是一个基于C语言的多线程基础架构,用于托管应用的多层级北向接口 |
Trema |
Ruby/C |
由NEC开发,具有模块化的框架 |
NOX |
C++ |
由Nicria开发,业界第一款OpenFlow控制器,是众多SDN研发项目的基础 |
POX |
Python |
由Nicria开发,是NOX的纯Python实现版本,支持控制器原型功能的快速开发 |
Ryu |
Python |
由NTT开发,能够与OpenStack平台整合,具有丰富的控制器API,支持网络管控应用的创建 |
Beacon |
Java |
由Standard大学开发,采用跨平台的模块化设计,支持基于事件和线程化的操作 |
Floodlight |
Java |
由Big Switch Networks开发,是企业级的OpenFlow控制器,基于Beacon |
OpenDayLight |
Java |
OLD主要设备厂商驱动,如Cisco、IBM、HP、NEC等 |
ONOS |
Java |
由开放网络实验室ONLAB推出 |