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

文章目录

  • 一、介绍
    • 1、简介
    • 2、原理
    • 3、案例
      • 1)普通
      • 2)负载均衡的例子
      • 3)防火墙的例子
  • 二、控制层面
    • 1、特征
    • 2、层次

一、介绍

1、简介

SDN的概念最初由斯坦福大学N.McKeown于2009年首先提出。当时还只是在学术界进行探讨的一种新的网络体系结构。但随后几年发展很快,不少企业相继采用。其中最成功的案例就是谷歌建于2010~2012年的数据中心网络B4。几年来网络B4运行的结果证明,基于SDN的专用广域网确实可以大大提高网络带宽利用率,网络运行更加稳定,管理更加高效简化,运行费用也明显降低了。目前,SDN已经引起人们的密切关注。

在 SDN 中,数据层面中的交换机是由控制层面进行控制的,下图表明这种控制是通过协议OpenFlow来实现的。。协议penFlow 是一个得到高度认可的标准,在讨论 SDN 时往往与 OpenFlow 一起讨论。因此,有人会误认为SDN就是 OpenFlow。其实这二者有着很大的区别。SDN不是协议,更不是一种产品。

SDN是一个体系结构,是一种设计、构建和管理网络的新方法或新概念,其要点就是把网络的控制层面和数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备。

可以把协议penFow看成是在SDN体系结构中控制层面和数据层面之间的通信接口,它使得控制层面的控制器可以对数据层面中的物理设备或虚拟设备,进行直接访问和操纵。

这种控制在逻辑上是集中式的,是基于流的控制
在这里插入图片描述
但请注意,SDN并未规定必须使用OpenFlow,只不过是大部分SDN 的产品采用了OpenFlow 作为其控制层面与数据层面的接口。

传统意义上的数据层面的任务就是根据转发表来转发分组。可以再把“转发”细分一下。实际上这里有两个步骤。第一个步骤是“匹配”,即查找转发表中的网络前缀,进行最长前缀匹配。第二个步骤是“动作”,即把分组从指明的接口转发出去。这种“匹配+动作”的转发方式在SDN 中得到了扩充,增加了新的内容,变成了广义的转发。这种广义的转发使得“匹配+动作”有了新的内容。

在 SDN 的广义转发中,“匹配”能够对不同层次(链路层、网络层、运输层)的首部中的字段进行匹配,而“动作”则不仅是转发分组,而且可以把具有同样目的地址的分组从不同的接口转发出去(为了负载均衡)。还可以重写IP首部(如同在NAT路由器中的地址转换),或者可以人为地阻挡或丢弃一些分组(如同在防火墙中一样)。请注意这里为了讨论问题的方便,在讨论SDN的问题时,不管在哪一层传送的数据单元,都称为分组。

这样,在SDN 的广义转发中,这种完成“匹配+动作”的设备,就不应当称为路由器了,而是叫作“分组交换机”或“OpenFlow 交换机”,或更简单些就称为“交换机”。这种交换机并不局限在网络层工作(例如,可使用L2/L3 交换机)。在SDN中,取代传统转发表的是“流表”(flow table)。因此,流表就是“匹配+动作”的转发表。

2、原理

下图强调了一个重要概念:OpenFlow 交换机中的流表是由远程控制器来管理的,而远程控制器通过一个安全信道(见7.6.2节),使用OpenFlow协议来管理 OpenFlow 交换机中的流表。这样,OpenFlow 就有了双重意义。一方面,OpenFlow是SDN远程控制器与网络设备之间的通信协议;另一方面,OpenFlow又是网络交换功能的逻辑结构的规约。我们还应注意到,尽管网络设备可以由不同厂商来生产,同时也可以使用在不同类型的网络中,但从SDN远程控制器看到的,则是统一的逻辑交换功能。

我们在之前介绍IPv6首部的流标号时,曾初步地提到“流”的概念。在 OpenFlow的各种文档中都没有“流”的定义。其实从OpenFlow交换机的角度来看,一个流就是穿过网络的一种分组序列,而在此序列中的分组都共享分组首部某些字段的值。例如,某个流可以是具有相同源卫P地址和目的地址的所有分组。

