带你读《计算机网络问题与解决方案:一种构建弹性现代网络的创新方法》之一:基本概念-阿里云开发者社区

开发者社区> 华章出版社> 正文

2000元阿里云代金券免费领取,2核4G云服务器仅698元/3年,新老用户都有优惠,立即抢购>>>

登录阅读全文

带你读《计算机网络问题与解决方案:一种构建弹性现代网络的创新方法》之一:基本概念

简介: 本书分为三个主要部分,涵盖了数据传输、控制平面,以及具体设计(或者更确切地说是技术)场景。

计算机科学丛书
点击查看第二章
点击查看第三章
计算机网络问题与解决方案:
一种构建弹性现代网络的创新方法
Computer Networking Problems and Solutions:
An Innovative Approach to Building Resilient, Modern Networks
image.png
鲁斯·怀特(Russ White)
伊桑·班克斯(Ethan Banks)
曹洪伟 石涛声 译

第1章

Computer Networking Problems and Solutions: An Innovative Approach to Building Resilient, Modern Networks

基 本 概 念

学习目标

  • 阅读完本章,读者应该能够:
  • 理解业务驱动和网络工程的关系
  • 理解电路交换和分组交换的区别
  • 理解电路交换和分组交换的优缺点
  • 理解网络复杂性和复杂性权衡的基本概念

网络通常被用来做这样一件事,即在连接的系统之间传输信息。这个任务看起来简单,但是关于其最佳方法的讨论(或者争论)却长期存在,有时来得比阳光还要热烈,而且经常与一些相当绝对的人和观点纠缠在一起。这个争论历史可以分成多个相互重叠的阶段,每个阶段对应一个不同的问题:

  • 网络应该是电路交换还是分组交换?
  • 分组交换网络使用固定长度帧还是可变长度帧?
  • 计算网络中最短路径集的最佳方法是什么?
  • 分组交换网络如何与服务质量(QoS)相互作用?
  • 控制平面应该是中心化的还是去中心化的?

其中一些问题早已得到了解答,最常见的方法是将每个问题的极端方案混合成一个解决方案,这些方案有时显得混乱但通常总是有用的。另一些问题仍然很活跃,尤其是最后一个问题,也许在20年后读者才可能看到这个问题的答案。
本章介绍了网络工程领域的发展历史或各个阶段,并在这个框架下介绍了本书所使用的基本术语和概念。本章是第一部分和第二部分的基础:转发(数据)平面和控制平面。第三部分是网络设计概述,也是建立在第一部分和第二部分的基础之上。本书的最后一部分着眼于一些可能塑造未来的具体技术和趋势—不仅仅是网络工程,而是信息生产和处理的整个过程。

1.1 是艺术还是工程

首先要问的一个问题是:网络工程是一门艺术,还是一项真正的工程呢?许多工程领域在初始时更像是一门艺术。例如,在20世纪70年代早期,关于电子管、线圈和变压器等电子设备的工作,在很大程度上被认为是一门艺术。到20世纪80年代中期,电子产品已经变得无处不在,这开始了一个比任何标准化更严酷的商品化过程。那时,电子学被认为是工程而不是艺术。到21世纪头10年,电子产品“仅仅是构成计算机的组件”。在电子产品的设计和故障排除方面仍有一些艺术,但总体来说,这些创作更加专注在工程原理上。问题从“如何做电子产品”转换到“做电子产品的最廉价方式是什么”,或者“如何把它们做到最小”,或者其他一些在早期被认为是次要的问题。或许可以用一种比例的方式来勾勒电子学的发展轨迹:也许(非常粗略的估计),电子学已从80%的艺术和20%的工程发展到现在80%的工程和20%的艺术。
网络工程又是怎样的呢?它也会经过相同的阶段,最终进入80%的工程和20%的艺术的范围吗?似乎并非如此,有以下几个原因。网络工程运行在一个很大的虚拟空间中,尽管存在线缆、设备,但协议、数据和功能特性都构建在物理基础设施之上,并非有形的物理设施。不像电子产品,你可以指着一个物理对象说“这是产品”,但网络并非物理存在。换句话说,网络是一种概念性存在—通过协议和数据模型把各种独立组件连接在一起,从而形成网络。这意味着设计选择几乎是无限可变的,而且是可延展的。每一个问题都可以被处理、评估和设计得比电子产品更具体。只要有新的问题需要解决,就会有新的解决方案被开发、部署,并最终从网络中删除。或许一种可行的类比是对比软件应用程序和各种计算设备之间的关系,无论计算设备变得多么标准化,在上面运行的软件应用程序仍然有几乎无限的选择。
图1-1从一种视角阐述了网络与业务之间的适用关系。

image.png


图1-1 网络和业务之间的适用关系,第一个视角

在图1-1中,实灰色曲线表示业务的增长。垂直和水平运行的黑折虚线表示网络容量。很多时候网络是超配的,消耗了业务资金来维持闲置的网络容量;这些超配显示在灰线标示的阴影区域中。还有一些时候,网络处于资源紧张的状态;在这些深灰色填充的阴影区域中,业务可能增长得很快,但网络正在阻碍它的发展。网络架构和设计的诸多目标之一(这更多是一个架构问题,而不是严格的设计问题;请参见《网络架构的艺术》一书)是将这些线更紧密地联系在一起,使得它们尽量靠近乃至重合。完成这项工作需要创造性和前瞻性思维以及解决问题的能力。工程师必须提出这样的问题:“如何构建网络,使其能够根据业务需求而弹性扩展?”这不仅仅涉及网络的规模和大小;而且,业务的本质甚至可能随着时间的推移而发生变化,进而导致应用程序、运维的过程和步调随之变化。网络必须有一个能够按需而变的架构,而不是引入僵化或固化的系统和过程,那样将最终导致网络以灾难性方式失败。关于网络的这部分工作通常被认为是艺术而不是工程,在整个商业世界以某种方式发生变化之前,它不太可能改变。
图1-2描述了业务将网络工程作为艺术来驱动的另一种视角。

image.png


图1-2 网络产品的功能与使用对比,第二个视角

