小结

在本单元中,你已经看到了传输和分组交换是如何通过拥塞控制进行互动的。流量控制确保发送方的发送量不超过接收方的接收量,但两者之间通常有许多路由器,每个路由器都有自己的时变队列。拥塞控制是指端点如何控制他们的发送速率,以便他们不会因为填满队列而使网络过度拥挤。这使得像TCP这样的协议更快。它还能使网络保持良好的工作状态,利用链路的容量,但不会丢掉太多的分组。

你学到的:原则

菲尔:首先,尼克解释了网络拥塞的原理。他向你展示了当一个路由器接收分组的速度超过它的发送速度时会发生什么。如果拥塞持续时间很短,那么路由器可以将这些额外的流量吸收到队列中并耗尽队列。如果拥塞的时间很长,长到队列溢出,那么路由器就不得不放弃一些分组。

尼克介绍了一个非常有价值的方法来思考这个问题。与其想出一个丢弃分组的方案,不如考虑一下你希望整个网络行为是什么。我们希望网络是公平的,并解释了这意味着什么,介绍了最大最小公平的概念。最大-最小公平说的是,如果不能在不降低流量的情况下增加流量,则网络是公平的。

有很多方法来实现这一目标,今天的网络有很多不同的机制。但我们特别关注一个问题,即TCP如何控制其发送速率。我们介绍了TCP使用的基本算法,称为加法增加,乘法减少,或AIMD。当运行顺利时,TCP在每个往返时间内增加它可以拥有的未完成字节数,即一个段大小。当TCP检测到一个分组被丢弃时,它会将其未处理的字节数减半。

我们用TCP的锯齿图来观察这种行为。虽然每个单独的流量都有一个锯齿,但在许多流量共享的链路上,这些都是平均的,因此链路的使用率始终很高。利用锯齿图,我们用简单的AIMD得出了TCP的吞吐量。如果你假设网络以统一的速率pp丢包,那么TCP流的吞吐量就是321RTTp\sqrt{\frac{3}{2}} \frac{1}{R T T \sqrt{p}}。这个方程做了很多简化的假设,但事实证明,它通常是相当准确的,所以在思考网络可能的行为时是一个非常有价值的工具。

小结:

  • 什么是网络拥塞,是什么原因造成的,在路由器中发生了什么

  • 我们希望网络在拥塞时如何表现:最大-最小公平

  • AIMD:加法增加,乘法减少

  • 多个AIMD流的行为和TCP吞吐量方程式

    R=321RTTpR=\sqrt{\frac{3}{2}} \frac{1}{R T T \sqrt{p}}

你学到了什么?实践

尼克:然后你了解到TCP是如何在实践中实现这些原则的。菲尔告诉你80年代末互联网是如何因拥塞而崩溃的,以及对TCP所作的修正,这些修正至今仍在使用。你了解了TCP的三个版本:TCP Tahoe、TCP Reno和TCP New Reno。

我们所涉及的第一个重要概念是,TCP端点维护一个拥塞窗口。TCP流在网络中可以有NN个未确认的字节,其中NN是其流控制窗口和拥塞控制窗口的最小值。你发送分组的速度不能超过另一端能够接收的速度,也不能超过网络能够处理的速度。你学到了TCP如何使用两种状态控制这个拥塞控制窗口的大小:慢速启动和拥塞避免。慢速启动让TCP迅速找到接近正确的拥塞窗口大小,而拥塞避免使用AIMD。TCP从慢速启动开始,并在首次检测到连接时过渡到拥塞避免。它需要这个估计值来计算出确认何时超时。通过跟踪一个网段收到确认的平均时间和差异,TCP可以避免不必要的重传,也不会等待太长时间。

你学会了TCP是如何使用一种叫做"自计时"的技术来控制它在网络中投放分组的速度的,你第一次看到自时钟是在我向你展示TCP行为的动画时。然后,菲尔带你看了一些这方面的例子。通过自计时,TCP只在收到确认或超时时才将新的分组放入网络。这对防止拥塞很有帮助,因为它意味着TCP只在分组离开网络时才将分组放入网络。

最后,我们介绍了TCP Reno和TCP New Reno中增加的三项优化。快速重传让TCP在只有一个分组被丢弃的情况下继续取得进展。与其等待超时,TCP在检测到前一个网段的三个重复确认时就会重传一个网段。这是一个信号,表明TCP正在继续接收数据段,但还没有收到那个特定的数据段。使用快速恢复,TCP Reno不会因为三次重复的确认而退回到慢速启动状态,它只是将拥塞窗口减半并保持在拥塞避免状态。最后,TCP New Reno增加了一个额外的优化,即窗口膨胀,这样,三个重复的ACK不会导致TCP失去一个传输,因为它在等待丢失的段被确认。

菲尔:拥塞真正令人着迷的是,它是我们在互联网发展过程中发现的东西。没有人真正想过这样的事情会发生,或者如何控制它。一旦网络变得足够大并且被大量使用,这就是一种紧急行为。现在,它是网络的一个基本概念,被认为是建立具有高性能的强大网络的关键。

尼克:现代版本的TCP比我们所谈的要先进一些,但它们主要是为了处理快得多的网络而发展的。操作系统中的TCP版本在算法上有TCP Reno或TCP NewReno,增加了额外的功能和操作模式来处理非常快的网络。看看Linux的源代码,你会看到这些算法在里面。

菲尔:但同样巧妙的是,这些细枝末节的算法背后有完善的概念基础和理论。一方面,我们可以谈论RTT方差估计、快速恢复和自计时。另一方面,我们也在谈论AIMD流量,它可以收敛到最大最小公平。

小结:

  • TCP Tahoe、Reno和New Reno

  • 拥塞窗口

  • 慢速启动、避免拥塞

  • RTT估算

  • 自时钟

  • 快速重传、快速恢复、拥塞窗口膨胀

Last updated