计算机网络:网络层 —— 软件定义网络 SDN

news2024/11/24 19:43:35

文章目录

    • 软件定义网络 SDN
      • 远程控制器
      • OpenFlow协议
      • SDN 广义转发
        • 流表
        • 简单转发
        • 负载均衡
        • 防火墙
      • SDN 控制器

软件定义网络 SDN

软件定义网络(Software Defined Networking,SDN)是一种新兴的网络架构,旨在通过网络控制与数据转发的分离,实现网络的集中管理和灵活性。

SDN 是由美国斯坦福大学 Clean Slate 课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式。其起源可追溯到 2006 年斯坦福大学的 Clean Slate 研究课题,而正式提出 SDN 概念则是在 2009 年。

  • SDN 最初只是学术界讨论的一种新型网络体系结构
  • SDN 成功案例:谷歌于 2010~2012 年间建立的数据中心网络 B4。
  • SDN 是当前网络领域最热门和最具发展前途的技术之一,成为近年来的研究热点

远程控制器

现在的路由器一般都基于硬件进行转发,单个分组的转发时间为纳秒数量级

![[远程控制器.png]]

在 SDN 体系结构中,路由器中的路由软件都不存在了。因此,路由器之间不再交换路由信息。在控制层面中,有一个在逻辑上集中的远程控制器

逻辑上集中的远程控制器在物理上可由不同地点的多个服务器组成。远程控制器掌握各主机和整个网络的状态,能够为每一个分组计算出最佳的路由,并为每一个路由器生成其正确的转发表。

![[OpenFlow协议.png]]

SDN 这种新型网络体系结构的核心思想:把网络的控制层面和数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备

OpenFlow协议

OpenFlow 协议是一个得到高度认可的标准,在讨论 SDN 时往往与 OpenFlow 一起讨论。OpenFlow 协议可被看成是 SDN 体系结构中控制层面与数据层面之间的通信接口

OpenFlow 协议使得控制层面的控制器可以对数据层面中的物理设备进行直接访问和控制

在这里插入图片描述

OpenFlow 协议的技术规范由非营利性的产业联盟开放网络基金会负责制定。
(Open Networking Foundation, ONF)

ONF 的任务是致力于 SDN 的发展和标准化。SDN 并未规定必须使用 OpenFlow,只不过大部分 SDN 产品采用了 OpenFlow 作为其控制层面与数据层面的通信接口。

OpenFlow 从 2009 年底发表的 1.0 版开始,每年都被更新,历经 12 次更新,到 2015 年 3 月发布了 1.5.1 版,目前较为成熟的是 1.3 版本。

SDN 广义转发

传统意义上的数据层面的任务:根据转发表转发分组。转发分组分为以下两个步骤:

  1. 进行“匹配”:查找转发表中的网络前缀,进行最长前缀匹配
  2. 执行“动作”:把分组从匹配结果指明的接口转发出去,

SDN 的广义转发分为以下两个步骤:

  1. 进行“匹配”:能够对网络体系结构中各层(数据链路层、网络层、运输层)首部中的字段进行匹配。

  2. 执行“动作”:不仅转发分组,还可以负载均衡重写IP首部(类似NAT路由器中的地址转换),人为地阻挡或丢弃一些分组(类似防火墙一样)。

在 SDN 的广义转发中,完成“匹配+动作”的设备并不局限在网络层工作,因此不再称为路由器而称为“OpenFlow交换机”或“分组交换机”,或更简单地称为“交换机

流表

相应的,在 SDN 中取代传统路由器中转发表的是 流表(Flow Table)

一个流就是穿过网络的一种分组序列,而在此序列中的每个分组都共享分组首部某些字段的值。例如某个流可以是具有相同源IP地址和目的IP地址的一连串分组。

OpenFlow 交换机中的流表是由SDN远程控制器来管理的。SDN 远程控制器通过一个安全信道,使用 OpenFlow 协议来管理 OpenFlow 交换机中的流表。

网络设备可以由不同厂商来生产,可以使用在不同类型的网络中。从SDN远程控制器看到的,是统一的逻辑交换功能。

