Networking
當文件大小大於 64KB 時,scp 傳輸變得非常慢
最初的問題是,當
git clone
通過 ssh 執行時,傳輸速率非常慢,然後它會暫停並最終失敗
connection reset via peer
背景
ssh 伺服器是執行 Raspbian 的 Raspberry Pi
ssh 客戶端我已經嘗試過使用 OSX 以及使用 Raspbian 的另一個 Raspberry,但有同樣的問題
git clone
在 LAN 上從來都不是問題,但是當嘗試通過 WAN 顯示這個問題時,我確實有一個 openWrt 路由器,它具有埠轉發功能,可以將樹莓派的 ssh 埠暴露到路由器上以進行 WAN 訪問我確實在路由器上執行了一個從 Internet 可見的防火牆。
正在使用 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 keepalive@openssh.com reply 1 +debug3: send packet: type 100 +debug3: receive packet: type 98 +debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 +debug3: send packet: type 100 +debug3: receive packet: type 98 +debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 +debug3: send packet: type 100 +debug3: receive packet: type 98 +debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com 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 大小等,但它們都沒有幫助。
將“IPQoS”設置為“none”解決了這個問題。太感謝了!我似乎需要在客戶端和伺服器上都設置選項。