江中散人

V1

2022/11/10阅读:17主题:默认主题

【重识云原生】第四章云网络4.8.2.2节——OpenFlow协议详解

2 OpenFlow协议详解

2.1 OpenFlow协议简介

        OpenFlow协议是基于网络中“流”的概念设计的南向接口协议。在OpenFlow引入了“流”的概念之后,控制器可以根据某次通信中“流”的第一个数据分组的特征,使用OpenFlow协议提供的接口对数据平面设备部署策略——流表,而这次通信的后续流量则按照相应流表在硬件层次上进行匹配、转发,从而实现了灵活的网络转发策略。

        OpenFlow能够启动远程的控制器,经由网络交换器,决定网络数据包要由何种路径通过网络交换机。这个协议的发明者,将它当成软件定义网络(Software-defined networking)的启动器。 

        OpenFlow允许从远程控制网络交换器的数据包转送表,透过新增、修改与移除数据包控制规则与行动,来改变数据包转送的路径。比起用访问控制表(ACLs) 和路由协议,允许更复杂的流量管理。同时,OpenFlow允许不同供应商用一个简单、开源的协议去远程管理交换机(通常提供专有的接口和描述语言)。

        OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。

        OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。

2.2 OpenFlow表项详解

        OpenFlow的表项在V1.0阶段,只有普通的单播表项,也即我们通常所说的OpenFlow流表。随着OpenFlow协议的发展,更多的OpenFlow表项被添加进来,如组表(Group Table),计量表(Meter Table)等,以实现更多的转发特性以及QoS功能。

2.2.1 OpenFlow流表

        狭义的OpenFlow流表是指OpenFlow单播表项,广义的OpenFlow流表则包含了所有类型的OpenFlow表项。OpenFlow通过用户定义的流表来匹配和处理报文。所有流表项都被组织在不同的Flow Table中,在同一个Flow Table中按流表项的优先级进行先后匹配。一个OpenFlow的设备可以包含一个或者多个Flow Table。

1、流表项组成

        一条OpenFlow的表项(Flow Entry)由匹配域(Match Fields)、优先级(Priority)、处理指令(Instructions)和统计数据(如Counters)等字段组成,流表项的结构随着OpenFlow版本的演进不断丰富,不同协议版本的流表项结构如下。

各版本流表项组成图

流表项组成详解图

(1)Match Fields

        分组头域(Match Fields)包含流表项匹配规则,可以匹配入接口、物理入接口,流表间数据,二层报文头,三层报文头,四层端口号等报文字段等。流表项的分组头域包括了12个字段,协议称其为12元组,它提供了1~4组层的网络控制信息。具体信息介绍见下表。

OpenFlow v1.0中的12元组

(2)Priority

        流表项优先级,定义流表项之间的匹配顺序,优先级高的先匹配。

(3)Counters

        计数器是用来统计相关流的一些信息。OpenFlow针对每张表、每个流表项、每个端口、每个队列都维护它们相应的技术其,如下表所示:

(4)Instructions & Actions

        流表项动作指令(Instructions & Actions)集,定义匹配到该流表项的报文需要进行的处理。当报文匹配流表项时,每个流表项包含的指令集就会执行。这些指令会影响到报文、动作集以及管道流程。 交换机不需要支持所有的指令类型,并且控制器可以询问OpenFlow交换机所支持的指令类型。 具体的指令类型参见下表:

Instruction

处理

Meter

对匹配到流表项的报文进行限速

Apply-Actions

立即执行Action

Clear-Actions

清除动作集(Action Set)中的所有Action。

Write-Actions

更改动作集(Action Set)中的所有Action。

Write-Metadata

更改流表间数据,在支持多级流表时使用。

Goto-Table

进入下一级流表。

流表项动作指令表

        每个流表表项的指令集中每种指令类型最多只能有一个,指令的执行的优先顺序为:

Meter –> Apply-Actions -> Clear Actions -> Write-Actions -> Write-Metadata -> Goto-Table

