1.概述

OpenFlow是一种供研究者在日常使用的网络上运行其实验性协议的方法,其基于以太网交换机,在交换机中增加一个内部流表,以及用来增、删流表中流表项的接口。
OpenFlow能让开发者可以在异构的交换机中以统一的方式、以线速和端口高密集中运行实验,使得开发者在真实的开发环境中评估方案,同时供应商无需报录他们的交换机产品内部的工作机制。

2.可编程网络的需求

随着计算机网络的发展,网络的规模越来越大,大量已安装、工作的设备与协议使得对新方法的植入产生了非常高的壁垒,使得网络基础结构僵化。在此背景下,网络供应商并没有在他们的网络设备上提供一个开放、可编程的平台,而目前开源的平台的性能与端口密度还未能满足需求,且价格太贵。
因此OpenFlow要满足以下四个要求:

  • 高性能同时低成本
  • 支持范围广泛的研究
  • 能管理实验流量与生产流量
  • 与厂商的平台封闭性相一致

3.OpenFlow交换机

现阶段大部分交换机和路由器都包含一个有公用功能集的流表,用来实现防火墙等功能,而OpenFlow提供一个开源协议,用以对不同交换机和路由器中的流表进行编程,网络管理员可以对网络流量分为生产流量与实验流量。开发者可以控制自己的流量,通过选择他们的数据所流经的路由器和数据报的处理方法,从而开发者得以测试新的路由协议、安全模式等。
OpenFlow交换机至少由三个部分组成:
①一个流表,每个表项都带有一个相关行为用以高数交换机如何处理流;
②一个安全通道,连接交换机到远程控制处理器,这个通道使用流;
③OpenFlow协议,这协议为控制器连接到交换机提供一个开放的、标准的方式,通过指定一个标准的接口,使得控制器和交换机之间允许发送命令和数据报,进行扩展性定义,避免了开发者对交换机进行配置的需求。

3.1OpenFlow专用交换机

image.png
如图1所示,此场景下交换机仅按远程控制器的定义在端口之间转发数据,此时流的定义是宽泛的,它可能是TCP链接,或者来自特定MAC地址的包等。
每个流表项都有个与之关联的简单行为,该行为至少包含以下三点:
①转发流的数据包到一个或者多个端口,允许此流通过网络。在多数交换机中,转发是线速的。
②封装并转发此流的数据包到控制器,数据包首先被投递到安全通道,在这里被封装并最终发送给控制器。典型应用是某个流的第一个包,控制器可以决定是否将此流添加到流表中。或者是在某些实验中,此行为可能被用来将所有数据包都转发给控制器进行处理。
③丢弃流的数据包,主要出于安全目的。如遏制拒绝服务攻击,减少来自于终端的伪广播发现流量。

同时,每个流表项至少包含三个字段:
①头部,用以定义流;
②行为,用以定义如何处理流;
③统计,用以追踪流中包的数量及字节数,以及最后一个包与流表项匹配的时间。

3.2OpenFlow通用交换机

对一些商用交换机等设备添加对流表、安全通道、OpenFlow协议的支持进行功能强化,从而使其具备OpenFlow的特性。如图二所示,OpenFlow协议允许一个交换机被一个或多个控制器管理。
image.png
通过通用交换机,使实验能够在已有的商用网络中展开,并能够与网络中常规的流量以及应用并行。为了赢得网络管理员的信任,OpenFlow通用交换机必需隔离实验流量,而商用流量依然由路由器的标准二层、三层协议管道处理。