OpenFlow协议原理及基本配置-网络测试仪实操

news/2024/5/3 20:48:26/文章来源:https://blog.csdn.net/XINERTEL/article/details/128034313

一、OpenFlow协议原理

1.OpenFlow技术背景

●转发和控制分离是SDN网络的本质特点之一。在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中到一起,底层的网络基础从应用中独立出来,由此,网络获得前所未有的可编程、可控制和自动化能力。这使用户可以很容易根据业务需求,建立高度可扩展的弹性网络。要实现SDN网络的转控分离架构,就需要在SDN控制器与数据转发层之间建立一个通信接口标准。

●2009年开发出一个满足SDN网络转控分离架构的标准,OpenFlow1.0。

●OpenFlow是一种网上通信协议,属于数据链路层,允许控制器直接访问和操作网络设备的转发平面(forwardingplane),借此改变网上数据包所走的网上路径。这些设备可以是物理设备,也可以是虚拟的路由器或者交换机。转发平面则采用基于流的方式进行转发。

●OpenFlow的思路很简单,网络设备维护一个或者若干个流表,并且数据流只按照这些流表进行转发。流表本身的生成、维护完全由外置的控制器来管理。

●流表项并非仅指普通的IP五元组,而是由一些关键字和执行动作组成的灵活规则,并且每个关键字字段都是可以通配的。在实际应用中,网络管理人员可以通过配置流表项中具体的匹配关键字来决定使用何种粒度的流转发规则。例如,如果只需要根据目的IP进行路由,那么下发流表项时,关键字只匹配目的IP字段,其它关键字全通配,而动作中只需要一个出端口即可实现常规的IP路由转发。

2.OpenFlow版本

OpenFlow各个版本,目前我们Renix支持Openflow1.3版本。

协议版本

主要功能

OpenFlow 1.0

单表、IPV4

OpenFlow 1.1

多级流表、组表、MPLS、VLAN

OpenFlow 1.2

多控制器、IPV6

OpenFlow 1.3

Meter表、版本协商能力

OpenFlow 1.4

流表同步、协议消息完善

OpenFlow 1.5

数据包类型识别流程(以太网数据包、PPP数据包)egress Table

下面我们先介绍下OpenFlow1.0版本

3.OpenFlow1.0

一个支持OpenFlow1.0的交换机有一张流表(FlowTable)和一个安全通道(SecureChannel)。流表(FlowTable)向交换机提供执行数据包的查找和转发工作的依据;安全通道(SecureChannel)向交换机提供到外部控制器的安全连接,如下图所示。控制器使用OpenFlow1.0这一南向协议对交换机进行控制。

4.流表FlowTable

一个流表包含一个流表项的集合、一个活动计数器、一个待作用至匹配数据包的操作集(可能包含0个或多个操作)。所有交换机处理的数据都要经过流表的比对。若发现一个匹配的流表项,则这个表项中所有的操作都将在这个数据表上执行。若没有匹配任何流表项,则数据包将通过安全通道转发给控制器。控制器负责在没有有效流表项的情况下决定如何处理数据包,并向交换机的流表添加或删除流表项。     一个流表项由HeaderFields(包头域)、Counters(计数器)、Actions(操作集)组成。如下图所示:

(1)HeaderFields(包头域)

交换机根据HeaderFields(包头域)对接收的数据包进行匹配,OpenFlow1.0的HeaderFields(包头域)由12元组组成。SDN交换机解析数据包后逐一对这12元组进行匹配,每一元组的匹配分为固定值匹配和掩码匹配。12元组详情如下:

(2)Counters(计数器)

交换机使用Counters(计数器)来对匹配的数据包进行更新,Counters(计数器)可根据每流表、每个流、每个端口、每个队列进行维护。

(3)Actions(操作集)     

交换机对匹配成功的数据包执行相应的Actions(操作集),每个操作集可能包含0个或多个操作。若发现一个匹配的流表项,则这个表项中所有的操作将在这个数据表上执行。

●若没有匹配任何流表项,也没有包含任何转发操作,交换机将丢弃数据包,用户必须按指定的顺序(如根据优先级编号)来执行待操作列表。   

