全网最详细——OpenFlow 协议分析

news2024/12/25 14:33:34

目录

1 OpenFlow 交换机

2 流表

3 OpenFlow 通道

4 任务描述

5 任务要求

6 任务实施

7 任务验收


1 OpenFlow 交换机

Open Flow 交换机可以分成流表和安全通道两部分。在 Open Flow协议规范中,控制器可以给交换机下发流表项来指导交换机处理匹配流表项的数据包。安全通道是用于和控制器通信的安全连接。安全通道可以直接建立在 TCP上,也可以基于TLS加密之后的Socket建立。

2 流表

流表(Flow Table)是交换机用于存储流表项的表。在Open Flow1.0版本中仅有一张流表,即单流表。其中匹配域用于区分不同的数据流,网络数据包进入交换机之后会匹配流表中的流表项,匹配到同一条流表的数据包被称为数据流。网络数据包进入交换机之后会匹配流表中的流表项,匹配到同一条流表的数据包被称为数据流,即Data Flow,简称 Flow。数据包匹配成功之后需要执行相关的指令,用于完成数据的处理。计数器部分则记录了匹配该流表的数据包的数目和字节数等相关数目。

3 OpenFlow 通道

OpenFlow安全通道是连接OpenFlow交换机到控制器的接口。控制器通过这个接口控制和管理交换机,同时控制器接收来自交换机的事件并向交换机发送数据包。交换机和控制器通过安全通道进行通信,而且所有的信息必须按照OpenFlow协议规定的格式来执行。

OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。

OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。

4 任务描述

在图2.3.1虚拟组网图所示的网络拓扑中,完成相关IP配置,并实现主机与主机之间的IP通信。用抓包软件获取控制器与交换机之间的通信数据包。

5 任务要求

图2.3.1 虚拟组网图

6 任务实施

1)配置思路如下:

  1. 用 mininet 虚拟仿真工具,使用可视化界面、python 脚本或者命令行搭建一个如图2.3.1所示的拓扑,并导出配置文件,另存为 lab_2.py
  2. 给四台主机分别配置 IP 地址
  3. 使用 ping 命令测试两个主机的互通性
  4. 使用 wireshark 软件,获取交换机与主机之间和两台主机之间的通信,分析交换机与控制器通信的过程并绘制一张流程图,并对主机之间通讯的 packet_in、packet_out、flow_mod 类型的报文的各组成部分进行分析

操作步骤

  1. 可视化界面搭建网络拓扑

在超级用户模式下,在目录/mininet/examples 下,运行 miniedit.py 文件。

Python3 ./mininet/examples/miniedit.py

按照如上图2.3.1 配置虚拟组网图,选择对应的设备进行连接,完成拓扑图的搭建。最后导出保存为 lab_2.py文件。

  1. 配置PCIP信息
  1. 控制器的配置:鼠标放在控制器上,右键出现properties,点击后就可以进入设置界面。Name可以定义控制器的名字,port默认一般都是6633,一般不用改,控制器类型我设置的是支持openflow协议的,IP地址为192.168.0.50。控制器的属性如下图2.3.2控制器IP设置界面所示:

图2.3.2 控制器设置界面

  1. SDN交换机的配置:鼠标放在交换机上,右键出现properties,点击后就可以进入设置界面。hostname可以定义交换机的名字,DPID一般为16位,所以s1,s2分别设置为00000000000000010000000000000002switch type是指交换机的类型,使用的是ovs交换机,IP地址分别设置为192.168.0.101192.168.0.102。交换机的属性如下图2.3.3交换机设置界面所示:

 

图2.3.3 交换机设置界面

  1. 主机的配置:鼠标放在主机上,右键出现properties,点击后就可以进入设置界面。这里面有各种设置,可以根据自己的需要进行设置,这里只设置了主机的IP地址,h1192.168.0.1/24h2192.168.0.2/24h3192.168.0.3/24h4192.168.0.4/24。主机的属性如下图2.3.4主机设置界面所示:

2.3.4 主机设置界面

  1. 对全局进行设置,并运行拓扑。点击界面左上角的edit后,出现properties,点击后进入设计界面,此时需要勾选start CLI,只有勾选这个后,才可以在Linux终端中进行操作,还可以根据需要,选择支持的openflow协议。设置完成后,我们还可以对拓扑进行保存,保存的是python脚本,点击左上角的file会发现有Export Level 2 Script选项,点击进入就可以进行保存操作,下一次可以直接在终端运行脚本。全局设置如下图2.3.5全局设置界面所示,保存设置如下图2.3.6保存设置页面所示

图2.3.5 全局设置界面

图2.3.6 保存设置页面

  1. Wireshark 抓包并分析

