一、背景
随着网络的快速发展和普及,设备和协议的复杂性导致了网络实验的困难。当时,几乎没有实际方法可以在足够现实的环境中尝试新的网络协议,来自网络学术、产业界的大多数新想法都未经试用和测试。因此,人们普遍认为网络基础设施已经“僵化”。认识到这个问题之后,人们便努力朝着开发可编程网络,例如GENI。
构建实验网络是在进行网络相关研究时需要完成的一项重要工作。以往构建网络时,普遍采用的方法是将一定台数的计算机进行物理连接。但随着VMware 等虚拟软件的上市和普及,通过组合使用虚拟机创建虚拟平台,构建实验环境的方法逐渐成为了主流。像这样构建的虚拟实验环境中,比较著名的有提供全球平台、支持广域分布式环境的PlanetLab;也有运用校园网,不通过整个互联网,而只是在特定的范围内虚拟地创建出来的网络。
以美国为中心,从零开始重新创建网络的新一代网络技术研究已成为了近几年来的发展趋势。虽然技术人员已经提出了各种新一代网络技术的方案,但在进行这些新技术的实验时,如果有某种架构能够实现比以往互联网通信设备更加精确的控制,则非常方便。
市面上现有的交换机设备内部并不公开,也就是非开源,一方面担心被更改的内部结构做新的实验会导致网络崩溃,更重要的是开源无疑降低了竞争者的门槛。
因此,商业解决方案过于封闭和僵化,研究解决方案要么性能不足,要么成本过高,研究完全的通用性解决方案似乎不能克服其性能或成本限制。作者本人在成本和性能方面之间做了折中,认为解决方案应具有以下特点:
- 易于高性能和低成本实现。
- 能够支持广泛的研究。
- 确保将实验流量与生产流量隔离。
- 符合供应商对封闭平台的需求。
在此背景下,为了更轻松地构建各种实验网络,斯坦福大学开发了OpenFlow。实际上,在由美国NSF提供支持的大规模虚拟实验网络环境GENI项目中就使用了OpenFlow。
二、问题
- 如何不改变现有网络硬件结构,网络设备供应商不开源的基础上,实现异构网络上进行统一高效的开发实验,提高网络的可创新性。
- 如何将实验数据流和生产数据流分隔开并满足高性能低成本
三、解决方案总结
3.1 OpenFlow组件
OpenFlow网络由OpenFlow网络设备(OpenFlow 交换机)、控制器(OpenFlow控制器)、用于连接设备和控制器的安全通道(Secure Channel)以及OpenFlow表项组成。其中,OpenFlow 交换机设备和OpenFlow控制器是组成OpenFlow网络的实体,要求能够支持安全信道和OpenFlow表项。

OpenFlow交换机至少由三部分组成:
流表:每个流条目都有一个相关联的动作,以告知开关如何处理流程
流表中的条目具有三个字段:
- 定义流的数据包头
- 定义数据包应如何处理的动作
- 统计信息,统计数据的数量,每个流的数据包和字节,以及自最后一个数据包以来与该流匹配的时间(以帮助删除非活动流)。
在“类型0”交换机中,流头是表1中所示的10元组。TCP流可以由所有十个字段指定,而IP流在其定义中可能不包括传输端口。 每个标头字段可以是通配符,以允许流的聚合,例如仅定义VLAN ID的流将应用于特定VLAN上的所有通信。

将交换机连接到远程控制过程(称为控制器)的安全通道,允许使用以下命令在控制器和交换机之间发送命令和数据包
OpenFlow协议:它为控制器与交换机进行通信提供了一种开放的标准方式。通过指定标准接口(OpenFlow协议),可以从外部定义流表中的条目,OpenFlow交换机避免了研究人员对交换机进行编程的需要。
3.2流表处理流程
OpenFlow规范中定义了流水线式的处理流程,报文匹配处理流程如下图所示:

当报文进入Switch后,必须从最小的Flow Table开始依次匹配。Flow Table可以按次序从小到大越级跳转,但不能从某一Flow Table向前跳转至编号更小的Flow Table。当报文成功匹配一条Flow Entry后,将首先更新该Flow Entry对应的统计数据(如成功匹配数据包总数目和总字节数等),然后根据Flow Table中的指令进行相应操作,比如跳转至后续某一Flow Table继续处理,修改或者立即执行该数据包对应的Action Set等。当数据包已经处于最后一个Flow Table时,其对应的Action Set中的所有Action将被执行,包括转发至某一端口,修改数据包某一字段,丢弃数据包等。具体实现时,OpenFlow交换机还需要对匹配表项次数进行计数、更新匹配集和元数据等操作。
下图为流表匹配流程示意图。

3.3 实验与生产分流方法
所有的流表都由同一个控制器管理,OpenFlow协议允许一个交换机由两个或多个控制器控制,以提高性能或健壮性。我们的目标是使实验能够在现有的生产网络中与常规流量和应用程序一起进行。因此,为了赢得网络管理员的信任,启用OpenFlow的交换机必须将实验流量(由流表处理)与生产流量(由交换机的正常第2层和第3层管道处理)隔离开来。
实现这种分离有两种方法:
- 一是增加第四个动作:通过交换机的正常处理管道转发此流的数据包。
- 另一个是为实验和生产流量定义单独的VLAN集。
这两种方法都允许交换机以通常的方式处理不属于实验的正常生产流量,所有启用OpenFlow-enabled的交换机都需要支持一种或另一种方法,有些将同时支持这两种方法。
控制器代表实验从流表中添加和删除流条目,例如,静态控制器可能是一个运行在PC上的简单应用程序,用于静态地建立流,以便在实验期间将一组测试的计算机互连。在这种情况下,流类似于当前网络中的VLAN——提供了一种简单的机制来将实验流量与生产网络隔离。从这个角度OpenFlow是Vlan的一个泛化。
四、方案理解
核心思想就是将原本完全由交换机和路由器控制的数据包转发过程,转化为由OpenFlow交换机和控制服务器分别完成的独立过程。
转变背后进行的实际上是控制权的更迭:传统网络中数据包的流向是人为指定的,虽然交换机、路由器拥有控制权,却没有数据流的概念,只进行数据包级别的交换;而在OpenFlow网络中,统一的控制服务器取代路由,决定了所有数据包在网络中传输路径。
OpenFlow交换机会在本地维护一个与转发表不同的流表(Flow Table),如果要转发的数据包在流表中有对应项,则直接进行快速转发;若流表中没有此项,数据包就会被发送到控制服务器进行传输路径的确认,再根据下发结果进行转发。



![[学习笔记]OpenFlow概述(1)](https://img-blog.csdnimg.cn/ecd60b28706b4008a5c712c85173848e.png)










