《现代网络技术》读书笔记:SDN数据平面和OpenFlow

news2024/11/8 21:44:55

本文部分内容来源于《现代网络技术:SDN,NFV,QoE、物联网和云计算:SDN,NFV,QoE,IoT,andcloud》

SDN数据平面

SDN 数据平面也称为基础设施层,而在ITU-T的Y3300标准中则称为资源层,它是网络转发设备根据 SDN控制平面的决策来执行数据传输和处理所处的平面。SDN网络中网络设备的重要特征是这些设备只完成简单的转发功能,不需要内嵌软件来执行自治决策。

数据平面功能

在这里插入图片描述

控制支撑功能:与 SDN控制层进行交互,从而通过资源-控制接口支持可编程特性,交换机与控制器之间的通信以及控制器对交换机的管理都是通过OpenFlow协议进行的。

数据转发功能:从其他网络设备和端系统接收到达的数据流,并将它们沿着计算和建立好的数据转发路径转发出去,转发路径主要根据SDN应用定义的规则决定。

网络设备使用的转发规则体现在转发表中,转发表反映了特定类别分组的下一跳路由。除了简单地转发分组以外,网络设备还可以对分组的首部进行修改,或者丢弃该分组。如图所示,到达的分组被放置在输人队列中,等待网络设备的处理,而分组在完成转发之后通常会放置于输出队列,等待传输

在这里插入图片描述

数据平面协议

上图给出了网络设备所支持的协议,数据流包括IP分组流。转发表必须根据上层协议(例如TCP、UDP或其他运输层、应用层协议)来定义表项,网络设备进行转发决策时通过检查IP首部,也可能包括分组的其他首部信息来完成。

图中另一个重要的数据流是南向应用程序编程接口(API),包括OpenFlow协议数据单元(PDU)或其他类似的南向API协议数据流。

OpenFlow逻辑网络设备

基本概念

为了将 SDN 概念实用化,需要满足以下两个必要条件:

  • 所有由SDN控制器管理的交换机、路由器和其他网络设备必须有通用的逻辑架构该逻辑架构可以在不同厂商的设备以及不同类型的网络设备上用不同的方法实现只要SDN控制器看起来是统一的逻辑交换功能实体即可。
  • SDN 控制器和网络设备之间需要标准的安全协议。

在这里插入图片描述

上图表明了OpenFlow环境中主要的要素,包括含有OpenFlow软件的SDN控制器、OpenFlow交换机和端系统。

在这里插入图片描述

上图显示了OpenFlow交换机的主要构成。SDN控制器使用运行在运输层安全协议(TLS)之上的OpenFlow协议与兼容OpenFlow的交换机通信,每个交换机与其他OpenFlow 交换机相连,此外也可能会与产生和接收分组流的端用户设备相连。在交换机端,其接口称为OpenFlow信道Open-Flow channel),这些连接是通过OpenFlow端口实现的,而OpenFlow端口(Open-Flow port)则连接着交换机和SDN控制器。OpenFlow定义了3种类型的端口。

  • 物理端口:与交换机的硬件接口相对应,例如在以太网交换机上,物理端口与以太网接口一一对应。

  • 逻辑端口:不直接与交换机的硬件接口相对应,逻辑端口是更高层的抽象,可以采用非 OpenFlow方法在交换机上进行定义(例如链路聚合组、隧道、环回地址)。逻辑端口可以包括分组封装,也可以映射到不同物理端口上,在逻辑端口进行的处理与具体的实现相关,而且对OpenFlow处理必须是透明的,这些端口必须像物理端口那样与 OpenFlow处理进行交互。

  • 保留端口:由OpenFlow规范定义,它指定了通用的转发行为,例如发送给控制器和从控制器接收、洪泛,或使用非OpenFlow方法转发(例如像“正常”的交换机一样处理)。

OpenFlow规范中定义了逻辑交换机体系结构中的三种主要表结构:

流表 (Flow Table): 将到达的分组映射到特定的流,并指定这些分组应当执行的操作。OpenFlow交换机通常包含多个流表,以流水线的方式协同工作。流水线方式意味着一个分组在处理过程中可以依次通过多个流表,直到被处理完毕。流表的每一项称为“流表项”,可以定义特定流的匹配规则以及处理该流的动作。

