摘要:这篇白皮书提出了openflow:一种研究者可以他们日常使用的网络中运行实验协议的方法;openflow是一种以太网交换机,带有内部流表和一种用以添加/删除流实体的标准接口,我们的目标是鼓励供应商添加openflow属性到他们产品交换中,为了在大学校园网的骨干网和配线柜中布署openflow;我们相信openflow是个很实用的折衷方法,一方面能让研究者们可以在异构的交换机中以统一的方式、以线速和端口高密集中运行实验;另一方面,供应商不需要暴露他们产品交换机的内部工作机制,除之此外,允许研究者在真实的流量环境中评估他们的想法。OpenFlow能在已提出的、像GENI这样的大型实验网中作为一种有用的校园网组件服务。使用商业的以太网交换机和路由器,斯坦福大学有两栋建筑很快会运行OpenFlow网络。我们将致力于鼓励在其他高校布署OpenFlow网络,还有,我们也鼓励你在你的高校校园网中考虑布署OpenFlow网络。
一、
对可编程网络的需求:网络已变成我们的业务、家庭和学校的关键基础设施的一部分。这成功对网络研究者们是一个祝福和诅咒,他们的工作更有重大的意义了,但造成一定影响的机会更遥远,在真实世界中对已有的网络创新造成影响的减少是因为巨大的的已安装设备和协议的基础,以及不愿尝试进行生产流量的实验,这样对新想法的准入已经创建了一个非常高的屏障。现在,在十分现实的环境中(例如,大规模携带九州联宇) 几乎没有可实用的方法去实验新的网络协议(如新的路由协议,或替代一个IP)以获得所需要的其广泛部署的信心。结果是来自网络研究联盟的最新想法没尝试且没有测试说就运行;因此,人们普遍认为网络基础设施已经僵化了。
已经考虑到这个问题,GENI被提出用于新的网络架构和分布式系统的实验,以虚拟化的方式,对网络资源(比如网络链路、网络处理元素、终端主机)进行虚拟化,对切片的分式分发给研究者,以独立地进行实验。这种方式降低新想法准入的屏障、提高在网络基础设施中的创新的速度,但是很难在近几年全国大范围的普及。本文主要回答:作为一个研究者,我们怎样才能在校园网中运行实验。
网络供应商不会在他们的网络设备上提供一个开放的、可编程的、虚拟化的平台。
已经存在一些开源的平台,但他们的性能和端口的密度满足不了我们的需要。最简单的实例就是具有一个操作系统和多个网络接口的PC,性能上1Gbit/s,而我们配线柜上分组处理速度是100Gbit/s。
现有的一些具有线速处理的专门硬件的平台也不太适合大学校园配线柜。比如布署在华盛顿大学的基于ATCA的虚拟化可编程的称为Supercharged PlanetLab平台的路由器,能够使用网络处理器并行以速线地处理来自很多个接口的分组,这种方法长远来看是很有希望的,但在高校校园网配线柜里大范围布署太贵了。另一个极端是用于教学和科研实验室的NetFPGA,NetFPGA是只限有4个吉比特网络接口,不满足用于配线柜。
由此看来,商业交换机太封闭且不灵活,而研究解决方案性能不佳、且价格太贵。一个更有作为的方案是在通用性和寻求交换机的灵活性之间作个折衷。
- 适合于高性能和低成本的实现。
- 能支持范围广泛的研究
- 确信能隔离实验流量与生产流量
- 与厂商的平台封闭性需要相一致
本文介绍了OpenFlow的交换机,一次满足这些四个目标的初步尝试的详述。
二、
openflow交换机
现在的大多数交换机和路由器包含一个以线速运行的流表,以实现防火墙、NAT、Qos和统计信息,每个设备网络供应商之间的流表是不同的,但有一个在很多交换机和路由器中运行的公用的功能集, OpenFlow交换机就利用这个公用功能集。
OpenFlow提供一个开源的协议,以对在不同的交换机和路由器中的流表进行编程。网络管理 员能对网络流量分为生产流量和研究流量。研究者可以控制他们自己的流量-通过选择他们的数据据所经过的路由器和数据报所接收到的处理方法。通过这种方式,研究者能够测试新的路由协议、安全模式、地址分配方案和IP协议的替换方案。在相同的网络,这个生产网络被隔离且与如今一样方式被处理。
OpenFlow交换机的数据链路由一个流表、与每个流表项相关的运作构成。OpenFlow交换机所支持的一组动作是可以扩展的。但是,下面我们描述了所有交换机的最低要求,为了高性能和低成本,数据链路必须有一个精心规定的弹性度。这意味着放弃特定的任意处理每个数据包的能力,寻求一个比较有限的、但仍然有用的行为范围。因此,在文章的后面的,定义所有的OpenFlow交换机的一个基本的对行为需求的集合。
一个OpenFlow交换机至少由三部分组成:1)一个流表,每个流表项都带有一个相关行为,以告诉交换机如何处理流;2)一个安全通道,连接交换机到远程控制处理器(叫做控制器),这通道使用3)OpenFlow协议在控制器和交换机之间允许发送命令和数据报。这协议为控制器连接到交换机提供一个开放的、标准的方式,通过指定一个标准的接口(OpenFlow协议:通过这个协议流表可以进行扩展性定义),这个OpenFlow交换机避免了研究者对交换机进行配置的需求。
把交换机分类成专用的OpenFlow交换机是很有用的,这种交换机不支持二层和三层的处理,且对于OpenFlow功能的通用的商用以太网交换机和路由器,OpenFlow协议和接口已经作为一种新的特性添加上去了。
专用的OpenFlow交换机:一个专用的OpenFlow交换机是在端口之间传递数据报的一个无声的数据链路元素,由远程的控制定义,图1显示了OpenFlow交换机的实例。
在这上下文中,流被广泛的定义,且只会被流表的特别的实现能力所限。比如:一个流可以是一个TCP连接、或是来自一个特别的MAC地址或IP地址的数据包、或是具有相同WLAN标签的数据包、或者是来自相同交换机端口的所有数据包。在涉及到非IPV4数据包的实验中,流被定义为所有的匹配一个特别的(但非标准)头部的数据包。
每个流表项都有一个与之相关联的动作,基本的三个动作(所有OpenFlow交换机必须支持)是:
- 转发流的数据包到一个给定的端口。这得允许数据包可以通过网络被路由,在大多数交换机上期待这以线速的方式发生。
- 封装和转发这个流的数据包到一个控制器,数据包被传递到安全通道,在安全通道数据包被封装并发送到控制器,典型地用于在一个新的流的第一个包,这样的控制器可以决定是否流应该被添加到流表中。或在某些实验中,它可以被用来对所有的数据包转发到一个控制器处理。
- 丢弃这流的数据包。可用于安全,遏制拒绝服务攻击,或者减少从终端主机伪广播发现流。
在流表中的一个实体有三个字段:1)一个定义流的数据包头;2)动作:它定义数据包应该怎样被处理。3)统计:跟踪数据包的数量和每个流的字节数,还有最后一个数据包匹配的流的时间(以帮助去除无效的流量)。
在第一代“类型0”交换机中,流头是在
表1所示的10 - 元组。一个TCP流可以被所有十个字段指定,而一个IP流可能在其定义中不包含传输端口。每个报头字段可以是通配符,以允许流量的聚合,比如在只有VLAN ID被定义的流将适用于在特定的VLAN的所有流量。
OpenFlow交换机的
详细需求由theOpenFlow交换机说明书
定义。
具有OpenFlow功能的交换机:
通过添加
流表、安全通道、OpenFlow协议(我们在部分5列出一些例子)形成的OpenFlow特性,
一些商业交换机,路由器和接入点的功能将会
增强。通常情况下,流量表会重复使用现有的硬件,比如:一个TCAM,安全通道和协议将被移植到交换机的运行系统。图2显示了一个由
OpenFlow功能的商用交换机和接入点
形成的网络。在这个例子中,所有的流表是由相同的控制器进行管理,OpenFlow协议允许一个交换机可以由两个或多个控制器控制,以提高性能或鲁棒性。
我们的目标是在具有正常流量和应用的现有一个生产网络中进行实验。因此,为了赢得了网络管理员的信任,具有OpenFlow的交换机必须隔离实验流量(由流表处理)和生产流量,这个生产流量是由正常的第2层和第3层的交换机的链路处理 。这里有两种方法来实现这种分离。一种是增加第4种动作:
4.通过交换机正常的处理链路转发数据包。
另一种方法是为实验流量和生产流量分别定义VLAN集合。这两种方法都允许正常生产流量(不是实验的一部分)由交换机以通常的方式进行处理。所有OpenFlow功能的交换机都必须支持一种方法或另外一种方法,有些二种方法都会支持。
附加的特性:如果交换机支持报头格式及以上提到的四个基本动作(和详细内容在OpenFlow交换机说明书中),那么我们把它称为一个“类型0”交换机。我们期望很多交换机将支持附加的动作,例如重写数据包报头的一部分(例如,NAT,或者在中间环节进行地址的混淆处理),并且将数据包映射到一个优先级。同样,一些流量表将能够匹配数据包报头的任意字段,能够进行新的非IP协议的实验。作为一个特定的功能集的出现,我们将定义一个“类型1”的交换机。
控制器:一个控制器在实验时可以添加/删除流表中的流实体,比如:一个静态控制器可能是在一次实验过程中运行在主机上一个简单应用程序,以静态地建立流互连一组测试主机,在这种情况下,流类似于目前网络中的VLAN,提供了一种简单的机制来把实验流量与生产流量相隔离,从这个角度来看,OpenFlow是VLAN的一个抽象。
人们还可以设想更复杂的控制器,实验过程中可以动态地添加/删除流。在一个用例模型中,一个研究人员可能控制整个OpenFlow交换机网络,还可以自由决定所用的流量该怎么处理,一个更复杂的控制器可以支持多个研究人员,每一个研究人员具有不同的帐户和权限,使他们能够在不同的集合流上运行多个独立的实验。在一个特定的研究者(例如,通过在控制器上运行的策略表)控制下的流可以被传递给研究者的用户级控制程序,这个控制程序然后决定是否一个新的流条目应该被添加到交换机的网络中。
三、
使用openflow
怎样使用OpenFlow交换机呢?这里举个简单的例子,设想一下,比如:Amy(研究人员)发明一种新的代替OSPF协议的路由协议Amy-OSPF,她想在OpenFlow的交换机网络中测试一下她的协议,在不改变任何终端主机软件情况下,Amy-OSPF将在一个控制器上运行,每次一个新的应用程序流开始,Amy-OSPF获取一条通过一系列OpenFlow交换机的一个路径,在沿着这条路径的每台交换机添加一个流条目,在她实验中,Amy决定对从她自己的台式PC至OpenFlow网络的流量使用Amy-OSPF协议,所以她不会中断其他人的网络,要做到这一点,她定义所有通过她的主机连接到的交换机端口, 进入OpenFlow交换机的流量成一个流,添加一个带有动作“封装和所有的数据包转发给控制器”的流条目,当她的数据包到达一个控制器,她的新协议选择路由,并增加了 一个新的流条目(为应用程序流)至沿所选择的路径所经过的每个交换机。当后续数据包到达交换机,它们是被流量表快速处理(以线速)。
控制器在一个实验过程中动态地添加和删除流条目,这里有关于一个控制器的性能、可靠性和可扩展性的合理的问题想请教一下,:这样一个集中控制器是否能足够快,以处理新的流量和对流交换机进行编程?当一个控制器出现故障,会发生什么呢?在一定程度上这些问题都在Ethane原型的上下文中已经得到解决,Ethane原型使用简单的流量交换机和中央控制器的背景下处理[ 7 ] 。初步的结果表明,基于一个低成本的台式电脑的 Ethane控制器每秒可以处理超过10,000个新的流量 - 足够用于一个大的型的大学校园。当然,新的数据流可以被处理的速率将取决于由研究人员的实验所需要的数据处理的复杂性。 但是它给了我们信心,有意义的实验是可以运行的。通过使一个控制器(以及实验)无状态,扩展性和冗余性是可以做到的,在多个单独的设备之间允许做到简单的负载均衡。
3.1、在生产网络网络中的实验
在有些时候,Amy在一个很多其他人使用的网络中测试她的新协议,因此,我们想网络有其它的二个附加的属性:
- 属于其它用户而不是Amy的数据包应该被在“品牌”厂商的交换机和路由器上运行的标准的、测试路由协议所路由。
- Amy应该只能够为她自己的流添加流条目,或者对于其他流量她的网络管理员已经允许她去控制。
属性1是通过OpenFlow功能的交换机达到的。在Amy的实验中,不是来自Amy的个人电脑的所有数据包的默认动作是能够通过正常的处理链路转发它们,而Amy自己的数据包将直接转发到输出端口,不必被正常的链路处理。
属性2依靠于控制器,控制器应被看作是一个平台,使研究人员能够实施各种实验,属性2的限制在适当使用权限的情况下能达到,或者其他方式来限制个别的研究者的权限以控制流条目,这些类似权限机制的确切性质将取决于控制器是如何实现的。我们期望将会有各种控制器出现。举一个控制器具体实现的例子,作为Ethane工作的后继工作,一些作者正在研究一种称为 NOX的控制器[8]。一个完全不同的控制器可以通过对GENI管理软件延伸到OpenFlow的网络而出现。
3.2 更多的例子
正如任何实验平台,该组实验将超过我们前期可以想到的 - 大多数的OpenFlow网络中的实验是尚未想到的。在这里,为了说明,我们提供了 OpenFlow功能的网络可以如何被用来试验新的网络应用和架构的一些例子。
实
例1:网络管理和接入控制
:我们将使用 Ethane作为我们的第一个例子[7],因为它是
启迪了OpenFlow的研究。事实上,一个OpenFlow交换机可以被看作是 Ethane数据链路交换机的抽象。Ethane使用一种
专用实现的
控制器,它适合于网络管理和控制,Ethane管理着准入和流量的路由,Ethane的基本思想是允计网络管理人员在中央控制中定义定域网的策略,这种策略是通过对每个新的流做准入控制决定强制实施的,控制器会对照一组规则检查新的流量,比如:“客户端可以有使用TCP进行通信,但只能通过一个web代理进行通信”或“VoIP电话都不允许与笔记本电脑进行通讯”。一个控制器通过管理地地与名称之间的所有绑定来把数据包和发送者关联在一起-它从根本上接管DNS、DHCP和用户接入时的认证,保持跟踪他们是接入交换机的哪一个端口(或者接入点),可以设想一个Ethane的扩展:在这个Ethane扩展中一个策略控制着特定的流被发送到在一个控制器中的用户进程,从而允许特定的研究处理在网络中执行。
实例2:VLANS:OpenFlow像VLAN一样,可以轻松地为用户提供他们自己的独立的网络,最简单的方法是静态地申明一组指定已给定VLAN ID的流可以通过的哪些端口的流。标识为来自于单个用户(比如 来自特定交换机的端口或MAC地址)的流被具有正确的VLAN ID的交换机所标记。
一个更加动态的方法可能是在运行时使用一个控制器来管理用户的认证和使用用户位置的知识标记流量。
实例3:移动无线VOIP客户端:在这个例子中考虑支持WiFi功能的手机的一个新的呼叫切换机制的一个实验。在实验中,VoIP客户端通过OpenFlow功能的网络建立一条新的连接,一个控制器被实施来追踪客户端的位置,重新路由连接-通过重新编排程流程表-当用户在网络间穿越移动时,可以实现从一个接入点到另一个的无缝切换。
实例4:一种非ip网络:到目前为止,我们的例子都假设在IP网络中,但是OpenFlow并不需要的数据包必须是属于任何一种格式-只要流量表能够匹配在数据包报头,这将允许使用新的命名、寻址和路由方案的实验,这里有几种方法可以做到OpenFlow的功能的交换机支持非IP流量,比如:流量可以使用他们的以太网帧头(MAC源和目的地址)进行标识,或者使用一个新的以太网类型值,或在IP层进行标识,或者通过一个新的IP版本号。更主要地,我们希望未来的交换机将允许一个控制器来创建一个通用的掩码(偏移量+值+掩码),允许数据包以研究者指定的方式进行处理。
实例5:处理分组而不仅仅是流:上面的例子都是涉及到流的实验-其中一个控制器决定流何时开始,当然,这里有些有意思的实验,要求对每个数据包执行处理。例如:检查每一个数据包的入侵检测系统,一个显式拥塞控制机制,或者要转换数据包从一种格式至另外一种格式时,要修改数据包的内容。
在OpenFlow功能的网络中处理数据包,这里有两种基本的方式。第一种,也是最简单,是强制使一个流的所有数据包通过一个控制器,要做到这一点,控制器不要往流交换机内添加新的流条目-它只是允许交换机默认地转发每个数据包到一个控制器,这样以性能为代价,获取灵活性的优势,它可能为测试新协议的功能提供一种有效途径,但要部署在大型网络中是不大可能有兴趣的。
处理数据包的第二个方法是将它们路由到一个可编程的交换机,由这个交换机对数据包进行处理。比如:一个基于NetFPGA可编程路由器,其优点就是数据包可以在用户可定义的方式以线速速率处理这个数据包,图3显示这是如何做到的实例,在这实例中,OpenFlow交换机从根本上作为一个接线板一样运行,使数据包到达NetFPGA。在某些情况下,NetFPGA板(插入a Linux 主机上一块PCI板)可能会被放置在配线柜内OpenFlow交换机旁,或者(很有可能)在实验室。
四、openflow联盟
OpenFlow联盟旨在推广的OpenFlow和维护OpenFlow交换机说明书,该联盟是一组研究人员和在大学或学院的网络管理员,他们相信如果他们网络中安装OpenFlow交换机,他们的研空使命将得到加强,会员资格对任何在学校,学院,大学或世界各地的政府机构的人都是开放和自由的,OpenFlow的联盟欢迎个体成员的加入,只要他们不是制造或销售以太网交换机,路由器或无线接入点的员工(因为我们希望保持联盟不受供应商的影响),要加入,请发送电子邮件至[email protected]。
该联盟的网站包含了OpenFlow的交换机说明书、联盟成员列表、OpenFlow交换机参加安装实现方法。
授权模式:在OpenFlow的交换机规格是免费提供给所有的商业和非商业用途(确切的措辞上的网站)。那些声称“支持OpenFlow功能”的商业交换机必须符合的OpenFlow交换机 “Type 0”型的要求,正如在OpenFlow的交换机说明书中定义的一样,OpenFlow是斯坦福大学的商标,代表联盟,将会被保护。
五、部署openflow交换机
我们相信,对于网络设备厂商而言,出售OpenFlow功能的交换机给研究团体是个很有趣的市场机会,成千上万的高校每一个建筑都包含有以太网交换机和路由器的配线柜,无线接入点在校园蔓延。
我们正积极与多个交换机、路由器产商合作,他们正在通过在现有的硬件上实现流表以添加OpenFlow特性到他们的产品上,即硬件是不必要改变,交换机在现有的处理器上运行安全通道软件,我们发现网络设备供应商对添加的OpenFlow功能的想法很坦率的,在不需要暴露他们产品内部机制前提下,大多数厂商都很想支持研究团体。
我们正在斯坦福大学的计算机科学与电气工程两个部门部署大量的OpenFlow网络。在两栋楼的网络将会运行OpenFlow的交换机所代替。最终,所有的流量会经过OpenFlow网络,在网络管理员的控制下, 生产流量和实验流量将会被隔离在不同的Vlan ID 下, 研究人员将控制自己的流量,并能够添加/删除流条目。
我们也希望能够研究界能开发出许多不同的OpenFlow的交换机,OpenFlow的网站上包含了"Type"0交换机的不同平台的参加设计:Linux操作系统(软件),OpenWRT的(软件,适用于接入点),和NetFPGA(硬件,4个1GE的端口),随着研究界创建越来越多的参考设计,我们也将发布,我们鼓励开发人员对照参考设计测试他们的交换机。
公布在网站上的所有OpenFlow交换机的参考实现,将是开源和免费用于商业和非商业用途上。
六、结论
我们相信,OpenFlow是一个务实的折衷,使研究人员能够以一个统一的方式在多种多样的交换机和路由器进行实验,而不需要厂商来暴露他们的产品的内部工作机制,也不需要研究人员编写供应商专用的控制软件。
如果我们在我们的校园内成功部署OpenFlow网络,我们希望OpenFlow将逐步赶上其他大学,增加支持实验的网络数量。我们希望新一代的控制软件的出现,使研究人员能够重复使用控制器和实验,并建立其他人的工作。而随着时间的推移,我们希望在不同大学的OpenFlow网络孤岛,通过隧道和重叠网络将联系在一起,或者可能是通过把大学互连在一起的骨干网络上运行新的OpenFlow网络。
七、参考文献