将带有 SCP 的大文件发送到某个服务器时,会以 2112 kB 的大小停止

Posted

技术标签:

【中文标题】将带有 SCP 的大文件发送到某个服务器时,会以 2112 kB 的大小停止【英文标题】:sending a large file with SCP to a certain server stalls at exactly 2112 kB 【发布时间】:2012-08-12 16:12:29 【问题描述】:

有一个特定的 ubuntu 10.04 服务器,如果我从该服务器所在办公室之外的任何服务器将文件 ssh 到该服务器上(这意味着任何使用 scp-ing 从该服务器内部通过 LAN 到该服务器上的任何使用总是适用于某种原因),然后 scp-ing 对任何大小超过 2112 kB 的文件都失败,并停留在 2112 kB。 所以

scp -vvv /home/attila-szeremi/aszeremi.tar.gz  attila@server.hu:~/aszeremi.tar.gz

在末尾动态显示类似1% 2112KB 909.2KB/s - stalled - 的内容,其中 KB/s 越来越低。

有谁知道这可能是什么原因以及我该如何解决?

到目前为止我所尝试的:

使用 scp -l 2000 限制速度。它只是让文件发送速度变慢,在 2112 kB 时又卡住了。 使用 -C 启用压缩。它仍然停留在相同的大小。

【问题讨论】:

检查目标是否有空间容纳整个文件。 同样的问题。 answers 都没有帮助我。我切换到rsync,问题就消失了。在我的情况下,这不是一个解决方案,而是一个体面的解决方法。 我们还发现,在发送方和接收方之间的路由器上错误配置的 tcp 拦截也会停滞在 2112KB。 【参考方案1】:

我设法摆脱这个问题的唯一方法是disabling TCP SACK:

$ sudo sysctl -w net.ipv4.tcp_sack=0

【讨论】:

也适用于 Ubuntu 14.04。更改 MTU 或限制速度没有帮助。禁用 SACK 后,我可以毫无问题地回到无限速度。这应该是答案。 我收到错误:mac 上的未知 oid 'net.ipv4.tcp_sack=0'【参考方案2】:

我似乎找到了解决办法。我必须通过以下方式将 LAN 卡的 mtu 设置为 1492:

# ifconfig eth0 mtu 1492

【讨论】:

谢谢!这解决了我在将文件复制到 CentOS 6.4 虚拟机时遇到的 SCP 停滞问题。传输将在相同的 2112 KB 点停止。 这是 2014 年,运行最新的 Debian,全新安装,这仍然是我的 PC 上的问题?感谢您的修复。知道为什么它不是开箱即用的 1492 吗?【参考方案3】:

在较新的 Linux 系统上,ifconfig 命令可能已被 ip

取代

设置mtu的命令变成:

# ip link set dev eth0 mtu 1492

【讨论】:

【参考方案4】:

我在 Mac OS X 上遇到了同样的问题,@dav.garcia's answer 为我做了一个小小的改动:

  $ sudo sysctl -w net.inet.tcp.sack=0

【讨论】:

【参考方案5】:

我也看到了同样的问题。以上建议都不适合我,但它们让我走上了正确的道路。我在防火墙后面,MTU 设置为 1300。将我的 LAN 卡的 MTU 设置为非常低(576,有点随机)导致我的数据包停止被丢弃。

$ sudo ifconfig eno1 mtu 576

我必须在我的每个 Linux 客户端上执行此操作。由于某种原因,同一子网的windows机器没有问题。

【讨论】:

以上是关于将带有 SCP 的大文件发送到某个服务器时,会以 2112 kB 的大小停止的主要内容,如果未能解决你的问题,请参考以下文章

通过 SCP03t 将分段配置文件包安装到 eUICC 上的 ISD-P

scp 使用方法

linux网络测试:scp/nc

scp复制发送文件夹到其他服务器上

scp从硬盘驱动器通过服务器复制

如何使用 SCP 或 SSH 将文件复制到 Python 中的远程服务器?