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 v1.0不同的是,OpenFlow v1.3协议中一台OF交换机会有多张流表。具体匹配流程如下图所示。

当 一 个 数据包到达交换机 , 从数据包中提取匹配字段从第 一 个流表 开始 查找 匹配 , 匹配字段 取 决于数据 包 的类 型 , 通常 包括各种 数 据包 的 头字段 , 例如 以 太 网 源地 址或 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 协议详解(干货)相关推荐

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

    2 OpenFlow协议详解 2.1 OpenFlow协议简介 OpenFlow协议是基于网络中"流"的概念设计的南向接口协议.在OpenFlow引入了"流"的 ...

  2. Openflow协议详解

    http://www.h3c.com/cn/d_201811/1131080_30005_0.htm# 1 OpenFlow背景 转发和控制分离是SDN网络的本质特点之一 .在SDN网络架构中,控制平 ...

  3. mysql binlog协议_MySql-Binlog协议详解-流程篇

    MySql-Binlog协议详解-流程篇 MySql-Binlog在MySql主从不同方面发挥着不可或缺的作用,同时我们也能通过Binlog实时监控数据的变化.本系列就讲述了怎样接收并解析Binlog ...

  4. 3、Modbus通讯协议详解

    前言 在平时用的时候模块都会带有自己的通讯协议,直接查看手册用就可以,所以平时对于modbus虽然是在用但是原理性的东西时常忘记. 但是如果你做一个底层,自己写一个通讯协议,这时候就要对协议本身有所了 ...

  5. HTTP协议详解(真的很经典)

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  6. Http 协议详解笔记

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  7. Http协议 详解(转载)

    http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分 ...

  8. ARP协议详解之ARP动态与静态条目的生命周期

    ARP协议详解之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自动添加和删除. q  每个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉.所以,生 ...

  9. ARP缓存表的构成ARP协议全面实战协议详解、攻击与防御

    ARP缓存表的构成ARP协议全面实战协议详解.攻击与防御 1.4.3  ARP缓存表的构成 在局域网的任何一台主机中,都有一个ARP缓存表.该缓存表中保存中多个ARP条目.每个ARP条目都是由一个IP ...

最新文章

  1. leetcode 371. Sum of Two Integers
  2. CentOS上安装Python3.7.4
  3. 6工程文件夹作用_MCUXpresso IDE下SDK工程导入与workspace管理机制
  4. 公众号滑动图代码_如何实现微信公众号文章“滑动查看更多”
  5. centos 7 安装openstack kilo in three node
  6. 用置换破坏您的JUnit5测试
  7. pip不是内部或外部命令,也不是可运行的程序 或批处理文件--解决办法
  8. dataframe格式的数据处理
  9. EasyRecovery恢复数据的具体步骤是什么
  10. Android开发:由模块化到组件化(一)
  11. 01_LBP算法原理
  12. Alex 的 Hadoop 菜鸟教程: 第2课 hadoop 安装教程 (CentOS6 CDH分支 yum方式)
  13. 加油站管理系统前五排行榜
  14. 【Arduino 项目篇】智能窗户控制系统(附录:简单红绿灯制作)
  15. DDR3 full empty如何产生?
  16. Android 自学笔记——准备山东省大学生软件设计大赛
  17. 变种 背包问题_【算法设计】背包问题
  18. 数论——卢卡斯(Lucas)定理(板子)
  19. Shapefile格式数据去除投影坐标系
  20. 使用qqbot,群发好友消息以及打广告

热门文章

  1. 面试时为什么想当计算机老师,每日练·面试丨你为什么想当老师?
  2. 【Git 基本操作】:更新项目内容或项目文件,图文并茂,深入浅出
  3. 移动通信关键技术-多址技术和复用技术
  4. 【ModBus】modbus之功能码详细讲解(2)
  5. Eviews7.2模型建模与预测时间序列分析(数据平稳性检验)
  6. php 如何输出一张图片,php怎么输出图片?
  7. 如何给web页面添加一个水印
  8. 阿当姆斯校正程序代码MATLAB,数值分析实验教程.doc
  9. 使用Git命令-查看远程分支、本地分支、创建分支、删除分支的方法
  10. * JLink Info: STM32 (connect): Can not attach to CPU. Trying connect under reset.