软件定义网路核心原理与应用实践(一)


本书为北京邮电大学黄韬老师主编。本书的电子版不在网上流通。

本文笔记转发必须征得本人同意。

SDN概述

网络最初设计的目标只是实现单纯的端到端数据传送,IP 数据分组主要包含源主机和目的主机的网络地址,互联网中几乎所有的流量都是建立在 TCP/IP 架构之上,尽管设备性能上有了飞跃性的提高,但网络本身的架构却没有什么突破性的变化。然而随着网络中传输的流量越来越大,业务应用对网络的要求越来越高,传统的依靠端到端连接和尽力而为路由转发的网络体系架构,越来越难以满足日益出现的新需求。正如上面提到的亚马逊多租户数据中心应用场景,其对网络提出了更高的需求,它要求不同租户网络间的高度隔离性,以保证各租户差异性的服务质量(QoS),显然如果只依靠端到端的传统网络是难以满足这种需求的。为了解决租户之间的隔离性问题和更复杂的网络需求,在这些年中,各种新技术层出不穷。例如,VLAN(Virtual LAN,虚拟局域网)技术就是为了解决二层局域网内的隔离性问题而提出的,它主要采用 VLAN 标签的方法隔离网络中的不同用户,但是由于标签数量有限,因此在大规模的网络中,VLAN 技术不能很好的工作,于是近年来业界又进一步提出了 VXLAN(Virtual eXtensible LAN)、NVGRE 等改进的网络虚拟化技术。

由于厂商设备的封闭性 ,研究人员和管理人员事实上根本无法添加并实现自己新的协议,由此推动了业界 ForCES(Forwarding and Control Element Separation,转发控制单元分离)和 RCP(Routing Control Platform,路由控制平台)两种新技术的产生。 核心理念是通过尝试分离网络设备的控制逻辑和转发逻辑,并采用标准的接口 API,以提高灵活性。 【最终还是因为厂商不愿意开放推动失败】

2006年,斯坦福的Martin Casado着手Ethane的项目,在该系统架构种,控制与转发完全解耦,控制器通过Pol-Ethane语言向交换机分发策略。实际上成为了SDN的雏形。2007年,Martin 联合 Nick McKeown、Scott Shenker 创建了一个致力于网络虚拟化技术创新的公司——Nicira,最早提出了SDN的概念。08年,Nick在sigcom会议发表了openflow, OpenFlow协议是为了简化 Ethane 项目中的交换机设计而被提出的,它是一个控制平面和数据平面之间的交互协议,它使得控制和转发完全分离,从而控制器专注于决策控制,而交换机完全专注于转发工作。

2013年,google将利用SDN技术解决数据中心之间流量问题的方案公布——B4:Experience with aGlobally-Deployed Software Defined WAN

SDN 系统架构分为一个集中式的控制平面(通常是控制器)和分布式的数据平面,控制器位于上层应用与物理设备之间,控制器首先负责把网络中的各种功能进行抽象,建立具体的操作模型,并向上层提供编程接口,上层应用着重根据业务需求通过控制器与物理设备进行交互,网络中的设备通过控制器向应用平面传递信息。SDN 的两个突出属性是数据平面和控制平面分离以及网络的可编程性

SDN基本原理

2.1 SDN定义与架构

2.1.1 SDN定义

SDN 与传统网络的最大区别就在于可以通过编写软件的方式来灵活定义网络设备的转发功能。在传统网络中,控制平面功能是分布式地运行在各个网络节点(集线器(Hub)、交换机(Switch)、路由器(Router))中的,因此新型网络功能的部署需要所有相应网络设备的升级,导致网络创新往往难以落地。而 SDN 将网络设备的控制平面与转发平面分离,并将控制平面集中实现,这样新型网络功能的部署只需要在控制节点进行集中的软件升级,从而实现快速灵活地定制网络功能。另外,SDN 体系架构还具有很强的开放性,它通过对整个网络进行抽象,为用户提供完备的编程接口,使用户可以根据上层的业务与应用个性化地定制网络资源来满足其特有的需求。由于其开放可编程的特性,SDN 有可能打破某些厂商对设备、协议以及软件等方面的垄断,从而使更多的人可以参与到网络技术的研发工作中来 。

