当文件大小大于 64KB 时,scp 传输变得非常慢

当文件大小大于 64KB 时,scp 传输变得非常慢

最初的问题是,当git clone通过 ssh 执行时,传输速率非常慢,然后暂停并最终失败

connection reset via peer

背景

  • ssh 服务器是运行 Raspbian 的 Raspberry Pi
  • ssh 客户端我已经尝试过 OSX 以及另一个带有 Raspbian 的 Raspberry,但有同样的问题
  • git clone在 LAN 上从来都不是问题,但是当通过 WAN 尝试时显示了这个问题,我确实有一个 openWrt 路由器,它具有端口转发功能,可以将树莓派的 ssh 端口公开到路由器上以进行 WAN 访问
  • 我确实在路由器上运行了防火墙,从互联网上可以看到该防火墙。
  • 正在使用 IPv4
  • RPi通过有线连接连接到路由器
  • 使用了以下 ssh 客户端:
    • 操作系统:OpenSSH_8.1p1, LibreSSL 2.7.3
    • 转速:openssh-client/stable,now 1:7.9p1-10 armhf

scp观察 我说让我scp在查看之前先确保它工作正常git clone。以下是我的观察:

scp小于 64KB 的文件处理速度非常快,不到一秒即可完成。

scp -P 31415 user@host:/tmp/64KB /dev/null

64KB                 100%   64KB 310.4KB/s   00:00

scp大于 64KB 的文件非常慢,即使我只有 1 额外的 KB,有时还会失败

scp -P 31415 user@host:/tmp/65KB /dev/null

65KB                 100%   65KB 284.2KB/s   00:00
Connection to xxxxxxx closed by remote host.

我尝试对scp -vvv两次传输进行比较,发现以下差异。

-64KB                                              100%   64KB 288.5KB/s   00:00
+65KB                                              100%   65KB 267.3KB/s   00:00
 debug3: receive packet: type 96
 debug2: channel 0: rcvd eof
 debug2: channel 0: output open -> drain
@@ -190,6 +190,18 @@ debug2: channel 0: chan_shutdown_read (i0 o3 sock -1 wfd 4 efd 6 [write])
 debug2: channel 0: input open -> closed
 debug3: receive packet: type 97
 debug2: channel 0: rcvd close
+debug3: receive packet: type 98
+debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
+debug3: send packet: type 100
+debug3: receive packet: type 98
+debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
+debug3: send packet: type 100
+debug3: receive packet: type 98
+debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
+debug3: send packet: type 100
+debug3: receive packet: type 98
+debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
+debug3: send packet: type 100
 debug3: channel 0: will not send data after close
 debug2: channel 0: almost dead
 debug2: channel 0: gc: notify user

我确实看到,对于 65KB,我看到了一些附加内容+debug3: receive packet: type 98,但我缺乏解释这一点的理解。

我已经尝试过一些解决方案,例如关闭 TCPTimestamps、更改 MTU 大小等,但没有一个有帮助。

答案1

将“IPQoS”设置为“无”解决了该问题。太感谢了!我似乎需要在客户端和服务器上设置该选项。

相关内容