原文是https://queue.acm.org/detail.cfm?id=2560327
过去几年,在SDN(软件定义网络)的帮助下,设计和管理网络变得更加富有创造性。SDN看上去好像是突然间出现的,但是事实上,它是让网络更具可编程特性的探索之路上的一部分。
计算机网络非常负责,而且难以管理。它涉及到多种设备,从路由器、交换机到中间件比如,网络地址转换,服务器负载均衡和入侵检测系统。路由器和交换机上运行着复杂的分布式控制软件,通常是封闭和专有的。这些软件实现了经过多年标准化和互操作性测试的网络协议。网络管理员通常需要配置使用不同厂商的设备,甚至同一厂商不一样的产品,它们的配置界面变化多端。尽管一些网络管理工具提供了一个集中式的视角去配置网络,这些系统仍然在各个独立协议、机制和结构接口的层次上操作。这种操作模式已经减缓了创新的速度,增加了复杂性,使得运行一个网络的投资和操作成本都显著增高。
SDN正在改变网络设计和管理的方式。它有两个特征定义。第一、SDN分离了控制平面(它决定了如何处理网络流量)和数据平面(它根据控制平面的决策来进行流量转发)。第二、SDN整合了控制平面,使得单个软件控制程序可以控制管理多个数据平面的数据平面的组件。SDN控制平面可以通过良好定义的API直接控制网络数据平面的组件(比如,交换机,路由器和其他的中间件)。OpenFlow就是这样一个突出的例子。一个OpenFlow交换机有分组处理规则中的一个或者多个表。每一个规则匹配流量的一个字节,并执行匹配规则对应的某些操作,包括丢弃、转发或者是广播。根据控制器应用安装的规则,一个OpenFlow的交换机可以表现为路由器,交换机,防火墙,地址转换器或者是他们的组合。
SDN已经在产业领域获得显著的关注。许多商业交换机开始支持OpenFlow的API。惠普、NEC和Pronto是第一批支持OpenFlow的设备制造商,而后这个名单急剧扩大。许多不同的控制器平台开始出现,程序员开始用这些平台来创建新的应用程序,比如动态访问控制,服务器负载均衡,网络虚拟化,节能网络,无缝虚拟机迁移和移动用户特性。早期的商业成功,如谷歌的广域网流量管理系统和Nicira的网络虚拟化平台,已经赢得了业内人士的显著关注。许多世界上最大的信息技术公司(如,云服务提供商,运营商,设备供应商和金融服务公司)已经加入了SDN行业协会,比如Open Networking Foundation 和 Open Daylight initiative.
尽管SDN相关的消息最近日益显现,很多技术背后的理念其实已经发展了20多年以上。SDN重温了早期的电话网络中的思想,它分离了控制和数据平面,这样来简化网络管理和新业务的部署。然而,开放的接口,比如OpenFlow提供了控制平面和应用上更多的可能性,这比为电话服务设计的封闭网络更具想象空间。SDN有点像active networking,它阐明了可编程网络的愿景,尽管它强调的是可编程的数据平面。SDN还涉及到以前在计算机网络中分离出控制和数据平面的工作。
这篇文章介绍了可编程网络发展为当今SDN的思想史,着眼于关键思想的演变,当今应用需求的拉动作用和技术进步的推动作用,并希望能够帮助指引接下里SDN的创新发展。文章中,揭穿了技术发展中的神话和误解,澄清了SDN和相关技术的关系,比如与网络虚拟化之间。
SDN技术的历史开始于20年前,正当互联网起飞。当时互联网惊人的成功加剧了管理和发展网络基础设施的挑战。这里的重点是网络社区的变革发展(无论是通过研究、标准化,还是公司),尽管这些革新,也包括在其他领域的推动,包括分布式系统,操作系统和编程语言。创建一个可编程网络基础设施的努力也清晰地涉及到了,为了支持高速地可编程分组处理而付出的长期工作。
在开始介绍这个故事之前,我们提醒,任何历史都要比一个简单的故事情节要更丰富细致。特别是,文章中所描述的很多工作早在SDN开始之前就已经开始了,而SDN是斯坦福大学在创办一个关于OpenFlow的项目中所提出来的。这个词的词源本身就是复杂的,而且,尽管这个术语最初来源于斯坦福大学的OpenFlow项目,但是这个定义现在已经扩展到了更广泛的技术领域中(这个词曾经甚至被行业营销部门用来形容与斯坦福大学的SDN项目无关的想法)。因此,这篇文章重点介绍了SDN发展中的具有代表性的思想演变,而不是去尝试阐述与OpenFlow项目之间的关系,不管他们是否对后面研究是否产生了直接影响。早期的一些思想可能没有直接影响后面的,但是这些概念和思想值得注意,过往的这些项目可能会为SDN未来的发展提供新的经验教训。
SDN之路
计算机网络可编程使得在网络管理中的革新变成可能,同时也降低了部署新服务的门槛。这个章节回顾了早期网络可编程方面的工作。图 1 展示了过去20年中在可编程网络中几个重要的发展,他们的时间顺序关系,在网络虚拟化上(首次成功运用SDN的用例之一)的进步。
历史分为三个阶段,每个阶段都有它自己的贡献:(1)主动网络(active networking)(20世纪九十年代中期-21世纪早期),计算机网络中引进了可编程函数,最终引发了更大的创新。(2)控制和数据平面的分离(2001~2007),它在控制平面和数据平面之间开发了开放接口。。(3)、OpenFlow API和网络操作系统(2007~2010),代表了开放接口的首次广泛使用,使得控制和数据平面分离更具可扩展性和实用性。网络虚拟化(在下一节讨论的)在SDN的整个历史演化中发挥了非常重要的作用,远远早于SDN之前出现,但是它是第一个具有代表性的SDN用例之一。
主动网络
从早期到90年代中期,人们见证了互联网的起飞,对应用程序的需求,远远超过了文件传输和电子邮件,这些科学家们早期的应用。更多样化的应用以及大众更广泛的使用,吸引了研究人员去测试和部署能够提高网络服务的新思路。要做到这一点,研究人员在实验室中设计和测试新的网络协议,并且在大的网络上模拟。然后,如果有动力和资金投入,他们会把他们的想法提交给IETF(Internet Engineering Task Force)来标准化这些协议,但是这个过程非常缓慢,使得研究人员非常困扰。
对此,一些网络研究人员开始追求另外一种方法--开放网络控制,就像是重新为电脑编程使得它更好用。常规网络并没有任何意义上的可编程特性。主动网络代表了一种自由的控制网络的方法,它设想了一个这样的接口,可以在独立的一些网络节点上暴露资源(例如,处理、存储和分组队列),并支持开发一些自定义功能应用到该节点上分组处理的一个子集上。
这个方法对于互联网社区来说是一个诅咒,他们认为简单是互联网成功的关键。主动网络探索了一些方法去替换由传统的IP或ATM提供的网络协议栈。在这个意义上说,主动网络是网络架构从头构建的第一个尝试,随后还有GENI,NSF FIND 以及 EU FIRE等项目。
主动网络社区探索了两种编程模型
1、胶囊模型,要执行的代码被包含在数据包之中。
2、可编程路由器/交换机模型,节点上要执行的代码通过带外机制来实现。
该胶囊模型与主动网络最为紧密。对于后面努力的思想启发,两者都有贡献。胶囊模型设想在网路上安装新的数据平面功能,数据包加载了代码(就像早期的无线电分组数据包研究),并使用缓存来提高代码分配的效率,网络操作人员直接决定了可编程路由器的可扩张性。
技术推动和需求拉动。推动者主动网络研究的技术包括计算成本的降低,允许网络中使用更多的计算资源;编程语言的进步,比如JAVA提供了跨平台的特性和代码执行安全性;虚拟机技术,保护主机(比如这个例子中,主动节点)和其他进程独立互不干扰。有一些主动网络的研究项目还利用了快速编译和形式化方法方面的成果。
在主动网络的生态系统发展中,一个重要的里程碑事件是投资机构的兴趣,特别是由DARPA(U.S. Defense Advanced Research Projects Agency)创立和支持的主动网络项目,从90年代中期一直延续到21世纪初。尽管不是所有的项目都是由DARPA资助的,这个资助计划支持了一系列的项目,或许最重要的是主动网络中一些术语概念的整理,使得这些项目的意义并不仅仅是简单的累加。主动网络项目强调了项目发展中的演示和互操作性。从投资机构大胆和协调一致的推动下,又没有实际的使用用例,一定程度上也造成了社区对于主动网络的怀疑,这可能掩盖了这些工作对于后面网络可编程特性的思想启发作用。
主动网络研究中用户需求拉动作用非常类似于当前推动SDN研究的例子。那个时候主要包括网络服务提供商开发和部署新服务的无奈;第三方对于增值服务,在动态地满足特定应用或网络环境方面能够提供可靠控制等方面的兴趣;研究人员希望有一个平台可以支持规模化实验。此外,在主动网络中早期的论文提到了中间件的扩散,包括防火墙,代理服务器,转码器,每一个都必须独立的部署,但又必须要能够一个不同于特定供应商的编程模型。主动网络提供了统一控制这些中间件的设想,可能最终取代临时性、一次性的方法,来管理和控制这些中间件。有意思的是,早期的文献预示着目前的NFV趋势,旨在能够提供一个统一的控制架构能够将复杂的中间件功能一并部署。
智慧贡献:主动网络对SDN有重要的智慧贡献,下面是主要的三个:
(1)网络可编程功能降低了创新的门槛。主动网络的研究开创了可编程网络的概念,作为降低网络创新门槛的方法。在生产网络创新和满足网络可编程特性这些方面的困难都变成了SDN研究的动力。早期SDN的愿景更多的放在控制平面的可编程性,而主动网络更多地关注数据平面的可编程性。这就是说,数据平面与控制平面的可编程特性一直在并行发展,而且数据平面的可编程特性推动者NFV的到来。当前SDN的工作包括探索SDN协议的演化,比如OpenFlow,去支持更广泛的数据平面功能。从实际网络流中分离出实验网络流的概念--这起源于主动网络,也出现在设计OpenFlow和其他SDN技术的前面。
(2)网络虚拟化和基于数据包头的软件多路分解能力。支持用多种编程模式来进行试验的需求推动了网络虚拟化的发展。主动网络的体系结构框架,描述了这样一个平台所具有的组件。这个平台关键的组件是一个共享的节点操作系统(Node OS)--它负责管理共享的资源;一组运行环境(execution environments)---每个都定义了一个用于消息包处理的虚拟机;一组活动的应用程序(active applications)---在指定的运行环境中提供端到端的服务。要将消息包发送的指定的执行环境依赖于快速的消息头字段匹配和多路分解到合适的执行环境。有趣的是,这个模型是在PlanetLab开发出来的,通过不同实验实在不同的运行环境中运行的,他们的包通过消息头字段被分发到合适的运行环境。分解复用到不同的虚拟运行环境这项技术也被应用于设计虚拟化的硬件数据平面。
(3)一个统一的中间件构成架构的愿景。尽管这个愿景在主动网络研究中从未被实现,但是早期的设计文档探讨了一个重要的需求,用一个通用安全的编程框架来统一不同的中间件功能。虽然这并没有直接影响当前的NFV的研究工作,但是从主动网络中汲取的经验对于基于SDN的应用和中间件组成架构的发展必定有所帮助。
神话和误解。主动网络包括这样一个概念,即一个网络API能够提供给产生和接受网络数据包的用户,但是研究社区中大多数人认为终端用户编程可能非常少见。经常会有误解,比如消息报可以携带终端用户的JAVA代码使得网络不安全并且会使主动网络研究脱离于现实网络。主动网络有时候会被批评没有能力提供实用的性能和安全特性。尽管性能并不是主动网络研究首要考虑的内容(主动网络主要研究架构,编程模型和平台),已经有人在为建立高性能的主动路由器做出努力。而安全性在很多早期的项目中也经常被提及,比如安全的主动网络环境(SANE)架构项目就是一个标志性的项目。
<<未完待续>>