0x01 OpenFlow概述

1.1 设计思想:

以网络设备中内置了TCAM存储器为前提设计的,无需设计新硬件,更新其软件即可。

1.2 具体:

控制面和数据面的分离

1.2.1 控制面的构建方法
  • 1)不构建另外物理网络
  • 2)分别构建控制面和数据面
1.2.2 数据面的构建方法
  • 1)Hop-by-Hop方式
  • 2)覆盖方式
  • 3)混合方式
1.2.3 OpenFlow控制器和OpenFlow通道

OpenFlow控制器和OpenFlow交换机维持着经由OpenFlow通道的TCP连接。

两种模式:

  • 1)Proactive模式
  • 2)Reactive模式
1.2.4 流表

流表描述数据包要进行何种处理。

OpenFlow交换机可拥有多个流表。

1.3 控制器和交换机的基本动作

1.3.2 OpenFlow交换机的初始动作

连接是从OpenFlow交换机向OpenFlow控制器建立的。

1.3.3 Proactive模式

由控制器向交换机预先发送流表项的设置。

1.3.3 Reactive模式

交换机Packet-in消息询问控制器如何处理。控制器发送指示消息或设置流表项。

有时也存在根据Packet-in消息,控制器给多台交换机添加流表的情况。

0x02 OpenFlow1.0的机制

2.1 OpenFlow1.0的流表和流表项

流表中流表项由3个基本要素构成:头字段计数器行动

交换机中有多个流表,OpenFlow1.0中匹配的流表只有一个,而OpenFlow1.1以上,数据包可以在各流表中与流表项匹配。

2.2 流表项

2.2.1 头字段

任何一个流表项都不匹配的情况称为Table-miss,发生Table-miss时交换机发送Packet-in消息或丢弃数据包。

若数据包与多个流表匹配,按优先级匹配,有配相同根据交换机具体实现来执行。

2.2.2 计数器

有4种计数器:

  • 1)流表的PerTable计数器
  • 2)端口的Per Port计数器
  • 3)流表项的Per Flow计数器
  • 4)队列的Per Queue计数器

2.2.3 行动

OpenFlow中定义了4种行动:

  • 1)Forward
  • 2)Drop
  • 3)Enqueue(可选)
  • 4)Modify-Field(可选)
2.2.3.1 Foeward

2.2.3.2 Drop

必备行动。只有Drop能丢弃与未指定Forward行动的流表项相匹配的数据包。

2.2.3.3 Enqueue(可选)

将现有数据包转发至现有的已设定的队列中(入队)。

用于实现Qos等功能的队列支持。

OpenFlow1.1开始Enqueue改名为Set-Queue。

2.2.3.4 Modify-Field(可选)

OpenFlow1.1开始Modify-Field改名为Set-Field。

2.3 控制器和交换机之间的消息

2.3.1 安全通道的建立

OpenFlow规范中,安全通道通过TLS(安全传输层协议,位于TCP之上)来实现。有时也会通过TCP明文来建立。

在OpenFlow1.0.2之后,建立安全通道的TCP端口号默认使用6653。

2.3.2 消息格式

OpenFlow头

OpenFlow版本,消息类型,该头包含8位字节数,分配给该数据包的事务id(请求和响应消息对应)

消息类型:22种。

2.3.3 安全通道的建立和初始设置

交换机和控制器都将发送Hello消息,Hello消息仅由OpenFlow头构成。

2.3.4 握手
2.3.4.1 Features消息

安全通道建立后,控制器通过握手掌握交换机的相关消息。

控制器发送查询的Features请求,交换价返回Features响应。
各OpenFlow交换机称为datapath,datapath_id是唯一标识。

2.3.4.2 SET_CONFIG和GET_CONFIG消息

用于查询和设置OpenFlow交换机的设置状态。

2.3.5 Flow-Mod消息

控制器用于对流表项添加、删除、变更设置等操作。

Flow-Mod消息字段:OpenFlow头,数据包匹配信息,Cookie,行动内容。

2.3.6 Packet-In消息

两种情况发送Packet-In消息:

  • 1)Table-miss
  • 2)行动为发送至控制器

两种情况:

  • 1)不缓存数据包,buffer_id=-1。
  • 2)缓存数据包。

不存在通知控制器缓存已经删除的机制。

2.3.7 Packet-Out消息

控制器向交换机发送含数据包发送命令的消息。

单一的Packet-Out消息中可包含多个行动。