软件定义网路核心原理与应用实践(一)

SDN采用了集中式的控制平面与分布式的转发平面,控制平面利用控制—转发通信接口对转发平面上的网络设备进行集中式控制,并向上提供灵活的可编程能力。

软件定义网路核心原理与应用实践(一)

SDN架构中,控制器通过控制—转发通信接口对转发平面上的网络设备进行集中式控制,这部分控制信令的流量发生在控制器与网络设备之间,独立于终端间通信产生的数据流量,网络设备通过接收控制信令生成转发表,不再使用复杂的分布式网络协议来决策数据转发。

SDN不是一种网络协议,是一种网络体系架构,包含多种接口协议

2.1.2 SDN架构

1.数据平面

若干网元(Network Element)组成,每个网元可以包含一个或多个SDN Datapath,是一个被管理的资源在逻辑上的抽象集合。每个 SDN Datapath 是一个逻辑上的网络设备,它没有控制能力,只是单纯用来转发和处理数据,它在逻辑上代表全部或部分的物理资源,可以包括与转发相关的各类计算、存储、网络功能等虚拟化资源。

2.控制平面

SDN控制器。逻辑上集中的实体,承担两个任务:一是将SDN应用层请求转到SDN datapath,而是为SDN应用提供底层网络的抽象模型(状态or事件)。一个SDN控制器包含,北向接口NB代理,SDN控制逻辑,控制数据平面接口驱动。

所有控制器实例可以在同一位置,也可以是多个实例分散在不同位置。

3.应用平面

由若干SDN应用构成。一个SDN应用可以包含多个北向接口驱动,同时SDN应用也可以对本身的功能进行抽象、封装来对外提供北向代理接口,形成了更高级的北向接口。

4.管理平面

主要负责一系列静态的工作,比较适合在应用、控制、数据平面外实现,例如,进行网元初始配置,指定SDN datapath控制器,定义SDN控制器,SDN应用的控制范围。

几个平面之间的接口实现都由驱动和代理配对构成,driver-agent,其中代理运行在南向的、底层的部分,而驱动则表示运行在北向的、上层的部分。

1.SDN控制数据平面接口 CDPI

对所有转发行为进行控制、设备性能查询、统计报告、时间通知等。SDN一个非常重要的价值就体现在CDPI实现上,它应该是一个开放的、与厂商无关的接口

2.北向接口 NBI

负责提供抽象的网路视图,使应用能直接控制网络的行为。

SDN 控制器负责收集网络的实时状态,将其开放并通知给上层应用,同时把上层应用程序翻译成更为底层、低级的规则或者设备硬件指令下发给底层网络设备。考虑到可扩展性、可靠性等问题,SDN 控制器可以不是物理上集中的,而是可以通过分布式的多个控制器实例协同工作来实现逻辑上的集中。通过 SDN 架构,控制策略建立在整个网络视图之上,而不再是传统的分布式控制策略,控制平面演变成了一个单一、逻辑集中的网络操作系统,这个操作系统可以实现对底层网络资源的抽象隔离,并在全局网络视图的基础上有效解决资源冲突与高效分配问题。

2.2 数据控制分离

传统网络中节点内部,数控一直分离,分布在同一个网络设备的机箱中,独立开来的处理器或存储卡上。

软件定义网路核心原理与应用实践(一)

从功能来看,控制平面是建立本地数据的结合,路由信息库RIB,RIB需要与网络内其他控制平面实例的信息保持一致,通常使用分布式路由协议 OPSF\BGP 等来完成; 控制平面需要基于 RIB 创建转发表,用于指导设备出入端
口之间的数据流量转发。 ,转发信息库FIB,FIB需要在设备的控制和数据平面进行镜像,以保证转发行为与路由决策一直。

  1. 控制平面
    二层控制平面,关注硬件或MAC地址。
    三层控制平面,关注网络层寻址与转发,主要关注网络地址,如IPv4/v6。

