OpenFlow 协议详解

OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准协议。自2009年底发布1.0版本后,OpenFlow协议又经历了1.1、1.2、1.3及1.4版本的演进过程,目前使用和支持最多的是1.0和1.3版本。OpenFlow1.3在1.0版的基础上进一步优化及升级,其中添加了很多新的特性及消息,如支持多个流表(flow table)、组表(group table),支持多控制器等。一个流表中包含多个流表项,OpenFlow v1.3中流表项主要由7部分组成,分别是匹配域(用来识别该条表项对应的flow)、优先级(定义流表项的优先顺序)、计数器(用于保存与条目相关统计信息),指令(匹配表项后需要对数据分组执行的动作)、TimeoutsCookieFlags,如下图所示。
OpenFlow 协议详解_第1张图片
与OpenFlow v1.0不同的是,OpenFlow v1.3协议中一台OF交换机会有多张流表。具体匹配流程如下图所示。
OpenFlow 协议详解_第2张图片
当 一 个 数据包到达交换机 , 从数据包中提取匹配字段从第 一 个流表 开始 查找 匹配 , 匹配字段 取 决于数据 包 的类 型 , 通常 包括各种 数 据包 的 头字段 , 例如 以 太 网 源地 址或 IPv4 目 的地 地址 等 , 此 外 , 还可 以 对 数据 包 关 联的 字段 ( 如 交换 机 1 4 的入端 口 等 ) 进行 匹配 。 如果 数据包和流表项匹配成功 , 则 更 新计数器并执 行流 表项 中 的 指令。 如果该流表 项使用 GOTO 指令指 向 了 某一 其他流表 , 则执行完本次指令的数据包以及动作集、元数据等信息转到GOTO 指令指 向 的 流表进行 下 一 步 的 匹 配(也就是图中的 跳转到Table n?); 若 未指 向 另 一 流表则执行动作集 , 此时流水线处理成功。 如果在 某 个流表 中 并 未 匹配成 功 , 则 查找该 流表中 是否存在 tabl e - mi s s 流表项 ( 流 表 中 的 t abl e- mi ss 流表项 指定如 何 处理未 匹 配成功 的 数据包 ) , 如 果存在 t ab l e - mi s s 流 表 项 , 则 按该流表项中 的 指令执行 , 如丢弃 数据包 、 将数据包 转到 另 外 一 个 流表 或者发送给控制器(即通过Packet_In消息传递给控制器,由控制器制定数据包的转发策略而后通过Packet_Out消息下发流表给交换机) 等; 如果在 流表 中 并未 匹配成 功并且该流表项 中 不存在 tabl e- mi ss 流 表项, 那么 交换机将会丢弃该 数据 包。

Ope nFlo w 协议在工作 中 使用 GOTO 指令从一 张流表转 到另 一 张流表 , 该技 术被称 为 多级 流表技术 。

 

SDN控制器的路由原理:OpenFlow协议定义了交换机在报文匹配失败时向控制器申请流表的方法,当交换机收到一个不能被当前流表各条流匹配的数据包时,通过将失配报文的相关信息封装在Packet-In消息中发送给控制器,让控制器知晓报文失配情况,由控制器通过Flow-Mod等消息向交换机安装新流表。

你可能感兴趣的:(OpenFlow 协议详解)