2

TCP 慢启动出现在 Internet 开始经历“拥塞崩溃”的时期。Van Jacobson 和 Michael Karels 论文中的轶事示例如下:

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 的缓冲区中?

4

1 回答 1

2

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

来自RFC 2001,第 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 正确 ACK-ing);但是,如果有多个主机在 A 的 LAN 上传输试图通过 56K 链路进行传输,则可能会出现问题,因为在 56K 上将单个 1500 字节数据包出列需要 200 毫秒。如果您有来自 A 的 64KB 初始窗口的 44 个 1500 字节的数据包(44*1460=64KB;您只获得 1460 字节的 TCP 有效负载),则路由器在处理 A 的流量时有将近 9 秒的饱和链路。

第二种情况既不公平也不明智。当 TCP 看到任何数据包丢失时,它会后退……共享单个链接的多个主机必须使用慢启动来保持情况正常。

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

于 2012-06-13T09:18:08.910 回答