초기 문제는 git clone
SSH를 통해 실행될 때 전송 속도가 매우 느리다가 일시 중지되고 결국 실패한다는 것입니다.
connection reset via peer
배경
- SSH 서버는 Raspbian을 실행하는 Raspberry Pi입니다.
- ssh 클라이언트 OSX와 Raspbian을 사용하는 다른 Raspberry를 사용해 보았지만 동일한 문제가 있습니다
git clone
LAN에서는 문제가 되지 않았지만 WAN을 통해 시도할 때 문제가 나타납니다. WAN 액세스를 위해 Raspberry Pi의 SSH 포트를 라우터에 노출시키는 포트 전달 기능이 있는 openWrt 라우터가 있습니다.- 인터넷에서 볼 수 있는 라우터에서 방화벽이 실행되고 있습니다.
- IPv4 사용
- RPi는 유선 연결을 통해 라우터에 연결됩니다.
- 다음 SSH 클라이언트가 사용됩니다.
- 운영 체제:
OpenSSH_8.1p1, LibreSSL 2.7.3
- 회전 속도:
openssh-client/stable,now 1:7.9p1-10 armhf
- 운영 체제:
scpo관찰scp
보기 전에 제대로 작동하는지 확인해 보자고 하더군요 git clone
. 내 관찰은 다음과 같습니다.
scp
64KB보다 작은 파일은 매우 빠르게 처리되어 1초 이내에 완료됩니다.
scp -P 31415 user@host:/tmp/64KB /dev/null
64KB 100% 64KB 310.4KB/s 00:00
scp
64KB보다 큰 파일은 매우 느리고 1KB만 추가해도 실패하는 경우가 있습니다.
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"를 "없음"으로 설정하면 문제가 해결되었습니다. 매우 감사합니다! 클라이언트와 서버 모두에서 이 옵션을 설정해야 할 것 같습니다.