OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结

2023-05-16


目录

OpenFlow起源与发展

OpenFlow网络

1、OpenFlow交换机:

2、FlowVisor:

3、Controller:

OpenFlow交换机

分类

安全通道

流表

OpenFlow协议 :

OpenFlow协议

匹配流程

消息类型

OpenFlow应用

网络虚拟化 – FlowVisor

负载均衡 – Aster*x

绿色节能的网络服务 – ElasticTree


OpenFlow起源与发展

OpenFlow 是 Software Definded Network 的一种,由斯坦福大学的 Nick McKeown 教授在 2008 年 4 月 ACM Communications Review 上发表的一篇论文 OpenFlow: enabling innovation in campus networks 里首先提出来的。它最初的出发点是用于网络研究人员实验其创新网络架构、协议,考虑到实际的网络创新思想需要在实际网络上才能更好地验证,而研究人员又无法修改在网的网络设备,故而提出了 OpenFlow 的控制转发分离架构,将控制逻辑从网络设备盒子中引出来,研究者可以通过一组定义明确的接口对网络设备进行任意的编程从而实现新型的网络协议、拓扑架构而无需改动网络设备本身。

OpenFlow网络

所谓OpenFlow网络指的是相互连接的一组OpenFlow交换机的集合,并且这些交换机全部置于一个OpenFlow Controller或一个OpenFlow Controller的集群管理之下。

分为以下三个部分

1、OpenFlow交换机:

主要实现数据层的转发。下面一节做详细介绍

2、FlowVisor:

主要作用是对网络进行虚拟化。FlowVisor是建立在OpenFlow协议上的网络虚拟化工具。部署在标准OpenFlow控制器与OpenFlow交换机之间,它将物理网络划分为不同的逻辑网络,使每个控制器控制一个虚网,从而实现虚网划,并保证各虚网相互隔离分。它让管理员通过定义流规则来管理网络,而不是修改路由器和交换机的配置。效果如下图所示,

图 3. 物理网络被分割成不同的逻辑网络

FlowVisor的设计原则是:

FlowVisor对控制器和交换机是透明的,它们都感知不到FlowVisor的存在
各虚网之间相互隔离,即使是广播包,各虚网的流量也相互隔离
划分虚网的策略是灵活、模块化、可扩展的
OpenFlow消息在进行传输时,FlowVisor会根据配置策略对OpenFlow消息进行拦截、修改、转发等操作。这样,控制器就只能控制其被允许控制的流,但是控制器并不知道它所管理的网络被FlowVisor进行过分片操作。 同样,交换机发出的消息经过FlowVisor过滤后,也会被发送到相应的控制器。

3、Controller:

主要是对网络集中控制OpenFlow将控制层与数据转发层分离,其中OpenFlow交换机实现了数据转发功能,而OpenFlow控制器则实现了控制层功能。Controller通过OpenFlow协议提供的标准数据接口,对OpenFlow交换机中的流表进行控制、管理,实现了对整个网络的集中控制。
在Controller中,可以用python等程序对其功能进行定义,比如下发流表,对Packet_in包进行处理等。

OpenFlow交换机

图 1. 基于 OpenFlow 的网络交换设备

OpenFlow交换机是OpenFlow网络得核心部件,主要用于管理数据层得转发。其结构如上图方框中所示。

分类

OpenFlow交换机分为两类:专用OpenFlow交换机和支持OpenFlow的交换机

  • 专用OpenFlow交换机:专门为OpenFlow设计的交换机。与传统交换机不同,它不再具有控制逻辑,而仅仅是在端口间转发数据包的一个简单部件。
  • 支持OpenFlow的交换机:是在传统商业交换机的基础上,添加了安全通道、流表、OpenFlow协议,获得了OpenFlow特性的交换机。它既具有传统交换机的控制转发功能,又具有OpenFlow的转发逻辑。因此该交换机对数据包支持两种不同的接收处理方式。