代表 IP 子网的二层交换机通常是与三层路由器连接在一起以形成较大规模的网络,这些较大规模的网络间通过网关路由器连接。然而,在大多数情况下,路由器仅在三层网络之间传递数据流量,只有得知报文已经到达目标主机所在的三层网络时,才会在二层将数据转发给特定的目标主机。

  1. 数据平面
    首要工作是通过一系列链路级操作采集传入的数据分组,并执行基本的完整性检查。接着, 数据平面要查找FIB表,FIB已经通过控制平面生成,并通过镜像复制到数据平面,识别数据分组的目的地址,快速数据分组处理。 不再需要每次都到控制平面进行查询匹配。

    数据平面的查表:硬件查表,通用处理器查表。

ovs的开源虚拟交换软件的出现以及高性能服务器技术的进步,为创建逻辑上集中式的路由控制器原型降低了门槛。openflow更加明确地提出了数控分离的概念。

2.2.2 SDN 数控分离

传统多交换网络中实现流量优先级等功能,配置工作必须按照某种方式在每个单独的交换设备上重复、无遗漏地完整做一遍。SDN以网络设备的FIB表为界分割数据控制平面,其中交换设备只是一个轻量级的、哑的数据平面,仅保留FIB和高速交换转发能力,而上层的控制决策全部由远端的统一控制器节点完成。数控平面直角采用SDN南向接口协议相连接,这个协议将提供数据平面可编程性。

挑战:

  1. 采用逻辑集中控制,对数据平面采用开放式接口。
  2. 需要解决分布式的状态管理问题。

数控分离不是一个新概念,当前设备在逻辑上数控是分离的,SDN的创举在于物理距离也可以分离,并通过一个开放的接口协议相互连接。——同时也会产生性能问题。

优点:

  1. 全局集中控制与优化;
  2. 灵活可编程与高速转发相结合;
  3. 开放性和IT化

2.3 网络可编程

对设备而言,网络可编程是,开发人员是通过编译代码直接控制这些硬件来实现自己的协议或者功能。

SDN中,通过高级的编程能力实现与网络设备的双向交互,通过软件更方便灵活地管理网络。这种编程性事基于整个网络的。

2.3.2网络可编程历史

主动网络 active networking 打破传统网络只能被动传输信息的模式,允许网络中的个节点在用户数据上执行用户所需的计算。

主动网络允许开发者把具体的代码下发到交换设备或者在数据分组中添加可执行代码

主动网络包含

  1. 封装模型
    节点可执行代码被封装在数据分组内,in-band方式; 主动网络封装报文的一种格式,其中包含了 IP 报文、可执行的程序码和用户数据,交换设备会根据原先的源目的地址来转发报文。

  2. 可编程路由器/交换机模型

    节点可执行代码与数据分组分离,out-of-band方式; 当数据通过传统的设备时,报文只是被简单地转发不做任何修改;而当数据报文通过主动网络节点时,节点能够根据用户定义的行为对数据报文进行计算与操作。

2.3.3 SDN可编程

通过为开发者们提供强大的编程接口,从而使网络有更好的编程能力。

对上层应用开发者,SDN的编程接口主要体现在北向接口上,北向接口提供一系列丰富的API。

SDN 南向接口用于控制器和转发设备建立双向会话,通过不同的南向接口协议,SDN 控制器就可以兼容不同的硬件设备,同时可以在设备中实现上层应用的逻辑。SDN 的东西向接口主要用于控制器集群内部控制器之间的通信,用于增强整个控制平面的可靠性和可拓展性。

软件定义网路核心原理与应用实践(一)

  1. 北向接口是直接为上层业务应用服务的,设计需要密切考虑业务应用的需求。 北向接口方面还缺少一个业界公认的标准,不同的控制器厂商都有各自的北向接口。
  2. 南向接口协议是集中式的控制平面和分布式的转发设备之间交互的接口协议,用于实现控制器对底层转发设备的管控。
  3. SDN的控制平面可以使分布式的。 目前在 SDN的东西向接口的研究方面,产业界还没有形成统一的标准,学术界更多地是从多种控制器处理机制的异同以及语言效率的角度,抽象出统一的控制器东西向接口协议及其消息封装格式,并在发送和接收控制消息时进行容错率校验和解析,实现基础设施透明的多控制器并存模式下的组网。