1.OpenFlow交换机的基本构成
1.1 流表
版本 | 包含内容 |
---|---|
1.0 | 头字段(Header Filed)、计数器(Counters)、行动(Actions) |
1.1 | 匹配字段(Match Filed)、计数器)(Counters)、指令(Instruction) |
1.2 | 同OpenFlow1.1 |
1.3 | 匹配字段(Match Filed)、优先级(Priority)、计数器(Counters)、指令(Instruction)、超时(Timeouts)、Cookies |
1.4 | 同OpenFlow1.3 |
1.5 | 同OpenFlow1.5 |
OpenFlow流表由流表项构成,流表项的结构随着OpenFlow版本的不断演进不断变化,不同协议所包含的流表项结构不同,具体各版本如下表所示:
版本 | 包含内容 |
---|---|
1.0 | 头字段(Header Filed)、计数器(Counters)、行动(Actions) |
1.1 | 匹配字段(Match Filed)、计数器)(Counters)、指令(Instruction) |
1.2 | 同OpenFlow1.1 |
1.3 | 匹配字段(Match Filed)、优先级(Priority)、计数器(Counters)、指令(Instruction)、超时(Timeouts)、Cookies |
1.4 | 同OpenFlow1.3 |
1.5 | 同OpenFlow1.5 |
1.2 组表
OpenFlow交换机只含有一个组表,组表中包含许多组表项,每条组表项的结构如下:
组ID(Group identier) | 组类型(Group Type) | 计数器(Counters) | 动作桶(Action Buckets) |
---|---|---|---|
1.3 Meter表
Meter表项用于关联流表项,对匹配流表项的报文实施QOS策略
Meter identifier | Meter Bands | Counters |
---|---|---|
其中Meter带又有如下组成:
Bands Type | Rate | Counters| | Type Specific arguments |
---|---|---|---|
1.4 匹配字段
OpenFlow流表项的匹配域支持丰富的匹配字段,OpenFlow1.0支持匹配的数据包头的12个字段,到OpenFlow1.3,已经扩展到39个字段,并规定了OpenFlow交换机必须实现的13个字段(之后补充)
OpenFlow1.0的12个字段如下:
Ingress Port | Ether Source | Ether Des | Ether Type | VLAN ID | VLAN Priority | IP Source | IP Des | IP Protocol | IP TOS | TCP/UDP Source Port | TCP/UDP Des Port |
---|---|---|---|---|---|---|---|---|---|---|---|
1.5 指令集
指令 | 说明 | 可选/必选 |
---|---|---|
Write-Action | 添加指定动作到动作集 | 必选 |
GoTo-Table | 转到另一个流表处理 | 必选 |
Meter | 指示报文关联指定的Meter流表项 | 可选 |
Apply-Actions | 应用动作列表中的动作 | 可选 |
Clear-Actions | 清空动作集 | 可选 |
Write-Metadata | 写入元数据 | 可选 |
当报文匹配上流表项时,执行表项包含的指令集,指令集类型如下所示:
指令 | 说明 | 可选/必选 |
---|---|---|
Write-Action | 添加指定动作到动作集 | 必选 |
GoTo-Table | 转到另一个流表处理 | 必选 |
Meter | 指示报文关联指定的Meter流表项 | 可选 |
Apply-Actions | 应用动作列表中的动作 | 可选 |
Clear-Actions | 清空动作集 | 可选 |
Write-Metadata | 写入元数据 | 可选 |
1.6 动作集
当流表项的指令集中不包含GoTo-Table时,立即执行相关联的动作集,动作类型如下表所示:
动作类型 | 说明 | 可选/必选 |
---|---|---|
Output | 将报文转发到特性的OpenFlow端口 | 必选 |
Drop | 满足条件时丢弃 | 必选 |
Group | 将报文转交组表处理,动作由组表类型定义 | 必选 |
Set-Queue | 将报文指定队列ID,用于实施QOS | 可选 |
Push-Tag/Pop-Tag | 适用于对VLAN头,MPLS头,PBB头进行操作 | 可选 |
Set-Field | 识别匹配字段类型并修改字段的值 | 可选 |
Change-TTL | 修改IPV4,IPV6,MPLS中的TTL | 可选 |
1.7 动作列表
动作列表存在于特定协议报文中,它与动作集的区别在于,动作列表中的动作按照列表顺序依次执行,且可以包含多个同类型动作,这些动作的执行效果可以叠加。
1.8 OpenFlow端口
OpenFlow端口分为三类:物理端口,逻辑端口,保留端口
- 物理端口为OpenFlow交换机的硬件接口
- 逻辑端口通常由协议设置,如聚合口,隧道口
- 保留端口由转发动作定义,例如转发到控制器
1.9 OpenFlow报文的处理流程
OpenFlow流水线将交换机内的一组流表串联起来,定义了每个流表怎样用于报文处理。
1.10 安全信道
安全信道是控制器和其管理的每一台OpenFlow交换机间的可靠连接,具体流程如图所示:
1.11 协议报文
1.同步消息
可由交换机或控制器主动发起,并需要接受对方的应答。主要用于建立检测对方是否在线等。
-
包括Hello、Echo、Vendo三种子消息
2.异步消息
由OpenFlow交换机发起,用来通知交换机上发生的某些异步事件。消息是单向的,不需要控制器应答。主要用于交换机向控制器通知收到报文、状态变化、出现错误等事件信息
-
包括Packet-In、Flow-removed、Port-status、Error四种子消息
3.控制器向交换机连接
由控制器发起,对OpenFlow交换机进行状态查询和修改配置等操作;OpenFlow交换机接收并处理可能发送或不需要发送的应答消息
-
包括Modify-state、Read-state、Packet-Out、Barrier request/reply等四类子消息
2.OpenFlow演进
2.1 OpenFlow协议的功能演进
OpenFlow各个协议版本之间的主要区别
版本 | 主要功能 |
---|---|
OF 1.0 | 单表、IPV4 |
OF 1.1 | 多级流表、组表、MPLS、VLAN |
OF 1.2 | 多控制器、IPV6 |
OF 1.3 | Meter表、版本协商能力 |
OF 1.4 | 流表同步、协议消息完善 |
OF 1.5 | 数据包类型识别流程(以太网数据包、PPP数据包)egress Table |