OpenFlow交换机概述

2023-05-16

1 交换机组成

这里写图片描述
OpenFlow交换机包括一个或多个流表和一个组表,执行分组查找和转发,和到一个外部控制器OpenFlow的信道。
控制器使用OpenFlow的协议,可添加、更新和删除流表中表项,既主动或被动响应数据包。
每个流表项包含匹配字段,计数器和一组指令,用来匹配数据包。
行动描述了数据包转发,数据包的修改和组表处理。流水线处理的指令允许数据包被发送到后面的表进行处理,允许信息以元数据的形式在表之间进行通信。
当与一个匹配的流表项相关联的指令集没有指向下一个表时,表流水线处理停止,这时该数据包通常被修改和转发。
流表项可能包含数据包转发到某个端口(物理端口、逻辑端口(可指定链路汇聚组,隧道或环回接口)、保留端口(可指定通用的转发行为,如发送到控制器、洪泛或使用非OpenFlow方法转发,如普通交换机转发处理))
组表示一组洪泛的指令集,以及更复杂的转发(如多路径、快速重路由、链路聚合)。

2 一些重要概念

流表项:在流表中用于匹配和处理数据包的一个元素。它包含用于匹配数据包的匹配字段、匹配次序的优先级,跟踪数据包的计数器,以及对应的的指令集 。

匹配字段:用来匹配数据包的字段,包括包头,进入端口,元数据值。匹配字段可能会进行通配符匹配(匹配任何值)或者在某些情况下通过位掩码进行匹配。

指令:指令存在于流表项中,描述报文匹配流表项时OpenFlow的处理方式。指令可以修改流水线处理,如指导包匹配另一个流表,也可以包含一系列添加到行动集的行动,还可
以包含一系列立即应用到数据包的行动。

行动:将数据包转发到一个端口或修改数据包,如TTL字段减1操作。行动可能是与流表项相关联的指令集或者与组表项相关联的行动存储段的一部分。我们可以将行动积累在数据包的行动集,也可以立即将行动应用到该数据包。

行动集:与数据包相关的行动集合,在报文被每个表处理的时候这些行动可以累加,在指令集指导报文退出处理流水线的时候这些行动会被执行。
组:一系列的行动存储段和一些选择一个或者多个存储段应用到数据包单元的手段。
行动存储段:一组行动和相关参数,定义组。
标记:一个头,可以插入到数据包或者通过压入和弹出行动进行移除。
最外层的标签:一个数据包最开始出现的标签。
控制器:一个实体与OpenFlow交换机使用OpenFlow协议交互的实体。
计量: 一个交换机元件,可以测量和控制数据包的速度。当数据包速率或通过计量的字节速率超过预定义的阈值时,计量触发计量带。如果计量带丢弃该数据包,它则被称为一个速率限制器。

3 OpenFlow端口

OpenFlow端口是OpenFlow处理进程和网络的其余部分之间传递数据包的网络接口。
OpenFlow交换机必须支持三种类型的OpenFlow端口:物理端口(对应一个交换机的硬件接口)、逻辑端口、保留端口。
OpenFlow交换机可以实现交换机的硬件虚拟化,一个OpenFlow物理端口可以代表一个与交换机硬件接口对应的虚拟切片。
OpenFlow的逻辑端口为交换机定义的端口,并不直接对应一个交换机的硬件端口。
物理端口和逻辑端口之间的唯一区别是:一个逻辑端口的数据包可能有一个叫做隧道ID的额外的元数据字段与它相关联;而当一个逻辑端口上接收到的分组被发送到控制器时,其逻辑端口和底层的物理端口都要报告给控制器。
保留端口指定通用的转发动作,如发送到控制器,泛洪,或使用非OpenFlow的方法转发,如“正常”交换机处理。

4 OpenFlow表

描述流表和组表的组件,以及与匹配和行动处理的技术。
##4.1 流水线处理
OpenFlow兼容的交换机有两种类型:OpenFlow-only和OpenFlow-hybrid。 OpenFlow-only交换机只支持OpenFlow操作,在这些交换机中的所有数据包都由OpenFlow流水线处理,否则不能被处理。

