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

本文部分内容来源于《现代网络技术: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.mzph.cn/pingmian/59557.shtml

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

相关文章

linux centos 安装redis

安装 wget https://download.redis.io/releases/redis-7.4.0.tar.gz解压redis-7.4.0.tar.gz文件 tar -zxvf redis-7.4.0.tar.gz进入redis安装目录 cd redis-7.4.0make时报错,因为需要安装gcc,gcc安装需要联网安装 修改端口 编辑文件用vi。nano命令cen…

面向对象技术简述(含设计模式)

6.9.2 面向对象技术 面向对象 对象 分类 继承 通过消息的通信 面向对象 对象 分类 继承 通过消息的通信 面向对象对象分类继承通过消息的通信其中包括: 对象 运行的实体;既包含属性/数据,又包含方法/行为/操作数据的函数;…

yakit中的规则详细解释

官方文档 序列前置知识之高级配置 | Yak Program Language 本文章多以编写yaml模版的视角来解释 规则一览 匹配器 在编写yaml中会使用到这里两个东西 点击添加会在返回包的右下角出现匹配器 上面有三个过滤器模式,官方解释 丢弃:丢弃模式会在符合匹配…

算法每日双题精讲——双指针(移动零,复写零)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!💪…

【SpringCloud】Kafka消息中间件

Kafka Kafka消息中间件对比:kafka介绍安装教程:配置以及启动顺序: Kafka整合微服务初级入门测试: Kafka整合SpringBoot①导入spring-kafka依赖信息②消息生产者③消息消费者Postman测试 Kafka 消息中间件对比: 消息中…

ViT模型复现项目实战

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

16通道AD采集方案,基于复旦微ARM + FPGA国产SoC处理器平台

测试数据汇总 表 1 本文带来的是基于复旦微FMQL20S400M四核ARM Cortex-A7(PS端) + FPGA可编程逻辑资源(PL端)异构多核SoC处理器设计的全国产工业评估板的AD采集案例。本次案例演示的开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit PL端开发环境:P…

【Python爬虫实战】DrissionPage 与 ChromiumPage:高效网页自动化与数据抓取的双利器

🌈个人主页:易辰君-CSDN博客 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、DrissionPage简介 (一)特点 (二)安装 (三…

R7:糖尿病预测模型优化探索

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 探索本案例是否还有进一步优化的空间 二、实验环境: 语言环境:python 3.8编译器:Jupyter notebo…

HANDLINK ISS-7000v2 网关 login_handler.cgi 未授权RCE漏洞复现

0x01 产品简介 瀚霖科技股份有限公司ISS-7000 v2网络网关服务器是台高性能的网关,提供各类酒店网络认证计费的完整解决方案。由于智慧手机与平板电脑日渐普及,人们工作之时开始使用随身携带的设备,因此无线网络也成为网络使用者基本服务的项目。ISS-7000 v2可登录300至1000…

RK3576 LINUX RKNN SDK 测试

安装Conda工具 安装 Miniforge Conda wget -c https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh chmod 777 Miniforge3-Linux-x86_64.sh bash Miniforge3-Linux-x86_64.shsource ~/miniforge3/bin/activate # Miniforge 安装的…

深入学习指针(5)!!!!!!!!!!!!!!!

文章目录 1.回调函数是什么?2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递…

天锐绿盾加密软件与Ping32数据安全防护对比,为企业提供坚实的保障

在当今信息化时代,数据安全已成为企业不可忽视的重要议题。天锐绿盾加密软件与Ping32作为两款备受关注的数据安全解决方案,各自以其卓越的功能和优势,为企业数据安全提供了坚实的保障。 Ping32,同样以其出色的数据加密和防泄密功能…

支持向量机相关证明 解的稀疏性

主要涉及拉格朗日乘子法,对偶问题求解

求职经验分享

更多详情:爱米的前端小笔记,更多前端内容,等你来看!这些都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们的支持才是我不断更新的动力!找…

基于Dpabi和spm12的脑脊液(csf)分割和提取笔记

一、前言 脑脊液(csf)一直被认为与新陈代谢有重要关联,其为许多神经科学研究提供重要价值,从fMRI图像中提取脑脊液信号可用于多种神经系统疾病的诊断。特别是自2019年Science上那篇著名的csf-BOLD文章发表后,大家都试图…

力扣:94--中序遍历二叉树

树 – 二叉树 完全二叉树: 完全二叉树可以用数组完美匹配位置(先序存储:根左右), 推论一 : 位置为k的节点,左孩子:2*k 1 ,右孩子 : 2 * (k 1&…

SQL 常用语句

目录 我的测试环境 学习文档 进入数据库 基础通关测验 语句-- 查 展示数据库; 进入某个数据库; 展示表: 展示某个表 desc 查询整个表: 查询特定列: 范围查询 等于特定值 不等于 介于 特定字符查询 Li…

MySQL utf8mb3 和 utf8mb4引发的问题

问题描述 Cause: java.sql.SQLException: Incorrect string value: \xF4\x8F\xBB\xBF-b... for column sddd_aaa_ark at row 1 sddd_aaa_ark 存储中文字符时,出现上述问题 原因分析 sddd_aaa_ark在数据库中结构是 utf8字符的最大字节数是3 byte,但是某些…

ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验

文章目录 🍀引言🍀ONLYOFFICE 产品简介🍀功能与特点🍀体验与测评ONLYOFFICE 8.2🍀邀请用户使用🍀 ONLYOFFICE 项目介绍🍀总结 🍀引言 在日常办公软件的选择中,WPS 和微软…