首页 理论教育 OpenFlow标准与规范解析

OpenFlow标准与规范解析

时间:2023-10-17 理论教育 版权反馈
【摘要】:OpenFlow Switch规范主要定义了Switch的功能模块以及其与Controller之间的通信信道等方面。(一)OpenFlow的端口OpenFlow规范将Switch上的端口分为3种类别。目前OpenFlow的规范中还规定了Switch设备厂商可以选择性地支持通配符进行匹配。OpenFlow规范中定义了流水线式的处理流程,如图7-5所示。OpenFlow规范中定义了3种消息类型。图7-6OpenFlow和Switch之间的消息交换过程(四)OpenFlow协议及相关数据结构在OpenFlow规范的最后一部分,主要详细定义了各种OpenFlow消息的数据结构,包括OpenFlow消息的消息头等。

OpenFlow标准与规范解析

自2009年年初发布第一个版本(v1.O)以来,OpenFlow规范已经经历了1.1、1.2、1.3等版本。OpenFlow Switch规范主要定义了Switch的功能模块以及其与Controller之间的通信信道等方面。Openflow规范主要分为如下4个部分。

(一)OpenFlow的端口(Port)

OpenFlow规范将Switch上的端口分为3种类别。

物理端口,即设备上物理可见的端口。

逻辑端口,在物理端口基础上由Switch设备抽象出来的逻辑端口,如为tunnel或者聚合等功能而实现的逻辑端口。

OpenFlow定义的端口。OpenFlow目前总共定义了ALL、CONTROLLER、TABLE、IN PORT、ANY、LOCAL、NORMAL和FLOOD这8种端口,其中后3种为非必需的端口,只在混合型的OpenFlow Switch(OpenFlow-hybrid Switch,即同时支持传统网络协议梭和OpenFlow协议的Switch设备,相对于OpenFlow-only Switch而言)中存在。

(二)OpenFlow的FlowTable

OpenFlow通过用户定义的或者预设的规则来匹配和处理网络包。一条OpenFlow的规则由匹配域(Match Fields)、优先级(Priority)、处理指令(Instructions)和统计数据(如Counters)等字段组成。

在一条规则中,可以根据网络包在L2、L3或者L4等网络报文头的任意字段进行匹配,比如以太网帧的源MAC地址,IP包的协议类型和IP地址,或者TCP/UDP的端口号等。目前OpenFlow的规范中还规定了Switch设备厂商可以选择性地支持通配符进行匹配。

所有OpenFlow的规则都被组织在不同的FlowTable中,在同一个FlowTable中按规则的优先级进行匹配。一个OpenFlow的Switch可以包含一个或者多个FlowTable,从0依次编号排列。OpenFlow规范中定义了流水线式的处理流程,如图7-5所示。当数据包进入Switch后,必须从FlowTable 0开始依次匹配;FlowTable可以按次序从小到大越级跳转,但不能从某一FlowTable向前跳转至编号更小的FlowTable。当数据包成功匹配一条规则后,将首先更新该规则对应的统计数据(如成功匹配数据包总数目和总字节数等),然后根据规则中的指令进行相应操作,比如跳转至后续某一FlowTable继续处理,修改或者立即执行该数据包对应的Action Set等。当数据包已经处于最后一个FlowTable时,其对应的Action Set中的所有Action将被执行,包括转发至某一端口、修改数据包某一字段、丢弃数据包等。OpenFlow规范中对目前所支持的Instructions和Actions进行了完整详细的说明和定义。

另外,OpenFlow规范中还定义了很多其他功能和行为,比如OpenFlow对于QoS的支持(即MeterTable和Meter Bands的定义等),对于GroupTable的定义,以及规则的超时处理等。

(www.xing528.com)

图7-5 OpenFlow规范中流水线式的处理流程

(三)OpenFlow的通信通道

OpenFlow通信通道规范部分定义了一个OpenFlow Switch如何与Controller建立连接、通讯以及相关消息类型等的规范。OpenFlow规范中定义了3种消息类型。

Control]er/Switch消息,是指由Controller发起、Switch接收并处理的消息,主要包括Features、Configuration、Modify-State、Read-State、Packet-out、Barrier和Role-Request等消息。这些消息主要由Controller用来对Switch进行状态查询和修改配置等操作。

异步(Asynchronous)消息,是由Switch发送给Controller,用来通知Switch上发生的某些异步事件的消息,主要包括Packet-in、Flow-Removed、Port-status和Error等。例如,当某一条规则因为超时而被删除时,Switch将自动发送一条Flow-Removed消息通知Controller,以方便Controller做出相应的操作,如重新设置相关规则等。

对称(Symmetric)消息,顾名思义,都是双向对称的消息,主要用来建立连接、检测对方是否在线等,包括Hello、Echo和Experimenter3种消息。

图7-6展示了OpenFlow和Switch之间一次典型的消息交换过程,出于安全和高可用性等方面的考虑,OpenFlow的规范还规定了如何为Controller和Switch之间的信道加密,如何建立多连接等(主连接和辅助连接)。

图7-6 OpenFlow和Switch之间的消息交换过程

(四)OpenFlow协议及相关数据结构

在OpenFlow规范的最后一部分,主要详细定义了各种OpenFlow消息的数据结构,包括OpenFlow消息的消息头等。这里就不一一赘述了,如需了解,可以参考OpenFlow源代码中openflow.h头文件中关于各种数据结构的定义。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