파일 크기가 64KB보다 크면 scp 전송 속도가 매우 느려집니다.

파일 크기가 64KB보다 크면 scp 전송 속도가 매우 느려집니다.

초기 문제는 git cloneSSH를 통해 실행될 때 전송 속도가 매우 느리다가 일시 중지되고 결국 실패한다는 것입니다.

connection reset via peer

배경

  • SSH 서버는 Raspbian을 실행하는 Raspberry Pi입니다.
  • ssh 클라이언트 OSX와 Raspbian을 사용하는 다른 Raspberry를 사용해 보았지만 동일한 문제가 있습니다
  • git cloneLAN에서는 문제가 되지 않았지만 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. 내 관찰은 다음과 같습니다.

scp64KB보다 작은 파일은 매우 빠르게 처리되어 1초 이내에 완료됩니다.

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

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

scp64KB보다 큰 파일은 매우 느리고 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"를 "없음"으로 설정하면 문제가 해결되었습니다. 매우 감사합니다! 클라이언트와 서버 모두에서 이 옵션을 설정해야 할 것 같습니다.

관련 정보