2015年10月软件定义网络控制器及北向接口技术目录1控制器核心技术2控制器设计要素3控制器实现分析2控制器总体架构状态报告OF交换机设备管理API本地NIB转发管理配置管理拓扑管理链接发现控制逻辑控制器集群管控全局NIB集群管理OpenFlow设备管理API本地NIB转发管理配置管理拓扑管理链接发现控制逻辑OpenFlow数据操作状态报告OF交换机数据操作状态报告OF交换机数据操作状态报告OF交换机数据操作业务应用API集群管理API控制器API集群管理API业务应用API控制器API2控制器层次化架构SDN控制器(n+1)层SDN控制器(n)层SDN控制器(n-1)层客户端(控制器)服务器(代理)客户端(控制器)服务器(代理)客户端(控制器)服务器(代理)I-CPII-CPII-CPID-CPI至数据平面(n-2)层A-CPI至应用平面(n)层D-CPI至数据平面(n-1)层A-CPI至应用平面(n+1)层D-CPI至数据平面(n)层A-CPI至应用平面(n+2)层相邻控制器层次间以CS模式交互扩展性好,模块化程度高:高层控制器具有更广阔的资源视角,支持更好的网络资源抽象能力提供系统安全性高:每个控制器层都可以有各自的信任域,可针对不同层次之间的引用点进行专门的安全强化3目录1控制器核心技术南向网络控制技术北向业务支撑技术东西向控制器扩展技术2控制器设计要素3控制器实现分析控制器的网络控制技术主要包括通过南向接口协议进行链路发现、拓扑管理、策略制定、表项下发等–链路发现和拓扑管理:控制器利用南向接口的上行通道对底层交换设备上报信息进行统一监控和统计–策略制定和表项下发:控制器利用南向接口的下行通道对网络设备实施统一控制南向网络控制5链路发现获得SDN全网信息的关键,是实现网络地址学习、VLAN、路由转发等网络功能的必要基础–与传统网络链路发现由各个网元自主进行不同,SDN网络中的链路发现工作由控制器统一完成OF交换机直连链路的发现–LLDP协议OF交换机非直连链路的发现–广播前导码目的MAC地址源MAC地址以太网类型机箱IDTLV端口IDTLV生存期TLV可选TLVLLDPDU结束TLV帧校验序列01:80:c2:00:00:0e,或01:80:c2:00:00:03,或01:80:c2:00:00:00站点地址0x88CCType=1Type=2Type=30或多个完整的TLVType=0长度=0LLDP报文结构OF交换机直连链路发现6拓扑管理随时监控和采集网络中SDN交换机的信息,及时反馈网络的设备工作状态和链路连接状态–控制器通过定时地发送包含有LLDP数据包的Packet_out消息给与其相连接的SDN交换机并根据反馈回来的Packet_in消息获知交换机信息,监测交换机工作状态,完成网络拓扑视图更新–当SDN网络规模较大时,该机制会导致较慢的收敛过程,影响网络情况的实时反馈;同时,该机制也使得包含LLDP数据包的Packet_out消息的发送周期设置更为复杂随时记录各种逻辑组网信息,满足云计算环境下多租户共享网络资源的需求7策略制定交换机流表生成算法是影响控制器智能化水平的关键因素–流表是SDN交换机进行数据包处理的最根本依据,直接影响数据转发的效率和整个网络的性能–流表由集中化的控制器基于全网拓扑视图生成,并统一下发给数据流传输路径上所有SDN交换机控制器需要针对不同网络层次的传输需求,制定相应的转发策略并生成对应的流表项传统网络SDN在各台设备的本地进行相关算法的执行,通常只能根据设备自身所掌握的有限的局部网络链接情况进行数据处理决策具有集中化管控的优势,控制器能够拥有全局的网络资源视图,因此更容易获得优化的算法执行结果,但是处理压力较重8表项下发控制器通过流表下发机制控制SDN交换机的数据包转发–主动(proactive)的流表下发是指在数据包到达OpenFlow交换机之前就进行流表设置,因此当第一个数据包到达交换机后,交换机就已经知道该如何处理数据包了,这种方式有效地消除了数据传输过程中的流表项设置延迟。同时,不存在控制器每秒钟能够处理的流数量的限制。理想情况下,控制器需要尽可能地预扩散(pre-populate)流表项–被动(reactive)的流表下发是指当OpenFlow交换机接收到一个数据包并且没有发现与之匹配的流表项时,只能将其送给控制器处理。一旦控制器确定了相应的处理方式,那么相关的信息就会返回并缓存在交换机上,同时控制器将确定这些缓存信息的保存时限9目录1控制器核心技术南向网络控制技术北向业务支撑技术东西向控制器扩展技术2控制器设计要素3控制器实现分析11北向业务支撑控制器的业务支撑主要是通过北向接口为上层业务应用以及资源管理系统提供灵活的网络资源抽象–网络业务开发者通过北向接口,以软件编程的方式调用局域网、广域网等各种各样的网络资源能力–网络资源管理系统通过北向接口获知网络资源的工作状态并对其进行调度,满足业务资源需求北向接口定义是当前SDN领域关注和争论的焦点之一–北向接口直接为业务应用服务的,其设计需要密切联系业务应用需求,所以具有更多样化的特征较难统一–北向接口设计的合理性和网络能力开放的充分性,将直接影响到SDN控制器技术和产品的市场前景12RESTAPI设计原则RESTAPI是当前网络用户容易接受的方式,成为北向接口主流–可寻址性强:对应用而言,只要是用户可能感兴趣的数据或者算法的片段,都应该具有独立的地址被标识以方便用户访问,而URI是HTTP协议中标识资源的方法,这就意味着每个片段都应该拥有自己的URI。另外,URI的描述还应当具有良好的可读性–接口无状态:对于每个请求而言,它们彼此之间应该是隔离的。服务器不会根据之前的访问行为来约束后续的动作,除非某些行为已经影响到了服务器资源。在实践中,这就意味着应用在处理请求时不应该使用基于会话的变量。–注重关联性:应用应该能够根据用户发来的请求,自动地在反馈的信息中尽可能地包含与请求相关的全部资源链接,以允许用户在无需理解所有URI对应的资源的前提下从应用反馈的信息中选取可用资源。–接口要统一:Web服务应当拥有统一的资源编址及表述方案。其中,统一编址需要在对资源相关的URI进行准确描述的基础上,使用标准的HTTP请求方法(例如GET、POST、PUT、DELETE等);而统一表述则需要利用标准化的编码机制(例如XML),同时,访问错误处理也应当使用标准化的HTTP响应编码。13OpenDaylight北向接口设计OpenDaylight具备比较完善的功能设计并且拥有较大的业界影响力,有可能成为SDN领域日后的事实标准OpenDaylight的北向接口设计与实现涵盖了网络服务功能、网络编排功能、服务管理功能等各个方面–基于OSGi(OpenServiceGatewayInitiative)框架的接口,主要用于与控制器处于同一地址空间内的Java应用开发(例如应用可作为控制器提供服务的一部分)–双向的RESTAPI接口,主要用于开发远程的基于Web的应用,并为之提供完备的接口描述、URI、参数、响应设置、状态编码等信息目录1控制器核心技术南向网络控制技术北向业务支撑技术东西向控制器扩展技术2控制器设计要素3控制器实现分析15东西向控制器扩展通过控制器的东西向扩展,形成分布式集群,避免单一控制器可能存在的可靠性、扩展性、性能等方面的问题–SDN支持控制能力的集中化,使得控制器具有更大的责任–一旦控制器在性能或者安全性上不能得到有效保障,将导致整个SDN网络的服务能力降级甚至全网瘫痪–在组网架构方面,系统中单一的控制器无法应对跨越多个地域的SDN网络问题16基于控制器集群的SDN架构控制器的软件化使得服务器可以作为控制器的载体,控制器集群可以以服务器集群为基础进行搭建交换机交换机交换机交换机交换机交换机交换机交换机控制器控制器控制器控制器集群层OpenFlow协议集群通信层控制器软件控制器软件控制器软件控制器软件17控制器集群核心技术为确保控制器集群对SDN网络的控制效果,必须重点关注主控制器选举、控制器集群对交换机透明化等问题–主控制器选举:在网络运行过程中,集群中的副控制器需要周期性地监控主控制器的工作状态,一旦发现其访问不可达,就要启动主控制器选举过程–集群虚拟地址:为了实现控制器之间的负载均衡,控制器集群可以借鉴传统的负载均衡技术,利用集群虚拟地址实现控制器集群对交换机的透明化–全网拓扑获取:为了获得全网资源情况,各控制器周期性地进行链路发现,并将采集回来的信息发给主控制器汇总,再由主控制器统一下发给控制器–控制器失效应对:如果控制器失效,集群利用负载均衡技术,将此前指派给失效服务器的虚拟IP地址映射到其它工作正常的控制器上,同时触发对全网拓扑信息的更新和获取目录1控制器核心技术2控制器设计要素3控制器实现分析19控制器设计目标SDN控制器通用性扩展性可靠性简洁性高性能20控制器设计要素目录1控制器核心技术2控制器设计要素3控制器实现分析22名称编程语言特征简介BeaconJava由Stanford大学开发,采用跨平台的模块化设计支持基于事件和线程化的操作FloodlightJava由BigSwitchNetworks开发,遵循Apache许可证,是企业级的OpenFlow控制器,脱胎于BeaconFlowERErlang由TravelpingGmbH个人开发,是基于Erlang语言实现的用于网络控制的软件平台JaxonJava由Tsukuba大学开发,依赖于NOX,提供了可将Java应用程序和NOX控制器相整合的接口MulC由Kulcloud开发,内核采用基于C语言实现的多线程架构,为应用提供了多各层次的北向接口NodeFlowJavascript由Cisco开发,基于Node.js的OpenFlow控制器,利用了GoogleV8引擎NOXC++/Python由Nicira开发,业界第一款OpenFlow控制器,是众多SDN研发项目的基础POXPython由Nicira开发,是NOX的纯Python实现版本,支持控制器原型功能的快速开发RyuPython由NTT开发,能够与OpenStack平台整合,具有丰富的控制器API,支持网络管控应用的创建TremaRuby/CNEC开发,具有模块化的框架主要开源控制器目录1控制器核心技术2控制器设计要素3控制器实现分析案例分析方法总结24NOX/POX业界第一款OF控制器,Nicira主导开发,采用组件化架构–Discovery组件:用于网络拓扑推算的LLDP发现应用,通过向所有的交换机接口发送LLDP数据包,从而通过接收到的LLDP数据包监测交换机链接情况–Topology组件:用于在控制器内存中记录当前网络中所有处于活动状态的链接信息,并根据连接情况变化及时更新–Routing组件:用于负责数据通路的计算,它将尽可能地保证数据通路的路径最短,并与Topology组件关联以维护路由信息–Monitoring组件:用于周期性地向所有与控制器相连的交换机发送查询信息,以获知交换机工作状态是否正常–Authenticator组件:用于在控制器内存中记录网络中所有经过认证的主机和用户信息,并利用一个三元组作为网络位置对相关信息进行索引。这个三元组由链路层地址、网络层地址和访问点(例如数据通路、端口对等)组成25RyuNTT主导开发,支持逻辑上集中控制的SDN操作系统OpenStackQuantumHAwithZookeeperStatsVRRPOF-wireFirewallL2switchSnortEndpointNetconfOFRESTTopologyViewerCLITopologyOF-confOVSDBJSONsFlowNetFlowcomponentlibrarylegend26FloodlightBigSwitch主导开发,企业级的OF控制器REST应用Floodlight控制器OpenFlow服