OpenFlow总结

OpenFlow体系结构

OpenFlow
由斯坦福大学研究者提出一种应用于SDN架构的关键协议。核心理论就是将之前完全由交换机/路由器控制的数据包的转发过程,转变为由OpenFlow交换机(OpenFlow Switch) 和控制服务器(Controller)分别完成的独立过程。
体系结构
主要由OpenFlow交换机(OpenFlow Switch)和控制服务器(Controller)两部分组成。OpenFlow规范主要分为四个部分。
在这里插入图片描述

OpenFlow交换机由流表、安全通道和OpenFlow协议三部分组成。逻辑结构图如下:
在这里插入图片描述

OpenFlow端口

1、OpenFlow端口
OpenFlow端口是OpenFlow处理单元与网路其他部分传递封包的网路接口。交换机在逻辑上与其他交换机都是通过OpenFlow端口相连,一个封包在两个交换机之间的传输只能从交换机1的出口端口到交换机2的入口端口。一个OpenFlow交换机必须支持三种类型的端口:物理端口,逻辑端口和预定端口。OpenFlow标准端口定义为物理端口,逻辑端口以及本地预定的端口。标准端口可以当做入口端口,出口端口来使用。它们可以在组中使用,有端口计数器,此外还有状态与配置。

1.1、物理端口

OpenFlow的物理端口是与交换机硬件接口对应的由交换机定义的端口。在有些布放的情形下,OpenFlow交换机是在硬件上虚拟化的。此时,物理端口可能代表着对应交换机硬件接口资源的一个分片。

1.2、逻辑端口

逻辑端口指的是由交换机定义但不与硬件接口直接相关的端口。逻辑端口可能是由交换机使用非OpenFlow 方法定义的高阶抽象(如链路聚合组,隧道,回环接口)。逻辑接口包含了封包封装且可能映射到各种物理端口。逻辑端口完成的封包处理必须依赖于应用,且处理过程对OpenFlow处理是透明的。这些端口必须采用与物理端口相同的方式来完成与OpenFlow处理的交互。
逻辑端口与物理端口唯一的区别在于与逻辑端口相关的封包必须有一个额外的流水线属性,隧道编号。当逻辑端口收到的封包被转发到控制器时,相关的物理端口与逻辑端口都会向制器发送报告。

1.3、预定端口(OpenFlow1.5中文版)

指明了一般性的转发规则,一个交换机不一定要支持全部的预定段端口,但必须支持表明必备的端口。

  1. (必备)ALL:代表了交换机可以用于转发一个特定封包的所有端口。只能用作输出端口。在这种情况下,封包将被复制到各个端口执行出操作,当然封包的入端口与配置为OFPPC_NO_FWD的端口除外。
  2. (必备)控制器:代表与控制器相连的控制信道,可以作为入口端口或出口端口使用。作为出口端口使用时,将封包封装在Package-in消息中,并将其转发到控制器。
  3. (必备)表:代表OpenFlow流水线的开始,这个端口只有在Package-out消息动作集中的输出动作里才有意义。执行输出操作是,将封包转发至第一个流表,由此开始一个OpenFlow流水线处理封包的过程。
  4. (必备)入端口:代表封包的入口端口。只能作为输出端口使用,通过它的入口端口送出封包。
  5. (必备)任意:在OpenFlow请求没有指定端口时使用的特殊值(也就是端口匹配值为通配符时)。既不能做入口端口也不能做出口端口。
  6. (必备)未设置:用于指明输出端口在动作集中为设置的特殊值。只能在用匹配属性OXM_OF_ACTSET_OUTPUT来匹配动作集中的输出端口时使用。既不能做入口端口也不能做出口端口。
  7. (可选)本地:代表交换机的本地网络堆与它的管理堆。 既能做入口端口也能做出口端口。本地端口使得远端实体可以与交换机及网路服务通过OpenFlow网路相连。在有着合适的默认流表项的情况下,本地端口可以用来做控制器的同频带信号传输的连接。
  8. (可选)普通:代表使用交换机的传统的非OpenFlow流水线转发方法。只能作为输出端口使用,使用普通的流水线处理封包。通常情况下会给封包架起网桥或是给封包指明路由路径,而实际上结果总是依赖于实现。如果交换机不能够从OpenFlow流水线转发封包到普通流水线,它必须不支持这个动作。
  9. (可选)泛洪:代表使用 交换机的传统的非OpenFlow流水线泛洪。只能作为输出端口使用,实际结果依赖于实现。通常会在所有的标准端口送出封包,封包的入口端口与处于OFPPS_BLOCKED状态的端口除外。交换机也可能通过封包的VLAN ID或其他标准来选择实现泛洪的端口。

OpenFlow流表(FlowTable)

2、OpenFlow的流表