整个流程如下:OpenFlow交换机接收到数据包,首先在流表上查找转发目标端口,如果没有匹配,将数据包转发给Controller,由控制层决定转发端口。

如上图所示,openflow交换机由以下三个部分组成:

安全通道

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

流表

流表由控制器下发给交换机。下发模式有两种:主动模式、被动模式。

主动模式——控制器将自己收集的流表信息主动下发给交换机等网络设备,随后网络设备可直接查询流表转发。
被动模式——网络设备收到一个没有匹配的FlowTable记录时,将其封装成Packet_in数据包,转发给控制器,由控制器决定如何处理,并下发流表。

由多个流表项组成,每个流表就是一个转发规则,进入交换机的数据包通过查询流表来获得转发的目的端口。流表项由头域、计数器和操作组成;其中头域是个十元组,是流表项的标识;计数器用来计数流表项的统计数据;操作标明了与该流表项匹配的数据包应该执行的操作。因此流表是数据转发的依据,与交换机的mac地址转发表和IP地址路由表类似,流表中保存了网络中各个层次的网络配置信息,因此可以进行更加丰富的转发规则。

参考文献2中介绍了一个流表的例子。

OpenFlow协议 :

OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。下面一节将做详细介绍。

OpenFlow协议

OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准协议。自2009年底发布1.0版本后,OpenFlow协议又经历了1.1、1.2、1.3及1.4版本的演进过程,目前使用和支持最多的是1.0和1.3版本。OpenFlow1.3在1.0版的基础上进一步优化及升级,其中添加了很多新的特性及消息,如支持多个流表(flow table)、组表(group table),支持多控制器等。一个流表中包含多个流表项,OpenFlow v1.3中流表项主要由7部分组成,分别是匹配域(用来识别该条表项对应的flow)、优先级(定义流表项的优先顺序)、计数器(用于保存与条目相关统计信息),指令(匹配表项后需要对数据分组执行的动作)、TimeoutsCookieFlags,如下图所示。

匹配流程

与OpenFlow v1.0不同的是,OpenFlow v1.3协议中一台OpenFlowF交换机会有多张流表。具体匹配流程如下图所示。

当 一 个 数据包到达交换机 , 从数据包中提取匹配字段从第 一 个流表 开始 查找 匹配 , 匹配字段 取 决于数据 包 的类 型 , 通常 包括各种 数 据包 的 头字段 , 例如 以 太 网 源地 址或 IPv4 目 的地 地址 等 , 此 外 , 还可 以 对 数据 包 关 联的 字段 ( 如 交换 机 1 4 的入端 口 等 ) 进行 匹配 。 如果 数据包和流表项匹配成功 , 则 更 新计数器并执 行流 表项 中 的 指令。 如果该流表 项使用GOTO 指令指 向 了 某一 其他流表 , 则执行完本次指令的数据包以及动作集、元数据等信息转到GOTO 指令指 向 的 流表进行 下 一 步 的 匹 配(也就是图中的 跳转到Table n?); 若 未指 向 另 一 流表则执行动作集 , 此时流水线处理成功。 如果在 某 个流表 中 并 未 匹配成 功 , 则 查找该 流表中 是否存在 table-miss流表项 ( 流 表 中 的table-miss流表项 指定如 何 处理未 匹 配成功 的 数据包 ) , 如 果存在table-miss流 表 项 , 则 按该流表项中 的 指令执行 , 如丢弃 数据包 、 将数据包 转到 另 外 一 个 流表 或者发送给控制器(即通过Packet_In消息传递给控制器,由控制器制定数据包的转发策略而后通过Packet_Out消息下发流表给交换机) 等; 如果在 流表 中 并未 匹配成 功并且该流表项 中 不存在table-miss流 表项, 那么 交换机将会丢弃该 数据 包。

Ope nFlo w 协议在工作 中 使用 GOTO 指令从一 张流表转 到另 一 张流表 , 该技 术被称 为 多级 流表技术 。

消息类型

OpenFlow规范定义了一个OpenFlow交换机如何与Controller建立连接、通信及相关消息类型

