TCP缓慢启动如何提高吞吐量?

时间:2012-06-13 03:16:58

标签: tcp congestion-control

在互联网开始出现“拥堵崩溃”的时候,TCP慢启动才出现。来自Van Jacobson and Michael Karels paper的轶事示例如下:

During this period, the data throughput from LBL to UC Berkeley (sites separated
by 400 yards and two IMP hops) dropped from 32 Kbps to 40 bps.

拥塞问题通常被描述为由高速链路到慢速链路的转换,以及此瓶颈处缓冲区的数据包建立/丢弃。 我想要了解的是这样的构建会如何导致端到端吞吐量的下降,而不是简单地在链接的高速部分引起多余的活动/重传进入完整的缓冲区。例如,请考虑以下网络:

    fast       slow       fast
A ======== B -------- C ======== D

A和D是端点,B和C是从高速网络到低速网络转换的数据包缓冲区。所以例如A / B和C / D之间的链路为10Mbps,B / C之间的链路为56Kbps。现在,如果A向D发送一个(假设理论上是无限的)消息,我试图理解的是为什么如果它只是用数据敲打TCP连接就会花费更多时间而不是适应连接中间较慢的链路速度。我设想B只是一些缓冲器以56Kbps的固定速率耗尽的东西,无论它的缓冲器被A锤击的程度有多大,而且无论因为满缓冲器而丢弃了多少数据包。因此,如果A总是保持B的缓冲区满(或者可能是满的情况),并且B总是以56Kbps的最大速率进行传输,那么通过使用慢启动,吞吐量会如何变得更好?

我唯一能想到的是,如果已收到的相同数据包D必须在拥塞时通过慢速B / C链路重新传输,这就阻止了新数据包。但D不会经常确认它收到的任何数据包,所以重传的数据包应该主要是那些合法地没有被D接收的数据包因为它们被丢弃在B的缓冲区吗?

1 个答案:

答案 0 :(得分:2)

请记住,网络涉及在多台计算机之间共享资源。非常简单,需要慢启动以避免少量TCP会话耗尽路由器缓冲区(在图中,这很可能是在B点和C点)

来自RFC 2001, Section 1

  

旧TCP将与发送注入多个的发送者建立连接      进入网络的段,最多由广告所宣传的窗口大小      接收器。虽然这两个主机位于同一个LAN上时可以,      如果发送者和发送者之间有路由器和较慢的链接      接收器,问题可能出现。一些中间路由器必须排队      数据包,该路由器可能会耗尽空间。      [2]显示了这种天真的方法如何降低TCP的吞吐量      连接很大。

     

...

[2]  V. Jacobson, "Congestion Avoidance and Control," Computer
    Communication Review, vol. 18, no. 4, pp. 314-329, Aug. 1988.
    ftp://ftp.ee.lbl.gov/papers/congavoid.ps.Z.

路由器必须具有有限的缓冲区。链路之间的速度不匹配越大,没有缓慢启动的缓冲区耗尽的可能性就越大。缓冲区耗尽后,平均TCP吞吐量会下降,因为缓冲会增加TCP利用链路的能力(防止不必要的瞬间链路饱和下降)。

请注意,上面的RFC 2001已被RFC 5681取代;但是,RFC 2001为您的问题提供了更可靠的答案。

从你的OP ......

  

现在,如果A向D发送一个大的(比如理论上无限的)消息,那么我想要理解的是,为什么如果它只是用数据敲打TCP连接而不是适应连接过程中链接速度较慢。

首先,TCP中没有无限消息。在慢启动出现之前,TCP受初始窗口大小的限制。

所以,假设最初的TCP段长度为64KB。如果整个TCP段填充B处路由器的tx缓冲区,由于涉及丢包,ACK和TCP退避的动态,TCP随着时间的推移利用较少的链路。让我们来看看个别情况:

  • B的tx_buffer< 64KB:您自动丢失了重传时间,因为A的TCP发送速度快于B可以使数据包出列
  • B的tx_buffer> = 64KB:只要A是唯一的发送站,没有负面影响(只要D正确地确认);但是,如果有多个主机在A的LAN上传输试图通过56K链路传输,则可能存在问题,因为在56K时将单个1500字节数据包出列需要200毫秒。如果你有来自A的64KB初始窗口的44个1500字节数据包(44 * 1460 = 64KB;你只得到1460字节的TCP有效载荷),路由器有一个饱和链接,差不多9秒处理A的流量。

第二种情况既不公平也不明智。 TCP在看到任何数据包丢失时会退出...共享单个链路的多个主机必须使用慢启动才能保持情况正常。

顺便说一句,我从未见过一个在接口上有9秒缓冲的路由器。没有用户会容忍这种延迟。大多数路由器的最大速度大约为1-2秒,而这是几年前的T-1速度。由于多种原因,今天的缓冲区甚至更小。