目录
一、SDN控制器
1.1 SDN控制器体系架构
1.1.1基本功能层
1.1.2网络基础服务层
1.2 SDN控制器评估要素
(7)可靠性
(8)网络安全型
二、开源控制器
2.1 NOX/POX
2.2 Ryu
2.3 Floodlight
2.4 OpenDaylight
2.5 OpenContrail
2.6 其他开源控制器
3.商用控制器
3.1 Big Network Controller
3.2 XNG
3.3 Contrail
3.4 SOX
重点:
SDN控制平面主要由一个或者多个控制器组成,是作为数据控制分离的SDN的操作系统的存在。一方面,控制器通过南向接口协议对底层网络交换设备进行集中管理、状态监测、转发决策以处理和调度数据平面的流量;另一方面,控制器通过北向接口向上层应用开放多个层次的可编程能力,允许网络用户根据特定的应用场景灵活的制定各种网络策略。
接下来主要内容:SDN的体系架构、评估一个控制器需要考虑的因素、各厂商会退出怎样的控制器产品。
传统网络的操作系统与已将设备在物理上是紧密耦合的,而SDN中数据平面和控制平面是完全分离的。控制器作为SDN的核心部分,与计算机的操作系统的功能类似,需要为开发人员提供一个灵活的开发平台、为用户提供一个便于操作使用的用户接口。因此,可以参考计算机的操作系统的体系架构对SDN控制器体系架构进行理解和设计。
功能模块组合的系统设计思想不可取,会导致操作系统的可扩展性很差,同时管理者也很难对这种架构的系统进行维护。
为了解决模块组合架构存在的问题,人们提出了“层次化”的操作系统体系架构,即根据模块所实现的功能不同,对它们进行分类:最为基础的模块放在最底层;一些较为核心的模块作为第二层;其余模块根据分类情况依次向上叠加。
以上两种设计思路对SDN控制器的设计具有借鉴意义。
控制器的设计目标是通过对底层网络进行完整的抽象,以允许开发者根据业务需求设计出各式各样的网络应用。下图是市面上大多数开源控制器的设计体系架构:
(1)一个通用的控制器可以方便的添加接口协议,这对于动态灵活的部署SDN非常重要,因此在这一层首先要完成就是协议适配功能。需要适配的协议主要包含两类:一类意识用来跟底层交换设备进行信息交互的南向接口协议,第二类适用于控制平面分布式部署的东西向接口协议。协议适配层主要有以下三方面作用:一是网络的维护人员可以根据网络的实际情况,使用较合适的协议来优化整个SDN;二是考虑到与传统网络的兼容性问题,可以借鉴使用现有网络协议作为南向、东西向接口协议,这样可以以最小的代价来升级和改造传统网络;三是通过协议适配功能,控制器能够完成对底层多种协议的适配,并向上层提供统一的API,达到对上层屏蔽底层多种协议的目的。
(2)协议适配工作完成后,控制器需要提供用于支撑上层应用开发的功能。这些功能主要包括四部分:
1)模块管理:重点完成对控制器中各模块的管理。允许在不停止控制器运行的情况下加载新的应用模块,实现上层业务变化前后底层网络环境的无缝切换。
2)事件机制:该模块定义了事件处理相关的操作,包括创建事件、触发事件、事件处理等操作。事件作为消息的通知者,在模块之间划定了清晰地界限,提高了应用程序的可维护性和重用性。
3)任务日志:该模块提供基本日志功能。开发者可以用它来快速的调试自己的应用程序,网络管理人员可以用它来高效、便捷的维护SDN。
4)资源数据库:这个数据库包含了底层各种网络资源的实时信息,主要包括交换机资源、主机资源、链路资源等,方便开发人员查询使用。
为让开发者能够专注于上层的业务逻辑,提高开发效率,需要在控制器中加入网络基础服务层,以提供基础的网络功能。
该层中的模块可以通过调用基本功能层的接口来实现设备管理、状态检测等一系列基本功能。这一层涵盖的模块有很多,取决于控制器的具体实现,下面介绍五个主要的功能模块。
(1)交换机管理:控制器从资源数据库中得到底层交换机信息,并将这些信息以更加直观的方式提供给用户以及上层应用服务的开发者。
(2)主机管理:与交换机管理模块的功能类似QUESTION,重点负责提取网络中主机的信息。
(3)拓扑管理:控制器从资源数据库中提到链路、交换机和主机的信息后,就会形成整个网络的拓扑结构图。
(4)路由、转发策略:提供数据分组的转发策略,最简单的策略有根据二层Mac地址转发、根据IP地址转发数据分组。用户也可以在此基础上继续开发来实现自己的转发策略。
(5)虚拟网划分:虚拟网划分可以有效利用网络资源,实现网络资源价值的最大化。但是出于安全性的考虑,SDN控制器必须能够通过集中控制和自动配置的方式实现对虚拟网络的安全隔离。
在这两层的基础上,控制器通过向上层应用开发者提供各个层次的编程接口,以便向网络开发者调用从信令级到各种网络服务的SDN可变层能力,灵活便捷的完成对整个SDN的设计与管理。其中基础功能曾非常重要,实现了对底层硬件的抽象和对上层网络功能模块的管理,所有的网络应用都给予这一层提供的接口进行开发。
(1)对openflow的支持
注意新版本和openflow协议所指挥的功能,包括支持可选功能和扩展功能。
(2)网络虚拟化
是指多个逻辑网络共享底层网络基础设施,从而提高网络资源利用率,加速业务部署,以及提供业务QOS保障。SDN控制器拥有全局网络视角,其集中式管控的优势可极大简化资源的统一调配,能够动态的创建基于策略的虚拟网络,这些虚拟的网络能够形成逻辑的网络资源池,类似于服务器虚拟化的计算资源池。
(3)网络功能
云服务提供商在提供多租户网络服务时,出于安全考虑,租户希望其流量和数据与其他租户之间是互相独立的,因而SDN控制器在提供网络虚拟化能力的同时需要提供严格隔离性保障功能;同时openflow 1.0协议提供基于流(12元组)的匹配转发方式,便于对流的细粒度处理,作为SDN控制器可提供基于流的QOS保障功能;此外,SDN控制器拥有全网拓扑视角,有能力发现源端到目的端的多条路近并提供多径转发功能,可打破STP协议的新歌能和可扩展性限制,相比于传统的TRO;;和SPB方案,SDN控制器可提供相同的能力而无需对网络进行任何改动。
(4)可扩展性
SDN的集中式架构便于网络管理员根据需求,灵活的在控制器中添加、更改和删除相应的网络服务模块,使得对全网的管理就如同在一台网络设备中一样。因而SDN可扩展性的一个至关重要的指标是可支持openflow交换机的数量。通常来说,一个SDN控制器应该能够支持至少100台交换机,当然对不同的应用场景,这个数量并不是绝对的。
此外,如何减少广播对网络带宽和流表规模的影响,也是评估SDN控制器可扩展性的一个重要因素。
(5)性能
SDN控制器最重要的功能是将处理每一条流的地一个数据分组的处理结果,以流表项的方式写入到交换机的流表中,便于 后续豹纹的处理因而,控制器对流的处理实验以及每秒处理新流的数目是评价控制器性能的最主要性能指标。
(6)网络可编程性
SDN的一个重要特性是拥有网络可编程能力,具体包括数据流的重定向、精确的报文过滤以及位网络应用提供有好的北向可编程接口。
可靠性是评价网络的一个很重要的标准。当前提高SDN网络可靠性的主流做法是利用集群技术,为SDN控制器提供主从热备份机制,一旦检测的主SDN控制器出现故障,可以立即切换到备份控制器。此外相比于从SDN控制器自身提高可靠性,另一种做法是通过控制器计算源端到目的端的多条转发路径,并在组表中存储备份路径,当网络链路出现故障时,可自动切换到备份路径,从而提高网络可靠性。
为提高网络安全型,控制器需要企业级身份验证和授权,同时为了网络管理人员更加灵活的对网络进行控制,控制器需要具备实现对各种关键流量访问进行管控的能力,如管理流量、控制流量等能力。此外,控制器自身作为网络攻击重点对象,需在控制平面中限制控制信令的速率以及提供告警机制。
(9)集中管理和可视化
SDN的一个优势在于能够给网络管理人员提供物理网络和各虚拟网络的可视化信息,如流量、拓扑等。另外,网络管理人员通常希望能够通过标准的协议与技术对SDN控制器进行监控。因此,在理想情况下,SDN控制器需要通过RESTAPPI提供对网络信息访问的支持。
(10)控制器供应商
选择SDN控制器时还应该关注供应商的财务和技术资源以及SDN研发和进展以及其SDN市场的竞争和定位能力。
SDN业界广泛采用的几种典型控制器有NOX/POX、Ryu、Floodlight、OpenDaylight以及OpenContrail。
NOX是全球第一个开源的SDN控制器,2008年由Nicira公司主导开发。作为SDN网络操作系统的先去,它的出现在SDN发展进程中具有里程碑式的意义。NOX在很大程度上推动了openflow技术的发展,也是早期SDN领域众多研究项目的基础。
NOX底层模块由C++实现,上层应用可以用C++或Python语言编写。图5-2展示了其框架机构。
NOX的核心组件提供了用于与OPENFLOW交换机进行交互的API和辅助方法,包括连接处理器和实践引擎,同时还提供了如主机跟踪、路哟计算、拓扑发现以及python接口等在内可选择的附加组件。
POX完全采用python语言编写,是一种简化。
POX控制器主要包含以下技术特征:一是基于python编程语言实现了openflow接口;二是可以与pypy(pypy是python语言的动态编译器)进行捆绑运行,易于部署;三是支持linux、macos、windows等多种操作系统,灵活已操作。
Ryu是由日本电报电话公司NTT主导开发的一个开源SDN控制器项目,其字面是日语flow的意思,只在提供一个健壮又不失灵活性的开源SDN控制器项目。
Ryu同样用python语言开发,提供了完备友好的API,目标是是的网络运营者和应用者可以高效便捷的开发新的SDN管理和控制应用。当前,Ryu提供了非常丰富的协议支持,如OpenFlow协议v1.0/v1.2/v1.3/v1.4等多个版本、OF-CONFIG协议、Netconf协议以及Nicira公司产品中的一些扩展功能,同时它有着丰富的第三方工具,如防火墙App等。
Ryu的整体架构如下图所示,其中最上层的QUANTUM与OF REST分别为OPENSTACK和web提供了编程接口,中间层是Ryu自行研发的应用组件,最下层是Ryu底层实现的基本组件。
值得说明的是,Ryu基于组件的框架进行设计,这些组件都以python模块的形式存在。组件是以一个或者多个线成型时存在的,这样可以便于提供一些接口用于控制组件状态和产生时间,实践中封装了具体的消息数据。
由于时间在多个组件中使用,因此实践对象是制度的。目前Ryu中包含的常用组件功能说明见表:
Floodlight是一款基于java语言的开源SDN控制器,遵循Apache 2.0软件许可,支持openflow协议。floodlight的日常开发与维护工作主要由开源社区支持,其中包括部分来自big switch networks公司的工程师,同时floodlight也是该公司行业控制器产品的核心部分。floodlight作为免费的开源控制器提供了与商业版本相同的API,使得开发者可以把floodlight上的程序快速一直到商用版本的控制器上。
Floodlight与NOX、POX等其他控制器类似,也使用了“层次化”架构来实现控制器的功能,同时提供了非常丰富的应用,可以直接在网络猴子那个部署数据转发、拓扑发现等基本功能。此外floodlight还提供了友好的前端web管理界面。用户可以通过管理界面查看连接的交换机信息、主机信息以及实时网络拓扑信息。
Floodlight整体架构由控制器核心功能以及运行其上的应用组成,应用和控制器之间可以通过java接口或者rest api(表征状态转移API)交互,整体架构如图所示:
floodlight使用模块框架实现控制器特性和应用,在功能上floodlight可看做由控制器核心服务模块、普通应用模块和REST应用模块三部分构成:核心服务模块为普通应用模块和REST应用模块提供java api或者rest api基础支撑服务;普通应用模块依赖于核心服务模块,并为REST应用模块提供服务;REST应用模块依赖核心读物模块和普通应用模块提供的REST API,这类应用只需调用Floodlight控制器提供的REST API就可以完成相应的功能,可使用任何编程语言进行灵活的开发,但是受到REST API的限制,只需完成有限的功能。开发者可以使用系统提供的API创建应用,也可以添加自己开发的模块,并将API开放给其他开发者使用。这种模块化、分层次的部署方式有效的实现了控制器的可扩展性。通过下表对Floodlight控制器各模块进行介绍。
该项目是在2013年初由linux协会联合业内18家企业(包括cisco、Juniper、Broadcom等多家传统网络的巨头公司)创立,旨在退出一个开源的通用SDN平台、OpenDaylight项目的设计目标是降低网络运行的复杂度,扩展现有网络架构中硬件的声明其,同时还能够支持SDN新业务和新能力的创新。opendaylight开源项目希望能够提供开放的北向API,同时支持包括openflow在内的多种南向接口协议,底层支持传统交换机和openflow交换机。
QUESTION:南向接口协议是做什么的来的,包括路由决策吗?其他的项目支持传统交换机吗?
opendaylight拥有一套模块化、可插拔且极为灵活的控制器,能够被部署在任何支持在java的平台上。目前,opendaylight的基本版本已经实现了传统二/三层交换机的基本转发功能,并支持任意网络拓扑和最优路径转发。
opendaylight项目使用模块化方式来实现控制器的功能和应用,其最新发布的Hydrogen版本总体架构如图所示。
服务抽象层(SAL)是整个控制器模块化设计的核心,它为上层控制模块屏蔽了各种南向接口协议的差异。SAL框架如图5-6所示,服务基于插件提供的特性来构建,上层服务请求被SAL映射到对应的插件,然后采用适合的南向接口协议与底层设备进行交互。各个插件之间相互独立并与SAL松耦合,SAL支持上层不同的控制功能模块,包括拓扑服务、数据分组服务、流变成服务、统计服务、清单服务、资源服务、连接服务等。
该项目是Juniper公司于2013年开发的遵循Apache 2.0许可的SDN开源控制器,该控制器由C++语言编写,支持标准Openflow协议,提供了用于网络虚拟化的所有基本组件,其用户界面采用python语言编写。OpenContrail提供了一套扩展API来配置、收集、分析网络系统中的数据,能够与KVM、Xen两大虚拟机管理程序顺畅协作,同时也支持OpenStack及CloudStack等云平台组合应用。OpenContrail可以应用在多种不同网络环境中,目前主要应用于以下两个网络场景:一是云计算网络场景,主要有企业和运营商的私有云以及云服务提供桑德基础设施即服务(Iaas)和虚拟专用云(VPC);二是在运营商网络中的网络功能虚拟化(NFV)场景,可以为运营商边缘网络(宽带固定接入、移动接入等)提供增值服务。
在OpenContrail系统中,数据模型非常重要,一个数据模型通常包括设置的组件、性能和数据模型之间的关系。目前,opencontrail系统有两类数据模型:高层级服务数据模型和低层级技术数据模型,这两个数据模型都使用格式化数据模型预言(目前使用XML语法)。其中,高层级服务数据模型着重负责在抽象化的最高层描述网络所需的状态,使用组件直接将服务对应到终端用户上,目前该系统支持的高层级服务数据模型主要包括:租户、虚拟网络、连接策略和安全策略,选择这些模型组件的上层业务环境主要是云计算网络(多租户网络)和NFV;而低层级技术数据模型则重点描述在抽象层中底层的网络所需状态,如图:
QUESTION:OpenStack是什么?
从图中可见,该系统主要由SDN控制器和vRouter(虚拟路由器)两个部分组成。其中,控制器通过北向接口与编排系统及上层业务通信,通过XMPP与虚拟路由器通信,通过BGP、NETCONF等暗香协议与网管路由器和物理交换机通信,通过BGP与其他控制器对等通信(东西向接口)。
vrouter是数据转发平面,运行在虚拟服务器的Hypervisor,将通过软件方式部署在网络环境中,通过服务器到服务器之间的通道进行虚拟之间的数据分组转发,从而在数据中心提供虚拟网络服务(以overlay的方式提供虚拟主机之间的通信)。通知其主要包括三个组件:配置节点、控制节点、分析节点。
(1)配置节点
主要服务于上层的应用,一方面配置节点向上层应用提供REST API,这些API可以用于配置系统、获取系统的运行状态信息;另一方面配置节点包含一个转换引擎(相当于编译器),将高层级服务数据模型的组件转换成相应的低层级数据层面组件,即高层级服务数据模型描述什么服务需要被部署,而低层级技术数据模型描述什么服务通过什么技术怎样被部署,配置节点使用IF-MAP(interface for metadata access point)协议发布低层级技术数据模型的内容给控制节点,下图展示了配置节点的内部结构:
QUESTION:OPENSTACK功能是什么来着忘了?分布式数据同步服务为什么是在配置节点和控制节点之间?分布式是指什么的分布?
(2)控制节点
实现了一个逻辑集中的控制平面,旨在维护一个短暂的网络状态,同时控制节点之间以及控制节点与网络基础设备之间进行交流通信,保证网络状态的持续一致。控制节点实现了控制平面的部分逻辑集中,一些控制平面的功能依然会在网络中的物理和虚拟路由器上以分布式的方式部署。下图展示了让控制节点的内部机构,可以看出,控制节点使用IF-MAP从配置节点接收配置状态,使用IBGP与其他控制节点交换路由信息,以保证所有的控制节点保存相同的网络状态,使用XMPP与计算节点上的虚拟路由器交换路由信息,同时也使用XMPP发送配置状态(如路由实例和转发策略)。控制节点代理 计算节点特定种类的流量,这些代理请求同样适用XNPP接收龙直接点使用BGP与网管节点(路由器和交换机)交换路由,使用Netconf协议发送配置状态。
(3)分析节点
通过搜集、存储。关联和分析虚拟和物理网络环境中的信息(这些信息包括统一、日志、事件和错误),记录网络环境的实时状态和抽象化数据,并且以适当的形式呈现给上层应用使用。分析节点使用北行REST API与上层应用进行通信,使用分布式同步机制与其他分析节点同步,使用Sandesh协议与控制节点与配置节点的组件通信。这里,Sandesh协议是由juniper开发的一种际遇XML的协议,OpenContrail的分析节点使用Sandesh来手机来及vRouter、配置节点、控制节点等模块的信息。下图展示了分析节点额内部结构,可以看出,分析节点包含的组件包括:收集器,通过与控制节点和配置节点交换Sandesh信息来收集分析信息;NoSQL数据库,存储收集的信息;规则引擎,当特定时间发生时自动收集运行状态;REST API服务器,主要提供了用于查询分析数据库和检索操作状态的北向接口;查询引擎,执行接收到的北向REST API请求,这个引擎为潜在的大量分析数据提供灵活的访问能力。
Beacon是2010年由斯坦福大学开发的基于java语言的开源openflow控制器。