TCP 慢启动算法是许多单个文件传输缓慢的原因吗?

Is TCP Slow Start algorithm a reason for slow transfers of many single files?

我想到了 tcp 慢启动算法和通过 tcp/ip 网络传输许多文件时的常见问题。

如果您传输许多小文件(即大小:50kb,数量:10,000),这将比一次传输相同数量的数据(50kb * 10,000 = 500,000 kb)花费更长的时间。对我来说,这是一个可能的原因,tcp slowstart 是其中一个原因(当然还有其他的东西,比如开销,...)。

如果我对 slowstart 的理解正确,那么它会增加无需接收方确认即可传输的最大数据量。如果我们现在为每个文件建立一个新连接,slowstart 会在每次传输开始时导致低吞吐量,并且由于 slowstart 算法增加了吞吐量 - 我们的文件被传输并且新连接开始。因此,我们永远无法达到优化的吞吐率。另一方面,如果我们传输一个大文件,slowstart 会优化最大未确认数据量,因此我们可以达到更高的吞吐率。

这个假设是否正确? 还有一个问题:slowstart 的实现对于 c 或 c++ 和 .net 是一样的吗?

请不要将此视为 "Why are my file transfers slow?" 的副本,我想问的是慢启动算法是否是传输许多小文件缓慢的原因。

不,这不完全正确。慢启动与连接有关,而不是通过同一连接发送的单个文件。只要建立连接,通过同一连接发送一个大文件或 10 个小文件都没有关系。

解决办法是明智地使用连接。如果您需要发送很多东西,请重复使用单个连接(模型 HTTP 1.1)。

TCP协议的实现与您的应用程序的语言无关,它使用的是OS提供的相同协议栈。