내 로컬 컴퓨터 중 하나에서 원격 컴퓨터로 파일을 복사하려고 합니다. 최대 1405바이트 크기의 파일을 복사하며 잘 작동합니다. 더 큰 파일을 scp하려고 하면 파일이 복사되지만 scp 프로세스가 중단되고 종료되지 않습니다. 쉘로 돌아가려면 Ctrl-C를 눌러야 합니다.
FTP에서도 동일한 동작을 관찰했습니다. 이 문제의 원인에 대한 아이디어가 있습니까?
답변1
이것은 @Konerak이 지적한 것과 같은 MTU 문제처럼 들리는데, 이것이 제가 테스트한 방법입니다:
ip link set eth0 mtu 1400
그러면 네트워크 인터페이스에서 허용되는 네트워크 패킷 크기가 일시적으로 1400으로 설정됩니다 eth0
(이름을 조정해야 할 수도 있음). 그러면 시스템은 이 크기보다 큰 패킷을 네트워크로 보내기 전에 조각화합니다. 이렇게 해서 scp 명령이 수정되면 네트워크에서 문제를 찾거나 이 추악한 수정 사항을 영구적으로 수정해야 합니다. ;)
답변2
MTU는 일반적으로 1500B입니다(이더넷 제한으로 인해). 그 1500B 중 모두가 "데이터"에 사용되는 것은 아닙니다. 소위 프로토콜 오버헤드는 이러한 1,500개의 오버헤드 중 상당 부분을 차지합니다.
- SCP(비압축)에는 65B 헤더가 필요합니다.
- TCP에는 20-60B 헤더가 필요합니다.
- IP에는 20-60B 헤더가 필요합니다.
이를 고려하면 페이로드가 1405B로 제한되는 것은 놀라운 일이 아닙니다.
추신: Wireshark를 시도하고 IP 헤더를 확인하십시오. 패킷 조각화를 허용합니까?
답변3
나에게는 나쁜 하드웨어처럼 들립니다. LAN에 시스템이 하나만 있는 경우 이더넷 카드가 불량일 수 있습니다. LAN에 있는 모든 시스템인 경우 허브나 라우터를 확인합니다.
답변4
관련된 원본 컴퓨터와 대상 컴퓨터 사이에는 일종의 터널이 있습니다. TCP는 연결을 열 때(ssh/scp에 사용됨) MSS를 전송하며 도중에 터널링(캡슐화를 추가하여 사용 가능한 최대 MTU를 줄임)은 대상으로 가는 도중에 해당 MSS를 투명하게 수정해야 합니다(그 반대의 경우도 마찬가지). ).
일부 터널(VPN?)이 제 역할을 하지 않습니다. 또는 컴퓨터의 MSS 구성이 올바르지 않습니다.
복사하려는 머신에 ssh를 연결한 다음 빈 디렉토리에서 ls를 수행하면 동일한 동작이 나타날 것입니다. 잘 작동할 겁니다. 그러나 "cd /; ls -lR"(따라서 큰 패킷을 얻는 경우) 경우에도 중단됩니다.