2.1、概念

流表项:在流表中用于匹配和处理数据包的一个元素。它包含用于匹配数据包的匹配字段、匹配次序的优先级,跟踪数据包的计数器,以及对应的指令集 。
匹配字段:用来匹配数据包的字段,包括包头,进入端口,元数据值。匹配字段可能会进行通配符匹配(匹配任何值)或者在某些情况下通过位掩码进行匹配。
指令:指令存在于流表项中,描述报文匹配流表项时OpenFlow的处理方式。指令可以修改流水线处理,如指导包匹配另一个流表,也可以包含一系列添加到行动集的行动,还可以包含一系列立即应用到数据包的行动。
行动:将数据包转发到一个端口或修改数据包,如TTL字段减1操作。行动可能是与流表项相关联的指令集或者与组表项相关联的行动存储段的一部分。我们可以将行动积累在数据包的行动集,也可以立即将行动应用到该数据包。
行动集:与数据包相关的行动集合,在报文被每个表处理的时候这些行动可以累加,在指令集指导报文退出处理流水线的时候这些行动会被执行。
组:一系列的行动存储段和一些选择一个或者多个存储段应用到数据包单元的手段。
行动存储段:一组行动和相关参数,定义组。
标记:一个头,可以插入到数据包或者通过压入和弹出行动进行移除。
最外层的标签:一个数据包最开始出现的标签。
控制器:一个实体与OpenFlow交换机使用OpenFlow协议交互的实体。
计量:一个交换机元件,可以测量和控制数据包的速度。当数据包速率或通过计量的字节速率超过预定义的阈值时,计量触发计量带。如果计量带丢弃该数据包,它则被称为一个速率限制器。

2.2、流表结构

流表是OpenFlow交换机的核心部分,OpenFlow交换机包括一个或多个流表和一个组表,执行分组查找和转发,和到一个外部控制器OpenFlow的信道。一条OpenFlow(V1.3)的规则组成如下,与OpenFlow v1.0不同的是,OpenFlow v1.3协议中一台OF交换机会有多张流表:
在这里插入图片描述

匹配域:用来识别该条表项对应的flow,对数据包匹配。包括入口端口和数据包报头,以及由前一个表指定的可选的元数据;
优先级:定义流表项的优先顺序;
计数器:,更新匹配数据包的计数,用于保存与条目相关统计信息;
指令:修改行动集或流水线处理,匹配表项后需要对数据分组执行的动作;
Timeouts:最大时间计数或流有效时间;
Cookie:由控制器选择的不透明数据值。控制器用来过滤流统计数据、流改变和流删除。但处理数据包时不能使用;
Flags。
控制器使用OpenFlow的协议,可添加、更新和删除流表中表项,既主动或被动响应数据包。
每个流表项包含匹配字段,计数器和一组指令,用来匹配数据包。
行动描述了数据包转发,数据包的修改和组表处理。流水线处理的指令允许数据包被发送到后面的表进行处理,允许信息以元数据的形式在表之间进行通信。当与一个匹配的流表项相关联的指令集没有指向下一个表时,表流水线处理停止,这时该数据包通常被修改和转发。

OpenFlow通信通道

3、OpenFlow通信通道

3.1、消息类型

  1. Controller-to-Switch(控制器到交换机的消息,由控制器主动发出,用于管理OF交换机)
    • Features用来获取交换机特性
    • Configuration用来配置OpenFlow交换机
    • Modify-State用来修改交换机状态(修改流表)
    • Read-Stats用来读取交换机状态(流、网包等统计信息)
    • Send-Packet用来发送数据包
    • Barrier阻塞消息,控制器确保消息依赖满足,或接收完成操作的通知
    • Packet-out控制器通过交换机指定端口发出网包。
  2. Asynchronous(异步消息,此类消息由交换机主动发出,异步消息的主要用途是将交换机状态或网络事件的变化更新到控制器。)
    • Packet-in用来告知控制器,交换机接收到数据包
    • Flow-Removed用来告知控制器交换机流表被删除
    • Port-Status交换机端口状态发生变化时(例如down掉),触发Port-status消息。
    • Error用来告知控制器交换机发生错误
  3. Symmetric(对称消息,可以由控制器或交换机主动发出)
    • Hello用来建立OpenFlow连接
    • Echo用来确认交换机与控制器之间的连接状态,该消息用来测量延迟、是否连接保持等。
    • Vendor厂商自定义消息

3.2 、消息交换

下图展示了OpenFlow和Switch之间一次典型的消息交换过程,出于安全和高可用性等方面的考虑,OpenFlow的规范还规定了如何为Controller和Switch之间的信道加密、如何建立多连接等(主连接和辅助连接)。
在这里插入图片描述

(综合文章简单总结下OpenFlow的相关知识)

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值