组表 (Group Table): 流表可以直接将流引导到某个组表上,组表负责触发各种复杂的动作,例如负载均衡、冗余路径等。组表的存在允许OpenFlow处理多个流,这些流在组表中被定义为不同的组,从而可以实现复杂的转发行为。每个组表项包含了一组执行操作的动作集(action set),可以对一条或多条流施加操作。

计量表 (Meter Table): 计量表专注于与性能相关的控制。它可以对特定流执行基于流量的监控和限速等操作。计量表在特定条件下触发动作,例如当流量超过某个设定的阈值时,它可以采取相应措施。计量表的目的是帮助管理流量性能,确保网络的高效运行。

OpenFlow规范并没有对“流”进行明确的定义。在一般网络术语中,流通常指一组具有相同首部内容的分组。例如,所有具有相同源IP地址和目的IP地址的分组可以视为同一个流;或者,所有具有相同虚拟局域网(VLAN)标识符的分组也可以被视为同一流。

流表

在OpenFlow中,流表是逻辑交换机体系结构的基本组成部分,每个进入交换机的分组(packet)都会经过一个或多个流表。流表的每个项(即流表项)由不同的字段组成,用于对流量进行识别和处理。

在这里插入图片描述
一个流表项包含以下主要字段:

  • 匹配字段:用于定义流表匹配的条件,包括源地址、目的地址、端口等。这些字段决定了数据包是否符合特定流的匹配条件。
  • 优先级:流表项的优先级决定了多个匹配项之间的匹配顺序。优先级高的流表项会被优先匹配。
  • 计数器:用于记录流表项的匹配次数或流量统计。计数器可以帮助管理员了解流量情况和资源使用情况。
  • 指令:当数据包匹配流表项时,指令决定对数据包的处理方式,比如转发、丢弃或修改。
  • 超时时间:流表项的超时时间可以是硬超时(Hard Timeout)或空闲超时(Idle Timeout),分别代表流表项的生存时间和在无匹配数据包时的等待时间。
  • Cookie:这是一个由控制器分配的字段,便于流的管理和追踪。
  • 标识:用于存储流表项的元信息,便于进一步的管理。

匹配字段包含多个必要的匹配条件,例如:

  • 输入端口:表明数据包进入交换机的端口。
  • 源和目的地址:包括IPv4和IPv6地址,可以是确切地址或地址段。
  • 端口:TCP和UDP的源端口和目的端口,用于匹配特定应用层流量。
  • VLAN ID和优先级:用于识别虚拟局域网内的流量。
  • 其他协议字段:如IPv6扩展头、MPLS标签等,用于更细粒度的流量控制。

每个流表项可以执行多个操作(称为动作集),例如:

  • 转发:将数据包发送到指定的端口。
  • 丢弃:直接丢弃数据包。
  • 修改:对数据包的特定字段进行修改,例如更改TTL值。
  • 组表跳转:将数据包发送到另一个组表,以便执行更复杂的操作。

流表流水线

交换机包含一个或多个流表,数据包经过多个流表时可以形成流水线的处理流程。每个表可以从0开始的表编号进行标识。当数据包进入交换机后,通常首先进入第一个流表。经过一个流表处理后,可以根据匹配结果决定是否进入下一个流表或直接执行动作。

OpenFlow规定了流表的两个主要处理阶段:

  • 入口处理:当一个数据包进入交换机时,从表0(第一个表)开始,根据输入端口ID等条件进行初始匹配。表0是数据包进入流表流水线的唯一入口,数据包在这一阶段被标记和识别。

  • 出口处理:出口处理用于决定最终的输出端口。在此阶段,可以根据流水线中所有流表的结果来决定是否直接输出到某个端口,或者进一步传送到控制器或其他流表。出口处理阶段是流水线的终点,用于输出操作。

