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. STM32-USART控制led和蜂鸣器
  2. NSURLConnection和NSRunLoop
  3. HDU 4556 Stern-Brocot Tree
  4. Caffe官方教程翻译(3):Siamese Network Training with Caffe
  5. Linux下C++连MySQL数据库
  6. python数据科学实践指南_《Python数据科学实践指南》——导读-阿里云开发者社区...
  7. linux系统怎样发邮件,linux系统下如何发送邮件
  8. 20应用统计考研复试要点(part37)--概率论与数理统计
  9. 控制Java并行流的并行度
  10. PHP三年15K,程序员月薪15K相亲三年才成功,被拒理由:这个薪资提鞋都嫌弃
  11. android listview 分页
  12. pytorch模块函数API介绍
  13. iOS,Core Graphics
  14. 用Nginx禁止指定IP、国外IP访问我的网站
  15. 推荐 20 款 IDEA 主题!
  16. Android 隐藏APP图标
  17. 手机语音通讯测试(Mobile Phone Communication Test)
  18. Scheme 语言 第一次的感触!
  19. rancher及灵雀云TKF中解决中文编码问题
  20. Three.js 基础之灯光

热门文章

  1. C语言实现万年历(附代码) 小白完成的第一个C语言程序,希望大家多多关注,点赞
  2. 在CSS世界的权力——权重
  3. 提升代码覆盖率的经验
  4. 激光测距DL100通讯线连接
  5. 最大似然估计算法(简单,通俗易懂)
  6. 傅雷家书与互联网从业者的思考
  7. 最近发现的一个学习宝库
  8. 分布式-Java应用
  9. manjaro-安装idea
  10. simulink模糊逻辑控制器的使用小结