a) Controller/Switch消息,是指由Controller发起、Switch接收并处理的消息,主要包括Features、Configuration、Modify-State、Read-State、Packet-out、Barrier和Role-Request等消息。这些消息主要由Controller用来对Switch进行状态查询和修改配置等操作。
b) 异步(Asynchronous)消息,是由Switch发送给Controller、用来通知Switch上发生的某些异步事件的消息,主要包括Packet-in、Flow-Removed、Port-status和Error等。例如,当某一条规则因为超时而被删除时,Switch将自动发送一条Flow-Removed消息通知Controller,以方便Controller作出相应的操作,如重新设置相关规则等。
c) 对称(Symmetric)消息,顾名思义,这些都是双向对称的消息,主要用来建立连接、检测对方是否在线等,包括Hello、Echo和Experimenter三种消息。
下图展示了OpenFlow和Switch之间一次典型的消息交换过程,出于安全和高可用性等方面的考虑,OpenFlow的规范还规定了如何为Controller和Switch之间的信道加密、如何建立多连接等(主连接和辅助连接)。

OpenFlow应用

随着OpenFlow/SDN概念的发展和推广,其研究和应用领域也得到了不断拓展。目前,关于OpenFlow/SDN的研究领域主要包括网络虚拟化、安全和访问控制、负载均衡、聚合网络和绿色节能等方面。另外,还有关于OpenFlow和传统网络设备交互和整合等方面的研究。

下面将举几个典型的研究案例来展示OpenFlow的应用。

网络虚拟化 – FlowVisor

网络虚拟化的本质是要能够抽象底层网络的物理拓扑,能够在逻辑上对网络资源进行分片或者整合,从而满足各种应用对于网络的不同需求。为了达到网络分片的目的,FlowVisor实现了一种特殊的OpenFlow Controller,可以看作其他不同用户或应用的Controllers与网络设备之间的一层代理。因此,不同用户或应用可以使用自己的Controllers来定义不同的网络拓扑,同时FlowVisor又可以保证这些Controllers之间能够互相隔离而互不影响。下图展示了使用FlowVisor可以在同一个物理网络上定义出不同的逻辑拓扑。FlowVisor不仅是一个典型的OpenFlow应用案例,同时还是一个很好的研究平台,目前已经有很多研究和应用都是基于FlowVisor做的。

负载均衡 – Aster*x

传统的负载均衡方案一般需要在服务器集群的入口处,通过一个gateway或者router来监测、统计服务器工作负载,并据此动态分配用户请求到负载相对较轻的服务器上。既然网络中所有的网络设备都可以通过OpenFlow进行集中式的控制和管理,同时应用服务器的负载可以及时地反馈到OpenFlowController那里,那么OpenFlow就非常适合做负载均衡的工作。Aster*x通过Host Manager和Net Manager来分别监测服务器和网络的工作负载,然后将这些信息反馈给FlowManager,这样Flow Manager就可以根据这些实时的负载信息,重新定义网络设备上的OpenFlow规则,从而将用户请求(即网络包)按照服务器的能力进行调整和分发。

绿色节能的网络服务 – ElasticTree

在数据中心和云计算环境中,如何降低运营成本是一个重要的研究课题。能够根据工作负荷按需分配、动态规划资源,不仅可以提高资源的利用率,还可以达到节能环保的目的。ElasticTree创新性地使用OpenFlow,在不影响性能的前提下,根据网络负载动态规划路由,从而可以在网络负载不高的情况下选择性地关闭或者挂起部分网络设备,使其进入节电模式达到节能环保、降低运营成本的目的。

SDN%E4%B8%8EOpenFlow%E6%8A%80%E6%9C%AF%E7%AE%80%E4%BB%8B%20%E5%9B%BE8.jpg

 

参考文献:

https://blog.csdn.net/Sponge_bobo_herbert/article/details/80535869

https://www.ibm.com/developerworks/cn/cloud/library/1303_silei_openflow/

