晚上好,
我使用 SFTP(通过 SSH 进行文件传输)从计算机(Windows 10)传输到 Synology NAS。两台设备位于不同位置的 NAT 后面。大约 3 周前,每当我发起传输(每次传输一个文件)时,速度很容易达到 30 MB/s 左右。这接近我的最大可用速度,这是其中一个位置的限制因素。
今天,我注意到传输开始时速度很快,但在一秒钟内就降到了不超过 2 MB/s。首先我想到了带宽问题(ISP、交换机、路由器等),但情况似乎并非如此,因为我可以同时启动 10 个这样的传输。它们每个都保持在 2 MB/s 左右,10 次传输总共达到 20MB/s。因此带宽是可用的,只是没有被使用。
我认识的一个人建议我做一个 tcpdump,说我会在其中找到很多“TCP 重传”数据包。他是对的。他建议我将 MTU 大小(目前两台机器上都是 1500)降低到 1462 左右,但这似乎并没有解决带宽问题。
我必须承认,虽然我有些凭借丰富的网络经验,我实际上不需要对 MTU 进行太多调整。它始终默认工作。无论如何,在尝试了发送方的几个(较低)MTU 值后,它似乎无法解决问题。
在 NAS 一侧,不幸的是有 2 个 NAT 设备,因为目前无法避免。在本地,当我与 NAS 位于同一网络中或位于第一个 NAT 路由器后面(因此在第二个 NAT 路由器之前)时,我能够达到接近 1Gbps 的速度(超过 100MB/s)。
有人能给我指出正确的方向吗?我忘记了什么或者根本不知道什么?欢迎提出所有想法。:-)
我认为这是实际问题,因此,以任何方式强制 SSH 发送较小的数据包也是可行的,并且受到欢迎。
提前致谢。
肯尼斯
答案1
两个设备均位于不同位置的 NAT 后面。
传输开始时很快,但在一秒钟内就下降到不超过 2 MB/s。
我可以同时启动 10 次这样的传输。每次传输的速度都保持在 2 MB/s 左右,10 次传输总共可以达到 20MB/s。
猜测:缓冲区膨胀在两个地点之间的路径上。
当缓冲区填满时,传输开始快速进行,然后缓冲区开始随机丢弃数据包,而不向 TCP 算法提供适当的反馈,因此会出现重新传输。
缓冲区似乎是基于连接的,因此每次传输都会有这种效果。
我不知道有什么好的解决方案,因为你无法影响你所在位置之间“互联网”上发生的事情。
您可以尝试通过 VPN 连接两个位置,希望通过转到 VPN 服务器而不是直接连接位置来避免导致缓冲区膨胀的任何原因。