摘要
软件定义网络(SDN)是一项激动人心的技术,可以帮助我们设计和管理网络。 虽然这项技术似乎突然出现,但SDN是使计算机网络更具可编程性的悠久历史的一部分。 在本文中,我们追踪可编程网络的智能历史,包括主动网络,早期分离控制和数据平面的工作,以及最近在OpenFlow和网络操作系统方面的工作。 我们强调关键概念,以及推动每项创新的技术推动和应用拉动。 一路走来,揭开了关于技术的常见误区和误区,明确了SDN和网络虚拟化等相关技术之间的关系。
The Road to SDN
传统网络是非常复杂,且难以管理的:
- 设备种类繁杂(路由器、交换机、各种middlebox)
- 设备上运行的分布式控制软件通常是专有且封闭的。
- 底层协议要标准化需要经过多年的时间,来实践互操作性等。
- 配置网络需要通过一些配置接口或者软件,这些接口和软件在不同的硬件提供商之间差别很大,不兼容。
这就导致了增加了网络的复杂性,降低了网络研发的创新速度。SDN 作为一种设计和管理网络的新思路,主要有两个特点:
- 分离数据和控制平面。
- 巩固控制平面,一个单独的软件控制器通过 API 控制多个数据平面元素。OpenFlow 就是其中一种 API。
今天,SDN 在变得越来越重要,不过,它背后的一些思想甚至已经经历了 20 多年的成长和进化。SDN 在某种程度上就是回顾了这些早期的思想,作为一个集大成者,将控制平面和数据平面进行清晰的分离,来简化网络管理,简化配置。
we caution the reader that any history is incomplete and more nuanced than a single storyline might suggest. 我们需要提醒读者的是,任何一段历史都是不完整的,但能比单一的一段故事所描述的更细致。
Active Network (the mid 1990s to the early 2000s)
对于网络,研究人员的测试、配置新 idea 的开发流程通常是:
- 设计好新的协议,并在实验室小规模范围实验。
- 在更大的网络上做模拟(比如校园网)
- 如果效果好、资金等方面都到位,就可以通过 IETF 等组织来标准化这个协议。这个过程通常耗时非常久,使很多研究人员疲惫。
一些研究人员想要改变这个情况,他们追求一种能够打开网络控制的手段,因为其实从各种意义上来讲,传统网络是不可编程的。
Active Network 基本思路:
展现一个可编程接口(Network API),暴露各种单独网络节点的各种资源(处理进程、存储器、包队列等),还可以通过自定义功能来实现对经过这个节点的分组进行某种处理。
Active Network 使用两种编程模型:
- 胶囊。在分组中携带可以执行的代码,也就是说分组运行执行自定义操作。
- 可编程路由器和交换机,强调的是由可编程的交换机根据分组中的代码,执行不同的操作。
为什么成为了历史尘埃:
- 虽然进行了初步的网络可编程功能的探索,但是对象是数据平面的可编程性。数据平面的“杀手级”应用是非常少,或者说很难构想的。
- 对 active Network 的应用,需要引入了非常多 middlebox,这意味着不同硬件厂商提供的是不兼容的编程模型。也就是说虽然开放了可编程接口,但不同厂商的设备之间还是封闭的。
- 这种直接打开一个 API 暴露硬件内部处理细节的方式,目的是为了让实验人员的开发更方便,但这种方式不一定讨硬件供货商的喜。
- 对于一些紧迫的问题,也没有引人注目的解决效果。比如,还是不容易部署;没有进一步实现控制和数据平面的解耦合等。
虽然如此,但 Active Network 的初步尝试中,蕴含着 SDN 至今沿用的思想:
- 为了方便配置新的机器,方便研发
- 对网络行为的细粒度控制
- 方便研究人员进行研发的需求
对未来研究的智力贡献有:
- 可编程网络功能的思想。
- 对报头的解复用能力。
- 提供一个愿景——对 middlebox 的一种统一的架构
Control and Data Plane Separation (around 2001 to 2007)
到了二十一世纪,急速增加的网络流量对网络提出了可靠性、可预测性、性能的新要求。网络管理员寻求更好的管理网络的办法,以及想要实现一些新的功能。
传统的交换机和路由器体现了一种控制与数据平面的紧耦合,这使得一些对网络的 configuration debug、预测、控制路由行为等操作非常的具有挑战性。ISP 也为了管理范围越来越大的网络头疼,这需要更好的可靠性,需要更多的服务。这些驱动了这种创新:
- 在控制平面和数据平面之间有一个开放的接口。例如:ForCES(Forwarding and Control Separation)
- 对网络的一种逻辑上中心控制。(logical centralized control of the network)
与 Active Network 着眼点就有所不同了:
- 分离控制与数据平面的创新主要是由网络管理员来推动的,而 Active Network 主要是由终端用户和网络协议研究人员推动的。
- 前者主要注重控制平面的可编程性,而后者着重数据平面可编程性。
- 前者希望有一个对网络范围的清晰视线,后者只在设备配置这个层次。
Forces Protocol,是第一个将控制通道从分组交换网络中分离出来的协议,最早标准化于2003年。协议允许许多控制元素(control element,CE)去控制传输元素(forwarding element,FE)。也就是说,交换机、各种 FE,由一个叫 forces interface 的标准化的控制通道来控制。在forces interface 之上,又有各种控制器来控制 FE 的具体行为。这也是有一点像 OpenFlow 的模型。但这种方法存在一个问题:需要采取由供应商提供的标准、并配置新硬件。引入新的控制时很困难。这些障碍与早期的一些工作遇到的障碍是一样的,例如 Active Network。
为什么 ForCES 成为了历史尘埃:
- 对其有一些主要的争论是是否违反了 fate-sharing 原则
- vendor 还是不愿意开放接口。这是 OpenFlow 解决得较好的一个方面,使用 OpenFlow,硬件供货商无需暴露硬件内部细节。
- 对数据平面的控制还要依赖与现有协议,而没有提供更宽广范围的可编程性。对现有协议的依赖也限制了控制器提供的应用。因此也限制了 ForCES 的大规模应用。
但也是有着 SDN 思想:
- 有一个逻辑上处于中心的控制器,使用接口 API 来控制数据平面。
- 分布式状态管理。