当前位置: 首页 > 工具软件 > OpenFlow > 使用案例 >

OpenFlow学习笔记(三)——OpenFlow1.2

陈飞
2023-12-01

0x01 OpenFlow1.2中的变更要点

采用了OXM,支持了IPv6,支持了多控制器。

0x02 OXM(OpenFlow eXtensible Match)

从OpenFlow1.2开始取消了此前版本中固定长度的匹配字段,改为采用具有TLV结构的OXM。使用OXM TLV的新ofp_match结构体如下:

type(匹配类型,16位)length(不包含填充的ofp_match结构体的大小,16位)任意数量的OXM TLV(长度可变,但整个结构体要求64位对齐,需要填充)

2.1 OXM TLV的基本结构

各OXM TLV由OXM TLV头及之后的BODY部分构成。OXM TLV的字节序列是网络字节序列。OXM TLV头具有如下结构:

oxm_class(匹配类,成员类或保留类,16位)oxm_field(类中的字段,7位)oxm_hasmask(有效负载中包含掩码相关的信息时,设置该位,1位)oxm_length(OXM有效负载的长度,8位)

各OXM_TLV的内容通过oxm_class和oxm_field的组合来确定。

2.2 匹配字段解析规范的取消和Pre-requisite

OpenFlow1.2取消了之前一直存在的匹配字段解析规范,对各匹配字段增加了Pre-requisite(前提条件/必要条件)。Pre-requisite增加了对各匹配字段进行解析的前提条件,需要事先描述成为该前提条件的匹配字段的OXM TLV。

2.3 OXM匹配字段

OpenFlow1.2中定义了36中匹配字段作为基本匹配类。字段中必须支持输入端口、目标及发送源以太网地址、以太网类型、IP协议号、IPv4和IPv6的目标及发送源地址、TCP和UDP的目标及发送源端口号等13个字段。

2.4 OXM中的通配符

未通过OXM TLV明确指定的字段都将被处理为通配符。

2.5 基于OXM的Set-Field

开始定义通用的Set-Field行动,将OXM匹配字段中使用的类型直接用作Set-Field行动的类型。OXM匹配字段中不存在的操作则继续被个别定义(操作 IPv4 TTL,IPv6 Hop Limit的行动,进行头及标签的Push/Pop的行动)。

2.6 取消TCP、UDP、SCTP、ICMP重载使用相同字段

0x03 支持基本的IPv6

添加了对IPv6数据包的匹配及头改写功能。对于IPv6的支持可以通过导入OXM功能来实现。注意,并非IPv6头的所有字段都可以进行操作。

0x04 支持多控制器(故障转移和负载均衡)

从OpenFlow1.2开始,1台OpenFlow交换机可以连接多台OpenFlow控制器。通过使用该功能,可使OpenFlow控制器的冗余及负载均衡成为可能。

4.1 Role

分为EQUAL、MASTER、SLAVE三种。

默认为EQUAL。各EQUAL控制器发挥相同作用,允许其对交换机进行完全访问。SLAVE控制器只能对交换机进行Read-Only访问。MASTER虽然和EQUAL具有完全相同的权限,但只能同时存在一台MASTER,且以太交换机连接一台MASTER时,其他MASTER会自动变为SLAVE。一台MASTER也可以和多台EQUAL进行连接。

4.2 Role变更

Role请求消息,Role响应消息。

4.3 OpenFlow控制器之间的协作

0x05 其他变化

5.1 将虚拟端口分离为逻辑端口和保留端口

OpenFlow1.2取消了“虚拟端口”的说法,将其分为“逻辑端口”和“保留端口”。

逻辑端口,并不与OpenFlow交换机的物理性接口对应,而是链路聚合组就、隧道、环回接口等逻辑性概念。

保留端口,ALL、CONTROLLER、LOCAL、TABLE、NORMAL、IN_PORT、FLOOD等端口。

5.2 Flow-Mod的MODIFY/MODIFY_STRICT的规范变更

OpenFlow1.2开始,Flow-Mod的MODIFY/MODIFY_STRICT在不存在匹配流表项时,不会再添加新的流表项。

此外,还添加了OFPFF_RESET_STRICT标志,可通过Flow-Mod消息对计数器值进行重置。

5.3 对实验性扩展的支持

添加了各种功能进行实验性扩展的机制,如:

  • 匹配字段及Set-Field行动
  • 错误类型的添加及独有错误信息
  • 指令
  • Queue属性

5.4 变更历史记录的添加

参考自《图解OpenFlow》
转载请注明出处

 类似资料: