|||
软件定义的网络(SDN)之喜(141020)
闵应骅
软件定义的网络(SDN)非常热,企业界和科研界都在热烈响应,可以说比任何其他下一代互联网方案都要更有希望。顾名思义,软件定义的网络(SDN)的关键是软件。大致地来议论软件定义的网络(SDN)比较容易,真做起来,困难不小。本人读了点文献,作为一篇学习笔记,想来说说软件定义的网络(SDN)之喜与忧,顺便想想中国的企业与科研界在此热潮中应该扮演什么角色。本文先说软件定义的网络(SDN)之喜,下一篇再谈其忧。
SDN出于两个简单的想法:一般化网络硬件,以提供标准的包处理功能,而不是一组固定的狭窄的特性;去掉控制网络的软件与实现其功能的装置的耦合。这就使网络的发展不一定需要更改硬件,只要针对应用改变算法就可以了。图1表明传统网络与SDN在体系结构上的不同。SDN在一个或多个控制器机器上运行通用程序就可以改变网络拓扑、终端主机开始设定的连接、流量负载的转移或处理基于包转发规则的其他控制机器传来的消息。控制器把这些规则交给交换机去执行,交换机用特定硬件实现所需的功能。SDN并不规定控制器怎么实现,所以它可以自由地实现不同的网络算法,譬如最短路径路由,或根据流量过程的更复杂的路由。SDN上的新应用包括基于政策的存取控制、适应的流量管理、广域流量工程、网络虚拟化等。这些原则上都可实现,但传统的交换机不好修改,不易被第三者的程序所控制。早期的SDN控制平台只有和已有硬件连接的简单编程接口,譬如拓扑发现和链路状态信息。而现在,SDN可以改变控制算法,就像近代操作系统一样灵活地管理硬件资源。
OpenFlow规范定义了它的两个用处:交换机应该提供的标准特性集和控制器可以使用的接口,以实现与交换机通信;指令,以安装和检测转发规则,并给出关于流、拓扑和流量统计的提示。一个OpenFlow交换机保持一个转发表,它包含一个有优先顺序的规则表。每一个规则用一个模式描写一类包,和相应的对包采取的动作。当包来到,又匹配某一个规则,则马上执行规定动作。如果匹配多个规则,则执行优先级高的动作。如果无法匹配,则用OpenFlow格式压缩这个包,并送控制器,根据控制器回应的指令动作。这个表的大小受硬件的限制,但一般都可以存几千个规则。每一个规则都有计数器以便统计流量。控制器可以用OpenFlow信息读取这些计数器。
全网结构
SDN一个重要的优越性就在于控制器可以计算全网结构,对网络状态给出全局可见性。在传统网络下,对分别在各地的装置维持全网结构的实时信息基本是不可能的。但是,在SDN,用全网结构考察逻辑变得容易得多。譬如,最短路径路由就可以用Dijkstra算法进行全局优化。
再举一个例子。用于多播的生成树要连接许多交换机,这个树可以广播流量,不会产生循环。设计一个分布式算法,建造和保持一颗多博树非常困难,因为它要适用于任意拓扑,而且当任何意外事件发生或者故障时能很快收敛到一颗新树。传统的办法是用生成树协议,交换机之间定期交换信息,两两通告,运行选头协议选出根节点,逐步建立生成树,开通和截止某些链路,以建立到根的最短路径。这样建立生成树需要发现邻居、选头、和实际的树构造算法。但是,这些部件都是针对特定协议的,在别的地方不能重用,而且,当有拓扑改变时,花的时间就会更多。而在SDN条件下,控制器提供一系列的函数,实现许多应用,譬如拓扑发现、链路故障检测等,并且维持跟踪网络状态信息,譬如主机位置、链路能力、流量矩阵等。存储这些信息的数据库称为网络信息库(NIB)。用NIB,SDN可以动态生成树,比分布式生成简单。当拓扑变化时,可以用Prim算法从拓扑计算生成树,安装交换机上沿树转发的规则。
由于给程序员提供了全网的状态信息,NIB使实现丰富的应用更容易,像流量工程,这在传统网络中是很困难的。譬如,B4 和SWAN系统用SDN在数据中心之间平衡宽域链路的负载,比传统网络大大提高利用率。用多个控制器可提高可扩展性和容错。譬如,如果某控制器负载过大,或者与交换机的链路失效,就可以用另一个控制器顶替。由于控制器总数比较少,比替换交换机要容易得多。
分布式更新
在传统网络中,配置更新是常有的事。由于更新有先后,就有同步的问题,即一致性的问题,就是说,最后要达到全网的一致性更新需要时间。一个链路失效,可能按原状态传到了一个交换机,可由于网络更新可能需要再传一次。这就可能引起循环路由或包丢失。SDN能够及时更新网络配置就能提高传输效率。但是,这还不够。譬如SDN控制器不但要遵循转发规则,为了安全的存取控制和隔离,还要遵循过滤规则。如果这些配置更新被传给所有交换机,这些规则就被泄露。最短路径路由当全网配置更新时就可能产生循环转发或不通。分布式存取控制可能禁止某些包通过最短路径。但过滤规则不可能像转发表那么简单,如果分散在不同的交换机里,就需要操作员的介入。服务器的负载平衡需要若干后台服务器备份,如果配置更新,可能连结的是同一台服务器。对于新老两种配置,SDN怎么解决?更新抽象就不是沿着一条路径来更新,而是对整个系统改变网络状态。只有在一致的网络配置之下,才进行包的转发。包转发状态要么基于老的网络配置,要么基于新的网络配置,但不可能基于二者。更新机制也有不同。实现一致性更新一般采用两步更新:控制器指令所有交换机转发规则按新配置修改;控制器更新网络边界规则,给包贴新版标签,然后撤销交换机上的老配置。任何的包或流只能按一种配置来处理。两步更新在许多情况下可以优化。譬如,更新只会增加路径,那么只有影响那些路径的规则需要更新。如果更新只影响一部分交换机,那么其他交换机就不必更新。一致性更新可以采用这种增量式,让某些包转回控制器。但是,这些更新机制需要存储规则的空间和大量控制信息。另一个重要问题是实现更新需要多少时间。如果出现故障,更快的响应就非常重要。譬如,对某些特定应用的更新应该足够快,无论如何不应该出现死循环。
在这些方面,SDN显示了它的优越性,比传统网络能更有效地解决问题。但是,要取代传统网络,需要做的事情还很多,请见下一篇。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-25 04:43
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社