2.3.8 Port-Status消息

在交换机中添加、删除或修改物理端口是,需要发送该消息通知控制器。

2.3.9 Flow-Remove消息

交换机流表项超时删除或是命令删除时,发送该消息通知控制器。

2.3.10 Error消息

通知错误。

控制器和交换机均可发送。

2.3.11 Barrier消息

用于掌握消息的处理进度。Barrier请求和响应。

2.3.12 Echo消息

用来确认控制器和交换机是否连接、检测通信延迟、测量通信带宽等。Echo请求和相应消息。

参考自《图解OpenFlow》
转载请注明出处

OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0相关推荐

  1. Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)

    Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...

  2. 国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令

    国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令 以VMware Workstation Pro 15环境下的NeoKylin7.0与DM8为例 中标麒麟系统NeoKyli ...

  3. OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置

    摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的, ...

  4. spring4.0基于Java配置_Spring MVC学习笔记之Controller查找(基于Spring4.0.3)

    0 摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程 1 SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 Sp ...

  5. 华为鸿蒙系统学习笔记10-华为鸿蒙 OS 2.0 发布,源代码现已开放

    2020年9月10日,在华为开发者大会 2020 上,华为消费者业务 CEO 余承东宣布推出鸿蒙 OS 2.0 版本(HarmonyOS 2.0).据 InfoQ 向华为官方了解,鸿蒙 OS 的代码将 ...

  6. 学习笔记:python游戏脚本1.0版本,实现自动点击、识图、识别价格、弹窗提示低于预期价格可以购买

    本人0.0001基础小白,欢迎大佬指点. 目标:游戏里面的商品是由别的玩家售卖,价格是波动的,想要买到一个好价格需要不断查看其他玩家的商店,并识别商店内是否有所需要的商品,有商品就点击查看价格,识别价 ...

  7. python的学习笔记案例1--汇率兑换4.0

    汇率兑换4.0:可以调用函数进行汇率兑换 """作者:lanxingbudui版本:4.0功能:汇率兑换日期:2018-12-10新增功能:根据输入判断是人民币还是美元, ...

  8. python的学习笔记案例1--汇率兑换1.0

    一.python程序元素: 缩进 注释----加入说明信息,不被执行.单行以"#"开头:多行使用"""  """ 三组双 ...

  9. Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码

    文章目录 1.argmax和max函数区别 2.axis=0/axis=1/axis=-1的区别 3.具体代码分析 ---3.1一维数组 ---3.2二维数组 ---3.3三维数组 1.argmax和 ...

最新文章

  1. 主流NoSQL及应用场景详解
  2. python实现简单的api接口-对Python实现简单的API接口实例讲解
  3. 2014年最新前端开发面试题
  4. Linux(CentOS)中常用软件安装,使用及异常——XManager, 中文支持,JDK
  5. div 重新加载_使用React的HOC来完成模块的异步加载
  6. Android之ndk-build -j4
  7. Codeforces Round #701 (Div. 2) D. Multiples and Power Differences 思维构造
  8. AT2165-[AGC006D]MedianPyramidHard【二分,贪心】
  9. java 拼图_拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?
  10. Debian操作系统的源配置信息详解--Source.list配置文件详解
  11. 存储过程不可以封装_【小知识】功率半导体器件之10功率器件的封装可靠性
  12. 川渝严重高温伏旱根源:全球气候变暖导致灾情频发
  13. PDA应用的一些想法
  14. 客户端无法连接到远程计算机。可能没有启用远程连接
  15. error: ‘avcodec_alloc_frame’ was not declared in this scope
  16. ZOJ 1060 Count the Color
  17. Windows终端配置emoji
  18. java一些基础知识点
  19. Android Studio开发手机APP(二)-利用MQTT通信开发物联网程序
  20. KVC基本原理和用法

热门文章

  1. 液晶面板里面有些什么配件_液晶电视的主要部件包括哪些?
  2. 解读:基于图卷积特征的卷积神经网络的股票趋势预测(文末赠书)
  3. c语言函数指针、结构体、枚举实例(详细)解析(快速掌握)
  4. QNX微内核RTOS
  5. 【Python项目】Flask + MySQL 实现用户注册,登录、注销
  6. 【python 接口开发】如何用python开发自己的接口
  7. 图文解说Quartus II使用入门
  8. 文档转换 云服务器,pdf转换成word云服务器
  9. java SE小练习
  10. 还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法