OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0
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相关推荐
- Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)
Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...
- 国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令
国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令 以VMware Workstation Pro 15环境下的NeoKylin7.0与DM8为例 中标麒麟系统NeoKyli ...
- OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置
摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的, ...
- spring4.0基于Java配置_Spring MVC学习笔记之Controller查找(基于Spring4.0.3)
0 摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程 1 SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 Sp ...
- 华为鸿蒙系统学习笔记10-华为鸿蒙 OS 2.0 发布,源代码现已开放
2020年9月10日,在华为开发者大会 2020 上,华为消费者业务 CEO 余承东宣布推出鸿蒙 OS 2.0 版本(HarmonyOS 2.0).据 InfoQ 向华为官方了解,鸿蒙 OS 的代码将 ...
- 学习笔记:python游戏脚本1.0版本,实现自动点击、识图、识别价格、弹窗提示低于预期价格可以购买
本人0.0001基础小白,欢迎大佬指点. 目标:游戏里面的商品是由别的玩家售卖,价格是波动的,想要买到一个好价格需要不断查看其他玩家的商店,并识别商店内是否有所需要的商品,有商品就点击查看价格,识别价 ...
- python的学习笔记案例1--汇率兑换4.0
汇率兑换4.0:可以调用函数进行汇率兑换 """作者:lanxingbudui版本:4.0功能:汇率兑换日期:2018-12-10新增功能:根据输入判断是人民币还是美元, ...
- python的学习笔记案例1--汇率兑换1.0
一.python程序元素: 缩进 注释----加入说明信息,不被执行.单行以"#"开头:多行使用""" """ 三组双 ...
- 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和 ...
最新文章
- 主流NoSQL及应用场景详解
- python实现简单的api接口-对Python实现简单的API接口实例讲解
- 2014年最新前端开发面试题
- Linux(CentOS)中常用软件安装,使用及异常——XManager, 中文支持,JDK
- div 重新加载_使用React的HOC来完成模块的异步加载
- Android之ndk-build -j4
- Codeforces Round #701 (Div. 2) D. Multiples and Power Differences 思维构造
- AT2165-[AGC006D]MedianPyramidHard【二分,贪心】
- java 拼图_拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?
- Debian操作系统的源配置信息详解--Source.list配置文件详解
- 存储过程不可以封装_【小知识】功率半导体器件之10功率器件的封装可靠性
- 川渝严重高温伏旱根源:全球气候变暖导致灾情频发
- PDA应用的一些想法
- 客户端无法连接到远程计算机。可能没有启用远程连接
- error: ‘avcodec_alloc_frame’ was not declared in this scope
- ZOJ 1060 Count the Color
- Windows终端配置emoji
- java一些基础知识点
- Android Studio开发手机APP(二)-利用MQTT通信开发物联网程序
- KVC基本原理和用法