若一个流表项不能按指定的顺序来对数据包执行列表中的操作,则交换机可能将这个流表项驳回,并立即返回一个不支持流的错误值。

操作分为两种,一种为RequiredActions必需操作、另一种为OptionalAction可选操作。注意交换机不需要支持所有的操作类型,只需要支持RequiredActions必需操作即可。交换机连接到控制器时将告知哪些是可选操作。

(4)RequiredActions (必需操作)   

每台交换机都必须支持这些操作,包括转发操作中的必需操作和丢弃,其中转发操作中的必需操作包括以下几项。

ALL

将数据转发至不包括进入接口的所有接口

CONTROLLER

将数据包封装并传输至控制器

LOCAL

将数据包发送至本地交换机网络栈。

TABLE

仅向 packet-out消息执行流表中的操作。

IN PORT

将数据包从其进入的接口发出。

丢弃

若数据包不匹配所有的流表项,则交换机将丢弃此数据包。

(5)OptionalAction (可选操作)

可选操作包括转发操作中的可选操作,入队,修改域。

转发操作中的可选操作包括以下几项:

NORMAL:执行传统交换机支持的转发路径。

FLOOD:使用最小生成树的原理将数据包泛洪至除入口之外的所有接口。     

入队:入队操作是将数据包转发至一个端口所对应的队列中。     

修改域的操作是SDN最强大的功能之一。允许修改数据包的包头内容包括以下几项:

修改VLAN标签                       修改VLAN优先级

弹出VLAN标签                       修改源MAC地址

修改目的MAC地址               修改源IP地址

修改目的IP地址                     修改IP服务类型字段

修改源端口号                        修改目的端口号

(6)匹配流表

交换机接收到一个数据包后,执行匹配流程。其中对于数据包的包头进行解析,以用于交换机基于数据包的类型来查找流表。根据数据包是否属于VLAN(以太网类型0x8100)、是否为ARP数据包(以太网类型0x0806)、是否为IP数据包(以太网类型0x0800)、是否为TCP或UDP包(IP协议为6或7)、是否为ICMP(IP协议为1)来提取关键信息进行比对。     

数据包基于优先级(优先级越高,其数字也越高)来对众多流表项进行匹配。若一个流表项指定了精确的匹配(即没有通用符),则它是最高优先级的,其他带有通用符的流表项有其相应的优先级。先匹配优先级高的流表项,如果两个流表项优先级相同,那么由具体的交换机自行决定。     

当数据包匹配到一条流表项时,流表项对应的计数器更新。若没有匹配到任何流表项,则交换机将这个数据包通过安全通道发送给控制器。另外注意,若某个域的值为ANNY,则它匹配包头对应这条域中所有可能值的数据包。

