我每晚都需要通过 VPN 上的 SCP 将一系列文件复制到远程 Linux 服务器。这些文件并不大,我们这里说的是几十兆字节,但文件复制几乎总是在几秒钟后停止。使用 -vvv 运行 SCP 命令时,我在尝试复制的整个过程中反复看到以下内容:
debug2: channel 0: rcvd adjust 131072
debug2: channel 0: rcvd adjust 131072
debug2: channel 0: rcvd adjust 131072
有什么想法吗?我看到很多地方都在问这个问题,但从来没有人回答。任何帮助都将不胜感激。
答案1
您是否允许 ICMP 通过 VPN?“TCP 连接在几秒钟后停止”通常翻译为“PMTU黑洞“。
答案2
与@Gerald 的回应类似,此页面http://www.netheaven.com/pmtu.html对 MTU 发现以及遇到此问题时的选择进行了很好的解释。
思科的白皮书也讨论了与 IPSec VPN 隧道相关的 IP 分段、MTU 发现和 MSS,但对于类似情况同样有效。http://www.cisco.com/en/US/tech/tk827/tk369/technologies_white_paper09186a00800d6979.shtml
答案3
我们在使用 scp 与某些 Linux 服务器 (Debian, 2.6.24-etchnhalf) 进行通信时也遇到了类似的问题。
我们可以通过禁用远程服务器上的 TCP 变量 tcp_sack(“tcp 选择性确认”)来消除停顿:
sysctl -w net.ipv4.tcp_sack=0
在 Debian 中,tcp_sack 默认启用。如果我读到http://www.frozentux.net/ipsysctl-tutorial/chunkyhtml/tcpvariables.html,禁用此选项是没有意义的,但在我们的例子中,它有所帮助。
您可以通过在 /etc/sysctl.conf 中添加一行来使此更改永久生效net.ipv4.tcp_sack=0
(在其他 Linux 系统上 YMMV)。
答案4
-
ping -M do -s 1472 host.domain PING host.domain (10.0.0.1) 1472(1500) bytes of data. ping: sendmsg: Message too long ping: local error: Message too long, mtu=1196 ^C ping -M do -s 1168 host.domain PING host.domain (10.0.0.1) 1168(1196) bytes of data. 1176 bytes from 10.0.0.1: icmp_seq=1 ttl=60 time=283 ms ^C
为你的网络连接设置 MTU
ip link set eth0 mtu 1196
(请注意,这是暂时的)