在流表流水线中,数据包经过多个流表进行匹配和处理,具体流程包括以下步骤:

  • 流表匹配: 在每个流表中,数据包会根据匹配字段(如输入端口ID)进行匹配。匹配字段包含了预定义的条件,可以包括输入端口、IP地址、VLAN ID等。如果匹配成功,数据包会继续执行与流表项关联的动作。

  • 优先级匹配: 如果有多个流表项匹配到数据包,优先级高的流表项将会被优先执行。优先级是由管理员在定义流表项时指定的。

  • 执行动作: 一旦匹配成功,数据包会按照流表项的定义执行指定动作。常见的动作包括转发、丢弃、组跳转等。对于流水线中的每个流表项,可能执行以下操作:

    • 更新计数器:记录匹配到的次数或数据量。
    • 执行指令集:包括更新动作集、修改元数据或执行特定的操作。
    • 引导分组:如果指定了下一个流表编号,数据包会被传送到指定的下一个流表,继续匹配。
  • 缺省动作: 如果数据包没有匹配到流表项或所有匹配项均无缺省操作,数据包将被丢弃;否则,执行缺省动作集。

在这里插入图片描述在这里插入图片描述

多级流表的使用

多级流表的作用是通过多个流表实现对流量的细粒度控制,或者将一条流分解为多条并行的子流。使用多级流表可以帮助简化SDN控制器和OpenFlow交换机的操作流程,提高网络的灵活性和控制精度。

在这里插入图片描述

上图展示了一个多级流表的使用示例。在这个例子中:

表0包含一个流表项,用于定义特定源IP地址到特定目的IP地址的分组流。该表项表示了所有从该源到目的地址的流量都会经过表0的初始匹配。表0相当于对流量的粗粒度分类。

表1根据协议类型(例如TCP和UDP)进一步对流量进行细分。对于TCP流和UDP流,分别使用不同的流表项处理。这样可以区分开不同协议的流量,为后续步骤提供更多的灵活性,例如应用不同的QoS策略。

表2根据应用层协议(如FTP、SMTP、SNMP等)对流量进行更细粒度的分流。例如,将TCP流细分为FTP和SMTP子流,将UDP流细分为SNMP子流。这些子流可以依据特定需求进行独立的管理。

组表

在流水线的处理过程中,流表可以将分组流引导到某个组表而非其他流表,组表和组动作使得 OpenFlow可以用一个单独的实体来表示一组端口集合,从而进行分组转发。不同类型的组表示不同的转发抽象,例如多播和广播。

一个组表项由以下四部分构成:

  • 组标识符:一个32位的标识,用于唯一标识每个组表项。
  • 组类型:定义组的操作方式,决定了组项的工作逻辑。
  • 计数器:记录组表项的处理次数或流量统计数据。
  • 动作桶(Bucket):一个包含一系列操作的列表,每个动作桶包括一组执行的动作集合及其相关参数。

在这里插入图片描述

组类型决定了如何对组内的流量进行分发,主要类型包括:

全部(All): 组表的“全部”类型会执行组中所有动作桶中的操作。即数据包会被复制并发往所有指定的输出端口,这种方式适用于广播或多播的场景。例如,数据包可以被发送到多个端口,实现类似广播的效果。

选择(Select): 选择类型的组表项会根据某种选择算法(例如哈希算法或轮询)来决定选择一个动作桶执行。选择算法可以实现负载均衡,使流量均匀分布在多个路径或端口上。适用于需要分摊流量的场景,如服务器负载均衡。

快速恢复(Fast Failover): 在快速恢复类型中,组表会依次检查动作桶的状态,当检测到一个存活的桶时,立即执行该桶中的操作。快速恢复主要用于实现故障恢复,当某条路径不可用时,系统自动切换到另一条可用路径。

间接(Indirect): 间接类型仅包含一个动作桶,并且所有流表项共享此组。该类型适用于单一输出路径的场景,比如多条流共享一个出口端口。若要修改路径,只需更新组表中的动作桶,而不需要修改每条流的流表项。

OpenFlow协议

OpenFlow协议描述了发生在OpenFlow控制器和OpenFlow交换机之间的报文交互。通常来说,该协议是在TLS之上实现的,它提供了安全的penFlow信道。OpenFlow协议使得控制器可以对流表中的流表项执行增加、修改和删除动作,它支持三类报文。