5.安全通道(SecureChannel

●安全通道是连接交换机和控制器的接口,所有的安全通道消息都必须遵守OpenFow协议。OpenFlow协议支持3种消息类型:controller-to-switch(交换机到控制器)、asynchronous(异步)和symmetric(对称),每一类消息又有多个子消息类型。

●controller-to-switch:消息由控制器发起,用于直接管理或监视交换机的状态,包括Features(获取交换机特性)、Configuration(配置OpenFlow交换机)、Modify-State(修改交换机状态,即修改流表)、Read-State(读取交换机状态)、Send-Packet(发送数据包)、Barrier(阻塞消息)

●synchronous(异步)消息:由交换机发起,用以提醒控制器更新网络事件和交换机状态变化的状态,包括Packet-In(告知控制器交换机接收到数据包,注意此数据包为交换机无法处理的数据包)、Flow-Removed(告知控制器交换机流表被删除)、Port-Status(告知控制器交换机端口状态更新)、Error(告知控制器交换机发生错误,如控制器给交换机下发了一些无法执行的命令)

●symmetric(对称)消息:可以由交换机或控制器发起而无须邀请,包括Hello(建立OpenFlow连接),Echo(确认交换机与控制器之间的连接状态,互相探测对方是否存在)、Vendor(由厂商自定义消息)。

6.OpenFlow1.3

OpenFlow1.3增如了多级流表(流水线结构)、组表、度量(Meter,此结构体主要用来做流量,定义转发的性能),修改了数据包特征匹配的描述方法(main方法,更具拓展性),还增加了数据包处理的动作类型,加强了多控制器的支持,提供更安全的连接和辅助连接。      

OpenFlow1.3交换机的主要组件主要由一到多个流表、一个组表、一个连接到外部控制器的OpenFlow通道组成。流表和组表执行数据包查找和转发功能。

7.流表(FlowTable

每个流表包含一个流表项的集合。每个流表项由一个匹配域、一个计数器、一个待作用到匹配的数据包的指令(Instructions)集、一个超时时间、一个cookie组成。一个流表项的结构如下所示:

OpenFlow1.3的流表与OpenFlow1.0的流表最大的不同是原来的行为(Actions)变成了指令(Instructions),可以在流表之间进行跳转。

8.匹配

●OpenFlow1.0定义了12个匹配的元组,OpenFlow1.3定义了40个匹配的元组。

●但并非OpenFlow1.3的匹配全部需要包含这40个元组,只需要包含必备的13个元组进入端口          以太网源地址、 以太网目标地址、以太网类型、 IP协议、IPV4目标地址、IPV6源地址 、IPV6目标地、TCP源端口地址、TCP目标端口地址、UDP源端口地址、UDP目标端口地址

再加入其他所需的可选匹配元组即可。

●OpenFlow13的匹配域是变长的。

9.指今(Instructions)

●一个指令要么修改流水处理(如将数据包指向另一个流表),要么包含一个待加入操作集(Action Set)的操作集合,要么包含一个立即在数据包上生效的操作列表。其中操作集(Action Set)与数据包相关的操作集合在报文被每个表处理的时候可以累加,在指令集指导报文退出处理流水线的时候这些行动会被执行.

●当报文匹配上流表项时,执行表项包含的指令集。指令集类型如下所示:

●当流表项的指令集中不包含GoTo-Table时,立即执行相关联的动作集。动作集类型如下所示:

10.组表(GroupTable

组表(Group Table)是一个行为桶的列表和选择其中一个或多个桶以应用到一个包基础上的方法。

一个流表项的结构如下图所示:

其中组类型包括以下几项:

★indirect:只包含一个Action列表的组表,转发效率更高,可以用于路由聚合。

★all:执行actionbuckets中的所有动作,可以用于组播。

★select:随机执行actionbuckets中的一个动作,可以用于多径传播。

★fastfailover:如两端点间有N条路径,可写入

★actionbuckets,之后随机选择其中一条路径。

11.OpenFLow1.3流表的流水线处理

●OpenFlow1.3交换机接收到一个数据包后,以流水线的方式匹配多个流表。交换机将匹配域从数据包中提取出来,之后交换机从第一个流表开始查询可匹配的流表项,依次处理至最后一个流表。流表之间是可以跳转的(根据流表项的指定跳转),流表项的匹配过程与OpenFlow1.0类似,每一个流表必须支持能处理table-miss的流表项。table-miss表项指定在流表中如何处理与其他流表项未匹配的数据包,比如数据包发送到控制器,丢弃数据包或直接将包扔到后续的表。      

●流表中的处理可以分成三步:

(1)找到最高优先级匹配的流表项。

(2)应用指令:

①修改数据包并更新匹配域(应用操作指令)。

②更新操作集(清除操作和或写入操作指令)。

③更新元数据。

(3)将匹配数据和操作集发送到下一个流表。

12.OpenFLow1.3流表的匹配

OpenFlow1.3流表的匹配流程与OpenFlow1.0相比,数据包进入交换机增加一个需要匹配的信息:一个一层的输入端口In_Port、数据包头(二层、三层、四层的信息)、元数据(64比特的数据,在流表协议转换的时候携带控制器自定义的一些额外的信息)。

二、测试用例

1.测试目的

在Controller上配置流表下发switch

2.测试说明

由于交换机不支持openflow,所以使用测试背靠背验证。

测试仪只能模拟简单的switch,而且测试仪模拟的switch上无法查看到Controller下发的流表信息。这里着重讲配置

3.测试步骤

(1)按图连接好拓扑

(2)使用配置向导在P1上配置OpenFlowController业务

(3)使用配置向导在P2上配置OpenFlowSwitch业务

(4)开启OpenFlowController和Switch业务

(5)开启抓包,查看OpenFlowController发送消息

4.预期结果

OpenFlowController和Switch可以建立会话

查看抓包,可以抓到Controller发送的消息

三、测试步骤

Step1:占用Ports

1.1添加机框

1.2占用Ports

1.3配置端口IP

Step2:配置OpenFlowSwitch

Step3:配置OpenFlowController

3.1配置OpenFlowController

3.2配置ActionList

3.3配置FlowTable —匹配规则

3.4配置FlowTable—指令集

3.5配置CommandList

3.6在Controller上配置Switch信息

Step4:抓取分析OpenFlow消息

4.1运行OpenFlowController 和Switch

4.2抓包查看OpenFlow交互报文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_225504.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题二python代码实现(更新完毕)

更新信息 2022-11-24 10:00 更新问题1和问题2 思路 2022-11-24 23:20 更新问题一代码 2022-11-25 11:00 更新问题二代码 相关链接 【2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题一python代码实现】 【2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题二python代…

基于深度学习的AI绘画为何突然一下子火了?

CLIP |Midjourney | dreamstudio AIGC | Stable Diffusion | Imagen 随着Disco、Midjourney、dreamstudio 、AIGC、Stable Diffusion、Imagen、深度学习、高性能计算、数据分析、数据挖掘等技术的快速发展,AI绘画技术得到迅速发展。 即使今年年初的AI绘…

期末复习 C语言再学习

作者:小萌新 专栏:C语言复习 作者简介:大二学生 希望能和大家一起进步 博客简介:本篇博客会介绍一些操作符关键字指针以及结构体 操作符关键字和结构体操作符左右移操作符条件操作符关键字指针结构体总结操作符 本文就不像之前写…

Java多线程(一)——多线程的创建

多线程 在计算机中为了提高内存和资源的利用率,引入了并发编程的思想;多进程和多线程都能实现并发编程,但是多线程相对于多进程更“轻量”,(多线程和多线程的关系和区别),所以这篇博客将着重讲…

Python程序员:代码写的好,丝滑的壁纸少不了

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 不知道大家的电脑桌面一般用的什么类型的壁纸? 早上来上班,打开电脑,被漂亮的桌面壁纸所吸引,年底将近,这又是哪个地方的节日&#xff…

【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理

目录 一、项目介绍 二、项目结构 三、准备数据 1.数据标注 2.数据转换格式 四、执行训练 1.anchors文件 2.标签文件 3.预训练模型 4.训练数据 5.修改配置 6.执行训练 五、执行预测 1.检测图片 2.检测视频 3.heatmap 五、转换onnx 1.导出onnx文件 2.检测图片…

SpringCloud之入门

目录 一、简介 微服务架构介绍 微服务架构的常见问题 二、微服务架构拆分代码实现 微服务环境搭建 案列准备 微服务调用 实现步骤 创建一个父工程 创建成功spcloud-shop的pom依赖 创建基础模块 基础模块 shop-common pom依赖 创建用户微服务 shop-user 源码 shop-use…

热门编程语言那么多,该选择哪个

编程语言那么多,该怎么选呢?无论是对找工作、还是打算转行新领域的同学们,起初都会有这样的困扰。这时候了解清楚编程语言的种类,到底该选哪个方向?将来能从事哪些岗位的工作?就比较重要了。与其盲目随从他…

【FLASH存储器系列十二】Nand Flash芯片使用指导之二

目录 1.1 芯片指令集 1.2 READ PAGE(00h–30h) 1.3 READ PAGE CACHE SEQUENTIAL (31h) 1.4 READ PAGE CACHE RANDOM (00h-31h) 1.5 PROGRAM PAGE(80h-10h) 1.6 PROGRAM PAGE CACHE (80h-15h) 1.7 ERASE BLOCK (60h-D0h) 上…

Git版本控制工具使用

文章目录1. CICD系统构成和流程1.1 CICD来源及概念1.2 Git版本控制系统2. Git操作和使用git config (基本配置操作)git clone <repo URL\> (创建仓库|拷贝已有仓库)git branch (分支相关操作- 创建|查看|删除)git checkout (操作文件和分支)git add/commit (提交和修改-保…

估值破千亿,被资本疯抢的广汽埃安会是广汽的未来吗?

最近&#xff0c;广汽埃安在新能源市场上捷报频传&#xff0c;先是宣布完成了182.94亿元的A轮融资&#xff0c;成近年国内新能源整车最大的单笔私募融资。品牌估值更是达到了震撼人心的1032.39亿&#xff0c;基本等于广汽集团AH总市值&#xff0c;也远超港股小鹏、零跑汽车的市…

【C++】Cmake使用教程(看这一篇就够了)

文章目录引言一 环境搭建二 简单入门2.1 项目结构2.2 示例源码2.3 运行查看三 编译多个源文件3.1 在同一个目录下有多个源文件3.1.1 简单版本3.1.1.1 项目结构3.1.1.2 示例代码3.1.1.3 运行查看3.1.2 进阶版本3.1.2.1 项目结构3.1.2.2 示例源码3.1.2.3 运行查看3.2 在不同目录下…

[附源码]java毕业设计游戏战队考核系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

vue拖拽删除实现

拖拽删除 背景 自营上传图片&#xff0c;但是需要排序和删除功能&#xff0c;所以用到了h5的拖拽 源元素&#xff1a; 即被拖拽的元素。 目标元素&#xff1a; 即合法的可释放元素。 每个事件的事件主体都是两者之一。 拖拽事件 触发顺序及次数 被拖拽元素&#xff0c;事…

数据结构学习笔记(Ⅳ):串

目录 1 串 1.1 定义与基本操作 1.定义 2.基本操作 1.2 串的存储结构 1.顺序存储 2.链式存储 3.基于顺序存储实现基本操作 2 串的朴素模式匹配算法 2.1 朴素模式匹配算法 2.2 KMP算法 1.优化思路 2.计算next数组 2.3 KMP算法优化 1 串 1.1 定义与基本操作 1.定义…

机器学习笔记之高斯网络(二)高斯贝叶斯网络

机器学习笔记之高斯网络——高斯贝叶斯网络引言回顾高斯网络贝叶斯网络&#xff1a;因子分解高斯贝叶斯网络&#xff1a;因子分解引言 上一节介绍了高斯网络及其条件独立性&#xff0c;本节将介绍高斯贝叶斯网络。 回顾 高斯网络 高斯网络最核心的特点是&#xff1a;随机变…

【软件测试】作为测试人,因工作与开发吵了一架碰撞,该咋办......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试与开发在工作中…

Redis数据库redisDb源码分析

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、组织方式 Redis服务器将所有的数据库 都保存在src/server.h/redisServer结构中的db数组中。db数组的每个entry都是src/server.h/redisDb结构&#xff0c;每个redisDb结构代表一个数据库。Redis默认有16个数据库。 1.1…

Android App开发音量调节中实现拖动条和滑动条和音频管理器AudioManager讲解及实战(超详细 附源码和演示视频)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、拖动条和滑动条 拖动条SeekBar继承自进度条ProgressBar&#xff0c;它与进度条的不同之处在于&#xff0c;进度条只能在代码中修改进度值&#xff0c;不能由用户改变进度值&#xff0c;拖动条不仅可以在代码中修改进度值&#xf…

Greenplum数据库故障排查及修复

场景一&#xff1a;gp服务正常&#xff0c;存在部分segment实例丢失 1、异常现象 主节点切换gpadmin用户输入gpstate查看状态 如果红色框内有指向左边的箭头则说明存在部分segment实例丢失。 2、排查思路 首先查看主节点日志&#xff0c;重点关注发生segment丢失那段时间的…