加快高延迟网络上的 SFTP 上传速度?

加快高延迟网络上的 SFTP 上传速度?

我正在尝试使用 SFTP 在国际上传输一组大型文件,但我发现我的国际合作伙伴无法获得超过 50k 的上传速度,尽管双方的连接都非常好。我们可以建立多个以此速度上传的连接(所以不是带宽?),但没有一个上传速度得到改善,这是一个问题,因为许多文件的大小为几 GB。

SFTP 使用标准 Apple OSX“远程登录”SFTP 系统托管。

有没有办法提高上传速度,或者是否有其他 SFTP 主机可以提供帮助?我不清楚这是配置问题还是协议的固有限制。

(出于安全原因,我需要使用端到端加密的点对点连接——没有云服务)。

答案1

OpenSSHsftp客户端(您似乎使用了),您可以使用:

  • -R转变增加请求队列长度(默认为 64)
  • -B转变增加读/写请求大小(默认为 32 KB)

首先,尝试将两者加倍:

sftp -R 128 -B 65536 user@host

增加哪一个可能并不重要。

增加其中任何一个都有助于使高延迟连接饱和。使用上述设置,它将随时保持 8 MB 的数据在管道中流动(128*64K=8M)。

注意,这只对大文件传输有帮助。传输大量小文件时,它不会有任何效果。


有关其他(GUI)SFTP 客户端的一些背景信息和讨论,请参阅我的回答中的“网络延迟/等待时间”部分为什么 FileZilla SFTP 文件传输的最大限制为 1.3MiB/秒,而不是饱和可用带宽?rsync 和 WinSCP 甚至更慢

有关为什么它只对大文件有帮助的解释,请参阅-C这个旗帜到底起什么作用scp– 这是关于 SCP 的,但其中大部分也适用于 SFTP。

答案2

(您在问题标题中提到了“高延迟”,但在正文中没有提到。您是否测量过实际延迟,结果如何?)

OpenSSH 有一个补丁,可以明确提高高延迟网络链路的吞吐量:抗凝血酶:(重点是我)

SCP 和 OpenSSH 中底层的 SSH2 协议实现的网络性能受到静态定义的内部流量控制缓冲区的限制。这些缓冲区通常最终成为 SCP 网络吞吐量的瓶颈,尤其是在长带宽高的网络链路上。修改 ssh 代码以允许在运行时定义缓冲区可以消除此瓶颈。我们创建了一个补丁,它将消除 OpenSSH 中的瓶颈,并可与其他服务器和客户端完全互操作。此外,HPN 客户端将能够从非 HPN 服务器更快地下载,并且 HPN 服务器将能够从非 HPN 客户端更快地接收上传。

因此,尝试在接收端编译并使用HPN-SSH,看看它是否能提高你的传输速度。

答案3

我正在尝试使用 SFTP 在国际间传输一组大型文件

它还没有被提及作为答案,但是在高延迟链接上传输多个文件时,有一个非常简单的解决方案可以获得更好的性能:

并行传输多个文件。

而且它您在问题中提到的解决方案。使用它。

基本上,TCP 协议不能很好地处理带宽延迟积较大的连接 - 单个连接无法同时传输足够的数据。请参阅https://en.wikipedia.org/wiki/TCP_tuning

自从每个连接受TCP协议限制,只需使用更多连接即可。

答案4

加速 sftp 传输

假设你的问题是网络调整和/或每个 TCP 连接的限制,请查看sftp 使用 lftp 镜像子系统

两端的网络调优是一个更大的话题,需要反复讨论,超出了 ServerFault 的范围。对于单个连接,岩席滕比亚格鲁可能有帮助。这假设远端允许压缩。

相关内容