在图1-2中,时间从左向右增加,网络功能的数量从下向上增加。该图解释了随着时间的推移向网络产品添加的附加功能。网络运营商A一开始只需要一个小功能集,但所需的功能集将随着时间的推移而增加;其他三个网络类似。运行在这些网络上的所需功能集在一定程度上是重叠的,然而在某种程度上又总是不同的。如果供应商希望能够销售单一产品(或产品线),并面向所有的四个网络,就需要实现每一个网络所需的每一个独特功能。网络功能的完整集合由图右边的顶点描绘。每个网络都有一些对网络产品来说不必要的功能,这些不必要的功能也称为代码膨胀(code bloat)。
尽管没有使用这些功能,但每一个功能仍可能存在安全漏洞、必须测试的代码、与正在使用的功能进行交互的代码等。换句话说,每一个未使用的功能实际上都由网络运营商担责。理想的解决方案可能是为每个网络定制设备,只包含必需的功能,但这通常不是供应商或网络运营商能够选择的。相反,网络工程师必须在必需的功能和可用功能之间取得某种平衡,而这个过程绝对是一门艺术,而不是工程。
只要是网络的构建方式和业务使用网络的方式存在不匹配的地方,就存在着艺术和工程之间的相互拉锯。当然,在网络工程领域中,艺术和工程的所占比例会根据网络、工具和时间的不同而有所不同,但与电子工程等领域相比,艺术成分在网络领域的占比可能更多。
注意:有些人可能反对在本节中使用“艺术”(art)这个词。当然,如果能够使本节中的概念更容易理解,那么用匠艺(craft)来代替艺术也是可以的。

1.2 电路交换

计算机网络世界的第一次大讨论是“网络应该是电路交换还是分组交换”。这两者之间的根本区别是关于电路的概念—从发送方和接收方来“看”,网络是作为一个单一的电路或者连接,在它们开始通信前需要预先配置(或设置)一组特定的属性,还是将网络视为共享资源,在这里,信息只是“随意”生成和传输?前者被认为是电路交换,而后者则是分组交换。电路交换倾向于提供更多的流量和交付保证,而分组交换倾向于以更低的成本交付数据,这是网络工程诸多权衡的第一个。图1-3以时分多路复用(Time Division Multiplexing,TDM)为例解释了电路交换。
image.png

图1-3 基于电路交换的时分多路复用

在图1-3中,任何两个设备之间的链路带宽被分成8个相等的部分(时隙time slot);A发往E的数据使用时隙A1,发往F的数据使用时隙A2;B发往E的数据使用时隙B1,发往F的数据使用时隙B2。每一条信息都是固定长度,因此每一条信息都可以放在正在行进的数据流的单个时隙里(因此,每一数据块代表了线路上的一段固定时间或时隙)。假设某个地方有一个控制器,在流量要经过的每个段上分配一个时隙。

  • 对于[A,E]的流量:
    对C而言:来自A的时隙1被交换到指向D的时隙1。

对D而言:来自C的时隙1被交换到指向E的时隙1。

  • 对于[A,F]的流量:
    对C而言:来自A的时隙4被交换到指向D的时隙4。

对D而言:来自C的时隙4被交换到指向F的时隙3。

  • 对于[B,E]的流量:
    对C而言:来自B的时隙4被交换到指向D的时隙7。

对D而言:来自C的时隙7被交换到指向E的时隙4。

  • 对于[B,F]的流量:
    对C而言:来自B的时隙2被交换到指向D的时隙2。

对D而言:来自C的时隙2被交换到指向F的时隙1。

网络中的数据包处理设备无须知道数据包中的比特流去向;C只需在每一时间帧获得数据流A中时隙1的所有内容,并将其复制到出口D的时隙1,并且D把入口C的时隙1复制到出口E的时隙1,就完成了A向E的通信传输。关于这种流量处理有一点值得注意:转发流量时,网络中的任何设备实际上都不需要知道源地址或目的地址是什么。通过网络传输的数据块不需要包含源地址或目的地址;它们去往何处,它们来自何方,这些决策都基于控制器对每个链路中开放时隙的知识。分配给任何特定设备到设备的通信时隙称为电路,因为它是用于一对设备之间通信的带宽和网络资源。
电路交换有两个主要优点:

  • 设备不需要读报头信息或者不需要做任何复杂的处理就可以交换数据包。这在网络发展的早期非常重要,当时的硬件只有少量的晶体管和门电路,线路速度较低,并且在设备中处理一个数据包的时间会在整个网络的数据包延迟中占很大比例。
  • 控制器知道网络中所有边缘设备的可用带宽和流量。假设有足够的可用带宽,规划流量以创建通过网络的最优路径就简单多了。

电路交换也有缺点,包括:

  • 控制器的复杂性随着网络和所提供服务规模的扩大而显著增加。控制器上的负载可能会变得非常大,事实上,这会导致网络中断。
  • 每个链路上的带宽没有得到最佳使用。在图1-3中,包含“*”的时间块(或单元)本质上是浪费的带宽。时隙被提前分配到一个特定的电路:即使A没有向E发送数据,用于[A,E]流量的时隙也不能被“借用”到[A,F]的流量中。
  • 从网络角度来说,响应拓扑变化所需的时间可能相当长,本地设备必须发现变化,将其报告给控制器,控制器必须沿着每个受影响的流量路径重新配置每个网络设备。

TDM系统为今天所用网络的发展做出了贡献。特别是,TDM系统促进了许多关于将数据分解成分组以便网络传输的早期讨论,并为以后在QoS和流量控制方面的工作奠定了基础。这些早期的TDM系统给大型网络世界馈赠了一个相当重要的思想,那就是把网络划分为多个平面。
注意:本章后面简要地介绍了服务质量(QoS),第8章对此做了更深入的讨论。
具体地说,TDM系统被划分为3个平面:

  • 控制平面是一组协议和流程,用于构建网络设备转发流量所需的信息。在电路交换网络中,控制平面是完全独立的平面;在控制器和单个设备之间通常有一个单独的网络(尽管并不总是如此,特别是在较新的电路交换系统中)。
  • 数据平面(也称为转发平面)是网络中传递信息的路径。这包括将线缆上接收到的信号解码成帧,处理它们,并根据物理传输系统将它们进行编码,然后推回到线缆上。
  • 管理平面侧重于网络设备的管理,包括监控可用内存和队列深度、监控设备何时将网络传输的信息丢弃等。很难区分网络中的管理平面和控制平面。例如,如果设备被手动配置为以特定的方式转发流量,那么这是管理平面的功能(因为设备正在配置)还是控制平面的功能(因为这是关于如何转发信息的信息)呢?

