我每天晚上有一系列文件需要通过 VPN 通过 SCP 复制到远程 linux 服务器。文件不大,我们这里说的是几十兆,但文件复制几乎总是在几秒钟后停止。使用 -vvv 运行 SCP 命令,我在整个尝试复制过程中一遍又一遍地看到以下内容:
debug2: channel 0: rcvd adjust 131072
debug2: channel 0: rcvd adjust 131072
debug2: channel 0: rcvd adjust 131072
有什么想法吗?我看到这个问题在不同的地方被问到,但从来没有任何答案。任何帮助,将不胜感激。
您是否允许通过 VPN 进行 ICMP?“几秒钟后 TCP 连接停止”通常翻译为“ PMTU 黑洞”。
与@Gerald 的回复类似,此页面http://www.netheaven.com/pmtu.html很好地解释了 MTU 发现以及面对此问题时的选项。
Cisco 的白皮书还讨论了与 IPSec VPN 隧道有关的 IP 分段、MTU 发现和 MSS,但对于类似情况同样有效。http://www.cisco.com/en/US/tech/tk827/tk369/technologies_white_paper09186a00800d6979.shtml
对于某些 Linux 服务器(Debian,2.6.24-etchnhalf),我们在 scp 中遇到了类似的 scp 问题。
我们可以通过禁用远程服务器上的 TCP 变量 tcp_sack(“tcp 选择性确认”)来消除停顿:
sysctl -w net.ipv4.tcp_sack=0
在 Debian 上,默认启用 tcp_sack。如果我阅读http://www.frozentux.net/ipsysctl-tutorial/chunkyhtml/tcpvariables.html,禁用此选项应该没有意义,但在我们的例子中,它有所帮助。
您可以通过
net.ipv4.tcp_sack=0
在 /etc/sysctl.conf(在其他 Linux 系统 YMMV 上)中添加一行来永久更改此更改。您是否正在运行您正在使用的任何 ssh 服务器和客户端的最新版本?我还建议点击他们的电子邮件列表,因为它看起来相当晦涩。
找出你的路径 MTU
为您的网络连接设置该 MTU
(注意这是暂时的)
sysctl -w net.ipv4.tcp_sack=1
转移两端的设置对我有帮助。感谢@ flight早先的回答