随着互联网和数据中心流量的爆炸式增长,SDN 已经逐步取代静态路由交换设备成为构建网络的主流方式,本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版,完整介绍了 SDN 的概念、原理、架构和实现方式。原文: Software-Defined Networks: A Systems Approach
第 2 章 用例
理解 SDN 价值的最好方式是了解其在实践中的应用,同时也有助于理解前一章所说的"标准(pure play)"以及"混合/简化(hybrid/lite)"SDN 的不同含义。但是在讨论如何使用 SDN 之前,我们先介绍一下谁在使用。
首先,SDN 已经被云提供商接受并广泛部署,谷歌、Facebook 和微软都已经公开采用了 SDN。虽然他们的平台和解决方案仍然主要是专有的,但都开源了独立组件,以促进更广泛的采用,后面的章节将讨论这些独立组件。
其次,大型网络运营商如 AT&T、DT、NTT 和 Comcast 都公开谈论过计划部署基于 SDN 的解决方案,特别是计划在接入网中部署。但他们比较谨慎,无论是使用混合部署模式还是标准 SDN,都刚刚开始投入生产。其中特别值得注意的是 Comcast,已经在生产网络中部署了本书描述的开源组件。
最后,企业客户也已经开始采用 SDN,但是关于这种情况有两点需要注意。其一,虽然某些大学部署了标准 SDN,以支持研究和创新为目标,但总体而言,企业采用 SDN 的速度较慢。企业采用标准 SDN 最可能的途径是通过云提供商提供的托管边缘服务,这个想法是将运行边缘工作负载的内部集群与运行可伸缩数据中心工作负载的公有云连接起来。其二,许多企业级 SDN 供应商提供的 SDN 产品的重点是集中化的逻辑控制平面,而不是数据平面开放接口。网络虚拟化和 SD-WAN(软件定义广域网, software-defined wide area networks)在企业中都取得了相当大的成功,接下来我们将介绍这一部分。
2.1 网络虚拟化(Network Virtualization)
第一个被广泛采用的 SDN 用例是网络虚拟化。虚拟网络,包括虚拟私有网络(VPN, Virtual Private Network) 和虚拟局域网(VLAN, Virtual Local Area Network),多年来一直是 Internet 的组成部分。历史证明,VLAN 在企业网中很有用,用于隔离不同的组织,如部门或实验室,使每个组织看起来都有自己的本地局域网一样。然而,这些早期形式的虚拟化在规模上相当有限,无法发挥 SDN 的许多优势。可以将其看作虚拟网络地址空间,而没有虚拟网络的其他属性,比如防火墙策略或负载均衡等高级网络服务。
基于 SDN 创建虚拟网络的最初想法主要归功于 Nicira 团队,Teemu Koponen 及其同事在 NSDI 的一篇论文中介绍了这一方法。其关键见解是,现代云需要能够通过编程创建、管理和删除网络,而不需要系统管理员手动配置(例如手动在交换机上配置 VLAN 标签)。通过将控制平面与数据平面分离,并在逻辑上集中控制平面,可以公开用于创建、修改和删除虚拟网络的单一 API 入口。这意味着,过去用于在云中提供计算和存储的自动化系统(例如当时的 OpenStack),现在可以通过编程方式提供具有适当策略的虚拟网络,以连接其他资源。
延伸阅读:
T. Koponen et al. Network Virtualization in Multi-tenant Datacenters. NSDI, April, 2014.
随着网络虚拟化的兴起,计算虚拟化也随之兴起,并在很大程度上得益于网络虚拟化。计算虚拟化使服务器手动配置成为过去式,并将手动、耗时的网络配置过程这一云服务交付的最大问题暴露了出来。虚拟机迁移(允许运行中的 VM 从一个网络位置迁移到另一个)进一步暴露了手动配置网络的局限性。这种网络配置自动化的需求首先被大型云提供商所认识,并最终成为企业数据中心的主流。
随着微服务和基于容器的系统(如 Kubernetes)的普及,网络虚拟化也在不断发展,以满足这些环境的需求。有一系列开源网络"插件"(Calico、Flannel、Antrea 等)为 Kubernetes 提供网络虚拟化服务。
由于网络虚拟化开始以编程的方式交付整套网络服务,其影响超出了网络配置简化和自动化的范畴。随着虚拟网络成为轻量级对象,根据需要创建和销毁虚拟网络,并提供全套服务(如有状态防火墙、深度包检测等),一种新的网络安全方法得以启用。与其在创建网络之后添加安全特性,不如将安全特性内建为网络本身固有的一部分。此外,由于可以创建的虚拟网络数量没有限制,被称为微分段(microsegmentation) 的方法开始流行。这一方法要求创建细粒度、独立的网络(微段, microsegment),从而满足一组特定的分布式应用程序进程的需求。与以前的网络安全方法相比,微分段提供了明显的好处,极大减少了攻击面,降低了可能蔓延到整个企业或数据中心的攻击的影响。
值得注意的是,要像我们所描述的那样创建虚拟网络,必须封装来自虚拟网络的数据包,使其能够穿越底层物理网络。作为一个简单的例子,虚拟网络可以有自己的私有地址空间,与底层物理地址空间解耦。由于这个原因,虚拟网络使用了一系列封装技术,其中 VXLAN(在第一章中简要讨论过)可能是最著名的。近年来,出现了一种更灵活的封装,称为通用网络虚拟化封装(GENEVE, Generic Network Virtualization Encapsulation)。
图 9. 网络虚拟化系统示例
典型的网络虚拟化系统如图 9 所示。网络虚拟化控制器(Network Virtualization Controller)是一个公开了北向接口 API 的 SDN 控制器,通过这个 API 可以创建、监控和修改网络,并连接到运行在主机(本例中是支持虚拟机的 hypervisor)上的虚拟交换机。通过对虚拟交换机进行编程来创建虚拟网络,通过适当的封装,从而通过底层网络实现主机到主机的数据包转发。
网络虚拟化是否真的是 SDN,仍然存在争论。当然,它显示了我们在前一章中讨论过的许多属性,原始的 Nicira 网络虚拟化平台甚至使用 OpenFlow 在其中央控制器和数据平面组件之间进行通信。SDN 的集中化优势是使网络虚拟化成为可能的核心,特别是推动了网络自动化的发展。另一方面,网络虚拟化并没有真正实现 SDN 所设想的网络解耦: 网络虚拟化系统中的控制器和交换机通常使用专有信令而不是开放接口进行紧密集成。由于网络虚拟化的重点一直是连接虚拟机和容器,因此通常将其实现为这些抽象的计算服务器之间的 overlay,位于 overlay 之下的是物理网络,网络虚拟化将其直接拿来使用(而且物理网络根本不需要实现 SDN)。
我们将在 3.1 节(概述 SDN 整体架构)和第 8 章(更详细的介绍网络虚拟化)中介绍 SDN 在交换机和主机中的实现的不同点。
让 SDN 走进生活
正如第一章所说,SDN 背后的想法已经酝酿了多年,但回顾过去,有两个相关事件对可编程网络概念从理论到实践产生了重大影响。首先是 2007 年成立的商业初创公司 Nicira Networks。Nicira 由三位公认的 SDN 先驱创立: Martin Casado, Scott Shenker 和 Nick McKeown。虽然 Nicira 的成立是为了将 SDN 商业化,但与许多初创公司一样,花了很长时间才找到适合市场的产品。最终,网络虚拟化成为 SDN 的第一个成功应用。Nicira 的网络虚拟化平台于 2011 年首次发布,确立了这一细分市场,并最终为 VMware 的收购以及随后开发 VMware NSX 铺平了道路。
大约在同一时间,McKeown 和 Shenker 还创建了三个非营利组织,以催化整个网络行业的 SDN 转型: 开放网络基金会(ONF, Open Networking Foundation)负责推进网络解耦,并开发了 OpenFlow 标准; 开放网络实验室(ON.Lab, Open Networking Laboratory)是为了生产基于 SDN 的开源解决方案和平台而创建; 开放网络峰会(ONS, Open Networking Summit)是一个会议平台,将对 SDN 感兴趣的学者和从业者聚集在一起。2018 年,ONF 和 ON.Lab 合并,并且合并后的组织已经专注于构建本书将重点介绍的开源软件。
当然,还有许多其他初创公司、会议和财团推动了 SDN 的发展,使其发展到今天的地步,可以在本章中看到他们工作的影响。
2.2 交换网络(Switching Fabrics)
标准 SDN 的主要用例在云数据中心内,在那里,由于降低成本和提高特性交付速度的原因,云提供商已经放弃了专有交换机(即那些传统上由网络设备供应商出售的交换机),转而支持使用商用硅交换芯片构建的裸金属交换机。云提供商得以控制交换网络(switching fabric),通过软件将服务器相互连接。这是我们在本书中深入探讨的用例,因此现在只做简短介绍。
数据中心交换网络通常是根据叶脊(leaf-spine) 拓扑结构设计的网络,图 10 所示的 4 个小型机架网络示例说明了其基本思想。每个机架都有一个连接该机架中服务器的机顶(ToR, Top-of-Rack)交换机,这些被称为网络的叶(leaf) 交换机。(为了保障可靠性,每个机架通常有两个这样的 ToR 交换机,但为了简单起见,图中只显示一个。)然后,每个叶交换机连接到一组可用的脊(spine) 交换机,这里需要满足两个需求: (1)任何一对机架之间有多条路径,(2)每两个机架之间路径都是两跳(即通过一个中间脊交换机)。注意,这意味着在图 10 所示的叶脊网络设计中,每两个服务器之间路径要么是两跳(在机架内的情况下是 server-leaf-server),要么是四跳(在机架间的情况下是 server-leaf-spine-leaf-server)。
图 10. 云数据中心和其他集群(如企业边缘云)常见的叶脊交换结构示例。
网络主控软件在服务器机架中设置 L2 转发(桥接),在机架之间设置 L3 转发(路由)。在叶脊网络中,使用 L3 下连至 ToR 交换机是众所周知的概念,主要是因为 L3 比 L2 的伸缩性更好。在这种情况下,ToR 通过等价多路径(ECMP, Equal-Cost Multipath) 将 IP 流哈希到不同的棘节点来路由转发流量。因为每个 ToR 与其他 ToR 之间有 2 跳的距离,所以存在多条这样的等价路径。(在内部,控制软件利用类似 MPLS 的标签交换的概念。)控制软件还提供 L2 桥接,因为需要支持通过 L2 网络通信的遗留工作负载。实现叶脊网络结构还有很多细节,我们将在第 7 章提供更完整的描述,那时我们将介绍 SD-Fabric 实现的细节。
2.3 广域网流量工程(Traffic Engineering for WANs)
另一个受云启发的用例是应用于数据中心之间广域链接的流量工程。例如,谷歌公开介绍了其完全基于裸金属交换机和 SDN 构建的私有骨干网 B4,微软也介绍过一种称为 SWAN 的数据中心互连方法。B4 和 SWAN 的核心组件是流量工程(Traffic Engineering, TE) 控制程序,该程序根据各种应用的需求配置网络。
包交换网络流量工程的想法几乎和包交换本身一样古老,在阿帕网中就尝试过一些流量感知路由的想法。然而,直到出现了 MPLS,流量工程才真正成为互联网主干网络的主流,MPLS 提供了一套工具来引导流量在不同路径上均衡负载。然而,基于 MPLS 的流量工程存在一个显著缺点,就是路径计算和传统路由一样是完全分布式过程。虽然中心化规划工具很常见,但 MPLS 路径的实时管理仍然是完全分布式的。这意味着几乎不可能实现任何形式的全局优化,因为路径计算算法(会在任何链接状态变化或网络负荷变化的时候启动),只能在局部选择看起来最好的路径。
考虑图 11 中的示例,假设所有链路都提供一个单位的容量,我们试图为三个单位的流量找到路径。在左边的图中,流 A 首先被调度,并从两条可用的最短路径中选择了一条。然后流 B 被调度,因为单跳路径已经被流 A 填充,其选择了剩下的最短路径。当流 C 最后被调度时,除了长路径之外已经没有其他选择。但是,如果有中心化算法同时查看所有三个流,并试图优化其调度,就会得到图右所示的更优化的路径集。虽然这是一个人为的例子,但在没有中心化流量视图的情况下,图示的次优结果不可避免。
图 11. 非最优流量工程的例子(左)和最优布局(右)。
B4 和 SWAN 认识到了这一缺陷,因此将路径计算转移到逻辑上集中的 SDN 控制器上。例如,当一条链路发生故障时,控制器会通过计算将流量映射到一条新的可用链路上,并通过编程使交换机转发流量时不会出现链路过载。
经过多年运作,这些方法已经变得更加复杂。例如,B4 从平等对待所有流量发展到支持一系列对延迟和可用性需求具有不同容忍度的流量类别。流量类别的例子包括: (1)将用户数据(如电子邮件、文件、音频/视频)复制到远程数据中心以获得可用性; (2)运行在分布式数据源上的计算访问远程存储; (3)跨多个数据中心同步状态产生的大量数据。在本例中,用户数据表示 B4 上最小的卷,对延迟最敏感,优先级最高。通过将流量分成具有不同属性的类,并为每个类运行路径计算算法,能够显著提升网络效率,同时仍然满足最苛刻的应用需求。
集中决策过程、通过编程限制发送端流量和区分流量类别的组合,谷歌能够将链路利用率提高到接近 100%。这比广域网链路通常提供的 30-40%的平均利用率高出 2-3 倍,这对处理流量突发和链路/交换机故障非常有必要。据报道,微软使用 SWAN 的经验与此类似。这些超大规模的 SDN 应用经验展示了自定义网络的价值以及通过集中控制改变网络抽象的能力。Amin Vahdat、Jennifer Rexford 和 David Clark 的对话中,对采用 SDN 的思考过程提出了特别深刻的见解。
延伸阅读:
A. Vahdat, D. Clark, and J. Rexford. A Purpose-built Global Network: Google’s Move to SDN. ACM Queue, December 2015.
2.4 软件定义广域网(Software-Defined WANs)
SDN 另一个面向企业用户的用例是软件定义广域网(SD-WAN, Software-Defined Wide-Area Network)。为了获得可靠的专用网络服务,以便将不同位置(总部、分支机构和企业数据中心)互连起来,企业多年来一直在从电信公司购买 WAN 服务。在 21 世纪的大部分时间里,建立这些网络最常见的技术是 MPLS,基于一种被称为 MPLS-BGP VPN 的技术。SD-WAN 作为 MPLS 的替代品的迅速崛起是集中控制的另一个例子。
基于 MPLS 提供 VPN,虽然比大多数早期选项要简单,但仍然需要对每个客户站点上的客户边缘(Customer Edge, CE)路由器和连接该站点的运营商边缘(Provider Edge, PE)路由器进行一些重要的本地配置。此外,通常需要提供从客户站点到最近接入点的电路连接。
通过 SD-WAN,人们认识到可以集中配置 VPN。企业望其站点(且仅授权站点)相互连接,并且通常希望应用一组有关安全性、流量优先级、访问共享服务等的策略。这些数据可以输入到中央控制器,然后中央控制器可以将所有必要的配置推送到位于相应办公室的交换机上,而不用在每次接入新站点时手工配置 CE 和 PE,从而实现"零接触(zero-touch)"配置: 设备运送到新站点只需要提供一个证书和一个地址,然后连接中央控制器以获得所需的所有配置。可能影响许多站点的策略更改可以集中输入,并将其推送到所有受影响的站点,例如"将 YouTube 流量置于最低优先级流量类别"或"允许从所有分支机构直接访问给定云服务"。图 12 说明了这个思想。
图 12. SD-WAN 控制器集中接收策略,并将策略推送到各个站点的边缘交换机。交换机在互联网或其他物理网络上建立隧道 overlay,并执行包括允许直接访问云服务在内的策略。
请注意,VPN 的"私有"部分通常通过在站点之间创建加密隧道来实现。这是另一个使用传统配置手段让人非常痛苦的例子,但当所有交换机都从中央控制器接收配置时,就很容易实现。
许多外部因素开始发挥作用,使 SD-WAN 成为引人注目的选择。其中一个原因是普遍的宽带互联网接入,这意味着不再有理由提供专用电路来连接远程站点,从而可以节约相应的安装时间和成本。但在这之前,必须首先解决隐私问题,因此需要使用集中管理的加密隧道。另一个原因是对 Office365 或 Salesforce.com 等云服务的日益依赖,这些服务往往会取代企业数据中心的本地应用程序。分支机构选择通过 Internet 连接直接访问这些服务似乎很自然,但传统 VPN 在将通信发送到 Internet 之前会将其反向传输到一个中心站点,以便集中控制安全性。使用 SD-WAN,实现了对安全策略的中央控制,同时数据平面仍然是完全分布式的,这意味着远程站点可以直接连接云服务,而不需要通过中心站点,这是分离控制平面和数据平面从而产生新的网络架构的又一个例子。
与其他用例一样,SD-WAN 不一定能完成 SDN 所承诺的一切。控制平面到数据平面的通信通道往往是专有的,而且,与网络虚拟化一样,SD-WAN 解决方案是运行在传统网络之上的 overlay 网络。然而,SD-WAN 开辟了一条创新之路,因为边缘设备和控制平面都在软件中实现,集中化提供了解决老问题的新方法。此外,SD-WAN 市场的参与者之间存在着大量竞争。
2.5 接入网络(Access Networks)
将家庭、企业和移动设备连接到互联网的最后一英里的接入网络是应用 SDN 原则的另一个机会。接入网技术包括无源光网络(PON, Passive Optical Network),俗称光纤到家,以及位于 4G/5G 蜂窝网络核心的无线接入网(RAN, Radio Access Network)。
这些用例的有趣之处在于,与其他用例(将通用交换机开放给可编程控制)不同,接入网通常是由专用硬件设备构建的。挑战在于如何将这些专有设备转化为商用裸金属设备,这样就可以被软件控制。对于像 PON 这样的有线网络,有两种设备: 光纤终端(Optical Line Terminal, OLT) 和宽带网络网关(Broadband Network Gateway, BNG)。蜂窝网络还有两个相关的传统组件: eNodeB(RAN 基站) 和增强分组核心网(EPC)。如果不熟悉这些缩写词,可以在网上找到简短的介绍。
延伸阅读:
Access Networks. Computer Networks: A Systems Approach, 2020.
这些都是专门的设备,技术封闭、硬件专有,似乎是应用 SDN 原则的最坏例子。但这也意味着获得最大回报的机会,正是因为这个原因,大型网络运营商正在积极寻求软件定义的 PON 和 RAN 网络。这一倡议有时被称为 CORD(Central Office Re-architected as a Datacenter),并一直是许多商业分析的主题,包括 A.D. Little 的一份综合报告。
延伸阅读:
Who Dares Wins! How Access Transformation Can Fast-Track Evolution of Operator Production Platforms. A.D. Little Report, September 2019.
像 CORD 这样的活动其核心挑战是解耦现有传统设备,以便将底层包转发引擎(数据平面中心组件)与控制平面隔离开来,这样就有可能将前者打包为商品硬件,并在软件中实现后者。
基于 PON 的接入网解耦已经取得了相当大的进展,目前正在生产中部署一种名为 SEBA(SDN-Enabled Broadband Access) 的解决方案。完整细节超出了本书范围,但总体思路是将裸金属 OLT 设备添加到类似于图 10 所示的集群中,从而产生如图 13 所示的配置。换句话说,集群包括计算服务器和访问设备的混合,通过交换结构相互连接。就像开放计算项目(OCP, Open Compute Project) 已经认证 d 的裸金属以太网交换机一样,现在也认证裸金属 OLT 设备。网络交换机和访问设备都由软件定义的控制平面控制,实现该控制平面的代码运行在服务器集群上。
此外,当使用带有可编程流水线的交换机构建网络时,可以将传统硬件最初提供的某些功能编程到组成网络的交换机中。例如,等效于运行在通用处理器上的虚拟网络功能(VNF, Virtual Network Function) 的 BNG 功能,可以直接编程到可编程交换机中。因为将包处理过程从计算服务器转移到了交换机中,这种做法有时被称为 VNF 卸载(VNF off-loading)。这是交换机数据平面可编程的一个很好的例子: 开发人员编写的软件能够以新的和意想不到的方式利用硬件。
图 13. SEBA 通用硬件架构: SDN-Enabled Broadband Access
软件定义无线接入网(SD-RAN, Software-Defined Radio Access Network) 的进展滞后于软件定义宽带,早期系统已开始在试验部署中运行。解耦 RAN 是更大的挑战,但回报可能也会更大,因为有可能会产生 5G 赋能的边缘云。我们在第 9 章会再次讨论 SD-RAN,但是为了更广泛理解如何根据 SDN 原则实现 5G,推荐一本配套书籍。
延伸阅读:
L. Peterson and O. Sunay. 5G Mobile Networks: A Systems Approach. June 2020.
中文版: 写给互联网工程师的5G书
至少可以说,将 SDN 原则应用到光纤和移动接入网的努力,是从本书介绍的相同构建组件开始的。我们将重点介绍 SDN 软件栈怎样"插入"软件定义接入网,更完整的讨论将在第 9 章中展开。
2.6 网络遥测(Network Telemetry)
我们通过最后一个例子来结束 SDN 用例概述,这个例子是通过引入可编程转发流水线而实现的: 带内网络遥测(INT, In-Band Network Telemetry)。INT 的思想是对转发流水线进行编程,以便在处理数据包时收集网络状态(即"带内")。这与控制平面通过读取各种固定计数器(例如,接收/传输的数据包)或采样数据包子集(例如,sFlow)来完成的常规监控形成了对比。
在 INT 中,遥测"指令"被编码到数据包报头字段中,在通过转发流水线时被网络交换机所处理。这些指令告诉一个支持 INT 的设备要收集什么状态,以及如何在数据包通过网络时将该状态写入数据包。INT 流量源(例如,应用程序、终端主机网络栈、hypervisor)可以将指令嵌入到正常的数据包或特殊的探测数据包中。类似的,INT 流量汇聚模块检索并报告这些指令收集的结果,允许流量汇聚模块在转发数据包时观察(体验)到确切的数据平面状态。
该思想如图 14 所示,其中显示了示例包从源交换机 S1 通过传输交换机 S2 传输到汇聚交换机 S5 的路径。每个交换机在路径上添加的 INT 元数据既指示了数据包要收集的数据,也记录了每个交换机对应的数据。
图 14. 带内网络遥测(INT),通过穿越网络的包收集测量数据。
INT 仍处于早期阶段,但有潜力为流量模式和网络故障的根因分析提供定性的更深入的见解。例如,INT 可以用来测量和记录单个包在沿端到端路径遍历一系列交换机时的排队延迟,如图所示的包报告:"我访问了 Switch 1 @780ns, Switch 2 @1.3µs, Switch 5 @2.4µs。"正如 Xiaoqi Chen 及其同事所报告的那样,这些信息可以用于检测微突发(以毫秒甚至亚毫秒为单位的排队延迟),甚至可以通过跟踪不同路径的包流关联这些信息,从而确定每个流在每个交换机上共享缓冲区的容量。
延伸阅读:
X. Chen, et. al. Fine-grained queue measurement in the data plane. ACM CoNEXT’19, December 2019.
类似信息包可以报告决定其转发的决策过程,例如:"在 Switch 1 中,我遵循规则 75 和 250; 在 Switch 2 中,我遵守规则 3 和 80。"这就为使用 INT 来验证数据平面是否忠实执行网络运营商期望的转发行为打开了大门。在本书最后一章,我们将详细讨论 INT 对建立和运营网络的潜在影响。
这个用例再次说明 SDN 的潜在好处: 能够尝试在过去不可行的新想法。使用传统固定功能专用集成电路进行包转发,可能永远没有机会尝试像 INT 这样的想法来判断收益是否与成本相称。长远来看,正是这种试验和创新的自由将带来 SDN 的持久利益。