在超级用户下,使用sudo wireshark命令开启 wirshark 软件,点击“any“,让其获取全部的数据包,之后再通过过滤器输入“openflow_v1”“openflow_v4”,过滤出 OpenFlow v1.0 OpenFlow v1.3 的数据报文,进行分析。

7 任务验收

  1. 使用 ping 命令测试两个主机的互通性,如图2.3.7 主机测试所示

2.3.7 主机测试

  1. Wireshark 抓包并分析

              在超级用户下,使用sudo wireshark命令开启 wirshark 软件,点击“any“,让其获取全部的数据包,之后再通过过滤器输入“openflow_v1”“openflow_v4”,过滤出 OpenFlow v1.0 OpenFlow v1.3 的数据报文,进行分析。

  1. PACKET_IN

     当交换机遇到不知道如何转发的报文时,使用 Packet_IN 消息将无法处理的报文封装起来发送给控制器,交给控制器去判断处理。并且交换机会将该数据包缓存,如图2.3.8 PACKET_IN报文所示

2.3.8 PACKET_IN报文

  • Buffer_id Packet-IN 消息所携带的数据包在交换机中的缓存 ID。
  • Total length 帧的长度。
  • In port 数据包进入交换机的入端口号。
  • Reason packet-in事件的产生原因,分为两种:OFPR_NO_MATCH和OFPR_ACTION。

  1. PACKET_OUT

控制器可以使用Packet_Out 消息,告诉交换机某一个数据包如何处理,如图2.3.8 PACKET_OUT报文所示

2.3.8 PACKET_OUT报文

  • In port 数据包进入交换机的入端口号。
  • Actions length 动作信息的长度。

  1. FLOW_MOD

FLOW_MOD 消息的作用是下发流表项。通过 Flow_Mod 消息可以对流表进行添加、删除、    变更设置等操作,如图2.3.8 PACKET_IN报文所示

图2.3.9 FLOW_MOD报文

  • Command 表示flow-mod消息的动作。一共五种,实现对流表的增、删、改操作。
  • Idle time-out 流表匹配数据计时器,如果该时间内流表匹配信息还未到达则删除流表。
  • hard time-out 流表项老化时间。一项流表在交换机中存在的时间超过该时间则删除流表项。
  • roity 流表项优先级,数字越大越优先。
  • Buffer Id 交换机上保存的,发送至控制器请求处理的流表的编号。

  1. ECHO_REQUEST

控制器和交换机通过 ECHO_REQUEST 和 ECHO_REPLY 报文保持连接,如图2.3.10ECHO_REQUEST报文所示

图2.3.10 ECHO_REQUEST报文

  1. ECHO_REPLY

如图2.3.11 ECHO_ REPLY报文所示

图2.3.11 ECHO_ REPLY报文

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

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

相关文章

ELK--收集日志demo

ELK--收集日志demo 安装ELK日志收集配置启动容器springboot配置测试 之前项目多实例部署的时候,由于请求被负载到任意节点,所以查看日志是开多个终端窗口。后来做了简单处理,将同一项目的多实例日志存入同一个文件,由于存在文件锁…

如何从相机的记忆棒(存储卡)中恢复丢失照片