注意:这个问题没有明确的答案。然而在本书中,任何影响网络转发流量的方式都被认为是控制平面的一部分,而任何影响设备物理或逻辑状态(如接口状态)的行为都被认为属于管理平面功能。但不要期望这些定义在现实世界中总是成立。
注意:帧中继、SONET、ISDN和X.25是电路交换技术的例子,在本书写作过程中,其中的一些技术仍在使用。参见“拓展阅读”部分可以了解这些技术。

1.3 分组交换

在20世纪60年代早期到中期,分组交换尚未流行。在此之前,很多人都在重新思考网络的构建方式,并在考虑电路交换模式的替代方案。兰德公司的保罗·巴兰(Paul Baran)提出了将分组交换网络作为网络生存性的解决方案;与此同时,英国的唐纳德·戴维斯(Donald Davies)也提出了类似的系统。这些想法进入劳伦斯利弗莫尔实验室,促使第一个分组交换网络(称为Octopus)在1968年投入使用。ARPANET—一个实验性的分组交换网络,也在不久后的1970年开始运行。

1.3.1 分组交换操作

注意:第7章将更详细地讨论分组交换的实际过程。
电路交换和分组交换的本质区别在于单个网络设备在流量转发中所扮演的角色,如图1-4所示。
在图1-4中,A生成两个数据块。每一个数据块都包含一个报头描述,至少会描述目的地址(在每个数据块中以H表示)。这个完整的信息包—原始数据块和报头称为一个数据包。报头还可以描述数据包中的内容,包括在处理数据包时应采取的一些特殊处理指令。这些数据有时被称为元数据,或“描述数据包中数据的数据”。

image.png

图1-4 分组交换网络

这里A产生两个数据包:A1的目的地址是E,A2的目的地址是F。B也发送两个数据包:B1的目的地址是F,B2的目的地址是E。当C收到这些包的时候,读取数据包报头的一小部分信息(通常叫作一个字段)来判定目的地址。然后,C查询一个本地表来判定向哪个出站接口发送这个数据包,D也是如此,通过合适的出站接口向目的地址转发数据包。
这种流量转发的方式称为逐跳转发,因为网络中的每个设备都对每个数据包的转发位置做出完全独立的判定。每个设备查询的本地表称为转发表;转发表通常不只是一个表,而是许多个表,可能包括路由信息库(RIB)和转发信息库(FIB)。
注意:关于如何构建以及如何使用这些表,第7章中有更详细的解释。
在原有的电路交换系统中,控制平面与数据包转发完全分离。随着电路交换向分组交换变迁,相应地控制器的集中决策开始向网络自身运行的分布式协议转移。对于后者,每个节点都能够在本地做出自己的转发决策。网络中的每个设备都运行分布式协议,以获取构建这些本地表所需的信息。这种模型被称为分布式控制平面,因此,尽管模型的意义并不相同,但控制平面的概念只是简单地从一个模型转移到了另一个模型上。
注意:分组交换网络可以采用集中式控制平面,电路交换网络也可以采用分布式控制平面。在最初设计和部署分组交换网络时,它们通常使用分布式控制平面。软件定义网络(SDN)将集中式控制平面的概念带回到了分组交换网络的世界。
分组交换网络相对于电路交换网络的第一个优势是逐跳转发模式。由于每个设备都可以做出完全独立的转发决策,所以可以根据网络拓扑的变化动态地转发数据包,从而消除了与控制器通信并等待决策的需要。只要源地址和目的地址之间至少有两条路径(网络是双向连接的),源地址传递给网络的数据包最终将由网络传递给目的地址。
分组交换网络相对于电路交换网络的第二个优势是分组交换网络使用带宽的方式。在电路交换网络中,如果特定的电路没有使用(实际上即TDM示例中的一个时隙),那么这个时隙就会被浪费掉。在逐跳转发中,每个设备都可以最好地利用每个出站链路上可用的带宽来承载必要的流量负载。虽然这在本地设备上更复杂,但在全局上更简单,并且可更好地利用网络资源。
分组交换网络的主要缺点是增加了额外的复杂性,特别是在转发的过程中。每个设备必须能够读取数据包报头,在本地表中查找目的地址,然后根据表中的查询结果转发信息。在早期的硬件中,这是困难而耗时的任务;此时电路交换一般会比分组交换快。但随着硬件的不断改进,可变长度分组的交换速度通常与固定长度分组的交换速度非常接近,从而使得分组交换与电路交换的差距并不大。

1.3.2 分组交换网络中的流量控制

在电路交换网络中,控制器通过分配从源地址到目的地址的时隙来分配每个电路的特定带宽。如果发送方要发送的流量比时隙所支持的要多,会发生什么情况呢?答案很简单—它做不到。因此,在某种意义上,控制数据包流量的能力是建立在电路交换网络上的,其发送的流量不能超过网络的转发量,因为发送方可以用来发送信息的“空间”是预先分配的。
那么在分组交换网络中是怎样的情形呢?如果在如图1-4所示的网络中所有连接具有相同的链路速度,那么,如果A和B都想使用整个C的链路容量会发生什么呢?如果CD之间链路的容量大小是需要处理流量的一半,对于将流量全部发送到D,C将如何决定?这就是流量控制技术的用武之地。通常,它们是作为一个单独的协议/规则集实现的,依赖于底层网络,通过在两个通信设备之间建立一个虚拟电路来“组织”数据包的传输。
注意:第2章详细讨论了流量控制和差错控制。
传输控制协议(TCP)为基于分组交换的网络协议(IP)提供了流量控制。该协议是在1973年由Vint Cerf和Bob Kahn首先提出的。