下图给出了OpenFlow 10版本的流表和分组的首部匹配字段(这是最简单的一个版本,便于用来讲解工作原理)[KURO17]。每个OpenFlow交换机必须有一个或一个以上的流表。每一个流表可以包括很多行,即多个流表项(low entry),它包括三个字段,即首部字段值(又称为匹配字段)、计数器和动作。下面解释这三个字段的意思。
在这里插入图片描述

  • 首部字段值:这是一组字段,用来使入分组(incoming packet)的对应首部与之相匹配,因此又称为匹配字段。匹配不上的分组就被丢弃,或发送到远程控制器做更多的处理。上图所示的匹配字段有 11个项日涉及三个层次的首部。这就是说,OpenFlow 的匹配抽象与我们以前讲过的分层的原则明显不同。在 OpenFlow 交换机中,既可以处理链路层的帧,也可以处理网络层的IP分组和运输层的报文。
  • 计数器:这是一组计数器,可包括已经与该表项匹配的分组数量,以及从该表项上次更新到现在经历的时间。
  • 动作:这是一组动作,例如,当分组匹配某个流表项时把分组转发到指明的端口,或丢弃该分组,或把分组进行复制后再从多个端口转发出去,或重写分组的首部字段(第二、三和四层的首部字段)。

3、案例

1)普通

为了更好地理解流表的匹配与动作,我们讨论下面几个例子。下图给出的简单网络有6台主机(H1~H6),其IP地址标注在主机旁边,还有3台分组交换机(S1~S3)。每台交换机有4个端口(即接口,编号为1至4)。还有1台OpenFlow 控制器来控制这些分组交换机的“匹配+动作”。
在这里插入图片描述
我们设定的转发规则是:来自H5或H6发往H3或H4的分组。都先从S3转发到S1,然后再从 S1转发到 S2,但不通过 S3到S2的链路。根据这个转发规则,可以得出交换机S3的流表项是:
在这里插入图片描述
这里使用了通配符*。例如,地址 10.3.*.*,表明这样的地址将匹配前16位为10.3 的任何地址。“转发(3)”表明分组转发出去端口是交换机编号为3的端口。

交换机S1的流表项(这里和后面都省略了计数器字段)是:
在这里插入图片描述
和 S,的流表项相比,这里多了“入端口 =1”。表明“匹配”仅限于从编号1的端口进入交换机S1的分组。

交换机S2的流表项是:
在这里插入图片描述

2)负载均衡的例子

在这里插入图片描述

3)防火墙的例子

在这里插入图片描述
虽然上面举出的例子非常简单,但已经可以看出这种广义转发的多样性和灵活性。广义转发的优点是显而易见的。

二、控制层面

1、特征

从下图可以反映出 SDN 体系结构的四个关键特征:
在这里插入图片描述

  1. 基于流的转发。SDN 控制的交换机分布在数据层面中,而分组的转发可以基于网络层运输层和链路层协议数据单元中的首部字段值进行。这和传统的路由器仅仅根据IP分组的目的地址进行转发,有着很大的区别。SDN的转发规则都精确规定在交换机中的流表中。所有交换机中的流表项,都是由SDN 控制器进行计算、管理和安装的。
  2. 数据层面与控制层面分离。在许多英语文献中常使用“decouple”一词,相应的中文就是“去耦”。在传统的转发设备路由器中,其数据层面与控制层面都处在同一个设备中,因此二者耦合得非常紧密。但在SDN 中,则把这两个层面去耦合,使二者不在同一个设备中。这点在图 4-73中看得很清楚。数据层面有许多相对简单但快速的网络交换机。这些交换机在其流表中执行“匹配+动作”的规则。而控制层面则由若干服务器和相应的软件组成,这些服务器和软件决定并管理这些交换机中的流表。
  3. 位于数据层面交换机之外的网络控制功能。SDN 中的控制层面是用软件实现的,而且软件是处在不同的机器上,并且可能还远离这些网络交换机。从下图可以看出,SDN 控制层面包含两个构件,一个是SDN控制器(也就是网络操作系统),另一个由若干个网络控制应用程序组成。SDN 控制器维护准确的网络状态信息(例如,远程链路、交换机和主机的状态),把这些信息提供给运行在控制层面的各种控制应用程序,以及提供一些方法,使得这些应用程序能够对底层的许多网络设备进行监视、编程和控制。需要注意的是,在下图的SDN 控制器中只画了一个服务器,但这只是强调在逻辑上是集中控制的。实际上,在控制层面中总是使用多个分散的服务器协调地工作,以便实现可扩展性和高可用性。
  4. 可编程的网络。通过在控制层面的一些网络控制应用程序,使整个网络成为可编程的。这些应用程序相当于 SDN 控制层面中的“大脑”,SDN 控制器使用这些应用程序,在这些网络设备中指明和控制数据层面。例如,路由选择网络控制应用程序能够确定在源点和终点之间的端到端路径(这需要执行某种算法,也需要使用由SDN 控制器维护的节点状态和链路状态信息)。网络应用程序还可以进行接入控制,即决定哪些分组在进入某个交换机时就必须被阻挡住。此外,网络应用程序在转发分组时还可以执行负载均衡的措施。

