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