协议战争

在分组交换网络的发展过程中,开发了许多不同的协议(或协议栈)。随着时间的推移,所有这些协议都被放弃了,转而支持IP协议栈。例如,Banyan Vines有自己基于IP的协议栈,称为VIP(Vines Internet Protocol),而Novell NetWare也有自己的基于IPX的协议栈。其他标准化组织同样创建了各自的标准协议族,如国际电信联盟(ITU)就构建了无连接模式网络服务(Connectionless Mode Network Service,CLNS)的协议族。
为什么这些协议族会半途而废呢?因为其中一些协议是私有的,许多政府和大型组织出于各种原因拒绝了分组交换网络中具有私有性质的解决方案。私有协议通常由少数人群开发和维护,缺乏深思熟虑。基于标准的协议可能更复杂,但它们也往往由更多经验丰富的工程师开发和维护。基于CLNS的协议族在过去的一段时间里一直是有力的竞争者,但它从未真正在全球互联网上流行起来,而全球互联网在当时正成为一股重要的经济力量。主要存在一些具体的技术原因,例如,CLNS不对线路编号,而是对主机编号。可达性信息的聚合(在本书后面会更详细地介绍此概念)由此受到了许多方面的限制。
关于CLNS和IP协议族之间的讨论有一个有趣的参考文献,即《The Elements of Networking Style》。

1.4 固定与可变长度数据帧

在20世纪80年代后期,一个新的话题讨论席卷了网络工程界—异步传输模式(Asyn-chronous Transfer Mode,ATM)。由于对高速电路的需求一直存在,而且当时基于目的地址的数据包交换技术进展缓慢,导致新传输方式ATM的兴起,后者最终重新配置了用于现代网络的整套协议(或者协议栈,因为每个协议都形成了一个层,像一个“多层蛋糕”)。ATM结合了电路交换中的固定长度信元(或数据包)与分组交换的报头(尽管大大简化了),产生了一个介于两者之间的技术解决方案。ATM有两个关键点:标签交换和固定呼叫单元;图1-5展示了标签交换。
image.png

图1-5 标签交换

在图1-5中,G给H发了一个数据包。在接收这个包的过程中,A检查本地表,发现指向H的下一跳是C。A的本地表还指定了一个标签(显示为L),而不“仅仅”是关于将数据包转发到何处的信息。A将此标签插入数据包头部的专用字段中,并将其转发给C。当C接收到数据包时,它不需要读取报头中的目的地址。相反,它只是读取标签,这是一个短的、固定长度的字段。在本地表中查找这个标签,C可获知转发流量给D就能够到达目的地址H。这个标签非常小,很容易被转发设备处理,从而使交换速度更快。
从某种意义上说,标签还可以“包含”处理数据包的信息。例如,如果G和H之间实际上有两个流,则可以通过网络为每个流分配不同的标签(或一组标签)。携带一个标签的数据包可以优先于携带另一个标签的数据包,因此网络设备不需要查看报头中的任何字段来确定如何处理特定的数据包。
这可以看作分组交换和电路交换之间的权衡。第一点,虽然每个数据包仍然是逐跳转发的,但虚拟电路也可以通过网络的路径标签来定义。第二点是ATM也是基于一个固定大小的信元:每个数据包仅限于53个八位组的信息。固定大小信元看似不起眼,但固定大小的数据包可能会造成巨大的性能差异。图1-6说明了在固定信元大小中涉及的一些因素。
在图1-6中,数据包1(A1)从网络复制到线路卡或接口的内存LC1;然后它通过B内部的Fabric结构(位于内存插槽之间)传播到LC2,最终从B的出站接口传送回网络。从图上来看可能显得微不足道,但对于交换/处理数据包的速度而言,其最重要的因素就是—在内存不同插槽间的内部路径上复制数据包所需的时间。将信息从内存中的一个插槽复制到另一个插槽是设备完成的最慢操作之一,特别是在古老的处理器上。而使每个数据包的大小相同(固定信元大小)就允许在复制过程中进行代码优化,从而大大提高了交换速度。
image.png

图1-6 固定信元大小

注意:第7章讨论通过内部Fabric结构交换数据包的过程。
从性能角度来看,数据包2通过B的路径更糟糕;它首先从网络复制到本地内存中。当通过查看本地转发表来确定目标端口时,处理该数据包的代码意识到数据包必须被分段才能适应出站链路[B,C]上允许的最大数据包大小。入站线卡LC1将数据包分段成A1和A2,创建第二个报头并根据需要调整报头中的一些值。数据包被分成两个数据包,即A1和A2。这两个数据包在通过Fabric结构时,经过两次操作,最终复制到出站线卡LC2上。通过使用固定大小的信元,ATM避免了几乎其他所有分组交换系统中由于数据包分段而造成的性能成本(在提出ATM时)。
事实上,ATM的设计不是从网络核心开始,再扩展到网络边缘的。为什么这样呢?第一个原因是信元大小的奇怪选择。为什么是53个八位组呢?答案很简单,也许还有点令人吃惊。ATM不仅试图取代分组交换网络,而且试图取代当时基于电路交换技术的话音网络。在统一这两种技术时,服务提供者可以在一套单一的电路和设备上提供这两种服务。
对于传输语音流量而言,多大的信息量或数据包大小是理想的呢?大约48个八位组。那么对于数据传输而言,最小的信息量或数据包大小是多少?大约64个八位组。选择53个八位组作为这两种大小的权衡,这对于语音传输来说并不完美,因为每个携带语音的信元中有5个八位组将被浪费。这对于数据流量来说也并不完美,因为最常见的数据包大小(64个八位组)需要分成两个单元才能传送到ATM网络。在进行这些审议时,一种普遍的想法是,数据传输协议能够调整到较小的信元大小,从而使得53个八位组成为支持各种流量的最佳大小。然而,数据传输协议没有调整。为了传输一个64个八位组的数据块,一个信元将包含53个八位组,而第二个单元则包含9个八位组的有用空间和42个八位组的无用空间。服务提供者发现ATM链路上50%或更多的可用带宽被空闲信元占用—这实际上是浪费带宽。因此,数据服务提供商停止部署ATM,语音服务提供商也从未真正开始部署ATM,ATM自此凋零。
有趣的是,像ATM这样的项目“遗产”是如何在其他协议和想法中继续生存的?标签交换概念由雅科夫·雷科特(Yakov Rekhter)和其他工程师提出,并发展成为标签交换技术。该技术保留了ATM在转发路径中快速查找的许多基础优势,并将有关数据包处理的元数据绑定到标签本身。标签交换最终发展为多协议标签交换(Multiprotocol Label Switching,MPLS),后者不仅提供了更快的查找能力,而且提供了标签栈和虚拟化技术。因此,这一基本思想被采纳和扩展,在很大程度上影响了现代网络协议和设计。
注意:MPLS将在第9章讨论。
ATM的第二个“遗产”是固定信元大小。多年来,基于TCP和IP的主流网络传输协议族允许网络设备在转发数据包的同时对数据包进行分段。然而,众所周知,这是一种降低网络性能的方式。一个不分段位标识添加在IP报头中,告诉网络设备将数据包丢弃而不是将其分段,并且需要投入大量精力来发现任何一对设备之间可以传输的最大数据包。新一代IP协议—IPv6,从协议规范中删除了网络设备对数据包的分段。