当OpenFlow交换机无法执行某个流表项中的动作时,该交换机可以拒绝这个流表项,并向Controller返回unsupported flow error 信息。

        常见Action动作的类型如下:

必选的

Output

转发到指定的OpenFlow端口

Drop

无直接动作,指令集中无output动作则丢弃该报文

Group

处理报文到指定Group

可选的

Set-Queue

设置报文的队列id

Push-Tag/Pop-Tag

写入/弹出标签 例如VLAN, MPLS等

Set-Field

修改报文的头字段

Change-TTL

修改TTL,Hop Limit等字段

Action动作表

(5)Timeouts

        流表项的超时时间,包括了Idle Time和Hard Time。

  • Idle Time:在Idle Time时间超时后如果没有报文匹配到该流表项,则此流表项被删除。
  • Hard Time:在Hard Time时间超时后,无论是否有报文匹配到该流表项,此流表项都会被删除。

(6)Cookie

        Controller下发的流表项的标识

2、流表处理流程

        OpenFlow规范中定义了流水线式的处理流程,报文匹配处理流程如下图所示:

流表处理流程图

        当报文进入Switch后,必须从最小的Flow Table开始依次匹配。Flow Table可以按次序从小到大越级跳转,但不能从某一Flow Table向前跳转至编号更小的Flow Table。当报文成功匹配一条Flow Entry后,将首先更新该Flow Entry对应的统计数据(如成功匹配数据包总数目和总字节数等),然后根据Flow Table中的指令进行相应操作,比如跳转至后续某一Flow Table继续处理,修改或者立即执行该数据包对应的Action Set等。当数据包已经处于最后一个Flow Table时,其对应的Action Set中的所有Action将被执行,包括转发至某一端口,修改数据包某一字段,丢弃数据包等。具体实现时,OpenFlow交换机还需要对匹配表项次数进行计数、更新匹配集和元数据等操作。

流表匹配流程图

3、Table Miss表项

        每个流表(Flow Table)都包含一个Table Miss流表项,该表项用于定义在流表中没有匹配的报文的处理方式,该表项的匹配域为通配,即匹配任何报文,优先级为0,Instructions与正常表项相同。通常,如果Table-Miss表项不存在,默认行为是丢弃报文。

4、Flow Remove

        Flow Entry可以由Controller通过OpenFlow消息进行删除,也可以在Idle Time超时或者Hard Time超时后自动删除。Idle Time超时有两种情况:某个流表表项长时间不匹配报文则idle_timeout字段设置为非0;某个流表表项一定时间过后,无论是否匹配报文 hard_timeout字段设置为非0。如果Controller在建立表项时,携带了Flow Remove标记,则表项在删除时,设备需要通知Controller Flow Remove消息。

2.2.2 OpenFlow组表

        OpenFlow组表的表项被流表项(Flow Entry)所引用,提供组播报文转发功能。一系列的Group表项组成了Group Table,每个表项结构如图:

OpenFlow组表结构图

        根据Group ID可检索到相应Group表项,每个Group表项包含多个动作Bucket,每个Bucket包含多个动作,Bucket内的动作执行顺序依照Action Set的顺序。

2.2.3 OpenFlow Meter表

        Meter计量表项被流表项(Flow Entry)所引用,为所有引用Meter表项的流表项提供报文限速的功能。一系列的Meter表项组成了Meter Table, 每个Meter表项的组织结构如下:

OpenFlow计量表图

        一个Meter表项可以包含一个或者多个Meter Bands,每个Meter Band定义了速率以及动作,报文的速率超过了某些MeterBand,根据这些MeterBand中速率最大的那个定义的动作进行处理。