每个 OpenFlow 交换机必须有一个或多个流表,每一个流表可以包含多个流表项。每个流表项包含三个字段:首部字段值(或称匹配字段)计数器动作

![[OpenFlow流表.png]]

  • 首部字段值字段:包含有一组字段,用来使入分组(Incoming Packet) 的对应首部与之匹配,因此又称为匹配字段。匹配不上的分组就被丢弃,或被发送到SDN远程控制器做更多的处理

    ![[首部字段值字段.png]]

  • 计数器字段:是一组计数器,记录已经与该流表项匹配的分组数量的计数器,记录该流表项上次更新到现在经历时间的计数器。

  • 动作字段:是一组动作,当分组匹配某个充表项时,执行该流表项中动作字段指明动作:

    • 把分组转发到指明的端口
    • 丢弃分组
    • 发出去把分组进行复制后再从多个端口转发出去
    • 重写分组的首部字段(包括数据链路层、网际层以及运输层的首部)
简单转发

在 SDN 架构下,控制平面(Controller)负责网络策略的制定和下发,而数据平面(Switches)则执行具体的流量转发操作。

![[简单转发.png]]

网络拓扑

  • 图中有三个 OpenFlow 交换机:S1、S2 和 S3。

  • S1 连接到 主机H1 (IP: 10.0.1.1) 和 H2 (IP: 10.0.1.2),并通过 端口1 和 2 分别连接到这两个主机。

  • S2连接到 主机H3 (IP: 10.0.2.3) 和 H4 (IP: 10.0.2.4),并通过 端口1 和 2 分别连接到这两个主机。

  • S3连接到 主机H5 (IP: 10.0.3.5) 和 H6 (IP: 10.0.3.6),并通过 端口1 和 2 分别连接到这两个主机。

  • S1、S2 和 S3 通过各自的 端口3 相互连接形成一个环形结构。

流表项配置:每个 OpenFlow 交换机都有一张流表,用于指导数据包如何转发。各交换机的流表项配置见图

数据包转发过程,假设从 H1 发送一个数据包给 H3:

  1. H1 -> S1: 当 H1 向 H3 发送数据包时,这个数据包首先到达 S1 的 端口1。

  2. S1 -> S3: 根据 S1 的流表项,所有来自子网 10.0.1.* 并前往子网 10.0.2.* 的数据包都会被转发到 端口3,因此这个数据包会被转发到 S3。

  3. S3 -> S2: 在 S3 上,由于数据包是从 端口1 进入并且 目标IP 地址属于子网 10.0.2.*,所以根据 S3 的流表项,这个数据包会被转发到 端口2,从而到达 S2。

  4. S2 -> H3: 最终,S2 接收到这个数据包后,根据其流表项,发现目标IP地址是 10.0.2.3,于是将数据包转发到 端口2,最终到达 H3。

这样就完成了一次从 H1 到 H3 的数据包转发过程。整个过程中,所有的决策都是基于预先设定好的流表项进行的,体现了 SDN 集中管理和控制的优点。

负载均衡

下图展示了在一个软件定义网络(SDN)环境中,如何通过负载均衡机制分发流量的过程。

![[负载均衡.png]]

具体步骤如下:

  1. 初始状态

    • 主机H1 发送数据包到 主机H3。
    • 数据包经过 S1 交换机,然后通过 S3 交换机到达 H3。
  2. 负载均衡启用

    • 控制器检测到流量增加或某种其他触发条件,决定启用负载均衡。
    • 控制器更新 S1 和 S2 交换机的流表,使得部分流量通过 S2 交换机分流。
  3. 负载均衡后的路径:来自 H1 的数据包现在有两种可能的路径到达 H3 :

    • 第一种路径仍然是通过 S1 -> S3 -> H3
    • 新增的第二种路径是通过 S1 -> S2 -> S3 -> H3

通过这种方式,控制器可以根据当前网络状况动态调整流量分配,以优化网络性能和资源利用率。这种灵活性是 SDN 的核心优势之一,因为它允许网络管理员更精细地控制和管理网络流量。