1.5 无环路径计算

在网络工程领域中,过去经常讨论的一个问题是,在分组交换网络中如何计算无环路径?这个问题常常使判断分组交换或电路交换哪个解决方案更好变得更加困难。
在整个网络工程的历史中,正如分组交换网络一直与分布式控制平面相联系,电路交换网络与集中式控制平面相联系,有效地计算无环路径的问题对判定分组交换网络是否可行产生了重大影响。
注意:无环路径将在第二部分详细讨论。
在网络工程的早期阶段,可用的处理能力、内存和带宽往往非常有限,见表1-1。

表1-1 计算能力、内存和带宽的历史

image.png

在1984年,发生了许多这样的讨论,对于两种计算双向无环路径的方法,处理器和内存数量上的任何差异都会对构建网络的成本产生重大影响。当带宽非常昂贵时,减少控制平面传输所需的比特数(用来计算一组无环路径所需的信息),对网络能够处理的用户流量有很大影响。减少控制操作所需的比特数也对低带宽下网络的稳定性有很大影响。
例如,使用类型长度向量(Type Length Vector,TLV)的格式来描述网络传输的控制平面信息,会在整个数据包上添加几个八位组的信息—但在2Mbit/s链路的情况下,随着控制平面的负载加剧,其成本远远超出协议可扩展性所带来的长期优势。
注意:TLV将在第2章介绍。
协议战争在某些方面非常激烈;他们实施了整个研究项目,撰写了论文,讨论了为什么和如何使一种方案优于另一种方案。作为这些争论的一个例子,在互联网工程工作组(IETF)开发OSPF协议期间一件衬衫上写着:IS-IS=0。这里的“IS-IS”指的是中间系统到中间系统(Intermediate System-to-Intermediate System),它是一种最初由国际标准化组织(ISO)开发的控制平面(路由协议)。
多种机制可用来解决网络中无环路径计算的问题。最终,有三种常见的解决方案被广泛地部署和采用:

  • 距离向量协议,根据逐跳的路径代价来计算无环路径。
  • 链路状态协议,通过一个跨网络设备的同步数据库来计算无环路径。
  • 路径向量协议,根据先前的跳转记录来计算逐跳的无环路径。

关于哪种协议最适合某个特定的网络,以及出于什么特殊原因,仍在讨论中。这可能是一场永无止境的讨论,因为这个问题(可能)没有最终答案。相反,就像将一个网络与一个企业相匹配一样,使一个特定的控制平面在一个特定的网络上工作可能总是会涉及某种程度的艺术(或匠艺)。然而,随着网络速度的提高—在处理能力、内存和带宽方面,问题的紧迫性在很大程度上已经显现出来。

1.6 服务质量

随着实时流量开始通过分组交换网络进行传输,QoS成为一个主要的问题。语音和视频都依赖于网络能够在主机之间快速传输流量(具有低延迟),并且数据包间隔(抖动)的变化越少越好。关于QoS的讨论实际上是在分组交换网络的早期阶段开始的,在考虑ATM的时期达到了高峰。实际上,ATM的主要优点之一是能够严格地控制数据包在分组交换网络上的传输方式。随着ATM在市场上的失败,对于需要对抖动和延迟进行严格控制的应用程序,出现了两种截然不同的思路:
这些应用程序永远不会在分组交换网络上运行;这些类型的应用程序总是需要在单独的网络上运行。
只要找到一组正确的QoS控制集就可以让这些应用程序在分组交换网络上运行。
注意:第8章将详细讨论服务质量。
大多数供应商和工程师关注的主要应用是语音服务,而最根本的问题是:是否有可能在网络中提供高质量语音的同时,还能进行大量文件传输和其他非实时通信?鉴于此,他们发明了一些复杂的方案,允许对数据包进行分类和标记(称为QoS标记),这样网络设备就知道如何正确地处理它们了。为了将这些QoS标记从一种网络传输到另一种网络,他们开发了映射系统,并投入大量时间和精力来研究排队机制—在接口发送数据包的顺序。图1-7显示了一个QoS系统的示例图,应用程序和QoS标记之间的映射足以说明这些系统的复杂性。
image.png

图1-7 QoS规划与映射关系

如表1-1所示,链路速度的增加对围绕QoS的讨论产生了两方面的影响:

  • 更快的链路显然可以传输更多的数据。由于语音和视频流在整个带宽使用中所占的比例越来越小,因此在不同应用程序之间大力平衡带宽使用的必要性变得不那么重要了。
  • 通过物理芯片将数据包从内存转移到电线上所需的时间随着带宽的增加而减少。