2.3 OpenFlow安全通道

        OpenFlow设备与Controller通过建立OpenFlow信道,进行OpenFlow消息交互,实现表项下发,查询以及状态上报等功能。通过OpenFlow信道的报文都是根据OpenFlow协议定义的,通常采用TLS(Transport Layer Security)加密,但也支持简单的TCP直接传输。如果安全通道采用TLS连接加密,当交换机启动时,会尝试连接到控制器的6633 TCP端口(Openflow端口通常默认建议设置为6633)。双方通过交换证书进行认证。因此,在加密时,每个交换机至少需配置两个证书。

参考链接

Openflow协议详解-新华三集团-H3C

SDN学习之OpenFlow协议分析

SDN学习之OpenFlow协议分析 - 守功 - 博客园

OpenFlow 协议详解(干货)_WenjieDai的博客-CSDN博客_openflow协议

OpenFlow_百度百科

OpenFlow 协议 - MrDevil - 博客园

 《重识云原生系列》专题索引: 

  1. 第一章——不谋全局不足以谋一域
  2. 第二章计算第1节——计算虚拟化技术总述
  3. 第三章云存储第1节——分布式云存储总述
  4. 第四章云网络第一节——云网络技术发展简述
  5. 第四章云网络4.2节——相关基础知识准备
  6. 第四章云网络4.3节——重要网络协议
  7. 第四章云网络4.3.1节——路由技术简述
  8. 第四章云网络4.3.2节——VLAN技术
  9. 第四章云网络4.3.3节——RIP协议
  10. 第四章云网络4.3.4节——OSPF协议
  11. 第四章云网络4.3.5节——EIGRP协议
  12. 第四章云网络4.3.6节——IS-IS协议
  13. 第四章云网络4.3.7节——BGP协议
  14. 第四章云网络4.3.7.2节——BGP协议概述
  15. 第四章云网络4.3.7.3节——BGP协议实现原理
  16. 第四章云网络4.3.7.4节——高级特性
  17. 第四章云网络4.3.7.5节——实操
  18. 第四章云网络4.3.7.6节——MP-BGP协议
  19. 第四章云网络4.3.8节——策略路由
  20. 第四章云网络4.3.9节——Graceful Restart(平滑重启)技术
  21. 第四章云网络4.3.10节——VXLAN技术
  22. 第四章云网络4.3.10.2节——VXLAN Overlay网络方案设计
  23. 第四章云网络4.3.10.3节——VXLAN隧道机制
  24. 第四章云网络4.3.10.4节——VXLAN报文转发过程
  25. 第四章云网络4.3.10.5节——VXlan组网架构
  26. 第四章云网络4.3.10.6节——VXLAN应用部署方案
  27. 第四章云网络4.4节——Spine-Leaf网络架构
  28. 第四章云网络4.5节——大二层网络
  29. 第四章云网络4.6节——Underlay 和 Overlay概念
  30. 第四章云网络4.7.1节——网络虚拟化与卸载加速技术的演进简述
  31. 第四章云网络4.7.2节——virtio网络半虚拟化简介
  32. 第四章云网络4.7.3节——Vhost-net方案
  33. 第四章云网络4.7.4节vhost-user方案——virtio的DPDK卸载方案
  34. 第四章云网络4.7.5节vDPA方案——virtio的半硬件虚拟化实现
  35. 第四章云网络4.7.6节——virtio-blk存储虚拟化方案
  36. 第四章云网络4.7.8节——SR-IOV方案
  37. 第四章云网络4.7.9节——NFV
  38. 第四章云网络4.8.1节——SDN总述
  39. 第四章云网络4.8.2.1节——OpenFlow概述
  40. 第四章云网络4.8.2.2节——OpenFlow协议详解
  41. 第四章云网络4.8.2.3节——OpenFlow运行机制
  42. 第四章云网络4.8.3.1节——Open vSwitch简介
  43. 第四章云网络4.8.3.2节——Open vSwitch工作原理详解
  44. 第四章云网络4.8.4节——OpenStack与SDN的集成
  45. 第四章云网络4.8.5节——OpenDayLight
  46. 第四章云网络4.8.6节——Dragonflow

分类:

后端

标签:

云计算

作者介绍

江中散人
V1