了解SDN

今天跑去图书馆借了重构网络:SDN架构与实现一书(之所以借这本书是因为在这本书刚出的时候,豆瓣给我推送过,此后就一直在我的“想读”列表里,至今才得以将其移除)。该书作为普及概念的入门书还是挺好的,本文也只是介绍一下SDN的概念,很多文字都是引用了其中的内容。

什么是SDN

Software Defined Network,即软件定义网络。对于其起源与发展请参考微信公众号上的一文 《SDN软件定义网络从入门到精通》导论课

书中提及,SDN主要有三个特征:

  1. 网络开放可编程(核心特征):SDN建立了新的网络抽象模型,为用户提供了一整套完整的通用API,使用户可以在控制器上编程实现对网络的配置、控制和管理,从而加快网络业务的部署。
  2. 控制平面与数据平面的分离:此处的分离是指控制平面与数据平面的解耦合。控制平面有数据平面之间不再相互依赖,两者可以独立完成体系结构的演进,类似与计算机工业的Wintel模式,双方只需要遵循统一的开放接口进行通信即可。控制平面与数据平面的分离是SDN区别于传统网络体系结构的重要标志,是网络获得更多可编程能力的架构基础。
  3. 逻辑上的集中控制:主要是指对分布式网络状态的统一集中管理。在SDN架构中,控制器会负担起收集和管理所有网络状态信息的重任。逻辑集中控制为软件编程定义网络功能提供了架构基础,也为网络自动化管理提供了可能。

  其中控制平面与数据平面分离为逻辑集中控制创造了条件,逻辑集中控制为开放可编程控制提供了架构基础。

那么这就解决了我这个小白的一个小疑问:既然是软件定义网络(SDN),那么实现一个软件能够操纵网络算不算是SDN? 那么答案显然是不算了,这样最多只能算是软件控制网络。

需要一提的是这里的控制平面是指提供给网络管理人员使用TELNET、SSH等方式来管理设备的方式的一个抽象概念。

那么什么是数据平面?什么又是控制器?接着往下看👇

SDN的结构

SDN网络体系结构主要包括五部分:

  1. SDN网络应用:它实现了对应的网络功能应用。这些应用程序通过调用SDN控制器的北向接口,实现对网络数据平面设备的配置、管理和控制。
  2. 北向接口:它是SDN控制器与网络应用之间的开放接口,它将数据平面资源和状态信息抽象成统一的开放编程接口。
  3. SDN控制器:它是SDN的大脑,也称为网络操作系统。控制器不仅要通过北向接口给上层网络应用提供不同层次的可编程能力,还要通过南向接口对SDN数据平面进行统一配置、管理与控制。
  4. 南向接口:它是SDN控制器与数据平面之间的开放接口。SDN控制器通过南向接口对数据平面进行编程控制,实现数据平面的转发等网络行为。所以可以将其理解为数据平面的编程接口。
  5. SDN数据平面:数据平面在SDN中负责数据处理、转发和状态收集等方面,其核心设备为交换机。它包括基于软件实现的(如虚拟交换机)和基于硬件实现的(如物理交换机)数据平面设备。数据平面设备通过南向接口接偶数来自控制器的指令,并按照这些指令完成特定的网络数据处理。同时,SDN数据平面设备也可以通过南向接口给控制器反馈网络配置和运行时的状态信息。

SDN可以大致分为三层,最上面是SDN网络应用,然后中间是SDN控制器,它们两个之间通过北向接口相连;最下面是SDN数据平面,它与控制器之间通过南向协议相连。

SDN体系结构图

为什么需要SDN

因为我们需要支持快速增长的网络业务需求,所以需要拥有更多可编程能力的网络。

众所周知,相比发展迅速的计算机产业,网络产业的创新十分缓慢。每一个创新都需要等待数年才能完成技术标准化。为了解决该问题,SDN创始人Nick McKeown教授对计算机产业的创新模式和网络产业的创新模式进行了研究与对比。他总结出支撑计算机产业快速创新的三个因素:

  1. 计算机工业找到了一个面向计算的通用硬件底层:通用处理器,这使得计算机的功能可以通过软件定义的方式来实现。
  2. 计算机功能的软件定义方式带来了更加灵活的编程能力,使得软件应用的种类得到了爆炸式增长。
  3. 计算机软件的开源模式,催生了大量的开源软件,加速了软件开发的进程,推动了整个计算机产业的快速发展。

相比之下,传统的网络设备与上世纪60年代的IBM大型机类似。网络设备硬件、操作系统和网络应用三部分高耦合在一起组成了一个封闭的系统,这三部分相互依赖,通常隶属于同一家网络设备厂商,每一部分的创新与演进都要求其余部分做出同样的升级,这样的架构严重阻碍了网络创新进程的开展。

在这种思路的影响下,McKeown教授团队提出了一个新的网络体系结构:SDN,它对传统网络系统的三部分进行了重新划分,在每一层之间建立统一的开放接口,这样就相当于提供了通用的底层平台。

赘述

所以SDN到底是什么呢?因为如今网络业务的激增,我们需要拥有更多可编程能力的网络,于是有人就对此进行了分析,他们发现问题的根源在于传统网络对于创新开发的限制太大了,因为根本没有统一的接口或者通用的底层来支持网络上的开发,都是由交换机来负责转发具体的流量到具体的目的节点,如果我想自己实现一些功能就得从底层开始写。所以他们利用解耦的方式将传统网络的数据与控制分离开来,将数据平面变得更加的通用化,这样数据平面(交换机)就只负责数据的转发,到底怎么转发是由控制器来告诉它的,这里控制器就扮演了通用底层的角色。所以数据平面通用化后只需要接受来自控制平面(控制器)的命令并执行就可以了。

而南向协议就是定义了数据平面的编程接口,直接决定了数据平面的可编程能力,他来协调控制器与数据平面。具体的控制逻辑全部集中到控制器实现(更高层的逻辑功能则由SDN网络应用来定义),所谓北向接口就是最后由控制器对外开放调用的API。

SDN网络应用则由需要管理控制网络人,也就是具体的开发者、使用者来实现,你要做什么功能的软件、实现什么样的逻辑功能,我北向接口提供的所有API都在这里,你要用什么你就从里面调用就好了。

对于SDN的理解,还推荐知乎上一位大佬的回答,很形象的比喻👇

传统网络就像真人在踢足球,每个人自己思考下一步把球传到哪儿,然后自己用头或者脚传出去。SDN就像你在打实况足球,球员怎么传球都是集中由你来控制。这就叫控制面和转发面的分离,并且控制面集中起来。集中后的控制面叫做控制器,类似游戏手柄。控制器之上就是软件,来操作控制器具体怎么处理。就像你聪明的大脑来控制游戏手柄。open flow就是控制器与网络设备沟通时的语言。
陈博 SDN 是什么?