
나는 가끔 Netcat을 사용하여 네트워크를 통해 파일이나 디스크 이미지를 복사합니다. 작업을 수행하는 동안 SSH를 사용하든, SSH를 사용하지 않든, 압축을 사용하든, 압축하지 않든 상관없이 항상 느린 느린 편에 있는 것처럼 느꼈습니다.
나는 udpcast를 테스트하기 시작했습니다(http://www.udpcast.linux.lu/cmd.html) 그리고 적어도 5배(또는 그 이상) 더 빠른 것 같습니다. 압축된 파이프가 있는 Udpcast는 때로는 압축된 파이프가 없는 netcat보다 몇 배 더 빠릅니다. Nc를 사용한 압축은 일반적으로 로컬 네트워크에서 속도가 느려지므로 일반적으로 사용하지 않습니다. 내 네트워크는 일반적으로 1GB로 실행되기 때문에
다음은 SSH가 없고 압축이 없는 몇 가지 예입니다.
dd if=somedisk |pv|nc -l -p 9999
nc networkaddr 9999|pv >./disk.img
udp-sender --full-duplex --file /dev/somedisk
udp-receiver --file ./disk.img
이것들은 제가 사용하는 몇 가지 기본적인 예입니다. 당연히 압축 파이프도 사용합니다. 모든 경우에 udpcast는 Netcat의 최소 5배 속도를 수행하며 그 이유가 무엇인지 궁금합니다.
나는 파이프가 있는 Udpcast가 네트워크 파일 전송에 좋은 칭찬이라고 생각하는 경향이 있습니다.
여기에서는 네트워크를 통해 17.5GiB용 tar 및 untar 파이프가 있는 udpcast가 있습니다.
실제 9m26.186s
사용자 0m1.247s
sys 0m23.836s
그리고 여기 Linux에서 Windows로 Samba를 통한 cp가 있습니다.
실제 9m17.729s
user 0m0.311s
sys 0m11.044s
Netcat으로 Udpcast 성능을 포착할 수 있나요?
내가 묻는 이유는 때때로 일부 배포판이 이제 Udpcast를 제공할 수도 있습니다.
답변1
nc
기본적으로 TCP를 사용합니다.
TCP는 낮은 "창 크기"로 시작하고 최대 창 크기가 더 크게 결정됨에 따라 연결 중에 속도를 얻습니다. 또한 TCP는 연결을 유지하기 위해 추가 트래픽, 즉 ACK 패킷을 보냅니다. 이는 "연결"이라는 개념과 안정적이고 순서화된 전달을 지원하는 데 필요합니다.
UDP는 연결이나 안정적인 전달을 지원하지 않으므로 추가 수하물이 존재하지 않으므로 속도가 더 빠릅니다.
많이 가지고 놀지는 않았지만 udpcast
오류 감지 메커니즘이 없으면 네트워크가 패킷을 삭제하기로 결정하면 전송한 내용의 좋은 복사본을 갖지 못할 위험이 있습니다.
nc
-u
TCP 대신 UDP를 사용하여 전송/수신하는 옵션 IIRC 가 있습니다 .