随着可用带宽的增加,通过复杂的排队策略来抵消网络抖动变得不那么重要了。新型排队系统可以更有效地管理不同类型的流量,减少了以细粒度方式标记和处理流量的必要性,从而提高了速度。
这些带宽的增加通常是将铜缆改为光纤来实现的。光纤不仅可以提供更大的带宽,而且可以更可靠地传输数据。建立物理链路的方式也得到了发展,使得它们更能抵抗破损和其他物理问题。带宽可用性增加的第二个因素是互联网的发展。随着网络变得越来越普遍,连接越来越紧密,单链路故障对可用带宽的数量和网络流量的影响越来越小。
随着处理器速度的提高,开发出丢弃和延迟数据包对实时流质量影响较小的系统成为可能。处理器速度的提高也使得采用高效压缩算法成为可能,减少了每个流的大小。在网络方面,更快的处理器意味着控制平面可以更快地计算一组无环路径,减少链路和设备故障的直接和间接影响。
最终,尽管QoS仍然很重要,但可以更加简化。即使是最难以处理的应用程序,4~6个队列也足以能够支撑了。如果需要更多队列的话,现在的一些系统则可以使用流量工程或主动队列管理,以便在队列管理的复杂性和应用程序支持之间进行平衡。

1.7 集中式控制平面的反击

在20世纪90年代,为了解决分组交换网络的许多问题,如复杂的控制平面和QoS管理,研究人员开始研究一种叫作主动网络(Active Networking)的概念。主动网络的总体想法是,分组交换网络的控制平面可以并且应该与转发设备分离,以便网络能够与运行在其上的应用程序交互。
在IETF的转发和控制单元分离(ForCES)工作组的形成过程中,再次讨论了在分组交换网络中更清晰地分离控制和数据平面的基本概念。这个工作组主要负责创建一个接口应用程序,该应用程序可用于将转发信息安装到网络设备上。该工作组最终于2015年关闭,其标准从未得到广泛实施。
2006年,研究人员开始寻找一种在分组交换网络中进行控制平面实验的方法,而不需要对设备本身进行代码修改—这也是一个难题,因为这些设备中的大多数都被供应商以不可修改的设备(或黑盒)出售。最终的结果是OpenFlow,即一个允许应用程序直接在转发表(而不是路由表;在本书第一部分的多处对此做了更充分的解释)中安装条目的标准接口。该研究项目作为一个特性被一些供应商采用,许多控制器由供应商和开源项目创建。许多工程师认为,OpenFlow将通过集中式控制平面彻底改变网络工程。
现实情况可能会大不相同,可能发生的事情是数据网络世界中一直发生的事情:集中式控制平面中较好的部分将被使用到现有系统中,而完全集中式模型将被丢弃到一边,从而改变了关于控制平面如何与应用程序及整个网络交互的想法。

1.8 复杂性

到目前为止所描述的技术(电路和分组交换、控制平面和QoS)都非常复杂。事实上,网络复杂性的增加似乎没有尽头,尤其是在应用程序和企业的需求越来越高的情况下。本节将讨论关于复杂性和网络的两个具体问题:

  • 什么是网络复杂性?
  • 网络复杂性可以“解决”吗?

本节的最后一部分将考虑一种将复杂性看作一组权衡的方法。

1.8.1 为什么如此复杂

虽然最显然的起点可能是复杂性的定义,但从更广义的角度来看,实际上更有效的思考是为什么需要复杂性。简单地说,“解决”复杂性有可能吗?为什么不设计更简单的网络和协议呢?从长远来看,为什么在网络世界中所有让事情变得更简单的尝试最终都似乎使事情变得更复杂呢?
例如,通过在IP之上(或通过IP)进行隧道传输,控制平面的复杂性就会降低,整个网络就会变得更简单。那么,为什么隧道覆盖最终又会包含如此多的复杂性呢?
这个问题有两个答案。第一个答案是,人的本性就是如此,工程师们总是会发明数十种不同的方法来解决同样的问题。在虚拟世界中尤其如此,新的解决方案(相对)易于部署,也相对容易找到前面一组解决方案中的问题,并且(相对)容易稍作变换以创造一种“比旧方案更好的解决方案”。从供应商的角度来看也是如此。当构建新的产品时,通常意味着能够销售全新的产品和技术—即使这些技术看起来在很多方面与原来的技术类似。换句话说,虚拟空间非常混乱,因为在那里构建新事物非常容易。
然而,第二个答案依赖于一个更根本的问题:复杂性对于处理疑难问题的不确定性是必要的。如图1-8所示。
image.png

图1-8 复杂性、有效性和健壮性

增加复杂性似乎使网络能够更容易地处理未来的需求和意外事件,并通过更少的基本功能集提供更多的服务。如果是这样,为什么不简单地在单个网络上构建一个运行的协议,以处理可能抛出的所有需求,并且能够处理可以想象的任何事件序列呢?这样肯定会减少网络工程师需要处理的可移动组件的数量,让我们的生活更简单,对吧?事实上,有许多不同的方法来管理复杂性,例如:
1)将复杂性抽象出来,在系统的每个部分的周围构建一个黑盒,这样每个部分和这些部分之间的交互就更容易理解。
2)把复杂性扔到隔壁—将问题从网络领域转移到应用领域、编码领域或协议领域。正如RFC1925所说:“转移问题比解决问题更容易(例如,将问题转移到整个网络体系结构中的不同部分)。”
3)在上面添加另一层,通过添加另一个协议或隧道,将所有的复杂性视为一个黑盒。回到RFC1925:“总是有可能添加另一个中间层。”
4)在复杂性面前不知所措,将它们贴上“遗产”的标签,并追求一些新鲜事物,后者被认为能够以一种不那么复杂的方式解决所有问题。
5)忽视问题并希望它会消失。为异常争辩:“就这一次”,这样在一个非常紧凑的时间表内,一个特定的业务目标就可以实现,或者解决了一些问题,并且承诺复杂性问题将在“以后”得到处理。
然而,这些解决方案中的每一个都有一组需要考虑和管理的权衡。此外,在某一时刻,任何复杂的系统都会变得健壮而脆弱。当一个系统能够对预期的环境做出弹性反应时,它是健壮的,但也是脆弱的,一组意想不到的事件会导致它失败。下面用现实世界的例子来说明,刀刃需要有一些独有的特征组合。它们必须有足够的硬度来支撑边缘和切割,同时还必须有足够的柔韧性以在使用过程中微微弯曲,在没有任何损坏迹象的情况下恢复到原来的形状,并且在掉落时不被打碎。经过多年的研究和经验积累,人们终于找到了一种可以用来制作刀刃的合适的金属。然而,对于哪种材料适合于特定的性能,以及在什么条件下适合等问题,人们仍在进行长期而深入的技术讨论。
“试图证明网络对可预见问题的健壮性,往往会使它在处理不可预见问题时变得脆弱(就是所谓的僵化效应)。赋予同一个网络以最强大的能力来抵御不可预测的问题,这必然意味着它不能对可预测的问题处理过于强大。不能对可预测的问题进行太健壮的处理对于避免僵化问题是必要的,但并不一定意味着可以提供处理不可预测的网络问题的健壮能力。”
—Tony Przygienda
复杂性是必要的,它就不能被“解决”。

