1.1 什么是拥塞
Last updated
Last updated
任何一个在高峰时间在路上开过车的人都经历过拥塞(塞车)。塞车的本质是:资源(路上的空间)是有限的,但同时又有很多参与者(汽车,卡车)在竞争这个资源。随着高峰时间的到来,道路依旧按既定方式运作,只是车辆数量增多了。当车辆数量变得足够多之后,每个车都不得不减速(因为没有足够的空间让所有人在保持安全距离同时开到速度上限),这时候道路的实际运输能力反而下降了,因为速度下降导致单位时间通行的车辆变少了。越多的竞争者参与,导致每个人分配到的资源反而比应该分配到的更少(所谓的应该分配是指资源总数除以参与竞争的人数),从而导致总的可用资源数减少,如图 1 所示。这就是拥塞崩溃 的本质:当拥塞过于严重时,每一个参与者分配到的资源比没有拥塞时要差的多。尽管对于计算机网络来说,拥塞崩溃的机制与公路有很大不同,但它们可以认为是一类问题(网络人员喜欢将现实世界的拥塞与网络世界的拥塞进行类比,但需要认识到这并不是完美的类比)。
本书侧重于分组交换(packet switching)网络中的拥塞控制。分组交换的基础之一是多路复用,这是指一种系统资源(例如物理链路或路由器中的队列)被多个用户或应用共享的过程。就互联网而言,分组交换网络是统计多路复用,这意味着,由于数据包的出现是随机的,从统计学上来看多个用户的数据包会平均占用系统资源以确保资源不被耗尽。而拥塞崩溃的存在表明,有时统计数据并不像我们希望的那样发挥作用。
为了了解统计多路复用 是如何工作的,可以参考图2中所示的一个简单网络。其中左侧的三个主机(发送方S1-S3)通过一个物理链路向右侧的三个主机(接收方R1-R3)发送数据(为了简单起见,假设主机S1向主机R1发送数据,以此类推)。在这种情况下,三组数据流(对应于三对主机),通过交换机1 被复用到单个物理链路上,然后由交换机2 再次拆分成独立的数据流。请注意,我们并没有解释什么是“数据流”,在后续章节我们将对其进行更精确的说明。
统计多路复用 意味着,网络中的所有主机都可以在任何合适的时间发送数据包。如果恰巧多个数据包同时到达一个交换机,其中一个数据包会先被传输,其它数据包则会被放入队列中。因此,链路和交换机内的队列都是共享资源,并且都是有限的。链路每秒只能传输有限数量的bit,队列也只能存储有限数量的数据包(或字节数),超出共享资源的限制就会导致丢弃数据包。管理这些共享资源,并尽量避免拥塞崩溃,是拥塞控制的关键所在。一个偶尔将数据包放入队列的交换机可以认为是在正常运行。而一个一直或大部分时间,队列中都有大量数据包的交换机,则可以认为处于拥塞状态中。稍后我们将讨论网络拥塞崩溃的定义,但它始于拥塞的交换机、路由器或链路。
为了更深入地了解统计多路复用,以及为什么它是分组交换网络的选用的方法方法,我们推荐以下内容。
更多阅读:Requirements. Computer Networks: A Systems Approach, 2020.
在分组交换网络中,当交换机构建一个等待传输的数据包队列时,它需要决定哪个数据包先发送。网络中的每个交换机都独立地、逐个数据包进行此决定。这里有个问题是:如何以公平的方式做出此决定?许多交换机被设计成按先进先出(FIFO)的方式转发数据包。另一种方法是以轮询方式发送来自不同数据流的数据包,这样可能可以确保某些数据流获得链路带宽的特定比例,或者确保它们的数据包在交换机中的延迟不超过特定时间。试图为特定数据流分配带宽的网络经常被称为支持服务质量(QoS)。
从上面的讨论可以得出一个结论:分组交换网络的特性决定了它有时会出现拥塞(注,这里的逻辑是,因为使用了分组交换网络,而分组交换网络是统计多路复用,统计多路复用依赖的是数据包在统计学上随机出现,无法避免数据包大量涌入,从而导致拥塞)。本书将重点介绍如何通过有效的响应来减轻拥塞,或者在拥塞发生前规避它从而缓解拥塞,所进行的大量工作。