防火墙

下图展示了一个软件定义网络(SDN)环境中的防火墙设置,在这个例子中,防火墙规则应用于 OpenFlow 交换机 S2,限制了哪些数据包可以通过此交换机。

![[防火墙.png]]

在 S2 交换机上设置了防火墙规则,只允许接收来自于S1相连的主机所发送的数据包,无论这些数据包是从 S2 自己的哪个端口进来的。只有当数据包的 源IP 地址匹配 10.0.1.* 范围内的地址时,才会被转发到相应的端口(对于目的地为 10.0.2.3 的数据包转发到 端口2,对于目的地为 10.0.2.4 的数据包转发到 端口3)。

SDN 控制器

SDN 控制器作为中央控制点的角色,通过标准化的API与上下层进行通信,实现了网络的可编程性和灵活性。

这张图展示了 SDN 架构中各层的功能划分以及它们之间的交互方式,

![[SDN控制器.png]]

  1. 网络控制应用程序层:这一层包含多个网络控制应用模块,如路由选择、负载均衡、接入控制等。这些模块通过北向 API 与 SDN 控制器交互。

  2. 北向API:北向 API 是 SDN 控制器与网络控制应用程序层之间的接口。它支持 REST 风格的 API 和其他形式的通信协议,如 Intent。

  3. SDN控制器(网络操作系统):SDN 控制器是 SDN 架构的核心组件,负责网络的整体控制和管理。它通过南向API与底层的数据层面设备进行通信。

  4. 南向API:南向API 是 SDN 控制器与数据层面设备之间的接口。它使用标准协议(如OpenFlow)来控制和管理底层的网络设备。

  5. 数据层面:数据层面包含了实际的网络设备,如交换机和路由器。这些设备受到 SDN 控制器的控制,按照控制器的指示进行数据包的转发。

  6. 网络范围的状态管理层:这一层次负责收集和管理网络范围内的重要信息,如链路状态信息、主机信息、分组交换机信息等。

  7. 通信层:通信层负责 SDN 控制器与数据层面设备之间的通信,确保命令和反馈信息的正确传输。

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

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

相关文章

使用 .NET Core 7 和 SignalR 构建实时聊天应用程序

动动你可爱的小手,请关注下本人公众号,继续为您提供更多原创技术文章。谢谢给为的支持 SignalR 是一个 ASP.NET 库,它支持实时 Web 功能,允许服务器立即将更新推送到客户端,从而提高应用程序的效率和响应能力。它通过简…

响应式网页设计--html

一&#xff0c;HTML 文档的基本结构 一个典型的 HTML 文档包含了几个主要部分&#xff0c;基本结构如下(本文以下出现的所有代码都可以套入下面示例进行测试)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&q…

欢迎 Stable Diffusion 3.5 Large 加入 Diffusers

作为Stable Diffusion 3的改进版本&#xff0c;Stable Diffusion 3.5 如今已在 Hugging Face Hub 中可用&#xff0c;并可以直接使用 &#x1f9e8; Diffusers 中的代码运行。 https://hf.co/blog/sd3 本次发布包含两套模型参数: https://hf.co/collections/stabilityai/stable…

Ubuntu22.04中使用CMake配置运行boost库示例程序

Ubuntu22.04中使用CMake配置运行boost库示例程序 boost是一个比较强大的C准标准库&#xff0c;里面有很多值得学习的东西&#xff0c;比较asio网络库可以用来编写C TCP客户端或者TCP服务端接收程序。本文主要讲解如何在Ubuntu22.04中使用Cmake配置boost库&#xff0c;以及运行…

高效档案管理案例介绍:文档内容批量结构化解决方案解析

一、项目背景介绍 档案文件中包含的内容丰富且形式多样&#xff0c;通常不仅包括文本&#xff0c;还可能包含表格、图片、标题、段落、注释等多种内容元素。传统的档案管理往往依赖人工对文档内容进行归档、分类和标注&#xff0c;这种方式耗时费力&#xff0c;且在管理庞大数…

如何在vscode中安装git详细新手教程

