计算机网络在历史上是逐个盒子演进的,各个网络元素占据特定的生态位,如路由器、交换机、负载均衡器、NAT(网络地址转换)或防火墙。软件定义网络提议颠覆这种生态,将整个网络变成一个平台,并将各个网络元素变成可编程实体。运行在网络平台上的应用程序可以像当前分布式协议一样优化流量以采取最短路径,但它们也可以优化网络以最大化链路利用率、为不同用户创建不同的可达域,或使设备移动性无缝化。
OpenFlow 是一种开放标准,可在 IP 网络中实现软件定义网络,它是一种新的网络技术,将支持许多新的应用程序和管理网络的新方法。以下是三个真实的,尽管有些虚构的应用示例
示例 1:带宽管理。典型的广域网的利用率是 30%;它必须为“突发”时间“保留”带宽。然而,使用 OpenFlow,开发了一个系统,其中需要批量数据传输的内部应用系统(消费者)可以使用备用带宽。典型的用途包括数据集的日常复制、数据库备份和日志的批量传输。消费者向中央服务注册要传输的数据的源、目的地和数量。该服务执行各种计算并将结果发送给路由器,以便它们知道如何在链路空闲时转发这些批量数据。应用程序和中央服务之间的通信是双向的:应用程序告知服务它们的需求,服务在带宽可用时回复,应用程序在完成时告知服务。与此同时,路由器向中央服务反馈实时使用信息。
结果,网络的利用率达到 90-95%。这在行业中是闻所未闻的。首席信息官很兴奋,但真正印象深刻的是首席财务官。竞争对手为相同的网络容量支付三倍的资本支出 (CAPEX) 和运营支出 (OPEX)。
这个例子是基于谷歌今天正在做的事情,正如谷歌研究员兼技术基础设施高级副总裁 Urs Hoelzle 在 2012 年开放网络峰会上的主题演讲中所描述的那样。1
示例 2:租户化网络。一家大型虚拟机托管公司存在网络管理问题。它的服务是“租户化”的,意味着每个客户都像建筑物中的租户一样彼此隔离。当虚拟机从一台物理主机迁移到另一台物理主机时,必须重新配置 VLAN(虚拟 LAN)段。物理机器内部是一个软件模拟的网络,连接虚拟机。物理 VLAN 和软件模拟世界之间必须进行仔细协调。问题是连接可能因人为错误而配置错误,并且租户之间的边界……很脆弱。
OpenFlow 允许向 VM 管理系统添加新功能,以便在添加和更改虚拟机和物理机器时,它可以与网络基础设施通信。此应用程序确保每个租户彼此隔离,无论虚拟机如何迁移或物理机器位于何处。这种隔离是端到端编程且可验证的。
这个例子是基于 2012 年开放网络峰会上戴尔公司网络业务首席技术官 Geng Lin 等人的演讲。3
示例 3:游戏服务器。一些研究生在一台备用笔记本电脑上设置了一个 Quake 服务器,作为封闭竞赛的一部分。到该服务器的延迟不仅对游戏体验很重要,而且对公平性也很重要。由于这些学生很穷,服务器在一台备用笔记本电脑上运行。在比赛期间,有人拿起笔记本电脑并将其从有线以太网中拔出。它按预期加入了 Wi-Fi。然后这个人带着笔记本电脑一直走到自助餐厅,一个小时后返回。在此路径中,笔记本电脑更改了四次 IP 地址,带宽从有线以太网上的 100 Mbps 变为计算机科学大楼中 802.11b 连接上的 11 Mbps,再到自助餐厅中 802.11g 连接上的 54 Mbps。然而,游戏比赛仍在继续,没有中断。
使用 OpenFlow,研究生编写了一个应用程序,以便无论笔记本电脑移动到哪个子网,其 IP 地址都不会更改。此外,在发生网络拥塞时,往返游戏服务器的流量将获得更高的优先级:路由器将尝试在游戏相关流量之前丢弃其他流量,从而确保每个人的游戏体验流畅。笔记本电脑上的软件未修改;所有的“智能”都在网络中。比赛取得了巨大的成功。
这个例子大致基于 SIGCOMM(数据通信专业组)2008 年最佳演示奖的获得者。4斯坦福大学电气工程和计算机科学助理教授 Sachin Katti 在 2012 年开放网络峰会上的一次演讲中详细介绍了 OpenFlow 无线应用的更多严肃示例。2
OpenFlow 要么是网络领域最具创新性的新理念,要么是激进的倒退——一种退化。它是一种新理念,因为它改变了我们思考网络路由架构的根本方式,并为新的机遇和应用铺平了道路。它是一种退化,因为它是一种激进的简化——这种简化会产生以前闻所未闻的新可能性。
要理解这个悖论,需要一些历史背景。在 iPhone 之前,没有应用商店可以让几乎任何人发布应用程序。如果您有一部可以运行应用程序的手机,则每个应用程序都需要与每个运营商单独协商。审查非常严格。如果一个应用程序向天线发送错误的位并导致整个电话系统瘫痪怎么办?(为什么我们的电话系统会被一个错误的位搞垮?)这个过程既昂贵、缓慢又高度政治化。
一些虚构的(但并非那么虚构的)例子
• “我们很抱歉,但您的井字游戏不符合我们公司认为代表的 ‘c’est la mode’ 风格。”
• “是的,我们很乐意在我们的手机上安装您的卡路里追踪器,但我们需要一些关键更改。最重要的是,颜色必须与我们的公司徽标相匹配。”
• “我们很遗憾地通知您,我们对在我们的智能手机上运行您的游戏不感兴趣。首先,我们无法想象为什么人们想在手机上玩游戏。我们的手机是为严肃人士准备的。其次,如果人们将手机用于通话以外的任何用途,就会耗尽电池。第三,我们发现向猪扔鸟的想法相当令人反感。我们的客户永远不会感兴趣。”
如今,网络上不存在应用程序。一个小众想法会分散供应商的路线图。它可能会毁掉产品的 ‘c’est la mode’ 风格。路由器太关键了。路由器协议很难设计,实现它们需要高度专业的编程技能,并且验证成本很高。
要理解为什么编写路由协议如此困难,需要了解当今网络中路由的工作方式。网络由端点(您的 PC 和它正在通信的服务器)和连接它们的中间设备组成。在您的 PC 和 www.google.com 之间可能存在 20 到 100 个路由器(技术上是路由器和交换机,但为了简单起见,本文中所有数据包传递设备都称为路由器)。每个路由器都有许多网络接口插孔或端口。数据包到达一个端口,路由器检查它以确定它要去哪里,并将其发送到将使其更接近其目的地的端口,即跳一步。
当您的 PC 发送数据包时,它不知道如何到达目的地。它只是用所需的目的地标记数据包,将其交给下一跳,并相信此路由器和所有后续路由器最终会将数据包送到目的地。世界各地每秒发生数万亿次这种情况,并且几乎每个数据包都到达其目的地,这一事实令人惊叹。
不存在用于规划数据包到达目的地必须采取的路径的“互联网地图”。您的 PC 事先不知道到达目的地的完整路径。第一个路由器也不知道,下一个路由器也不知道。每一跳都相信下一跳将更进一步,最终数据包将到达目的地。
每个路由器如何知道下一跳应该是哪个?每个路由器都独立工作以自行找出答案。路由器在一个算法中协同工作,该算法的工作原理如下:每个路由器定期告诉其邻居它连接到哪些网络,并且每个邻居累积此信息并使用它来推断整个网络的设计。如果路由器可以大声思考,您可能会听到以下内容:“我在端口 37 上的邻居告诉我,她距离网络 172.11.11.0 有 10 跳,但端口 20 上的邻居告诉我他距离 4 跳。啊哈!我将记录下来,如果我收到一个发往网络 172.11.11.0 的数据包,我应该将其从端口 20 发送出去。四跳比十跳好!”
尽管路由器共享拓扑信息,但它们独立进行路由计算。即使网络拓扑意味着附近的两个路由器将计算出相似的结果,它们也不会共享重叠计算的结果。由于每个 CPU 周期都会消耗一定的电量,因此这种重复工作效率不高。
幸运的是,路由器只需要关心其特定组织的网络,而不是整个互联网。通常,路由器仅为其互联网的一部分(公司、大学或它所属的 ISP(其自治域))存储完整的路由表。发往该域外部的数据包被发送到网关路由器,网关路由器与其他组织互连。另一个算法确定第一组路由器如何知道网关路由器在哪里。这两个算法的组合比每个路由器都需要了解整个互联网所需的 RAM 和 CPU 马力要少。如果没有这种优化,每个路由器都需要足够的 RAM 和 CPU 马力来存储整个互联网的清单。成本将是惊人的。
路由算法因路由器被给予线索并且必须推断出它们需要知道的内容而变得复杂。例如,“端口 20 是发送发往 172.11.11.0 的数据包的最佳位置” 的结论是从其他路由器给出的线索推断出来的。路由器无法向另一个路由器发送问题。想象一下,如果汽车没有窗户,但您可以与 25 英尺范围内的任何驾驶员交谈。与其知道前方有什么,不如根据其他人所说的话来推断世界观。如果每个人都使用相同的词汇和相同的合作逻辑推理系统,那么每辆车都可以在没有碰撞的情况下到达目的地。这就是互联网:没有地图;闭上眼睛开车。
每个路由器都试图根据它听到的内容来推断整个世界观。驱动这些复杂的算法需要大量的 CPU 马力。每个路由器都是一个昂贵的设备,进行与其他人相同的计算,只是为了获得它需要的略有不同的结果。较大的网络需要更多的计算。随着企业网络的增长,每个路由器都需要升级以处理额外的计算。路由器上的端口数量和类型没有改变,但引擎不再有足够的容量来运行其算法。有时这意味着添加 RAM,但通常这意味着更换新的、更昂贵的 CPU。这对网络供应商来说是一个好的商业模式:随着您购买更多路由器,您需要为您已购买的路由器购买升级。这些不是受益于戴尔与惠普与其他人之间持续的价格战的标准 PC;这些是专业的、昂贵的 CPU,客户无法在其他任何地方获得。
OpenFlow 的基本思想是,如果路由器变得“愚蠢”并从大型“空中路由编译器”或 RCITS 下载其路由信息,情况会更好。路由器所需的 CPU 马力将取决于其端口的速度和数量。随着网络的增长,RCITS 将需要更多的马力,但路由器不会。RCITS 不必是供应商特定的,供应商将竞争制造最好的 RCITS 软件。如果出现更好的软件,您可以更换软件供应商。运行 RCITS 软件的计算机可以是利用摩尔定律、价格战以及所有这些好处的现成商品硬件。
显然,事情并非如此简单。您必须考虑其他问题,例如冗余,这需要多个 RCITS 和故障转移机制。单个路由器需要足够智能,才能知道如何在它和 RCITS 之间路由数据,RCITS 可能距离很远。此外,实体之间的通信通道需要安全。最后,我们需要一个比 RCITS 更好的名称。
OpenFlow 标准解决了这些问题。它使用术语控制器或控制器平台(乏味)而不是 RCITS。控制器接收配置、网络和其他信息,并为每个路由器输出不同的数据 blob,路由器将该 blob 解释为决策表:数据包按端口、MAC 地址、IP 地址和其他方式选择。选择数据包后,该表指示如何处理它们:丢弃、转发或变异然后转发。(这是一个粗略的过度简化;完整详细信息在规范、技术白皮书和 http://www.OpenFlow.org/wp/learnmore 的演示文稿中。)
传统网络可以选择除最短路径之外的其他路径——可能是因为它更便宜、具有更好的延迟或具有备用容量。即使使用为此类流量工程设计的系统,例如 MPLS TE (多协议标签交换流量工程),也很难以任何真正的粒度进行有效管理。相比之下,OpenFlow 使您能够为每个流的不同优化对网络进行编程。这意味着延迟敏感型流量可以采取最快路径,而批量流量可以采取最便宜的路径。OpenFlow 不是基于特定端点,而是细化到来自每个端点的流量类型。
然而,OpenFlow 不会止步于流量工程,因为它能够做的不只是填充转发表。由于支持 OpenFlow 的设备也可以重写数据包,因此它可以充当 NAT 或 AFTR(地址族转换路由器);并且由于它可以丢弃数据包,因此它可以充当防火墙。它还可以实现 ECMP(等价多路径)或其他负载均衡算法。路由器不必对通过它们的每个流都具有相同的角色;它们可以负载均衡一些、防火墙其他一些并重写一些。因此,在 OpenFlow 环境中,各个网络元素显着提高了灵活性,即使它们将某些责任转移到中央控制器。
OpenFlow 旨在完全在单个组织内使用。OpenFlow 域中的所有路由器都充当一个实体。控制器对其控制的所有路由器都具有神力般的权力。您不会让您信任范围之外的人员拥有这种访问权限。ISP 可以使用 OpenFlow 来控制其路由器,但它不会将该控制扩展到客户的网络。企业可以使用 OpenFlow 来管理大型数据中心内部的网络,并拥有不同的 OpenFlow 域来管理其 WAN。ISP 可以使用 OpenFlow 来运行其互联网补丁,但它并非旨在接管互联网。它不能替代 ISP 间系统,例如 BGP(边界网关协议)。
向 OpenFlow 的转变预计不会突然发生,并且与所有新技术一样,可能根本不会发生。
集中式路由规划有很多好处
• 利用摩尔定律。通用计算机不仅更便宜、更快,而且种类更多。在 2012 年开放网络峰会的谷歌演讲中,Urs Höelzle 表示,谷歌使用谷歌计算基础设施进行路由计算。
• 提供更深入的集成。端到端通信可以直接从应用程序一直到路由器进行。想象一下,如果您企业中的每个基于 Web 的服务都可以将带宽需求转发给控制器,然后控制器可以回复请求是否可以得到满足。与今天使用的“发送并祈祷”架构相比,这将是一个根本性的变化。
• 将网络硬件变成商品。设备所需的 CPU 和 RAM 马力是设备发货时的端口速度和数量的函数。因此,可以在设计期间计算出来,从而无需考虑松弛。此外,设计和制造具有固定配置(不可升级)的设备成本更低。
• 使算法更简单。与其基于推理并依赖协作算法做出决策,不如使用更直接的算法。独裁是最有效的政府形式。假设校园 EMS 团队的 VoIP 电话应始终获得他们需要的带宽。指示校园内的每个路由器优先处理 EMS 电话比开发一种算法更容易,该算法使每个路由器推断哪些设备是 EMS、验证信任模型、确认信任并分配带宽——并希望其他路由器也在做同样的事情。
• 支持应用程序。控制器可以具有应用程序可以使用的 API。这使路由器功能大众化。任何人(具有适当的授权和访问权限)都可以创建网络功能。Cisco IOS 操作系统中运行的应用程序不存在开源生态系统。在 OpenFlow 世界中创建开源生态系统将容易得多。应用程序将不会控制单个路由器(这已经是可能的),而是将整个网络作为一个实体来控制。
• 允许全局优化和规划。当前的路由协议要求每个路由器独立优化,这通常会导致路由计划在本地最优但在全局非最优。OpenFlow 控制器可以基于对网络的全局、几乎全知的理解进行规划。
• 提供集中式控制。并非今天的路由器没有任何 API,但应用程序需要与每个路由器的 API 通信才能完成任何操作,而且我不认识任何对这种方式持开放态度的网络工程师。使用 OpenFlow,应用程序可以与控制器对话,身份验证、授权和审查可以在一个地方而不是在每个路由器上进行。
过去,智能手机供应商仔细控制哪些应用程序在其手机上运行,并且这样做有完全合理的理由:应用程序的质量、防止手机网络不稳定以及保护其收入来源。我们现在都可以看到,允许大规模创建应用程序的范式转变并未导致混乱和收入损失的“狂野西部”。相反,它激发了全新的应用程序类别和新的收入来源,这些收入来源超过了它们所取代的收入来源的价值。谁会想到愤怒的小鸟或监控我们的睡眠模式以计算最佳起床时间的应用程序?应用程序是疯狂的、奇怪的和具有颠覆性的——我无法想象没有应用程序的世界。
OpenFlow 有潜力实现类似的颠覆。基于网络的应用程序的大众化是一个疯狂的想法,并且会产生奇怪的应用程序,但总有一天我们会谈论过去的日子,并且很难想象过去是什么样子。
1. Hoelzle, U. 2012. 开放网络峰会主题演讲; http://www.youtube.com/watch?v=VLHJUfgxEO4。
2. Katti, S. 2012. OpenRadio:虚拟化蜂窝无线基础设施。在开放网络峰会上演讲; http://opennetsummit.org/talks/ONS2012/katti-wed-openradio.pdf。
3. Lin, G. 2012. SDN 的行业视角:技术挑战和业务用例。在开放网络峰会上演讲; http://opennetsummit.org/talks/ONS2012/lin-tue-usecases.pdf(幻灯片 6-7)。
4. SIGCOMM 演示。2008 年; http://www.openflow.org/wp/2008/10/video-of-sigcomm-demo/。
喜欢它,讨厌它?请告诉我们
THOMAS A. LIMONCELLI 是一位国际公认的作家、演讲家和系统管理员。他最著名的著作包括系统管理员时间管理(O’Reilly,2005 年)和系统和网络管理实践,第 2 版(Addison-Wesley,2007 年)。2005 年,他获得了 SAGE 杰出成就奖。请访问他的博客 http://EverythingSysadmin.com。
© 2012 1542-7730/12/0600 $10.00
最初发表于 Queue vol. 10, no. 6—
在 数字图书馆 中评论本文
David Collier-Brown - 你不了解带宽
当您的员工或客户说他们的互联网性能很差时,带宽可能不是问题。一旦他们拥有 50 到 100 Mbps 范围内的带宽,问题就是延迟,即 ISP 的路由器处理其流量需要多长时间。如果您是 ISP 并且所有客户都讨厌您,请振作起来。这现在是一个可解决的问题,这要归功于一群敬业的人,他们追查到这个问题,解决了它,然后在家庭路由器中证明了他们的解决方案。
Geoffrey H. Cooper - 使用 FDO 和不受信任的安装程序模型的设备载入
设备的自动载入是处理正在安装的越来越多的“边缘”和 IoT 设备的重要技术。设备的载入与大多数设备管理功能不同,因为设备的信任从工厂和供应链转移到目标应用程序。为了通过自动载入来加快流程,必须在设备中形式化供应链中的信任关系,以允许自动化转换。
Brian Eaton, Jeff Stewart, Jon Tedesco, N. Cihan Tas - 通过关键路径跟踪的分布式延迟分析
低延迟是许多 Google 应用程序(如搜索)的重要功能,延迟分析工具在维持大规模低延迟方面发挥着关键作用。对于包含功能和数据不断演变的服务在内的复杂分布式系统,将总体延迟保持在最低水平是一项具有挑战性的任务。在大型、真实的分布式系统中,现有的工具(如 RPC 遥测、CPU 分析和分布式跟踪)对于理解整个系统的子组件很有价值,但在实践中不足以执行端到端延迟分析。
David Crawshaw - 一切 VPN 再次焕然一新
VPN(虚拟专用网络)已有 24 年的历史。这个概念是为与我们今天所知的互联网截然不同的互联网而创建的。随着互联网的增长和变化,VPN 用户和应用程序也随之增长和变化。VPN 在 2000 年代互联网的尴尬青春期中,与其他广泛流行的抽象概念互动不良。在过去的十年中,互联网再次发生了变化,这个新的互联网为 VPN 提供了新的用途。一种全新的协议 WireGuard 的开发为构建这些新的 VPN 提供了技术基础。