1.8.2 定义复杂性

鉴于复杂性是必要的,工程师们需要发现或构建模型或框架,来学习如何对复杂性进行管理。构建这种模型的最佳起点是一个最根本的问题:从网络的角度来说,复杂性意味着什么?你能把一个网络放在秤上,然后将指针指向“复杂”吗?是否有一个数学模型,可以输入一组网络设备的配置和拓扑结构,以产生一个“复杂性指数”?尺度、弹性、脆性和优雅的概念与复杂性有什么关系?建立模型的最好起点就是一个实际例子。
1.控制平面状态与延展
什么是网络延展(stretch)?尽可能以最简单的术语来说,就是网络中两点之间的最短路径与实际流量路径的差距。图1-9说明了这个概念。
image.png

图1-9 以一个小网络来说明网络状态和网络延展

假设此网络中每条链路的成本为1,则路由器A和C之间的最短物理路径,也即最短逻辑路径为[A, B, C]。但是,如果[A, B]链路上的度量成本更改为3,会发生什么情况呢?最短的物理路径仍然是[A, B, C],但最短的逻辑路径是[A, D, E, C]。最短物理路径和最短逻辑路径之间的差值是在路由器A和C之间转发数据包必须传输的距离—在该例中,可以按照(4 [A, D, E, C])-(3 [A, B, C])来计算,其延展为1。
2.如何测量网络延展
网络延展的测量方式取决于在任何给定情况下什么是最重要的,最常用的方法是比较网络中的跳数,如示例中所用到的方式。在某些情况下,考虑两条路径上的度量指标、两条路径上的延迟条件或其他度量指标可能更重要,但重要的一点是要保证在每条可能路径上的测量一致性,以便对路径进行精准比较。
有时很难区分物理拓扑和逻辑拓扑。在上面的例子中,链路的度量指标是否由于[A, B]链路实际上是一个较慢的链路而增加呢?如果是这样的话,这是延展的一个例子,还是一个使逻辑拓扑与物理拓扑一致的例子就值得商榷了。
根据这一观察结果,从延展的角度来定义策略比其他任何方式都要容易得多。策略即增加网络延展的任何配置。例如,使用基于策略的路由或流量工程,将流量从最短的物理路径推到更长的逻辑路径,以减少特定链路上的拥塞,这就是一种策略—它增加了网络延展。
增加网络延展并不总是一件坏事。理解延展的概念可简单地帮助我们理解各种其他概念,并围绕复杂性和优化权衡建立一个框架。从物理上讲,最短路径并不总是最佳路径。
在这个例子中,网络延展非常简单—它影响每个目的地址,并且影响每个流经网络的数据包。在现实世界中,事情要复杂得多。网络延展实际上是每对源地址/目的地址,这使得在整个网络范围内测量非常困难。
3.定义复杂性:一个模型
几乎在每个网络或协议设计决策中都有三个组件—状态、优化和表面。可以把这些组件看作一组权衡,如图1-10所示,并在下面的列表条目中进行描述。

image.png


图1-10 可能存在的平面

  • 增加优化总是朝着更多状态或更多交互表面方向移动。
  • 减少状态总是朝着更少的优化或更多交互表面方向移动。
  • 减少交互表面始终朝着更少的优化或更多状态方向移动。

当然,这些都不是严格的规则;取决于特定的网络、协议和需求,但是它们通常是正确的,足以使这个模型成为理解复杂性权衡的有用模型。
4.交互表面
虽然状态和优化相当直观,但是在交互表面多花一点时间是值得的。交互表面的概念很难理解,主要是因为它涵盖了非常广泛的思想。也许举个例子会有帮助。假设一个函数:

  • 接受两个数字作为输入;
  • 然后做加法;
  • 将得到的和再乘以100;
  • 返回最终结果。

在一些较大的系统中,这个单一的函数可以看作一个子系统。假设把这个函数分解成两个函数,一个做加法,另一个做乘法。现在已经创建了两个更简单的函数(每个函数只做一件事),但是还要在这两个函数之间创建一个交互表面—你已经在系统中创建了两个相互作用的子系统,而在此之前只有一个子系统。
作为另一个例子,假设有两个控制平面在单个网络上运行。这两个控制平面中的一个携带了关于网络外部可达的目的地址(外部路由)的信息,而另一个携带网络内部可达的目的地址(内部路由)。虽然这两个控制平面是不同的系统,但它们仍将以许多有趣而复杂的方式进行交互。例如,外部目的地址的可达性必然取决于网络边缘之间内部目的地址的可达性。这两个控制平面现在必须一起工作,以构建一个完整的信息表,用于在网络中转发数据包。
甚至在一个控制平面内通信的两个路由器也可以被视为交互表面。这种定义的广度使我们很难定义什么是交互表面。
引入交互表面并不是一件坏事:它们可以帮助工程师和设计师在任何给定的问题空间中,从建模到实现,分拆问题并解决问题。与此同时,交互表面可以在不用深思熟虑的情况下轻松引入。

