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

news2024/12/26 5:14:18

文章目录

  • 一、介绍
    • 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.coloradmin.cn/o/1647377.html

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

相关文章

springboot+mp自动生成没有实体类

mybatisX版本冲突问题 一开始我的MyBatisX版本是1.6.1-3,使用mybatis-plus一直不能正常生成实体类 将MyBatisX的版本换成了1.5.7就可以了 MyBatisX版本更换 1.将原有的MyBatisX卸载后重新安装一个新的版本 2.选择一个合适的版本,这里我选的是1.5.7 下载完成后自己选择一个…

css实现上下左右对勾选中状态角标

🍥左上角 🍥右上角 🍥左下角 🍥右下角: 🍥左上角: .blueBackground {position: relative;border: 1px solid #91c7f3;background: #F0F8FF !important;&:after {content: "";position: absolute;top:…

【Java从入门到精通】Java 重写(Override)与重载(Overload)

重写(Override) 重写(Override)是指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。 即外壳不变,核心重写! 重写的好处在于子类可以根据需要&#xff0c…

jmeter后置处理器提取到的参数因为换行符导致json解析错误

现象: {"message":"JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Ill…

FastAdmin实现后台菜单自定义方法

FastAdmin实现后台菜单自定义显示,默认显示的是编辑和删除操作,我们有的时候是需要增加一些功能性的按钮,例如审核,或者说更多的关联性的信息。那么我们就可以按如下的操作去做 上面是默认展示的功能图片,下面我来简单…

上海亚商投顾:沪指创年内新高 化工板块掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日高开震荡,沪指涨超1%续创年内新高,深成指、创业板指均涨约2%。化工股集体…

PPT中如何在原有的表格中新增/删除一行

在编辑PPT中插入的表格时,如果发现原有表格不够用/原有表格需过多,需要新插入/新删除一行,应该怎么做?今天就为大家演示一下这个小常识。 1.PPT中在原有的表格中新增一行 -->任意选中表格中的一行(默认一般选择最后一行) --&…

深入C语言:文件操作实现局外影响程序

一、什么是文件 文件其实是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。 文件一般讲两种:程序文件和数据文件: 程序文件:包括源程…

模拟IC设计实践教程(入门)

一、教学大纲 二、芯片设计及量产总体流程 芯片需求分析:即产品定义,功能要求,性能要求工艺选择及评估:不同工艺特性相差较大,不同工艺的成本也是不同的。主要用于评估工艺的性价比,工艺提供的元器件能不能…

pip install 过程中报错:Microsoft Visual C++ 14.0 is required.

这是因为电脑中缺少这个组件导致的,我们将这个组件安装上即可解决问题。 安装报错关键信息:Microsoft Visual C++ 14.0 is required. 目录 一、下载组件 二、 安装步骤 一、下载组件 阿里网盘:VisualStudioSetup.exe:

绝地求生:季后赛名额确定!NH战队总积分榜排名第一!

2024年5月5日,PCL春季赛常规赛第五阶段第三天比赛结束,今天打完春季赛常规赛结束,16个战队进入季后赛的名额已确定。NH战队总积分506分,总积分榜排名第一!!NH战队也是唯一一支总积分超过500分的队伍。今天最…

LabVIEW自动机械变速器(AMT)开发

LabVIEW自动机械变速器(AMT)开发 在现代汽车工业中,提升车辆的自动化水平和驾驶体验是一个不断追求的目标。随着技术的发展,自动机械变速器(AutomatedMechanical Transmission, AMT)凭借其较高的能效和较低…

详解嵌入式MCU运行时分配的stack和heap

目录 概述 1 认识stack和heap 1.1 栈区(stack) 1.2 堆区(heap) 2 stack和heap的区别 2.1 管理方式的不同 2.2 空间大小不同 2.3 产生碎片不同 2.4 增长方式不同 2.5 分配方式不同 2.6 分配效率不同 3 确定stack和heap…

细数:智能物流装备界的并购案~

导语 大家好,我是智能仓储物流技术研习社的社长,老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 近年来,随着智能仓储物流行业的快速发展,全球范围内的并购活动日益频繁,各大企…

Hamilton回路求解

如果可以 我想和你回到那天相遇 让时间停止 那一场雨 红线划过 深藏轮回的秘密 我挥霍运气 因为你 才让我 背对命运不害怕 --------- 如果可以 (Acapella) - 韦礼安 大家好,我又又又来了,今天给大家聊聊Hamilton回路! 背景 国际象…

VSCode通过SSH连接虚拟机Ubuntu失败

问题说明 最近使用VSCode通过SSH连接Ubuntu,通过VSCode访问Ubuntu进行项目开发,发现连接失败 在VSCode中进行SSH配置 这些都没有问题,但在进行连接时候出现了问题,如下: 出现了下面这个弹窗 解决方法 发现当…

从简单逻辑到复杂计算:感知机的进化与其在现代深度学习和人工智能中的应用(上)

文章目录 引言第一章:感知机是什么第二章:简单逻辑电路第三章:感知机的实现3.1 简单的与门实现3.2 导入权重和偏置3.3 使用权重和偏置的实现实现与门实现与非门和或门 文章文上下两节 从简单逻辑到复杂计算:感知机的进化与其在现代…

与 Apollo 共创生态:Apollo 7 周年大会的启示与心得

文章目录 前言Apollo X 全新征程Application X 企业预制套件总结 前言 在过去的七年中,Apollo 开放平台经历了一段令人瞩目的发展历程。从最初的构想到如今的成熟阶段,Apollo 已经推出了 13 个版本,吸引了来自全球 170 多个国家和地区的 16 …

python 中的数据结构

python 中的数据结构 1.1 序列 序列时有索引的数组 举例实现: a["北京","上海","广州","深圳","重庆","成都"] print(a[2]) print(a[-1] " " a[-2]) print(a[1:3]) # 运行结果 "&…

Java设计模式 _结构型模式_外观模式

一、外观模式 1、外观模式 外观模式(Facade Pattern)是一种结构型模式。主要特点为隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这有助于降低系统的复杂性,提高可维护性。当客户端与多个子系统之间存在大量…