Openflow协议规范
1 总述
一个OpenFlow交换机由一个或多个向前端映射表格(forwarding tables)以及一个分组表格(group table)组成。在每个向前端映射表格中,每个entry包含三个字段:(1) 匹配(matching),使用入站端口(ingress port)、数据包头信息(packet header)以及从前一向前端映射表格传递来的元数据(metadata);(2) 计数器(counter),用于统计成功匹配的数据包数量;(3) 指令集(instruction set),负责调整动作集合(action set)或优化数据流程。
首先从第一个数据流表开始匹配,并可能经过多个数据流表这一过程被称为流水线处理(pipeline processing)。该流程的优势在于能够将数据包发送到下一个数据流表进行进一步处理,并使元数据信息在表格中流动。在此过程中,系统会首先识别并完成具有最高优先级的数据流条目进行匹配操作。该操作基于ingress port字段、包头(packet header)以及上一个数据流表指定的metadata三类匹配域来进行判断。一旦某个数据包成功与某个特定的数据流条目匹配后,则会更新该条目中的计数器,并执行该条目中的指令操作以实现其功能。
当管道式处理在指令中未指定下一个流水表时,在这种情况下数据包通常会接受并执行其所有携带的动作集合后再进行转发
在缓存表不存在的情况下(即发生缓存表不存在的现象),控制器通常会接收来自通道的in-packet消息并进行处理
在组表指令中通常对应一组相关的处理操作,例如flood、multi-path、fast-reroute和link-aggregation。
2 Openflow Port
Openflow包含三种类型的网络接口:物理层接口(如交换机接口),逻辑层接口以及备用接口。其中,物理层接口用于连接设备;逻辑层接口负责数据传输;备用接口为系统提供冗余连接。
3 Openflow Table
本节重点介绍流表(flow table)与组表(grouptable)的构成内容,并详细阐述数据包匹配与处理逻辑。
从(a)图中可以看到,每一个数据包都是通过流水线pipeline进行处理,并且在完成action动作后会被转发出去
实际上,在当前技术背景下,现有的交换机也普遍采用了基于管道处理机制的技术架构,并且开放流程(OpenFlow)类型的交换机可以通过预留专门配置的NORMAL端口实现对现有传统交换机进行相应的normal pipeline处理。
具体流程上来说,在每一个flow table中的处理方式是怎样的?它主要可以分解为以下几个方面:第一部分是实现match功能的具体过程。系统会通过ingress port、包头packet header以及携带的相关metadata信息来确定优先级最高的流量条目进行匹配操作;第二部分是完成instruction的具体操作步骤。根据匹配结果会执行修改、更新等指令集操作,并对相关字段(如更新包的metadata)进行相应设置;第三部分则是完成forward操作的具体实现。通过将处理后的数据及动作集发送给下一个flow table来进行后续处理工作
4 Openflow counter
Counter不仅位于flow entry中,在OpenFlow规范中规定了每个数据包转发表(Switch Table)、数据包转发条目(Switch Entry)、端口(Port)、队列(Queue)、组(Group)以及桶(Bucket)都可以配置计数器(Counter)。如图1所示。(例如统计网络总流量时可以使用Port中的received bytes这个Counter;而要统计特定业务或应用流量时,则应采用Flow Entry中的received bytes这个Counter)
5 OpenFlow Instruction
当一个数据包与某个流量表项匹配时
常见的指令类别主要包括以下几种类型:应用操作(apply action)、清除操作(clear action)、写入操作(write action)、记录元数据(write metadata)以及转向操作(goto)。
6 OpenFlow Action
6.1 Action Set
每个数据包都包含一个 ActionSet. 该集合最初为空,并可能在每个匹配的 flow entry 中的 Write-Action 指令或 Clear-Action 指令进行修改。最后在管道处理完成时执行该操作。
在ActionSet中包含了九项作用项:复制内建时延、弹出、压入、复制外建时延、降时延、设置、QoS组别、分组以及输出功能。每一种ActionSet仅限于每一种类型只有一个作用项,并且必须按照上述列出的顺序依次执行操作
6.2 Action List
此外,在Apply-Action指令以及Packet-out消息中都包含有ActionList字段。这些字段用于对data packets进行处理,并且按照Action List中指定的顺序依次处理这些data packets。需要注意的是,这一过程与该 action的具体类型无关。
6.3 Action
该动作主要涉及以下几个类别:输出操作、队列设置、丢弃操作、分组管理、推入和弹出操作、字段设置以及时间戳更新。
7 OpenFlow Message
Openflow支持三类消息:
1 Controller-to-Switch
控制器所发起的消息,又分为以下五类:
-
Feature:查询交换机能力;
-
Configuration:设置或者查询配置参数;
-
Modify-State:增删改流表或者组表条目,设置交换机端口属性
-
Read-State
Packet-Out: 该消息较为复杂程度较高。它不仅用于指令交换机指定特定端口发送数据包的操作指令,而且也用于转发通过InPort消息接收的数据包以实现网络流量管理功能
Packet-out消息中包含一个完整的数据包或者指针,以及action.
- Barrier:用于控制器保证消息的依赖关系或者接收notification
2 Asynchronous
交换机发起的消息,分为以下四类:
Packet-In:当遇到flowentry mismatch的情况时,在数据包中包含相关信息后,交换机会向控制器发送相应的packet-in事件报告
数据包自身要么完整地融入packet-in消息中要么被缓存于交换机中 不管怎样都会等待控制器发起的Packet-out事件来进行处理
-
Flow-Removed: 交换机通知控制器已经没有了某个流表条目
-
Port-Status:当端口配置或者状态变化时通知控制器
-
Error
3 Sysmetic
两方都可以发起的消息,不用协商,分为以下三类:
- Hello:交换机和控制器建立起连接后的维护消息
Echo:是Echorequest与reply的对应关系,在网络通信领域中用于评估网络的真实有效性(liveness),同时测量数据传输过程中的时延和带宽
- Experimenter:
8 Multiple Controller
该交换机可支持多个Equal状态控制器、若干个Slave状态控制器以及至多一个Master状态控制器。
为了保证在Master/Slave转换过程中消息顺序被打乱而采取措施
