SDN(Software Defined Networking):软件定义网络
计算机时代的演进:
计算1.0时代:用于专用计算的大型机、小型机(主要厂家IBM)大型机的特点:专有的硬件、专有的操作系统、专有的应用,
计算2.0时代:用于通用计算的服务器,用户可以选择不同的底部硬件,选择不同类型的操作系统,根据需求部署不同的软件,将开源、开放、创新放在了另外一个高度。
由于计算产业的开放性,计算产业被解耦成了很多个层面,如下图所示,
从上面的图我们可以感受到,仅仅是通用硬件这一层面,就有很多厂家的芯片,内存、硬盘等,也就是说,由于生态的开放性,计算产业的内容变得十分的丰富,计算产业的变革引发了网络产业的思考,业界开始提出SDN(Software Defined Networking)的概念,并不断在其商用化进程上作出尝试。目的是希望网络变得更开放、灵活和简单,如下图所示,是网络产业的架构图
网络界的现状:经典IP组成的分布式网络
![](https://i-blog.csdnimg.cn/blog_migrate/2f9d1169ef88383f9e3672df23e030e8.png)
1.网络易拥塞的问题:
如下图所示,是基于带宽固定选路的问题和解决思路
网络基于带宽计算转发路径。路由器C到路由器D的链路为最短转发路径。C-D的业务流量开始超过带宽出现丢包现象。虽然其他链路空闲,但是算法依然选择最短路径转发。如果可以全局考虑,此时最优的流量转发路径为C-A-D。
如下图所示,是基于固定顺序建立隧道的问题,
途中有A到H共8台路由器,现在有一个业务需求是需要从A到E之间建立一个隧道,如图所示就是我们的1隧道,现另有一需求需要A到G之间建立一个隧道,很顺利的就建好了2隧道,但是现在又有一个业务需求需要从C到H,可以发现这个业务需求满足不了,因为中间都有隧道被占用的问题。
解决思路:全局计算,最优调整隧道路径,
如果我们在建立所有隧道之前,就规划好每个隧道的路径,就不会发生上述问题,如下图所示。
2.网络技术太复杂
网络技术太复杂主要表现在两方面,一个是网络协议多:如果您准备成为一名网络技术专家, 您需要阅读网络设备相关RFC 2500篇。如果一天阅读一篇,需要长达6年时间, 而这只是整个RFC的 1/3,其数量还在持续增加;另外一个是网络配置难:如果您准备成为某个设备商设备的百事通,您需要掌握的命令行超过10000条,而其数量还在增加。
3.运维太困难
运维太困难表现在两方面,一个是故障发现难,传统运维网络故障依靠人工故障识别、人工定位和人工诊断。超过85%的网络故障业务投诉后才发现;无法有效主动识别、分析问题;另一个是故障定位难,传统运维仅监控设备指标,存在指标正常,但用户体验差的情况。缺少用户和网络的关联分析。数据中心网络统计,一个故障定位平均耗时76 min。
4.网络业务部署速度太慢
搭建一个新的网络环境,包括设备的发货、设备的上架、现场线缆的部署、设备的调测、各种网络策略的部署等等一系列过程,在这个过程中每一个环节的周期都比较长,导致的结果就是网络业务部署速度太慢的问题。
物理网络部署效率低:物理网络无零配置部署能力。
新业务部署周期长:新业务部署涉及端到端设备配置修改。
网络策略变更复杂、不灵活:网络策略无法细化到用户。策略变更复杂,无法灵活调整。
网络业务部署的愿景是:网络策略实现业务随行,与物理位置无关;新业务实现快速部署;物理网络支持零配置部署,设备即插即用。
SDN的起源
SDN(Software Defined Networking)即软件定义网络。是由斯坦福大学Clean Slate研究组提出的一种新型网络创新架构。 其核心理念通过将网络设备控制平面与数据平面分离,从而实现了网络控制平面的集中控制,为网络应用的创新提供了良好的支撑。SDN起源提出了三个特征, “转控分离”、“集中控制”和“开放可编程接口”。
如下图所示,
在传统的网络架构里面引入了OpenFlow的概念,在转发平面搭建多个OpenFlow交换机,这些OpenFlow交换机由OpenFlow控制器来控制。
OpenFlow基本概念
OpenFlow是控制器与交换机之间的一种南向接口协议。它定义了三种类型的消息,Controller-to-Switch、 Asynchronous 和 Symmetric。每一种消息又包含了更多的子类型,如下图所示。
消息类型 | 描述 |
Controller-to-Switch | 该消息由Controller发送。用于管理Switch和查询Switch的相关信息。由控制器往下发。定义了交互的方向 |
Asynchronous | 该消息由Switch发起。当Switch状态发生改变时,发送该消息告诉Controller状态变化。OpenFlow交换机往上发。定义的是交互的方向 |
Symmetric | 该消息没有固定发起方,可由Switch或者Controller发起。例如Hello、Echo、Error等。应用于特殊的报文。 |
• Controller-to-Switch 子类型:▫ Features 消息:在 SSL/TCP 会话建立后, Controller 给 Switch 发送 Features 请求 Switch 的相关信息。 Switch 必须应答自己支持的功能,包括接口名、接口 MAC 地址、接口支持的速率等等基本信息。▫ Configuration 消息: Controller 可以设置或查询 Switch 的状态。▫ Modify-State 消息: Controller 发送该消息给 Switch ,来管理 Switch 的状态,即增加 / 删除、更改流表,并设置 Switch 的端口属性。▫ Read-State 消息: Controller 用该消息收集 Switch 上的统计信息。▫ Send-Packet 消息: Controller 发送该消息到 Switch 的特定端口。• Asynchronous 子类型:▫ Packet-in 消息:当 Flow Table 中没有匹配的表项或者匹配“ send to Controller” , Switch 将给 Controller 发送 packet-in 消息。▫ Packet-out 消息:从控制器回复的消息。▫ Flow-Removed 消息:当给 Switch 增加一条表项时,会设定超时周期。当时间超时后,该条目就会被删除。这时 Switch 就会给 Controller 发送 Flow-Removed 消息;当流表中有条目要删除时, Switch 也会给 Controller 发送该消息。▫ Port-status 消息:当数据路径接口被添加、删除、修改的时候,此消息用于通知控制器。
• Symmetric 子类型:▫ Hello 消息:当一个 OpenFlow 连接建立时, Controller 和 Switch 都会立刻向对端发送 OFPT_HELLO 消息,该消息中的 version 域填充发送方支持的 OpenFlow 协议最高的版本号;接收方收到该消息后,接收方会计算协议版本号,即在发送方和接收方的版本号中选择一个较小的;如果接收方支持该版本,则继续处理连接,连接成功;否则,接收者回复一个 OFPT_ERROR 消息,类型域中填充 ofp_error_type.OFPET_HELLO_FAILED▫ Echo 消息: Switch 和 Controller 任何一方都可以发起 Echo request 消息,但收到的一方必须回应 Echo reply 消息。这个消息可以来测量 latency 、 Controller-Switch 之间的连接性,即心跳消息;▫ Error 消息:当交换机需要通知控制器发生问题或错误时, Switch 给 Controller 发送 Error 消息。OpenFlow协议仍在持续更新。更多更全的消息类型请参考ONF最新发布《OpenFlow Switch Specification》标准。
Flow Table简介
OpenFlow交换机基于流表(Flow Table)转发报文。
每个流表项由匹配字段、优先级、计数器、指令、超时、Cookie、Flags这七部分组成。其中关于转发的关键的两个内容是匹配字段和指令。匹配字段是匹配规则,支持自定义。指令是用来描述匹配后的处理方式。
匹配域:匹配到某种特征的流量才能进行相应的转发,比传统的数据转发更加灵活,可选项更多;
• Match Fields :流表项匹配项( OpenFlow 1.5.1 版本支持 45 个可选匹配项),可以匹配入接口、物理入接口,流表间数据,二层报文头,三层报文头,四层端口号等报文字段等。• Priority :流表项优先级,定义流表项之间的匹配顺序,优先级高的先匹配。• Counters :流表项统计计数,统计有多少个报文和字节匹配到该流表项。• Instructions :流表项动作指令集,定义匹配到该流表项的报文需要进行的处理。当报文匹配流表项时,每个流表项包含的指令集就会执行。这些指令会影响到报文、动作集以及管道流程。• Timeouts :流表项的超时时间,包括了 Idle Time 和 Hard Time 。▫ Idle Time :在 Idle Time 时间超时后如果没有报文匹配到该流表项,则此流表项被删除。▫ Hard Time :在 Hard Time 时间超时后,无论是否有报文匹配到该流表项,此流表项都会被删除。• Cookie : Controller 下发的流表项的标识。• Flags :该字段改变流条目的管理方式。
转发方式对比
![](https://i-blog.csdnimg.cn/blog_migrate/877e44221afbc85a39d230a2dee8cd1a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/57272b513df4e6c22bcad02038224c01.png)
有很多的优势,但是也有劣势:单点故障、数据不一致的问题,当前OpenFlow的主流应用是用于数据中心的软件交换机,例如OVS、CE1800V等,而不是实现硬件交换机的转控分离。
经典路由和OpenFlow之间可以进行流量转发,因为都是基于TCP/IP协议栈的,但是两者之间不能运行路由协议,因为OpenFlow Switch只支持OpenFlow
SDN是一个更为广泛的概念而不局限于OpenFlow。转控分离是实现SDN的一种方法而不是本质。
SDN的本质诉求
SDN的本质诉求是让网络更加开放、灵活和简单。它的实现方式是为网络构建一个集中的大脑,通过全局视图集中控制,实现或业务快速部署、或流量调优(适用于广域网网络)、或网络业务开放等目标。
SDN的价值是:集中管理,简化网络管理与运维;屏蔽技术细节,降低网络复杂度,降低运维成本;自动化调优,提高网络利用率;快速业务部署,缩短业务上线时间;网络开放,支撑开放可编程的第三方应用。
SDN带来了网络架构的变革。但是路由协议不会被淘汰,只会被更新的路由协议去替代。
SDN网络架构
SDN网络架构分为协同应用层、控制器层和设备层,如下图所示,底层是网络设备,网络设备之上依然会运行协议,新增加了一个控制器层,控制器曾的作用就是通过控制器管理好各种设备,变成一个集中的控制点,第三个层次是应用协同层,(可以是一个云平台,也可以是业务平台,)通过这个层次将客户的需求下发给网络控制器,控制器再将这个网络需求下发给设备层的设备来完成,不同层次之间通过开放接口连接。以控制器层为主要视角,区分面向设备层的南向接口和面向协同应用层的北向接口。OpenFlow属于南向接口协议的一种。
隐患:控制器不能坏,因为一旦通过OpenFlow实现转控分离,控制器又坏掉了,那么数据的转发就不能被控制了,
解决思路1,一旦控制器坏掉了,设备层的设备就恢复成原来的状态,转控一体化的状态,这样就有了控制层面;
解决思路2,实现控制器冗余,主备部署。
• 协同应用层:主要完成用户意图的各种上层应用,典型的协同层应用包括 OSS 、 OpenStack 等。 OSS 可以负责整网的业务协同, OpenStack 云平台一般用于数据中心负责网络、计算、存储的业务协同。还有其他的协同层应用,比如用户希望部署一个安全 APP ,这个安全 APP 不关心设备具体部署位置,只是调用了控制器的北向接口,例如 Block ( Source IP , DestIP ),然后控制器会给各网络设备下发指令。这个指令根据南向协议不同而不同。• 控制器层:控制器层的实体就是 SDN 控制器,是 SDN 网络架构下最核心的部分。控制层是 SDN 系统的大脑,其核心功能是实现网络业务编排。• 设备层:网络设备接收控制器指令,执行设备转发。• NBI 北向接口:北向接口为控制器对接协同应用层的接口,主要为 RESTful 。• SBI 南向接口:南向接口为控制器与设备交互的协议,包括 NETCONF 、 SNMP 、 OpenFlow 、 OVSDB 等。