一、安装git后点击vscode中的设置 今天教大家如何在VScode中编写代码后提交到git仓库&#xff0c;如果我们不想切换到git的命令行窗口&#xff0c;可以在VScode中配置git&#xff0c;然后就可以很方便快捷的把代码提交到仓库中。 二、在输入框中输入 git.path &#xff0c;再点…

负梯度方法与Newton型方法-数值最优化方法-课程学习笔记-4

今天我们继续来学习数值最优化方法的第三章内容的后续知识 Newton方法 Newton方法是Newton方法的基础, 本节主要讨论的是基本Newton方法, 阻尼Newton方法以及修正Newton方法的构造和特性, 这类方法适合解决中小型最优化问题 基本Newton方法 对于 f ( x ) f(x) f(x)如果有连续…

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…

Visual Studio Code从安装到正常使用

Visual Studio Code的汉化 下载的Visual Studio Code的话可以去应用商店也可以去官网下载。 Visual Studio Code只是一个编译器&#xff0c;不具备编译器功能。因此需要下载一个编译器MinGW MinGW的安装 官网链接MinGW官网链接 一步到位的链接 添加环境变量 进入cmd界面…

netty之关闭连接源码分析

写在前面 本文看下netty关闭channel相关源码。 1&#xff1a;前置准备 为了测试&#xff0c;我们需要使用netty源码中examples模块的echoserver和echoclient&#xff0c;但是echoclient因为会不断的发送消息&#xff0c;并不会断开连接&#xff0c;所以&#xff0c;我们需要…

Linux(CentOS)yum update -y 事故

CentOS版本&#xff1a;CentOS 7 事情经过&#xff1a; 1、安装好CentOS 7&#xff0c;系统自带JDK8&#xff0c;版本为&#xff1a;1.8.0_181 2、安装好JDK17&#xff0c;版本为&#xff1a;17.0.13 3、为了安装MySQL执行了 yum update -y&#xff08;这个时候不知道该命令的…

基于SpringBoot的“在线考试系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线考试系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统登录界面图 用户注册界面图 管…

Ubuntu 的 ROS 操作系统安装与测试

引言 机器人操作系统&#xff08;ROS, Robot Operating System&#xff09;是一个用于开发机器人应用的开源框架&#xff0c;它提供了一系列功能丰富的库和工具&#xff0c;能够帮助开发者构建和控制机器人。 当前&#xff0c;ROS1的最新版本为Noetic Ninjemys&#xff0c;专为…

学习threejs,将多个网格合并成一个网格

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Geometry 几何体1.2 …

vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法

1、先上个截图&#xff1a; 说明&#xff1a;拖动上面的分隔栏就可以实现&#xff0c;改变左右区域的大小。 2、上面的例子来自官网的&#xff1a; Container 布局容器 | Element Plus 3、拖动的效果来自&#xff1a; https://juejin.cn/post/7029640316999172104#heading-1…

7个常用的JavaScript数组操作进阶用法

文章目录 1、查找数组中的最大值方法一&#xff1a;使用 Math.max 和展开运算符方法二:使用 for 循环逐一比较 2、查找数组中的第二大值方法一&#xff1a;排序后取第二大值方法二&#xff1a;遍历找到第二大值 3、去除数组中的重复项4、合并两个有序数组并保持有序5、旋转数组…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆&#xff0c;用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

FPGA学习笔记#6 Vitis HLS For循环的优化(2)

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

MTK6833/MT6833(天玑700)安卓核心板_联发科5G智能通讯模块安卓主板定制

天玑700定位主流级&#xff0c;让5G技术惠及所有人。 MT6833采用7nm制程工艺&#xff0c;旨在为大众市场带来先进的5G功能和体验&#xff0c;依托5G双载波聚合技术&#xff08;2CC&#xff09;及双5G SIM卡功能&#xff0c;实现优异的功耗表现及实时连网功能。 CPU部分由2个2…

Spring Boot框架的知识分类技术解析

2 开发技术 2.1 VUE框架 Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的渐进式框架。 Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 2.2 Mysql数据库 …