OpenFlow-hybrid交换机支持OpenFlow的操作和普通的以太网交换操作,即传统的L2以太网交换,VLAN隔离,L3路由(IPv4的路由,IPv6路由),ACL和QoS处理。这些交换机提供一个交换机外的分类机制,使流量路由到OpenFlow流水线或普通流水线。例如,某个交换机可以使用VLAN标签或数据包的输入端口,来决定是否使用一个流水线或其他流水线,或者它可指导所有数据包都到OpenFlow流水线进行处理。

##4.2 流表
每个流表项包含:
这里写图片描述
匹配字段:对数据包匹配。包括入口端口和数据包报头,以及由前一个表指定的可选的元数据。
•优先级:流表项的匹配次序
•计数器:更新匹配数据包的计数
•指令:修改行动集或流水线处理
•超时:最大时间计数或流有效时间
•cookie:由控制器选择的不透明数据值。控制器用来过滤流统计数据、流改变和流删除。但处理数据包时不能使用。
当交换机接收到一个格式不正确或损坏的数据包,此版本的规范没有定义预期的行为。

流表项可以通过两种方式在流表中删除,控制器的请求或交换机流超时机制。
交换流超时机制运行基于相关的控制器和流表项的状态和配置。每个流的表项具有一个和它相关的idle_timeout和hard_timeout值。如果两个值中有一个不为零,交换机必须注意的流表项的老化时间,因为交换机可能删除该项。如果给定非零hard_timeout的值,那么一段时间后,可以导致流表项被删除,无论有多少数据包与之匹配。如果给定非零idle_timeout的值,那么如果在一段时间没有报文与之匹配,可以导致流表项被删除。交换机必须实现流表项超时和删除功能。

##4.3 组表

每个组表项由组编号确定,具体内容包含:
组编号:一个32位的无符号整数,唯一标识该组
组类型:确定组语义(参见5.6.1节)
计数器:更新数据当报文被组表项处理时
行动存储段:一系列有序的行动存储段,其中的每个动作存储段包含了一组要执行的动作和相关参数

##4.4 计量表
一个计量表包含若干计量表项,确定每个流量的计数。单位流量的计量可以使OpenFlow实现各种简单的QoS业务,如限速,并且可以结合每个端口队列来实现复杂的QoS框架,如DiffServ。

计量直接连接到流表项(而不是被连接到端口的队列)。任意的流表项可以在它的指令集中定义一个计量,计量测量和控制和它相连的所有流的速率。

每计量表项由其计量标识符标识,并且包含:
计量的标识符:一个32位的无符号整数唯一识别仪
计量带:计量带的无序列表,其中每个计量带定义带的速度和处理数据包的方式
计数器:报文被计量表项处理时,更新计数

每个计量可能有一个或多个计量带。每个带指定带适用的速率和并数据被处理的方式。数据包基于当前的计量速率被单个计量带处理,计量带适用于当前速率超过配置的速率的情况,如果目前的速度比任何指定的计量带率较低,那么计量带就不工作。
每个计量带用速率识别,包括:
•带类型:定义了数据包怎样被处理
•按计量率:用于选择计量带,定义了带可以运行的最低速率
•计数器:当数据报文被计量带处理时时,更新计数
•类型的具体参数:带类型的可选参数

几个问题:
流表、组表、计量表是怎么样工作的?
为什么有了流表还要有组表?
流表、组表中均有计数器,会什么还需要有计量表?

##4.5 计数器
维护计数器可以有如下计数:每一个流程表,流量入口,端口,队列,组,组存储段,计量和计量带。 用来统计流量的一些信息,例如活动表项、查找次数、发送包数等。也可以OpenFlow-compliant计数器可以在软件中实现,而且可以通过硬件计数器获取计数进行维护。

##4.6 指令
每个流表项中包含一组的指令,当一个数据包匹配表项时指令会被执行。这些指令可以更改数据包,行动组和/或流水线处理。
• Optional Instruction: Meter meter id : 直接将包计量后丢弃。
• Optional Instruction: Apply-Actions action(s): 立即进行指定的行动,而不改变行动集。这个指令经常用来修改数据包,在两个表之间或者执行同类型的多个行动的时候。
• Optional Instruction: Clear-Actions: 在行动集中立即清除所有的行动。
• Required Instruction: Write-Actions action(s): 将指定的行动添加到正在运行的行动集中。
• Optional Instruction: Write-Metadata metadata / mask : 在元数据区域记录元数据。
• Required Instruction: Goto-Table next-table-id: 指定流水线处理进程中的下一张表的ID。

