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

news2025/8/3 23:47:10

一、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.coloradmin.cn/o/34698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不知道照片上怎么文字翻译成英文?来看看这篇文章

不知道你们在遇到看不懂的英文图片时,是不是和以前的我一样,一个一个的把图片内容输到翻译软件里,然后再进行翻译,其实这种办法不仅费时还费力,而且一旦遇到其它的外文就彻底没辙了,那怎么办呢?…

[附源码]java毕业设计音乐交流平台

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

我做数画ai绘画教程日赚过千,良心分享给想兼职赚钱的人

ai绘画能实现日赚过千,你信吗? 现在什么是风口?当然是ai绘画。而AI绘画里,什么最受欢迎,不用说,自然是二次元。 然后,很多人一拥而上,都去拍自己的二次元照片,然后在各…

10000m3d城镇生活污水处理工艺设计

目 录 1前 言 1 1.1 设计任务 2 1.2 设计目的 2 1.3 设计要求 2 1.4设计的数据以及资料 2 1.5 处理程度的计算 3 2 总体设计 5 2.1工艺比较的选择 5 2.2设计流量 8 2.2.1 设计规模 8 2.2.2 设计最大流量 8 2.3 格栅的设计计算 8 2.3.1格栅的作用及种类 8 2.3.2格栅的设计原则 8…

Linux系统编程(一)——环境搭建

准备写系统的总结Linux系统的一些知识以及Linux系统编程。这一篇先讲Linux搭建常用的开发环境。 目录 0x01 Linux开发环境搭建 一、远程链接操作 0x02 GCC 一、安装 二、了解GCC 0x03 静态库的制作及使用 一、库的介绍 二、静态库 0x04 动态库的制作和使用 一、配置…

Python遥感开发之批量掩膜和裁剪

Python遥感开发之批量掩膜和裁剪1.使用arcpy进行批量掩膜1.1 批量掩膜代码1.2 单个掩膜代码2.使用GDAL进行批量掩膜3.使用rasterio进行批量裁剪前言:主要介绍了使用arcpy、gdal、rasterio对遥感影像进行批量掩膜和裁剪。 1.使用arcpy进行批量掩膜 注意:…

Spring Boot——日志文件

文章目录1.日志的作用2.日志的用法3.自定义日志打印日志格式的说明4.日志级别5.在配置文件中设置日志级别5.1设置全局的日志级别和局部文件夹的日志级别6. 日志持久化7. 更简单的日志输出-lombok1.日志的作用 日志的作用:用来排除和定位问题 通过日志还可以具有以…

Greenplum数据库故障排查及修复

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

【ML特征工程】第 3 章 :文本数据:扁平化、过滤和分块

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

关于SD-WAN的十问十答(最强攻略戳这里)

1. WAN和SD-WAN之间的区别? 从底层来看,相较基于硬件物理设施的WAN,SD-WAN是一种覆盖现有网络的软件技术,是部署在物理基础设施下层的流量管理网络。 和常规WAN相比,SD-WAN具有虚拟WAN体系结构和软件驱动技术&#xff…

[附源码]java毕业设计圆梦山区贫困学生助学系统

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

EasyRecovery适用于Windows和Mac的专业硬盘恢复软件

电脑中的数据文件对很多的小伙伴来说都是非常重要的,在下载安装新的软件设备时都需要非常谨慎,一旦碰到一些问题就可能会导致文件丢失,想要恢复这些文件并不是很容易,需要使用专业的数据恢复工具才可以对其进行恢复,那…

考研数据结构填空题整合_做题版

考研数据结构填空题整合 目录考研数据结构填空题整合一、ZYL组ZYL组一ZYL组二ZYL组三ZYL组四ZYL组五ZYL组六ZYL组七ZYL组八二、TJP组TJP组一TJP组二TJP组三三、LZH组LZH 组一LZH 组二LZH 组三LZH 组四LZH 组五LZH 组六LZH 组七四、LB组LB组一LB组二LB组三LB组四LB组五LB组六LB组…

2022年戈登·贝尔奖授予等离子体加速器突破研究

ACM 总裁Cherri Pancake(图片来源:网络) 11月17日,在达拉斯举行的SC22颁奖典礼上,ACM将2022年戈登贝尔奖(Gordon Bell Prize)授予了一组研究人员,他们利用四台超级计算机&#xff08…

kill-9 用时一时爽,悔恨火葬场!!!

目录 前言 kill -9 和kill -15的区别 常见的信号值有: 信号值9和15的区别: 总结 前言 相信很多程序员对于Linux系统都不陌生,即使自己的日常开发机器不是Linux,那么线上服务器也大部分都是的,所以,掌…

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

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

ONE 2.0应用场景解读 | 如何通过时序拓扑直观还原故障传导链路?

近年来,随着数字化转型的不断推进,电子商务发展迅速,推动人们的购物行为随之发生转变,在线购物已成为人们的主要购物方式之一。相关数据表明,超过九成的中国网民使用过在线购物平台。 面对庞大的在线用户流量&#xf…

KMP算法——通俗易懂讲好KMP算法:实例图解分析+详细代码注解 --》你的所有疑惑在本文都能得到解答

1.kmp算法基本介绍 KMP 是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法。Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP 算法”,常用于在一个文本串 S 内查找一个模式串 P 的出现位置,这…

使用koa框架部署项目

将打包好的代码打包上线,并在nodejs中代理跨域 前端工程师完成开发流程,按照常规的做法,此时,运维会将我们的代码部署到阿里云的ngix服务上,对于我们而言,我们可以将其部署到本机的nodejs环境中 企业代码部…

AI产业沙龙【语音之家】—京东在AI语音方向的技术探索与实践

由CCF语音对话与听觉专委会 、中国人工智能产业发展联盟(AIIA)评估组、京东科技、语音之家、希尔贝壳共同主办的【语音之家】AI产业沙龙—京东在AI语音方向的技术探索与实践,将于2022年11月29日19:30-21:30线上直播。 沙龙简介 如今人机对话…