https://blog.csdn.net/qq_38668258/article/details/82534341

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结 的相关文章

  • MatconvNet+VS2015+Matlab2018a+CUDA9+cudnn7:在matlab上搞深度学习,安装环境时遇到的大坑!

    事情发生的背景 作为刚入职的深度学习实习生 xff0c 入职第一天 xff0c 我领完电脑 xff0c 刚装完电脑 xff0c 分配好公司的ip xff0c 连chrome都还没来得及安装 xff0c 就接到任务 xff0c 需要实现给定的
  • CAS学习(一) 编译支持REST认证的cas6.2服务端并配置部署测试

    CAS 是 Yale 大学发起的一个开源项目 xff0c 旨在为 Web 应用系统提供一种可靠的单点登录方法 xff0c CAS 在 2004 年 12 月正式成为 JA SIG 的一个项目 CAS 具有以下特点 xff1a 1 开源的企业
  • QEMU

    QEMU 1 使用QEMU创建虚拟机 一 QEMU简介 QEMU是一款开源的模拟器及虚拟机监管器 Virtual Machine Monitor VMM QEMU主要提供两种功能给用户使用 一是作为用户态模拟器 xff0c 利用动态代码翻译
  • 使用virt-install手动创建qcow2镜像并安装ISO

    virt install是一个使用libvirt库构建新虚拟机的命令行工具 xff0c 此工具使用串行控制台 xff0c SDL xff08 Simple DirectMedia Layer xff09 图形或者VNC客户端 服务器 xff
  • OVN总结

    参考 xff1a https www sdnlab com 18600 html 三 OVN L3 对比 Neutron L3 Neutron 的三层功能主要有路由 xff0c SNAT 和 Floating IP xff08 也叫 DNA
  • Keil MDK5 打开MDK4项目

    安装完最新版本keil 5 38a 后 xff0c 需要打开几个MDK4的项目 xff0c 结果一打开keil就提示报错了 这里我选择的是第二种方式 xff0c 首先安装legacy support xff0c 以下是下载链接 MDK v4
  • ubuntu18.04换源及E: 仓库 “http://ppa.launchpad.net/v-launchpad-jochen-sprickerhof-de/pcl/ubuntu bionic Re

    ubuntu18 04换源E 仓库 http ppa launchpad net v launchpad jochen sprickerhof de pcl ubuntu bionic Re问题 1 备份2 修改源3 更新4 解决E 仓库
  • 图像分割2020总结:结构,损失函数,数据集和框架

    点击上方 AI公园 xff0c 关注公众号 xff0c 选择加 星标 或 置顶 作者 xff1a Derrick Mwiti 编译 xff1a ronghuaiyang 导读 一个很好的入门小短文 xff0c 内容很全 xff0c 适合上手
  • 从APM源码分析GPS、气压计惯导融合

    最近事多 xff0c 忙着开源自研飞控 xff0c 现主要工作基本已经完成 xff0c 代码最迟下月中旬开放 xff0c 博客来不及更新 xff0c 还请各位见谅 xff0c 后面会抽空多更的咯 xff01 xff01 xff01 自研飞控
  • 通达OA应用中心操作手册

    第1章应用中心功能介绍 1 1 功能介绍 应用中心是一款以企事业单位广为使用的表单为对象 业务为驱 动 决策为目标 xff0c 以 34 平台 34 43 34 实施 34 的方式 xff0c 进而帮助企事业单位实 现各类管理信息系统的软件
  • 通达OA使用手册(一)

    第一章引言 1 1 编写目的 本用户使用手册目的是将通达 OA 系统的各类操作和功能加以描述 xff0c 以指导 用户更快速正确的使用本系统 该手册分为以下几个部分 xff1a 引言 功能介绍 管 理员手册 用户手册 OA 精灵使用手册和移
  • 通达OA系统管理员操作手册

    3 4 系统管理 安装 OA 后 xff0c 进入 系统管理 菜单 xff0c 对软件功能进行初始化设置 xff0c 以下篇幅主要介绍这个菜单中各个子菜单的作用及使用 3 4 1 功能管理中心 功能管理中心是针对某模块进行权限设置的功能 例
  • ncnn op forward代码学习

    OpenMP支持的编程语言 C C 43 43 和Fortran xff1b 支持OpenMp的编译器包括Visual studio xff0c Sun Compiler xff0c GNU Compiler和Intel Compiler
  • C++ mkdir() 头文件

    mkdir 的头文件在 lt direct h gt
  • POSTMAN从入门到精通系列(二十五):发出SOAP请求

    使用Postman发出SOAP请求 将SOAP端点作为URL 如果您使用的是WSDL 那么请将WSDL的路径作为URL 将请求方法设置为POST 打开原始编辑器 并将正文类型设置为 text xml 在请求正文中 根据需要定义SOAP En
  • POSTMAN从入门到精通系列(二十七):使用GraphQL

    通过Postman中的GraphQL支持 您现在可以使用请求正文创建和发送GraphQL查询 除了创作GraphQL请求外 您还可以 直接在Postman中创建和存储GraphQL模式 启用GraphQL查询自动完成 由Postman AP
  • 解决adb网络连接中出现的“由于目标计算机积极拒绝,无法连接”错误

    在调试一块全志A83T安卓工控板 xff08 已root xff09 xff0c 启动后 xff0c 安卓系统正常 xff0c 设置好以太网 的静态IP地址 xff1a 192 168 1 181 xff0c 并接好网线 xff0c 同时开
  • 【Linux操作系统安装配置GO环境的详细教程】

    1 首先我们进入GO官方 xff0c 查找对应要进行下载到Linux操作系统对应的版本 xff0c 复制链接地址 Go官方环境地址 2 首先进入到下载位置的目录 xff0c 然后到Linux操作系统上执行wget下载命令 然后进行解压 sp
  • Android KEYCODE键值对应大全

    Android KEYCODE 键值对应大全 KEYCODE 列表 电话键 键名 描述 键值 KEYCODE CALL 拨号键 5 KEYCODE ENDCALL 挂机键 6 KEYCODE HOME 按键 Home3 KEYCODE ME
  • CMake版本低升级高版本

    使用cmake命令安装Opencv软件时 xff0c 报如下错误 xff1a CMake Error at CMakeLists txt 4 CMAKE MINIMUM REQUIRED CMake 3 5 4 or higher is r