当您意识到不小心从存储卡中删除了照片,或者错误地格式化了相机的记忆棒时,这些是您会大喊的前两个词。这是一种常见的情况,每个人在他们的一生中都会面临它。幸运的是,有一些方法可以从相机的 RAW 记忆棒(存储卡&…

【专题总结】【一文解决】C++多继承下的构造函数执行顺序

多继承下的构造函数执行顺序 派生类构造函数执行顺序如下 ①调用基类构造函数→调用顺序按它们被继承时【从左至右】被说明的次序 ②调用子对象的构造函数→调用顺序按它们在【类中说明次序】 ③调用派生类的构造函数 【典型题1】13浙工大卷二读程序4题 【分析】下面①classC:p…

C语言指针详解与应用(不断更新)

指针简介 指针(Pointer)是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂 指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问 指针生活实例化 指针的本质是地址,在生活中比如你取快…

当年掏空身体的9款怀旧软件,满满回忆杀

有个网站掀起了一股怀旧软件的风潮,让人惊喜地发现,尽管许多软件已不再更新,但时至今日,部分软件依然能够正常运行。 想当年,电脑价格贵的很,一但有机会接触电脑,那就是全神贯注,以…

仕考网:国考省考考试内容区别

国考和省考备考内容有一定的相似之处,具体考哪些内容你了解多少?中仕为大家分享一下吧! 题量: ①国考:行测一般有130-135道题目; ②省考:题量大多在120道左右,胳臂省份不同; 常识判断: ①国考&#x…

latex打出邮箱图标和可点击的orcidID

如图所示: 邮箱的打法 \usepackage{bbding} \inst{(}\Envelope\inst{)}orcidID的打法 \newcommand{\myorcidID}[1]{\href{https://orcid.org/#1}{\includegraphics[width8pt]{res/orcid.png}}} \captionsetup[algorithm]{skip5pt} \definecolor{customblue}{RGB}{…

使用 Colly 在 Golang 中进行网页抓取的步骤

什么是 Colly? Go 是一种用途广泛的语言,它拥有可以完成几乎所有工作的包和框架。 今天,我们将使用一个名为 Colly 的框架,它是一个用 Go 语言编写的、高效且强大的网页抓取框架,用于从网络上抓取数据。它提供了一个…

IPD的定义和三大重组

目前,业界对IPD的一般理解是:IPD——Integrated Product Development(集成产品开发)是一套领先的、成熟的产品开发的管理思想、模式和方法。它是根据大量成功的产品开发管理实践总结出来的,并被大量实践证明的高效的研…

Oracle 配置恢复目录catalog

一.介绍 Oracle中使用RMAN备份的数据我们分为两类 RMAN知识库数据库的数据块 Oracle默认把 RMAN知识库 放在目标数据库的控制文件中,在以后进行恢复的时候 我们要先读知识库的信息然后才能恢复。 但这样就产生了一个问题,知识库放在了控制文件上&#xf…

Whisper的使用

whisper的下载路径:https://github.com/openai/whisper需要安装以下的包。要求python的版本在3.9以上:如果当前python环境在3.9以下,可以换whisper的版本。点一下 releases 按钮。可以下载其他版本。使用whisper的时候需要其他包的安装。记住…

TypeScript 算法手册 - 【冒泡排序】

文章目录 TypeScript 算法手册 - 冒泡排序1. 冒泡排序简介1.1 冒泡排序定义1.2 冒泡排序特点 2. 冒泡排序步骤过程拆解2.1 比较相邻元素2.2 交换元素2.3 重复过程 3. 冒泡排序的优化3.1 提前退出3.2 记录最后交换位置案例代码和动态图 4. 冒泡排序的优点5. 冒泡排序的缺点总结 …

UEFI EDK2框架学习(三)——protocol

一、Protocol协议 搜索支持特定Protocol的设备&#xff0c;获取其Handle gBS->LocateHandleBuffer 将内存中的Driver绑定到给定的ControllerHandle gBS->OpenProtocol 二、代码实现 Protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #includ…

cmd发邮件:Windows命令行发送邮件的教程!

cmd发邮件怎么通过命令行实现&#xff1f;如何使用CMD发送邮件&#xff1f; 通过cmd发邮件&#xff0c;你可以在不打开任何邮件客户端的情况下&#xff0c;直接从命令行发送邮件。AokSend将详细介绍如何使用cmd发邮件功能&#xff0c;让你轻松掌握这一实用技能。 cmd发邮件&a…

信息收集---WAF指纹识别

1. 什么是waf web应用防火墙&#xff0c;一款集网站内容安全防护、网站资源安全防护及流量保护功能为一体的服务器工具。为用户提供实时网站安全防护&#xff0c;避免各类针对网站的攻击带来的危害。&#xff08;核心其实也是基于规则的防御&#xff09;| 任何工具&#xff08…

解决 Could not locate zlibwapi.dll. Please make sure it is in your library path

zlibwapi.dll文件是zlib库的Windows版本&#xff0c;很多Python上的库想要在Windows上执行都需要依赖这个文件。 可以通过本人上传的免费资源直接下载&#xff1a;zlibwapi 链接&#xff1a;https://pan.baidu.com/s/1u8osbt_IevO4GOkXthZ04A 提取码&#xff1a;c2mf zlibwa…

8 时间序列相关工具介绍

1 背景 发现最近做的任务都是有关于时间序列任务的&#xff0c;做的方法全部偏向于如何对数据进行清洗、提取周期特征然后构造相关特征&#xff0c;这些工作都是比较偏向于传统时间序列模型的方案。 现在深度学习这个火&#xff0c;比如循环神经网络分支&#xff1a;L…

Typora 下载安装

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-adAnH 演示环境 操作系统&#xff1a;windows10 产品&#xff1a;typora 版本&#xff1a; 1.9.5 注意&#xff1a;如果需要其他版本可自行下载。 安装步骤 1、解压。 2、双击 "typora-setup-x64.…

基于SpringBoot+Vue的社区智慧消防管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

前端工程规范-3:CSS规范(Stylelint)

样式规范工具&#xff08;StyleLint&#xff09; Stylelint 是一个灵活且强大的工具&#xff0c;适用于保持 CSS 代码的质量和一致性。结合其他工具&#xff08;如 Prettier 和 ESLint&#xff09;&#xff0c;可以更全面地保障前端代码的整洁性和可维护性。 目录 样式规范工具…