最初的问题是,当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”设置为“无”解决了该问题。太感谢了!我似乎需要在客户端和服务器上设置该选项。