论文阅读:OpenFlow: Enabling Innovation in Campus Networks
摘要:
本白皮书提出了OpenFlow——研究人员在他们每天使用的网络中运行实验协议的一种方式。 OpenFlow基于以太网交换机,具有内部流表以及用于添加和删除流条目的标准化接口。我们的目标是鼓励网络供应商将OpenFlow添加到他们的交换机产品中,以部署在大学校园主干网和布线室中。我们认为OpenFlow是一个务实的折衷方案:一方面,它允许研究人员以一致的方式以线速和高端口密度在异构交换机上进行实验;另一方面,供应商无需公开其交换机的内部工作原理。
背景/问题:
如今,几乎没有实际方法可以在足够现实的环境中(例如,大规模承载实际流量)尝试新的网络协议,更没有获得广泛部署所需的信心,来自网络研究界的大多数新想法都未经试用和测试。因此,人们普遍认为网络基础设施已经“僵化”。认识到这个问题之后,网络社区正在努力开发可编程网络,例如GENI。
可编程网络需要可编程交换机和路由器(使用虚拟化),它们可以同时处理多个隔离实验网络的数据包。例如,在GENI中,设想给研究人员分配整个网络上的一部分资源,该资源包括一部分网络链路,分组处理元件(例如路由器)和终端主机,研究人员对切片进行编程使其表现出所需的效果。一个切片可以跨越整个骨干网,接入网,大学校园,工业研究实验室,并包括配线间,无线网络和传感器网络。虚拟的可编程网络可以降低新思想的进入门槛,从而提高网络基础架构的创新速度,但是全国性设施的计划雄心勃勃的却要花费很高的成本,并且部署它们也将花费数年。
解决方法:
因此,商业解决方案过于封闭和僵化,研究解决方案要么性能不足,要么价格昂贵, 具有完全通用性的研究解决方案似乎不可能克服其性能或成本限制。
一种更有前途的方法是在通用性上取得妥协,并寻求一定程度的转换灵活性:
-
适合高性能和低成本实施
-
能够支持广泛的研究
-
确保将实验流量与生产流量隔离
-
符合供应商对封闭平台的需求
本文介绍了OpenFlow交换机-一种规范,它是最初试图满足这四个目标的规范。
实现细节:
OpenFlow交换机至少由三部分组成:
-
流表:每个流条目都有一个相关联的动作,以告知开关如何处理流程
-
将交换机连接到远程控制过程(称为控制器)的安全通道,允许使用以下命令在控制器和交换机之间发送命令和数据包
-
OpenFlow协议:它为控制器与交换机进行通信提供了一种开放的标准方式。通过指定标准接口(OpenFlow协议),可以从外部定义流表中的条目,OpenFlow交换机避免了研究人员对交换机进行编程的需要。
流表中的条目具有三个字段:
-
定义流的数据包头
-
定义数据包应如何处理的动作
-
统计信息,统计数据的数量,每个流的数据包和字节,以及自最后一个数据包以来与该流匹配的时间(以帮助删除非活动流)。
在第一代“类型0”交换机中,流头是表1中所示的10元组。TCP流可以由所有十个字段指定,而IP流在其定义中可能不包括传输端口。 每个标头字段可以是通配符,以允许流的聚合,例如仅定义VLAN ID的流将应用于特定VLAN上的所有通信。
这是在OpenFlow交换机规范中找出来的流表匹配的过程。
流表条目由其匹配字段和优先级标识:匹配字段和优先级共同构成了特定流表中的唯一流条目。
管道处理始终从第一个流表的入口处理开始:必须首先将包与流表0的流条目进行匹配(请参见图3)。可以使用其他入口流表,具体取决于第一个表中的匹配结果。
如果流条目的所有匹配字段都与数据包中的相应报头字段和管道字段匹配,则数据包与流条目匹配。如果数据包与流表中的流条目不匹配,则表示表未命中,表未命中的行为取决于表配置。
每个流条目包含一组指令,当数据包与该条目匹配时将执行这些指令,这些指令导致数据包,操作集和/或管道处理的更改(请参见上图)。
流条目可以使用与特定匹配关联的Write-Action指令或Clear-Action指令来修改操作集。