控制器到交换机:这些报文由控制器产生,在某些情况下需要交换机对其进行响应这类报文使得控制器可以对交换机的逻辑状态进行管理,包括交换机中流和组表项的配置及相关细节。Packet-out也属于这一类报文,当交换机将一个分组发送给控制器,同时控制器决定不丢弃该分组,而是将分组转发到交换机的某个输出端口时控制器就会发送Packet-out报文。

异步:这类报文不是由控制器引发的。这类报文包括发送给控制器的各种状态报文以及 Packet-in报文,当交换机中没有某个分组匹配的流表项时,会使用Packet-in报文将分组转发给控制器。

对称:这类报文既不是控制器也不是交换机主动引发的,它们有一些帮助作用。Hello 报文通常用于控制器和交换机之间第一次建立连接的时候的交互,Echo请求与响应报文可以让交换机或控制器对控制器到交换机之间连接的时延或带宽进行测量或者仅用于测试设备是否开启和正在运行,Experimenter报文用于计划在OpenFlow未来的版本中嵌入新的功能。

在这里插入图片描述

在这里插入图片描述

OpenFlow协议为 SDN控制器提供了三类信息,以用于管理网络,具体包括以下。

  • 基于事件的报文:当一条链路或一个端口发生状态变化时,交换机会发送报文给控制器。
  • 流统计信息:交换机根据流量情况产生的信息,该信息可以让控制器对流量进行监视,并根据需要重新配置网络,调整网络参数以满足 QoS需求。
  • 封装的分组:由交换机发送给控制器,因为流表项中有显式的动作来发送该分组或者交换机需要相应的信息来建立一个新的流表项。

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

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

相关文章

无线婴儿监视器方案(附SI24R1选型)

随着现代科技的进步,父母们对宝宝的关注和保护达到了前所未有的高度。为了满足这一需求,市场上涌现出了一系列智能婴儿监视器。这些设备不仅能实时监控宝宝的活动,还能让父母在家中的任何角落都能轻松掌握宝宝的动态。今天,我们向…

Sigrity Power SI 3D-EM Full Wave HSSO模式如何进行高速差分过孔结构仿真扫描分析以及反标到Allegro操作指导

Sigrity Power SI 3D-EM Full Wave HSSO模式如何进行高速差分过孔结构仿真扫描分析以及反标到Allegro操作指导 高速差分过孔的优化是仿真分析中比较重要的一个环节,Sigrity Power SI 的3D-EM Full-Wave HSSO模式就是对高速差分过孔结构进行优化一个工具,可以不同的参数进行…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十. 多线程控制帧率。循环播放,QT connect 细节,

在前面,我们总结一下前面的代码。 在 FactoryModeForAVFrameShowSDL 构造函数中 init SDL。 通过 QT timerevent机制,通过startTimer(10);每隔10ms,就会调用timerEvent事件。 在timerEvent事件中,真正的去 读取数据&#xff0c…

WebRTC 环境搭建

主题 本文主要描述webrtc开发过程中所需的环境搭建 环境: 运行环境:ubuntu 20.04 Node.js环境搭建 安装编译 Node.js 所需的依赖包: sudo apt-get update sudo apt-get install -y build-essential libssl-dev 下载 Node.js 源码: curl -sL htt…

libgdiplus在MacOS M1上问题:Unable to load shared library ‘libgdiplus‘

