【转自】http://blog.csdn.net/NachtZ/article/details/72789808
思想
利用分层思想,将数据与控制分离。
控制层有逻辑中心化和可编程控制器。数据层有dump 交换机,只负责数据的转发,可快速处理匹配数据包,适应流量日益增长的需求。两层之间采用开放统一的接口(比如openflow)交互。控制器通过接口下发规则,交换机按照规则执行工作。
体系结构
架构
2
SDN由北向南分为三个接口:数据平面、控制平面、和应用平面。数据平面与控制平面之间利用用SDN控制数据平面接口(control-data-plane interface
,简称CDPI)进行通信。CDPI有统一的标准,目前是 OpenFlow协议。控制平面与应用平面之间采用SDN北向接口(northbound interface,简称NBI)。NBI可以依照用于实际需求定制。
数据平面由交换机等网络元素链接。可以将至视为传统的数据链路,负责网络之间的数据交互,并接受上层的控制。控制平面是中间件,通过CDPI驱动来监控管理数据平面中的网络元素的行为,并通过北向接口来接收应用层的命令。应用平面包含各类基于SDN的网络应用,用户无需关心底层实现,就可以通过简单编程实现应用的快速部署。网络抽象特性允许用户可以根据需求选择不同的网络操作系统,而并不影响物理设备的正常运行。
不同方向
NFV(Network Function Virtualization),是指将传统的网络功能虚拟化,使之独立于硬件。在相同的硬件上,可以运行不同的网络功能。从而减少专属设备的硬件成本。NFV用了资源虚拟化的方式,在硬件设备中建立一个网络虚拟层,负责将硬件资源虚拟化,形成虚拟计算资源、虚拟存储资源和虚拟网络资源等,运营商通过软件来管理这些虚拟资源.由于采用的是通用硬件设备,NFV降低了设备成本,减少了能耗,缩短了新网络服务的部署周期,从而适应网络运营商的发展需求.在接口设计方面,NFV既可以基于非OpenFlow协议,又能与OpenFlow协同工作,同时还支持ForCES等多种传统接口标准化协议,以便适应网络运营商对设备的不同需求,并与ONF的SDN保持相对独立的发展.
OpenDaylight是一套以社区为主导的开源框架,旨在推动创新实施以及SDN透明化。考虑到兼容性问题,OpenDaylight继承了SDN架构形式,同时又结合了NFV的特点.架构共分为3个层次,分别是网络应用与业务流程(即应用层)、控制平台(即控制层)和物理与虚拟网络设备(即数据层).OpenDaylight的控制平台直接由自带的Java虚拟机实现.针对不同的网络任务,控制器自身携带了一系列可插入模块,并兼容第三方模块以增强SDN的功能.与ONF的SDN架构最大的不同在于:OpenDaylight控制器的南向接口除了支持OpenFlow协议之外,还支持NETCONF等配置协议和BGPt24等路由协议,并支持生产厂商的专有协议(如思科的OnePK协议).为了能够处理不同的标准协议,OpenDaylight增加了服务抽象层SAL,它负责将不同的底层协议标准转换成OpenDaylight控制层所理解的请求服务,保持了底层协议的透明性,并提高了整体架构的可扩展性.
开放式接口与协议设计
SDN接口中,以控制器为中心,南向与数据层通信,北向与应用层通信。并支持多控制器,在东西向进行多控制器通信。作为数据与控制分离的核心,南向接口是目前相对研究比较多的点。比如ONF的CDPI,采用openflow。Openflow基于流的概念来匹配规则,交换机通过维护流表(Flow table)来支持openflow,按流表进行数据转发。流表的建立,维护及下发由控制器进行。
对于北向的研究,有ONF的NBI,OpenDaylight的REST等。这一方面的研究在于如何实现统一的北向接口标准。 东西向接口为负载均衡和性能提升提供保障。
数据层关键技术
在SDN中,数据层与控制层分离,控制策略部分被交给控制器负责,数据层上的研究主要集中在交换机设计和转发规则。
交换机设计问题
SDN交换机位于数据层面。用来负责数据流转发。可以使用硬件和软件两种方式进行转发。硬件转发速度快,成本低,功耗小,但是灵活性不够。对此,Bosshart等人[^32]提出了针对数据平面转发的RMT模型。允许在流水线阶段支持任意宽度和深度的流表。
1. 允许随意替换或增加域定义;
2. 允许指定流表的数量、拓扑、宽度和深度,仅仅受限于芯片的整体资源(如芯片内存大小等);
3. 允许创建新动作;
4. 可以随意将数据包放到不同的队列中,并指定发送端口。
此外,FlowAdapter是另一种利用硬件灵活处理的技术。FlowAdapter采用三层结构。最上层是可以通过更新来支持任何新协议的软件数据平面,底层是相对固定但转发效率高的硬件数据平面,位于中部的FlowAdapter层负责软件数据平面和硬件数据平面之间的通信.当控制器下发规则时,软件数据平面将存储这些规则,形成M个阶段的流表.由于这些规则相对灵活,不能全部由交换机直接转化成相应转发动作,而硬件数据平面可以实现规则的高速匹配转发.因此可利用中间层FlowAdapter将两个数据平面中的规则进行无缝转换,即,将相对灵活的M阶段的流表转换成能够被硬件所识别的Ⅳ阶段的流表.为了达到转换目的,FlowAdapter首先检查软件数据平面的全部规则,然后根据完整的规则将M阶段的流表转换成l阶段流表,最后再将1阶段流表转换成Ⅳ阶段流表发送给硬件数据平面.另外,FlowAdapter相对控制器完全透明,对FlowAdapter交换机的更新不会影响控制器的正常运行.
与硬件设计交换机的观点不同,软件处理速度虽然低于硬件。但是软件方式可以最大限度提升规则灵活性。同时避免硬件受制于自身资源限制导致的流表大小受限,无法有效处理突发流的问题。同时软件也可以采用专用的NP(Network Processor)来替换CPU.
转发规则的研究
如果网络节点失效,或者网络流量需要负载转移等情况,都会引发转发规则的变换。SDN采用高抽象层次的管理方式统一更新规则,防止出现规则更新不一致和规则延迟的现象。一般采用两阶段提交方式更新规则[^40]:
第一阶段:规则需要更新,控制器询问每一个交换机是否处理完对应旧规则的流。并对处理完成的所有交换机进行规则更新。
第二阶段:当所有交换机都更新完毕后,才算完成更新,否则取消该更新操作。
这种方法需要等待旧规则的数据包处理完毕后才能处理新规则的数据包,会导致规则空间被占用的问题。这个时候可以采用增量式一致更新:该算法将规则更新分成多轮进行每一轮都采用二阶段提交方式更新一个子集,这样可以节省规则空间,达到更新时间与规则空间的折中。
控制层关键技术
控制器是控制层核心组件。通过控制器,用户可以逻辑上集中控制交换机,实现数据快速转发,安全便捷管理网络,提神网络整体性能。
控制器设计问题
控制器基本功能是为科研人员提供可用的编程平台,最早且广泛使用的控制器平台是NOX。提供了一系列基本接口,用户通过NOX对全局网络信息进行获取,控制与管理。NOX的问题在于,随着SDN网络规模的扩展,单一结构集中控制的控制器处理能力受限,扩展困难,只能应用于小型企业网络或者科研人员进行仿真。网络中有两种方式扩展,第一是提升控制器性能,比如NOX-MT,第二种是采用多控制器方式提升整体控制器的能力。
NOX-MT是具有多线程处理能力的NOX控制器,NOX-MT不改变NOX控制器的基本结构,而是利用传统并行技术提升性能。
对于大规模网络,需要采用多控制器进行处理。分布式控制器有两种方式进行扩展,扁平控制方式和层次控制方式。.对于扁平控制方式(比如ONIX,HyperFlow),所有控制器被放置在不相交的区域里,分别管理各自的网络.各控制器间的地位相等,并通过东西向接口进行通信.对于层次控制方式(Kandoo),控制器之间具有垂直管理的功能.也就是说,局部控制器负责各自的网络,全局控制器负责局部控制器,控制器之间的交互可通过全局控制器来完成.
SDN网络操作系统应该具有实时运行开发应用的能力,力求开发与执行的平衡。NOX采用Python或c++. 二者在开发效率和执行效率上各有偏重。科研人员致力于开发通用平台,Beacon就是一个基于Java的通用平台。它向用户提供了一系列相关的库与接口用于开发,并提供运行时模块化的功能,使其在保证性能的情况下具有了实时运行的能力,实现了开发与执行两者之间的平衡。
接口语言
传统的低级配置接口,比如用c++编写的接口,抽象程度低,不能大幅减少使用成本, 就有团队致力于开发网络配置语言,旨在搭建具有优化性能的通用北向接口。比如Nettle,McNettle(Nettle多核版),采用了函数响应式编程(FPR)方式。Maple则对接口语言进一步抽象,允许用户使用自定义抽象策略。为了能够高效地将抽象策略分解成一系列规则,并下发到相应的分布式交换机上,Maple不但采用了高效的多核调度器,最关键的是,它采用了跟踪运行时优化器(tracing runtime optimizer)来优化性能.该优化器一方面通过记录可重用的策略,将负载尽可能地转移到交换机来处理.另一方面,通过动态跟踪抽象策略与数据内容及环境的依赖性,使流表始终处于最新状态,从而确保抽象策略转成可用规则的效率。 此外还介绍了Frenetic等。
控制层特性研究
控制层存在一致性,可用性和容错性等特性,但是三种特性无法同时满足,达到三者之间的平衡和整体的最优化,是这个方向上的重点。
一致性
集中控制是SDN区别于其他网络架构的核心优势之一,通过集中控制,用户可以获取全局网络视图,并根据全网信息对网络进行统一设计与部署,理论上保证了网络配置的一致性问题.然而,分布式控制器仍然具有潜在的不一致性问题.由于不同控制器的设计对网络一致性要求有所不同,严格保证分布式状态全局统一的控制器,将无法保证网络性能;反之,如果控制器能够快速响应请求,下发策略,则无法保证全局状态一致性.性能无明显影响的情况下,保证状态一致性成为了SDN设计中的关键问题。
并发策略同样会导致一致性问题。可以由控制层将策略形成规则,并按两阶段提交方式解决.为了避免数据层过多的参与,控制层可直接通过并发策略组合的方式来解决,并可利用细粒度锁(fine—grained locking)确保组合策略无冲突发生.HFT采用了层次策略方案,它将并发策略分解,组织成树的形式,树的每个节点都可独立形成转发规则.HFT首先对每个节点进行自定义冲突处理操作,这样,整个冲突处理过程就转化成利用自定义冲突处理规则逆向搜索树的过程,从而解决了并发策略一致性问题.
可用性
规则备份可以提升网络的可用性(RuleBrieks)。
控制器作为SDN的核心处理节点,需要处理来自交换机的大量请求,而过重的负载会影响SDN的可用性.利用分布式控制器可以平衡负载,提升SDN的整体性能.(ndoo,ElastiCon).减少交换机的请求次数,可以提升控制层可用性。(DIFANE,DevoFlow)
容错性
与传统的互联网类似,SDN同样面临着网络节点或链路失效的问题.然而,SDN控制器可以通过全网信息快速恢复失效节点,具有较强的容错能力.网络节点恢复收敛过程如图7所示:
1. 当某台交换机失效时,其他交换机察觉出变化;
2. 交换机将变化情况通知控制器;
3. 控制器根据所掌握的信息,计算出需要恢复的规则;
4. 将更新发送给数据平面中受到影响的网络元素;
5. 数据平面中受影响的元素分别更新流表信息.
从链路恢复过程可以看出:在SDN架构中,失效信息一般不是通过洪泛方式通知全网,而是直接发送给控制层,并由控制器来做恢复决策,因而不易出现路由振荡的现象.如果是交换机和控制器之间的链接失效,导致无法通信,则收敛过程相对困难.可以采用传统网络的IGP(如OSPF协议)通信,并通过洪泛方式恢复,也可以采用故障转移(failover)方式,同样能够缓解链路失效收敛时间问题.通过在交换机上安装用于验证拓扑连接性的静态转发规则,可以更好地实现网络故障的快速收敛. 控制层也提供了一种高级容错语言FatTire.