我正在从服务器下载,使用 FileZilla 时,下载速度最高可达 1.3MiB/秒,但我可以启动并发下载,下载速度也为 1.3MiB/秒。那么为什么我不能以高于 1.3MB/秒的速度下载一个文件并接近饱和可用带宽(~6+MB/秒)呢?
我知道我可以使用一些其他支持分段下载的 SFTP 客户端,例如 lftp,知道其他好的开源客户端吗?
但我仍然想知道是什么原因导致单个文件的下载速度限制在 1.3MB/s,是 TCP 和缓冲区等技术限制还是配置问题?我检查了一下,确定 FileZilla 根本没有启用流量限制。
我还尝试了 rsync,它比 FileZilla/SFTP 更差。我还尝试了 WinSCP,无论使用哪种方法 SCP/SFTP,它都是最慢的。因此,在 1.3MB/s 的恒定传输速度下,FileZilla 与其他传输方法相比相当不错。
如果有人能很好地解释为什么传输峰值达到 1.3MB/s,我真的很想知道,以及是否有可能在不使用分段下载的情况下增加这个速度。服务器正在运行 OpenSSH 6.7p1 (Debian),客户端是 Windows 上的 FileZilla。
更新:针对 Martin 的信息(见下文他的回答),我补充一点,服务器和正在下载的客户端之间的 ping 时间相当稳定,为 180ms 到 190ms。此外,CPU 使用率非常低,最高为 2% 到 8%。我尝试使用最新版本的 winscp 5.73,在 sftp 模式下,我获得了 555kb/s 的速度,在 scp 模式下,最高速度约为 805kb/s。而如果我在 Filezilla 中启动二次并发传输,我也会获得恒定的 1.3MiB/s。
那么,正如 Martin 和 Michael 提到的那样,服务器延迟 180ms 是否是数学上的限制因素?或者是否还有其他原因导致我可以提高吞吐量?如果不是,如果有人知道其他安全且支持分段下载的开源下载器(如 lftp,但在 Windows 上运行良好),我将不胜感激。
答案1
影响传输速度的常见因素有三个:
带宽– 这是一个显而易见的因素,但显然不是您的问题。
网络延迟/等待时间– SFTP 是面向数据包的协议。下载时,SFTP 客户端向 SFTP 服务器发送“读取”请求,等待响应,将返回的数据附加到本地文件;并重复,直到文件末尾。
即使您的连接速度很快,如果服务器距离较远(或速度较慢),数据也需要一段时间才能返回。如果客户端浪费这段时间无谓地等待,您的传输速度就会很慢。
大多数 SFTP 客户端(包括 FileZilla 和 WinSCP)通过在每个“读取”请求中请求大量文件以及发送(排队)多个“读取”请求而不等待前一个请求的响应来解决该问题。例如,WinSCP 可以一次请求最多 32 个文件块,每个文件 32 KB,总计 1 MB(这些是默认值)。但如果带宽和网络延迟之间存在很大差异,即使是 1 MB 也可能太小而无法使带宽饱和。
底层 TCP 协议也可能遇到类似的问题。因此,不仅要考虑实际的 SFTP 客户端是否高效,还要考虑底层 TCP 层是否高效。
也可以看看带宽延迟积在维基百科上。
我也不认为这是你的问题,至少如果你使用最新版本的 WinSCP 进行测试的话。一些改进在最近的版本中,这使得 WinSCP 能够像 FileZilla 一样高效地利用高延迟连接。
中央处理器– SFTP 是加密的,需要大量 CPU。如果您的 CPU 速度相对较慢,与大带宽相比,您的 CPU 无法以网络传输数据的速度加密(或在下载时解密)数据,因此传输速度可能会受到限制。
常见的SFTP客户端无法将加密/解密分散到CPU核心上,因此实际上是单个CPU核心的容量限制了传输速度。
使用 Windows 任务管理器查看在传输过程中某个核心是否已达到最大利用率。
本答案部分来自 WinSCP 文章文件传输速度很慢。WinSCP 没有利用所有可用带宽。如何提高传输速度?
答案2
我也遇到了这个问题。
我使用任务管理器将优先级设置为高。
现在我的速度达到 5 MiB/s
答案3
我最近尝试在同一个网络上使用 Windows 10 和可能更新版本的 filezilla,从同一台服务器的传输速度高达 7MB/秒!然后我在虚拟机中使用 RSYNC 进行测试,也获得了 7MB/秒的速度。我现在“非常确定”问题出在我在此 Windows 7 系统上安装的 COMODO 防火墙上。
显然,即使您“禁用”它,它所做的也只是不强制执行规则,而是会减慢网络堆栈的速度。我也在虚拟机中安装/复制了这个 Windows 7 系统,我将尝试完全“删除” Comodo cis premium(防病毒+防火墙)并在此处确认。我还应该提到,在这台机器上,我还注意到我的网络上某些系统的间歇性延迟 ping 不稳定,而这两者之间的所有其他系统都稳定在 <1ms。因此,带宽延迟产品信息非常好,但就我而言,我能够在另一个安装上以 7MB/s 的速度获得 filezilla 和 rsync(这基本上使我的可用带宽饱和),同一网络本地和远程。