libgdiplus在MacOS M1上问题:Unable to load shared library libgdiplus 问题解决步骤1步骤2 问题 在mac上的pycharm中执行下面的代码时出现下面的错误 slide.get_thumbnail( RuntimeError: Proxy error(TypeInitializationException): The type initializer for…

【VScode】VScode内的ChatGPT插件——CodeMoss全解析与实用教程

在当今快速发展的编程世界中,开发者们面临着越来越多的挑战。如何提高编程效率,如何快速获取解决方案,成为了每位开发者心中的疑问。今天,我们将深入探讨一款颠覆传统编程体验的插件——CodeMoss,它将ChatGPT的强大功能…

关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧

文章目录 1. sizeof 和 strlen1.1 sizeof1.2 strlen 2. 数组和指针结合的试题深入解析2.1 一维数组2.2 字符数组代码1代码2代码3代码4代码5代码6 2.3 二维数组 3.指针运算的试题深入解析题1题2题3题4题5题6题7 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…

flutter 专题四 Flutter渲染流程

一、 Widget - Element - RenderObject关系 二、 Widget 、Element 、RenderObject 分别表示什么 2.1 Widget Widget描述和配置子树的样子 Widget就是一个个描述文件,这些描述文件在我们进行状态改变时会不断的build。但是对于渲染对象来说,只会使用最…

Netty 编码器 解码器 正确使用姿势

Netty 编码器 & 解码器 正确使用姿势 通过前面文章的例子,相信读者也感受到了Netty 开发核心工作在于处理读事件(解码)、写事件(编码)。 Netty 的编解码器是处理网络数据编码和解码的核心组件,编解码…

基于微信小程序的电子购物系统的设计与实现(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差,进而导致用户会卸载非必要的APP,倒逼管理者必须改…

FIPS203 后量子安全ML-KEM(标准简读)

FIPS 203是美国国家标准与技术研究院(NIST)发布的关于模块格基密钥封装机制(ML-KEM)的标准,旨在提供一种能抵御量子计算机攻击的密钥建立方案。以下是对该文档的详细总结: 标准概述 目的与范围&#xff…

鸿萌数据迁移服务: 企业服务器整机在线热迁移, 实现不停机业务转移

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据存储、数据恢复、数据备份、数据迁移等解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 鸿萌数据迁移业务为众多企业顺利高效…

macOS15.1及以上系统bug:开发者证书无法打开,钥匙串访问无法打开一直出现图标后立马闪退

团队紧跟苹果最新系统发现bug:今日设备信息如下,希望能带给遇到这个问题的开发者一点帮助。 错误图如下: 点击证书文件后,先出现钥匙串访问图标,后立马闪退消失 中间试过很多方法,都是一样的表现,最后好在解决了,看网上也没有相关的帖子,这里直接写解决办法和导致原因…

20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N

20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N 2024/11/2 18:04 在WIN10使用程序:ViewLink-4.0.7_0708-windows-x64.exe 在荣品PRO-RK3566开发板的预置Android13下使用:ViewLink-2023_12_21-release-0.2.6.apk adb install…

【STM32】DMA直接存储器读取

文章目录 DMA简介DMA定义DMA传输方式DMA传输参数STM32的存储器映像DMA基本结构DMA的具体应用数据转运 DMAADC扫描模式 DMA DMA库函数 DMA数据传输(数据转运 DMA)接线图MyDMA模块main.c 源程序 DMA AD多通道(ADC扫描模式 DMA)…

兰空图床配置域名访问

图床已经创建完毕并且可以访问了,但是使用IP地址多少还是差点意思,而且不方便记忆,而NAT模式又没法直接像普通服务器一样DNS解析完就可以访问。 尝试了很多办法,nginx配置了半天也没配好,索性直接重定向,反…

React 入门课程 - 使用CDN编程React

1. 第一个React 注意&#xff1a;在vscode里&#xff0c;使用Live Server来运行html文件。 index.html <html><head><link rel"stylesheet" href"index.css"><script crossorigin src"https://unpkg.com/react17/umd/react.de…

flink 内存配置(一):设置Flink进程内存

flink 内存配置&#xff08;一&#xff09;&#xff1a;设置Flink进程内存 flink 内存配置&#xff08;二&#xff09;&#xff1a;设置TaskManager内存 flink 内存配置&#xff08;三&#xff09;&#xff1a;设置JobManager内存 flink 内存配置&#xff08;四&#xff09;…

快讯,Flutter PC 多窗口新进展,已在 Ubuntu/Canonical 展示

相信 Flutter 开发者对于 Flutter PC 多窗口的支持一直是「望眼欲穿」&#xff0c;而根据 #142845 相关内容展示&#xff0c; 在上月 27 号的 Ubuntu 峰会&#xff0c;Flutter 展示了多窗口相关进展。 事实上 Ubuntu 和 Flutter 的进一步合作关系应该是在 2021 年就开始了&…

HTB:Nibbles[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Nibbles? 使用nmap对靶机TCP端口进行开放扫描 2.What is the relative path on the webserver to a blog? 使用ffuf对靶机80端口Web进行路径FUZZ 3.What content management system (CMS) …