随机推荐

  • Fiddler弱网测试

    一 弱网简介 弱网看字面意思就是网络比较弱 xff0c 我们通称为信号差 xff0c 网速慢 1 弱网的影响 在地铁 隧道 电梯和车库等场景下使用APP xff0c 网络会出现延时 中断和超时等情况 如果我们处于网速慢的地段 xff0c 我
  • linux创建和删除crontab定时任务

    一 添加sheel脚本 1 首先创建一个执行程序 xff1a vim a sh 2 编辑 xff1a xff01 bin bash python3 python py gt gt test2 log 2 gt amp 1 3 添加权限 xf
  • sphinx文档生成脚手架工具安装和使用

    1 sphinx的安装与使用 1 1 安装sphinx sphinx官方安装说明 xff1a Installing Sphinx Sphinx documentation readthedoc官方说明 xff1a Getting Start
  • geth客户端安装

    geth是以太坊的官方客户端 xff0c 它是一个命令行工具 xff0c 提供很多命令和选项 xff0c 可以运行以太坊节点 创建和管理账户 发送交易 挖矿 部署智能合约等 下面介绍geth的三种安装方法 xff1a 直接下载可执行文件 在
  • win系统下,利用goland来build生成geth.exe可执行文件

    golang环境搭建 具体安装方法就不再赘述 xff0c 但是以太坊对golang的版本有要求 xff0c 得1 7及以上 xff0c 推荐1 9 3 go ethereum代码下载 可以直接访问https github com ether
  • 删除容器命令

    删除容器使用 docker rm 命令 1 删除容器 1 首先需要停止所有的容器 docker stop docker ps a q 2 删除所有的容器 只删除单个时把后面的变量改为container id即可 docker rm dock
  • 正则 (?:)

    X 在正 则中表示所匹配的子组X不作为结果输出 正常情况 X 中的X会被作为新增的一个组序号输出 xff0c 比如 A B xff0c A的序号1 B的序号2 如果 A B xff0c A将没有序号不输出 B的序号为1 规范化url xff
  • 用maven-replacer插件选择正则表达式替换

    在前端html或者jsp中会引入一些诸如css js等静态资源 xff0c 但是有时候浏览器会有缓存 xff0c 更新js后 xff0c 返现一些用户看到的仍然是旧的 xff0c 说明没有生效 这样的话一般是在引入静态资源的时候添加时间戳
  • 【LeetCode股票买卖系列:123. 买卖股票的最佳时机 III 暴力递归=>记忆化搜索=>动态规划】

    x1f680 算法题 x1f680 x1f332 算法刷题专栏 面试必备算法 面试高频算法 x1f340 x1f332 越难的东西 越要努力坚持 xff0c 因为它具有很高的价值 xff0c 算法就是这样 x1f332 作者简介 xff1a
  • [模版]线段树

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 判断是否属于同一子网

    include lt bits stdc 43 43 h gt using namespace std int main char a 10 b1 10 b2 10 while scanf 34 s s s 34 a b1 b2 61 EO
  • 单点登录之cas6.5安装部署

    目录 一 准备工作二 安装 jdk11三 安装gradle三 安装tomcat四 下载cas并编译五 部署六 访问 一 准备工作 需要的包 xff1a jdk11 tomcat9 GRADLE7 2 cas overlay template
  • 单点登录之cas集成禅道

    目录 一 前言二 添加应用 xff0c 开启免密登录三 请求格式 一 前言 禅道11 5 1版本开始 xff0c 增加了第三方应用免密登录禅道的功能 xff0c 可以利用此功能实现单点登录 二 添加应用 xff0c 开启免密登录 三 请求格
  • Oracle ora-12514报错解决方法

    目录 一 问题描述二 解决方法 一 问题描述 Oracle 报错 ora 12514 二 解决方法 修改 tnsnames ora xff0c 一般在 D oracle product 10 2 0 client 1 NETWORK ADM
  • “你需要来自XXX的权限才能对此文件夹进行更改”的解决方法

    目录 一 问题描述二 解决方法1 方法1 xff1a 鼠标右键文件夹 xff0c 选择 属性 gt 安全 选项卡 xff0c 对用户进行授权2 方法2 xff1a 选择 高级 xff0c 更改所有者 xff0c 并添加至权限条目3 方法3
  • windows10获取超级管理员权限

    目录 一 新建文本文件 xff0c 命名为带 reg后缀的文件 xff0c 添加以下内容二 鼠标双击运行三 鼠标右键要获取权限的文件夹 xff0c 选择 获取超级管理员权限 一 新建文本文件 xff0c 命名为带 reg后缀的文件 xff0
  • python2.7安装

    目录 一 下载二 安装三 设置环境变量四 验证 一 下载 1 通过 python 官网 https www python org 找到 2 7 版本进行下载 xff1a https www python org downloads rele
  • sharding报错no table route info

    目录 一 问题描述二 解决方法 一 问题描述 集成 sharding 执行数据库操作报错 xff1a no table route info 二 解决方法 一般为分库分表策略配置错误 xff0c 请检查 application yml 文件
  • Nginx配置http跳转https

    目录 一 return 301二 rewrite三 497 状态码四 meta 刷新 Nginx 可通过多种方式实现 http 跳转 https xff0c 以下列出各种方式的实现方法 一 return 301 这是 Nginx 新版本的写
  • OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结

    目录 OpenFlow起源与发展 OpenFlow网络 1 OpenFlow交换机 xff1a 2 FlowVisor xff1a 3 Controller xff1a OpenFlow交换机 分类 安全通道 流表 OpenFlow协议 x