【发布时间】:2012-06-13 03:16:57
【问题描述】:
TCP 慢启动出现在 Internet 开始经历“拥塞崩溃”的时期。来自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 发送 large(假设理论上是无限的)消息,我想了解的是,如果它只是用数据敲击 TCP 连接,为什么它需要更长的时间才能通过与适应连接中间较慢的链接速度相比。我设想 B 只是其缓冲区以 56Kbps 的固定速率耗尽的东西,无论其缓冲区被 A 敲击的程度如何,也无论由于缓冲区已满而必须丢弃多少数据包。因此,如果 A 始终保持 B 的缓冲区已满(或可能是过满),并且 B 始终以 56Kbps 的最大速率传输,那么通过使用慢启动来提高吞吐量如何?
我唯一能想到的是,如果 D 已经收到的 相同 数据包必须在拥塞下通过慢速 B/C 链路重新传输,这会阻塞新数据包。但是 D 通常不会对它收到的任何数据包进行 ACK 确认,因此重传的数据包应该主要是那些合法地没有被 D 接收到的数据包,因为它们被丢弃在 B 的缓冲区中?
【问题讨论】:
-
或者,也许,这些段被 A 重新传输,因为它没有看到它们的 ACK,因为它们仍在传输中......它只会等这么久才认为他们是 MIA。在这一点上,它会将大部分数据发送两次,其中大部分是第三次,第三次大部分是第四次,并且...
-
@cHao 我确实想到了这个。他们仍在运输中的事实似乎意味着 B 的缓冲膨胀。我不认为缓冲膨胀在当时是一个问题,但我可能是错的?
-
不确定。但也请考虑一下……如果那样的话,A 和 D 只知道链路各自端的速度。他们不知道 BC 链接有多快。如果他们假设他们有 10Mbps 的速度可以玩,并且实际上以 10Mbps 的速度发送内容(当然,设置足够大的窗口以使其有用),并且 B 丢弃了 A 的大部分数据包,他们会仍然需要重新传输...所以现在 A 占用了其网络上的大量带宽(不仅仅是用数据包淹没 B,而且必须重新传输,因为它们中的大多数都被丢弃了!)以便发送最大 56K 的东西。
-
无论你怎么看,重传的数据包都会丢失/浪费带宽。如果每个人都在做同样的事情......:P