##4.7 行动集
行动集与每个报文相关,默认情况下是空的。一个流表项可以使用Write-Action指令或者Clear-Action指令修改行动集。行动集在表间被累加,当一个表项的指令集没有包含Goto-Table指令时,流水线处理就停止了,然后报文的行动集就被执行。

行动集包含所有的行动,无论他们以什么顺序加入到行动集中,行动的顺序均按照下列顺序执行。如果行动集包含组行动,那么组行动存储段中的行动也按照下列顺序执行。当然,交换机也可以支持通过Apply-Actions指令修改行动执行顺序。

  1. copy TTL inwards: apply copy TTL inward actions to the packet
  2. pop: apply all tag pop actions to the packet
  3. push-MPLS: apply MPLS tag push action to the packet
  4. push-PBB: apply PBB tag push action to the packet
  5. push-VLAN: apply VLAN tag push action to the packet
  6. copy TTL outwards: apply copy TTL outwards action to the packet
  7. decrement TTL: apply decrement TTL action to the packet
  8. set: apply all set-field actions to the packet
  9. qos: apply all QoS actions, such as set queue to the packet
  10. group: 如果指定了组行动,那么按照这个序列中的顺序执行组行动存储段里的行动。
  11. output: 如果没有指定组行动,报文就会按照output行动中指定的端口转发。
    Output行动最后执行。如果组行动和输出行动均存在,那么组行动优先级高。如果两者均不存在,那么报文被丢弃。

Apply-Actions指令和Packet-out消息中存在行动列表。行动的效果是被累积的,也就是这些行动全部都会执行的。比如行动列表中有两个行动都是push VLAN,那么行动后,报文会被加上两个VLAN tag。

#5 OpenFlow通道
OpenFlow 通道是交换机连接控制器的接口。
OpenFlow协议运行在安全传输层协议(TLS)或无保护TCP连接之上。
##5.1 OpenFlow协议介绍
OF协议支持三种消息类型:controller-to-switch,asynchronous(异步)和symmetric(对称),每一类消息又有多个子消息类型。controller-to-switch 消息由控制器发起,用来管理或获取switch 状态;asynchronous 消息由switch 发起,用来将网络事件或交换机状态变化更新到控制器;symmetric 消息可由交换机或控制器发起。
controller-to-switch:
Features在建立传输层安全会话(Transport Layer Security Session)的时候,控制器发送feature请求消息给交换机,交换机需要应答自身支持的功能。
Configuration控制器设置或查询交换机上的配置信息。交换机仅需要应答查询消息。
Modify-state控制器管理交换机流表项和端口状态等。
Read-state控制器向交换机请求一些诸如流、网包等统计信息。
Packet-out控制器通过交换机指定端口发出网包。
Barrier控制器确保消息依赖满足,或接收完成操作的通知
asynchronous
Packet-in交换机收到一个网包,在流表中没有匹配项,则发送Packet-in 消息给控制器。如果交换机缓存足够多,网包被临时放在缓存中,网包的部分内容(默认128 字节)和在交换机缓存中的的序号也一同发给控制器;如果交换机缓存不足以存储网包,则将整个网包作为消息的附带内容发给控制器。
Flow-removed交换机中的流表项因为超时或修改等原因被删除掉,会触发Flow-removed 消息。
Port-status交换机端口状态发生变化时(例如down 掉),触发Port-status 消息。
Error交换机发生问题时触发消息。
Symmetric
Hello交换机和控制器用来建立连接。
Echo交换机和控制器均可以向对方发出Echo 消息,接收者则需要回复Echo reply。该消息用来测量延迟、是否连接保持等。
Vendor交换机提供额外的附加信息功能。为未来版本预留。

5.2 连接建立

通过安全通道建立连接,所有流量都不经过交换机流表检查。
动态发现控制器协议?
当of连接建立起来后,两边必须先发送OFPT_HELLO消息给对方,该消息携带支持的最高协议版本号,接受方将采用双方都支持的最低协议版本进行通信。一旦发现共同支持的协议版本,则连接建立,否则发送OFPT_ERROR消息,描述失败原因,并中断连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenFlow交换机概述 的相关文章

随机推荐