2、层次

从以上的简单例子可以看出,SDN 把网络的许多功能都分散开了。数据层面的交换机SDN 控制器以及许多网络控制应用程序,这些都可以是分开的实体,并且可以由不同的厂商和机构来提供。这就和传统网络截然不同。在传统网络中,路由器或交换机是由单独的厂商提供的,其控制层面和数据层面以及协议的实现,都是垂直集成在一个机器里面的。目前出现的这种变化,有点像当初计算机的演变。早期的大型计算机,从硬件到软件以及应用程序,都是由一个单独的厂家生产完成的。但后来演变到现在的个人电脑,其硬件机身、操作系统以及上层的应用程序,可以由多个厂家分别生产和提供,这样的系统就变得更加开放,其功能也更加丰富了。SDN 也可能有这样的发展结果。

下图还给出了 SDN 控制器和下面数据层面的受控设备的通信接口,即南向API,以及 SDN 控制器和上面网络控制应用程序的接口,即北向API。SDN 控制器是最复杂的,它还可以划分为如下图所示的三个层次。
在这里插入图片描述
最下面的一层是通信层,其任务是完成SDN 控制器与受控的网络设备之间的通信。显然,要完成这样的通信,我们必须有一个协议,用来在SDN控制器与这些设备之间传送信息。此外,这些设备还必须能够向SDN控制器传送在本地观察到的事件(例如,用一个报文指示某条链路正常工作或出了故障断开了,或指示某个设备刚刚接入到网络中,或者某种信号突然出现可以表示某个设备已加电并可以工作)。这样就可保证 SDN 控制器掌握了网络状态的最新视图。在通信层的协议有前面已经提到过的OpenFlow,以及后面在第6章应用层要学习的协议 SNMP,等等。通信层与数据层面的接口叫作南向API接口。现有用SDN控制器概念制作的商品基本上(当然不是全部)都是采用协议openFlow。

在中间的一层是网络范围的状态管理层。SDN 控制层面若要做出任何最终的控制决定(例如,在所有的交换机中配置流表以便进行端到端的转发,或实现负载均衡,或实现某种特殊的防火墙能力),就需要让控制器掌握全网的主机、链路、交换机,以及其他受SDN 控制的设备。交换机的流表中包含有计数器,而网络应用程序需要使用这些计数器的值。因此这些计数器的值对网络应用程序来说也必须是可用的。由于控制层面的最终目的是确定各种被控设备的流表,因此控制器还需要维护这些流表的副本。所有上述这些信息构成由SDN控制器维护的网络范围状态。

最上面一层是到网络控制应用程序层的接口。SDN控制器与网络控制应用程序的交都要通过北接口。这个API接口允许网络控制应用程序对状态管理层里面的网络状态和流表进行读写操作。网络控制应用程序事先已进行了注册。当状态变化的事件出现时,网络控制应用程序把得到的网络事件进行通告,并采取相应的动作,例如,计算新的最低开销的路径。这一层可以提供不同类型的API。例如,REST风格的API目前使用得较多。图中的REST (REpresentational State Transfer)即表述性状态传递,是一种针对网络应用的设计和开发方法[W-REST]。图中的Intent 是对要进行的操作的一种抽象描述[W-INTENT],可用它在组件之间传递数据。

