通过 VPN 复制文件时 SCP 停顿的问题

通过 VPN 复制文件时 SCP 停顿的问题

我每晚都需要通过 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

  1. 找出你的路径 MTU

    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
    
  2. 为你的网络连接设置 MTU

    ip link set eth0 mtu 1196
    

    (请注意,这是暂时的)

相关内容