数据流的转发策略,流表的格式由OpenFlow标准规定。
当交换机接收到某一个数据流的数据包时,会根据流表中的规定对其进行转发。需要注意的是,转发策略的制定是由与这台交换机连接的计算机完成的,更确切地说,是由这台计算机上运行的控制器(controller)程序完成的。控制器根据网络应用的不同需求为相应的数据流制定转发规则,这些规则通过OpenFlow协议传递到被其控制的交换机上。为了保
图2 基于OpenFlow的软件定义网络工作流程询路由表获取每一个数据包的转发规则,通常是根据数据包的IP地址查找路由表中该地址所对应的输出端口,然后由硬件完成缓存和转发等操作。当网络设备供应商制造这些传统的交换机时,负责制定转发规则的控制面和负责实际转发操作的数据面是紧密耦合、不可分割的。而在软件定义网络中,交由此使得配置交换机的转发规则更加开放和灵活。
证通信的安全性,OpenFlow交换机为控制器专门开设一条安全通道(secure channel),随后,OpenFlow协议负责把这些规则写入交换机的流表里供转发时查阅。采用这种方式,网络管理员能够以数据流为单位,对所有的交换机进行控制。为了确保集中式控制,必须要有对当前网络全局信息的把握,这些
OpenFlow只是实现软件定义网络的一种选择,不同的网络设备生产商都可以自行定义实现控制面与数据面通信的标准,但都不妨碍其实现软件定义网络。OpenFlow的支持者们成立了Open-动OpenFlow的流行并维护其标准[4]。另外,虽然OpenFlow规定了控制面与数据面的通信接口和流表格式,但是数据面(即控制器)应如何实现却没有相应的规定。当前支持OpenFlow的控制器实现有NOX, Floodlight和Maestro [5,6]。
换机的控制面和数据面是可以分开的(如图1所示),信息可以存储到一个数据库中供控制器查阅。
软件定义网络如何工作
两者之间的通信就成为关键。Clean Slate科研组为软件定义网络交换机的控制面与数据面制定了统一的接口和通信规则,包括控制面与数据面的信息通道、通信协议和转发规则表示格式。这套标准称为OpenFlow[4]。人们通常把遵循这种标准而生产出来的交换机称为OpenFlow交换机。由于OpenFlow标准是实现软件定义网络体系结构的核心,因此人们谈起软件定义网络时通常就会提起OpenFlow。
从图2的软件定义网络实例中可以了解软件定义网络的工作流程。图中的每一个OpenFlow交换机中都存在一张流表(flow table),用来明确每一种
传统交换机控制面与数据面的紧密耦合打破,Flow交换机论坛(OpenFlow switch consortium)来推
软件定义网络有什么好处
与传统网络相比,基于OpenFlow的软件定义网络具有很多优势[3],最明显的有三点:第一,提供面向应用与业务的网络基础设施;第二,具有方
便灵活的网络管理功能;第三,为网络基础设施本身的创新活动提供便利。
建造互联网的初衷是为了提供一种数据通信的管道。然而时至今日,互联网的角色早已从数据通道变成了承载内容、应用、存储和服务的全球性网络基础设施。软件定义网络体系结构能够让网络更加直接地为应用服务,这是因为应用可以通过控制器让网络执行符合其要求的数据转发策略。例如,当网络发生拥塞时,对于视频传输应用,丢包是可以接受的,原因在于此应用对于时延更为敏感。然而对于电子邮件之类的应用,保证数据的可靠到达更为重要。软件定义网络控制器可以根据应用的不同要求和特性为其制定转发策略,如优先级设定与撤销、丢包策略,甚至可以为不同应用类型的数据流制定不同的传输路径,其核心是让网络应用能够与网络基础设施进行更加有效的沟通。在传统的网络体系结构中,这种服务质量保证机制也许可以实现,然而当来自不同生产商的交换机数量达到成千上万甚至更多时,控制面与数据面的紧密耦合就会导致这种机制和网络管理的实现变得非常困难。软件定义网络体系对于网络管理来说,提供了一种集中式的、与设备生产商无关的方式,网管人员无须对设备逐一配置,只需通过集中式的控制器即可对网络进行快速部署和配置。不仅如此,软件定义网络开放的控制面使网管人员可以从用户、设备和应用等不同粒度对网络进行控制,使开发和部署各种网络自动控制工具更加方便。
软件定义网络不仅能为已有的应用、服务和管理提供更加贴近网络的支持,其开放体系也能为网络本身的创新提供方便。如果一个大学的研究者想在校园网上验证自己设计的新型网络协议,这在传统网络体系下是非常困难的,原因在于新型协议要在网络设备的数据面进行修改,而传统网络体系结构的控制面与数据面是紧密耦合的。在软件定义网络下,管理员可以将正常的网络流与实验网络流区分开来,研究者通过控制器为实验涉及到的交换机
设定新的转发规则,从而控制自己的实验网络流。软件定义网络的这一特点,正如Clean Slate科研组所说:为创新开放互联网基础设施(open up Internet infrastructure for innovations)。
软件定义网络思想的根源在哪里
软件定义网络的核心思想是开放网络基础设施,然而这一思想并不是今天才被提出来。20世纪90年代,为了能够让网络快速部署和管理各种新颖的服务以获得更好的用户体验,人们提出可编程网络(programmable networks)的概念,其核心思想是让
网络基础设施具有开放性、可扩展性和可编程性[7]。然而,由于网络设备提供的软件控制系统往往不能满足新型网络服务对于灵活性的要求,因此网络的可编程性取决于网络硬件与控制软件的解耦。所以问题可以归结为“如何‘打开那些盒子’以部署第三方控制软件和服务”(how do we go about
“open-ing up the boxes” for deployment of third party control software and services)[7]。当时,解决这一问题的方法被归为两个流派,第一个流派以Opensig社区为代表[7],主张开放交换机或路由器使得第三方控制软件可以对硬件进行访问和控制;第二个流派以主动网络(active networking)社区为代表,主张网络具有程序识别功能,网络中传递的可以是一种称为胶囊(capsule)的程序段,网络则根据自己收到的程序段进行工作[8]。
在今天看来,软件定义网络的思想与Opensig社区当年的方案十分相似。然而,软件定义网络与Opensig方案的显著区别在于前者定义了新的控制软件与网络硬件的通信接口,如OpenFlow,而不是使用中间件技术,如对象请求代理(object request broker, ORB)[9]。中间件是操作系统和应用程序之间的通用服务,其主要作用是用来屏蔽网络硬件平台的差异性和操作系统与网络协议的异构性,使应用程序能够运行于不同平台上,从而实现网络可编程性。相比之下,软件定义网络对于硬件的控制更加直接,不用软件方法屏蔽软硬件差异,软硬件都必
须遵守诸如OpenFlow这样的协议。