1.8.3 通过细腰模型管理复杂性

细腰模型很像黄蜂的腰部,在自然界中广泛使用,在工程界也有着广泛的应用。虽然工程师们并不经常有意识地应用这个模型,但它实际上一直都在被使用。图1-11描述了IP协议族在四层国防部(DoD)模型背景下的细腰模型。
image.png

图1-11 DoD模型与细腰模型

在底层的物理传输系统中有大量的协议,从以太网到卫星通信。在顶层,信息被编组并呈现给应用程序,也有大量的协议,从超文本传输协议(HTTP)到TELNET(以及其他数千个协议)等。然而,当移动到协议栈的中间时,会发现一件有趣的事情:协议的数量减少了,从而形成一个细腰。为什么这样能控制复杂性?回到复杂性的三个组成部分—状态、表面和优化,可揭示细腰模型和复杂性之间的关系。

  • 状态被细腰模型划分为两种不同类型:有关网络的信息和有关传输的数据信息。上层应用关心的是列集的可用方式和信息呈现,下层关心的是发现是否存在连接以及连接属性。下层不需要知道如何格式化一个FTP帧,上层也不需要知道如何通过以太网传输数据包—模型两端的状态都减少了。
  • 通过将各个组件之间的交互点精确地减少到一个,即IP协议,可以控制交互表面。通过标准流程可以很好地定义这个单一交互点,对一个交互点的变化进行严格管理可防止大规模的快速变化对上下层协议栈的影响。
  • 通过允许一层到达另一层,并对应用程序隐藏网络状态可实现优化的权衡取舍。例如,除了从本地收集的信息外,TCP实际上并不知道网络的状态。如果TCP希望在使用网络资源方面的效率更高,就只能以层次违规为代价,这就打开了难以控制的交互表面。
    于是,网络模型的协议栈分层是控制网络中各种交互组件复杂性的直接尝试。

复杂性与权衡取舍

复杂性的一个非常基本的法则可以这样表述:在任何复杂的系统中,都会存在三方面权衡的集合。这里描述的状态/优化/表面(SOS)模型就是这样一组权衡。另一组权衡是从事数据库工作的工程师所熟悉的一致性/可访问性/分区(CAP)定理。还有一组是经常在更广泛的语境中出现的快速/成本/质量(QSQ)权衡。这些不是复杂性的组成部分,而是复杂性的结果。工程师们需要善于发现这些类型的权衡三角形,准确地理解三角形的“角”,确定可能的最优解决方案所在的平面位置,并能够清楚地说明为什么有些解决方案根本不可能或不可取。
如果没有找到权衡点,说明你没有足够努力去寻找—在所有工程工作中,这是一个很好的经验法则。

1.9 总结思考

本章并不打算提供细节,而是对计算机网络技术历史范围内的关键术语进行概述。计算机网络世界的历史并不长(例如,人类历史至少可以追溯到6000年前,也可能会是数百万年前,这取决于你的观点),但这段历史仍然包含了一系列往复而崎岖的道路,一般人往往难以理解事情的原因和经过。
有了这篇介绍,现在是时候转向第一个感兴趣的话题了,即了解网络是如何工作的—数据平面。

1.10 拓展阅读

image.png

1.11 复习题

1.对于一个可以清楚地看到不同业务假设的特定领域,是选择使用少量大型网络设备(例如支持多个线卡的机架式路由器),还是使用大量较小的设备(所谓披萨盒子(pizza box)或一个机架单元,具有固定数量可用接口的路由器),来构建校园网络或数据中心网络?列出一些可能使一个选择比另一个选择成本更高的不同因素,然后解释什么样的业务条件可能决定使用其中的一个而不是另一个。
2.软件应用程序中代码膨胀的一种“外部表现”是傻瓜式旋钮;虽然有很多关于傻瓜式旋钮的定义,但它们通常被认为是一种配置命令,即可以修改协议或设备操作方式中一些小的、特定的操作点。实际上有一些研究论文和网上的讨论是围绕着傻瓜式旋钮的危害性展开的;还可以在发行多年的多个软件版本中查找到来自各种网络设备的命令集。为了观察网络设备复杂性的增长,追踪这些可用命令的数量,并试图判断这些命令中有多少可以被视为傻瓜式旋钮或者主要功能。你能从这些信息中收集到什么吗?
3.TDM并不是唯一可用的多路复用方式,还有频分多路复用(FDM)。对于FDM,像TDM那样划分信道有用吗?为什么?
4.简述什么是反向复用器,以及它的用途。
5.阅读本章“拓展阅读”部分中有关ATM局域网仿真(LANE)的两个参考资料。以复杂性模型来描述此解决方案的复杂性;在哪里添加了状态和表面,以及每次添加会获得哪种优化?你是否认为ATM LANE的解决方案在提供预设服务类型与共享以太网之类之间,提供了一系列不错的权衡方案?
6.从人类的角度来描述为什么延迟和抖动在实时(交互式)语音及视频通信中是不好的。这些问题是否也适用于录制的声音和视频(它们会在稍后的时间进行存储和回放)?为什么?
7.实时(交互式)语音和视频使用网络与大文件传输有何不同?是否有特定的点可以比较这两种流量?描述网络可能需要如何对每种流量类型做出不同的反应。
8.书中称“细腰模型”是自然界中用来管理复杂性的一种常见策略。请在自然界中找到几个例子。除了TCP/IP,至少研究一组其他协议(协议栈),如Banyan Vines、Novell的IPX或OSI系统。这些协议中是否也有细腰模型?请具体描述。
9.在其他计算领域,如在个人计算机中使用的操作系统或移动计算设备(如平板电脑和移动电话),是否也存在细腰模型?你能够识别出它们吗?
10.研究一些关于在IPv6中去除IP协议分段的争论,总结各方提出的观点。你是否同意去除分段的最终决定?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
http://www.vxiaotou.com