目前已经出现了一些开放源代码控制器,或简称为开源控制器(Open Source Controller),最有代表性的就是 OpenDaylight和ONOS。这里就不再进行讨论了。

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

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

相关文章

Nvidia发布Llama3-ChatQA-1.5: 提升对话问答和表格推理能力,平均性能超越GPT-4

前言 近日,Nvidia推出了一款名为Llama3-ChatQA-1.5的对话问答模型。该模型在对话式问答和检索增强型生成等能力方面表现出色,在综合评测指标上甚至超越了当前业界顶尖的GPT-4模型。 技术特点 Llama3-ChatQA-1.5是基于Llama-3基础模型训练而成的。相比之…

《QT实用小工具·五十八》模仿VSCode的可任意拖拽的Tab标签组

1、概述 源码放在文章末尾 该项目实现了模仿VSCode的可任意拖拽的Tab标签组,包含如下功能: 拖拽标签页至新窗口 拖拽标签页合并控件 无限嵌套的横纵分割布局(类似Qt Creator的编辑框) 获取当前使用的标签组、标签页 自动向上合并…

Elementui的el-footer标签使用报错

Elementui的el-footer标签使用报错 其余标签的使用没有报错信息 el-footer的报错信息 原因: ​ 警告信息表示 Vue 不识别 <el-footer> 解决方式: 在组件中进行引入和暴露

Hive数据模型

Hive数据模型 1. 表&#xff08;Table&#xff09;&#xff1a; 表是数据库中的基本组成单位&#xff0c;用于存储数据。它由一系列的行和列组成&#xff0c;每行代表一个记录&#xff0c;每列代表一种属性或字段。创建表时&#xff0c;你需要定义列的数据类型、约束和索引等信…

Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)

Linux&#xff1a;进程概念&#xff08;二.查看进程、父进程与子进程、进程状态详解&#xff09; 上次讲了一下:Linux&#xff1a;冯诺依曼体系结构、操作系统、初识进程 文章目录 1.查看进程1.1准备工作1.2 指令&#xff1a;ps—显示当前系统中运行的进程信息1.3查看进程属性…

偶然发现了Python的一个BUG。。。

一般情况下&#xff0c;dict(id1, **{id: 1})这句代码应该报TypeError。但如果在捕获了其他异常的情况下&#xff0c;再来执行这句代码&#xff0c;却是会报KeyError&#xff0c;如下图&#xff1a; Python3.10和Python3.9也能复现该情况&#xff0c;正当我摩拳踩掌&#xff0c…

C语言知识点补充——ASCLL码表

1、ASCLL码表 ASCII码表&#xff08;American Standard Code for Information Interchange&#xff09;是一种用于将字符编码为数字的标准。它定义了128个字符的编码方式&#xff0c;包括数字、字母、标点符号和控制字符等。每个字符都对应一个唯一的7位或8位二进制数 2、Ascl…

【Ping】Windows 网络延迟测试 ping 、telnet、tcping 工具

ping 命令 属于网络层的ICMP协议&#xff0c;只能检查 IP 的连通性或网络连接速度&#xff0c; 无法检测IP的端口状态。 telnet telnet命令&#xff0c;属于应用层的协议&#xff0c;用于远程登录&#xff0c;也可用于检测IP的端口状态。但是功能有限&#xff0c;只能检测一时…

如何使git提交的时候忽略一些特殊文件?

认识.gitignore文件 在生成远程仓库的时候我们会看到这样一个选项&#xff1a; 这个.gitignore文件有啥用呢&#xff1f; .gotignore文件是Git版本控制系统中的一个特殊文件。用来指定哪些文件或者目录不被Git追踪或者提交到版本库中。也就意味着&#xff0c;如果我们有一些文…

linux学习笔记——硬盘原理以及linux中的sector与block

