curl 在 Linux 上停止使用多个连接进行下载

curl stops downloading using multiple connections on Linux

我在使用 curl 时遇到问题,从版本 1.28.1 到 1.37.1 - 出现同样的问题: 在Linux环境下,使用命令行,我是运行同时执行以下命令:

curl -o /dev/null "http://example.com/short_video.mp4" -o /dev/null "http://example.com/short_video.mp4" &
curl -o /dev/null "http://example.com/short_video.mp4" &
curl -o /dev/null "http://example.com/short_video.mp4" &
curl -o /dev/null "http://example.com/short_video.mp4" &

问题是 - 它开始成功下载,但通常在高速互联网连接上,其中一个下载卡在零速度上,整个过程都卡住了。 唯一有帮助的是使用速度限制:

curl --speed-limit 5 -o /dev/null "http://example.com/short_video.mp4" &

然后它识别出速度低并杀死下载,但我想知道如何首先避免这种情况。

经过一些小的研究,似乎它有时会发生在任何一个连接上,(即使没有使用多个连接) 这似乎是 TCP 流量控制中的一个错误,称为:Silly window 综合症: https://en.wikipedia.org/wiki/Silly_window_syndrome

引用:

A serious problem can arise in the sliding window operation when the sending application program creates data slowly, the receiving application program consumes data slowly, or both. If a server with this problem is unable to process all incoming data, it requests that its clients reduce the amount of data they send at a time (the window setting on a TCP packet). If the server continues to be unable to process all incoming data, the window becomes smaller and smaller, sometimes to the point that the data transmitted is smaller than the packet header, making data transmission extremely inefficient.

我注意到在很长一段时间(2 分钟或更长时间)后它再次开始下载。