首页 > 代码库 > OpenFlow协议标准演进过程

OpenFlow协议标准演进过程

OpenFlow协议标准演进过程 

  OpenFlow是一种新型网络协议,起源于斯坦福大学的Clean Slate项目组。OpenFlow提出的出发点是由于研究人员无法改变现有网络设备进行创新网络架构和协议的研究和实验,而这些新的网络创新思想恰恰需要在实际的网络上才能更好地验证。斯坦福大学因此提出了控制转发分离架构,将控制逻辑从网络设备中分离出来,交给中央控制器集中统一控制,实现网络业务的灵活部署,并且他们设计了OpenFlow协议作为控制器与交换机通讯的标准接口。近年OpenFlow已经引起了网络设备商和网络管理员的广泛关注,使用OpenFlow协议实现软件定义网络,可以把网络作为一个整体而不是许多独立分散的设备来集中进行管理,大大提升了网络可用性和网络管理效率。

  OpenFlow的思路很简单,网络设备维护一个或者若干个流表,并且数据流只按照这些流表进行转发。流表本身的生成、维护完全由外置的控制器来管理。流表项并非仅指普通的IP五元组,而是由一些关键字和执行动作组成的灵活规则,并且每个关键字字段都是可以通配的。在实际应用中,网络管理人员可以通过配置流表项中具体的匹配关键字来决定使用何种粒度的流转发规则。例如,如果只需要根据目的IP进行路由,那么下发流表项时,关键字只匹配目的IP字段,其它关键字全通配,而动作中只需要一个出端口即可实现常规的IP路由转发。

  自2009年底发布第一个正式版本v1.0以来,OpenFlow协议已经经历了1.1、1.2、1.3以及最新发布的1.4等版本的演进过程。同时,2012年OpenFlow管理和配置协议也发布了第一个版本(OF-CONFIG1.0&1.1),用于配合OpenFlow协议进行自动化的网络部署。图1给出了OpenFlow协议各个版本的演进过程和主要变化,目前使用和支持最多的是OpenFlow1.0和OpenFlow1.3版本,图2说明了这两个版本的主要变化。

                                                         

                               图1:OpenFlow协议版本演进图

   OpenFlow协议是描述控制器和交换机之间交互信息的南向接口标准。OpenFlow协议支持三类消息类型:Controller-to-Switch,Asynchronous和Symmetric,每一种类型都有多个子类型,控制器和交换机之间通过这三类消息进行连接建立,流表下发和信息交换,实现对网络中所有OpenFlow交换机的控制。

                           

                              图2:OpenFlow1.0到1.3版本演进的主要结构变化

下面简单介绍一下OpenFlow协议中1.0到1.4版本的主要变化过程。

   OpenFlow1.0协议指定每个OpenFlow交换机中都存在一张流表,用于数据包查找、处理和转发,并且只能同一台控制器进行通信,流表的维护也是通过控制器下发相应的OpenFlow消息来实现。流表由多个流表项组成,而每个流表项就是一个转发规则。流表项由匹配字段、计数器和动作组成。其中匹配字段是流表项的标识,OpenFlow1.0支持12个匹配字段;计数器用于流表项的匹配和收发包统计;动作指示对匹配流表项的数据包应该执行的动作,如转发到另一端口,丢弃或送控制器处理,甚至可以修改数据包字段转发。但OpenFlow1.0只支持IPv4。

  OpenFlow1.0版本的优势是它可以与现有的商业交换芯片兼容,通过在传统交换机上升级固件就可以支持OpenFlow1.0版本,既方便OpenFlow的推广使用也有效保护了用户的投资,因此OpenFlow1.0是目前使用和支持最广泛的协议版本。

  自OpenFlow1.1版本开始支持多级流表,将流表匹配过程分解成多个步骤,形成流水线处理方式,这样可以有效和灵活利用硬件内部固有的多表特性,同时把数据包处理流程分解到不同的流表中也避免了单流表过度膨胀问题。除此之外OpenFlow1.1中还增加了对于VLAN和MPLS标签的处理,并且增加了Group表,通过在不同流表项动作中引用相同的组表实现对数据包执行相同的动作,简化了流表的维护。OpenFlow1.1版本是OpenFlow协议版本发展的一个分水岭,它和OpenFlow1.0版本开始不兼容,但后续版本仍然还是在此基础上发展。

  为了更好支持协议的可扩展性, OpenFlow1.2版本发展为下发规则的匹配字段不再通过固定长度的结构来定义,而是采用了TLV结构定义匹配字段,称为OXM(OpenFlow Extensible Match),这样用户就可以灵活的下发自己的匹配字段,增加了更多关键字匹配字段的同时也节省了流表空间。同时,OpenFlow1.2规定可以使用多台控制器和同一台交换机进行连接增加可靠性,并且多控制器可以通过发送消息来变换自己的角色。还有重要的一点是自OpenFlow1.2版本开始支持IPv6。

  经过1.1和1.2版本的演变积累,2012年4月发布的OpenFlow1.3版本成为长期支持的稳定版本。OpenFlow1.3流表支持的匹配关键字已经增加到40个,足以满足现有网络应用的需要。OpenFlow1.3主要还增加了Meter表,用于控制关联流表的数据包的传送速率,但控制方式目前还相对简单。OpenFlow1.3还改进了版本协商过程,允许交换机和控制器根据自己的能力协商支持的OpenFlow协议版本。同时,连接建立也增加了辅助连接提高交换机的处理效率和实现应用的并行性。其它还有IPv6扩展头和Table-miss表项的支持。

  2013年最新发布的OpenFlow1.4版本仍然是基于1.3版本的特征改进版本,数据转发层面没有太大变化,主要是增加了一种流表同步机制,多个流表可以共享相同的匹配字段,但可以定义不同的动作;另外又增加了Bundle消息,确保控制器下发一组完整消息或同时向多个交换机下发消息的状态一致性。其它还支持光口属性描述,多控制器相关的流表监控等特征。

  OpenFlow协议的发展演进一直都围绕着两个方面,一方面是控制面增强,让系统功能更丰富更灵活;另一方面是转发层面的增强,可以匹配更多的关键字,执行更多的动作。每一个后续版本的OpenFlow协议都在前一版本的基础上进行了或多或少的改进,但自OpenFlow1.1版本开始和之前版本不兼容,OpenFlow协议官方维护组织ONF为了保证产业界有一个稳定发展的平台,把OpenFlow1.0和1.3版本作为长期支持的稳定版本,一段时间内后续版本发展要保持和稳定版本的兼容。