在计算机硬盘中&#xff0c;最小的存储单位叫做扇区sector&#xff0c;0.5kb&#xff0c;多个连续扇区组合在一起形成了块block&#xff0c;最小的块包含8个扇区&#xff0c;4kb 我们可以在linux中印证 创建一个新的文件2.txt&#xff0c;查看文件大小为0k 在文件中添加字符后…

Gradle基础学习(七) 认识插件

Gradle构建在一个插件系统上&#xff0c;本身主要由基础设施组成&#xff0c;比如有一个先进的依赖解析引擎&#xff0c;而其他功能则来自插件。 插件是提供额外功能给Gradle构建系统的软件组件。 插件可以被应用到Gradle构建脚本中&#xff0c;以添加新的任务、配置或其他与构…

第八篇:深入探索操作系统架构:从基础到前沿

深入探索操作系统架构&#xff1a;从基础到前沿 1 引言 在当今这个高速发展的数字时代&#xff0c;操作系统无疑是计算机科学领域的基石之一。它不仅是计算机硬件与最终用户之间的桥梁&#xff0c;更是实现高效计算和资源管理的关键。操作系统的架构&#xff0c;即其内部结构和…

51单片机入门:蜂鸣器

蜂鸣器介绍 蜂鸣器是一种将电信号转换为声音信号的器件&#xff0c;常用来产生设备的按键音、报警音等提示信号。 蜂鸣器的种类 1、从结构上&#xff1a;压电式蜂鸣器和电磁式蜂鸣器。 压电式蜂鸣器&#xff1a;通过压电陶瓷的压电效应原理工作的。当加有交变电压时&#xf…

企业微信主体能不能修改?

企业微信变更主体有什么作用&#xff1f;当我们的企业因为各种原因需要注销或已经注销&#xff0c;或者运营变更等情况&#xff0c;企业微信无法继续使用原主体继续使用时&#xff0c;可以申请企业主体变更&#xff0c;变更为新的主体。企业微信变更主体的条件有哪些&#xff1…

C 深入指针(2)

目录 1 野指针 1.1 成因 1.2 如何规避野指针 2 assert 断言 2.1 用法 2.2 assert 的优点 2.1 assert 的缺点 3 小注解 3.1 Debug 和 Release 1 野指针 【概念】&#xff1a; 野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#…

CSS Web服务器、2D、动画和3D转换

Web服务器 我们自己写的网站只能自己访问浏览&#xff0c;但是如果想让其他人也浏览&#xff0c;可以将它放到服务器上。 什么是Web服务器 服务器(我们也会称之为主机)是提供计算服务的设备&#xff0c;它也是一台计算机。在网络环境下&#xff0c;根据服务器提供的服务类型不…

初识C语言——第十三天

关键字2&#xff1a; static 修饰局部变量&#xff0c;改变了局部变量的生命周期&#xff08;本质上是改变了变量的存储类型&#xff09; static修饰全局变量&#xff0c;使得这个全局变量只能在自己所在的源文件&#xff08;.c)内部可以使用&#xff0c;其他源文件不能使用 …

Partisia Blockchain 生态zk跨链DEX上线,加密资产将无缝转移

在 5 月 1 日&#xff0c;由 Partisia Blockchain 与 zkCross 创建合作推出的 Partisia zkCrossDEX 在 Partisia Blockchain 生态正式上线。Partisia zkCrossDEX 是 Partisia Blockchain 上重要的互操作枢纽&#xff0c;其融合了 zkCross 的 zk 技术跨链互操作方案&#xff0c;…

linux上Redis安装使用

环境centOS8 redis是缓存数据库&#xff0c;主要是用于在内存中存储数据&#xff0c;内存的读写很快&#xff0c;加快系统读写数据库的速度 一、Linux 安装 Redis 1. 下载Redis 官网下载Downloads - Redis 历史版本Index of /releases/ 本文中安装的版本为&#xff1a;h…

小红书图片文案编辑生成图文工具

在小红书上&#xff0c;种草图文的变现通常涉及以下几个步骤&#xff1a; 1. **建立影响力**&#xff1a;首先&#xff0c;你需要通过持续发布高质量的内容&#xff0c;积累粉丝和影响力。你的内容应该围绕特定的领域或主题&#xff0c;比如时尚、美妆、美食或旅行&#xff0c…