Warum ist Udcast um ein Vielfaches schneller als Netcat?

Warum ist Udcast um ein Vielfaches schneller als Netcat?

Ich verwende Netcat gelegentlich, um Dateien oder Disk-Images über das Netzwerk zu kopieren. Obwohl es seinen Zweck erfüllt, hatte ich immer das Gefühl, dass es eher langsam und träge ist, egal ob ich SSH verwende, kein SSH verwende oder ob es komprimiert ist oder nicht.

Ich habe begonnen, udpcast zu testen (http://www.udpcast.linux.lu/cmd.html) und es scheint mindestens 5-mal (oder mehr) schneller zu sein. Udpcast mit komprimierten Pipes ist manchmal um ein Vielfaches schneller als Netcat ohne komprimierte Pipes. Die Komprimierung mit Nc verlangsamt mein lokales Netzwerk im Allgemeinen, daher vermeide ich es im Allgemeinen. Da mein Netzwerk im Allgemeinen mit 1 GB/s läuft

Hier sind ein paar Beispiele ohne SSH und ohne die von mir verwendete Komprimierung

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

Dies sind einige grundlegende Beispiele, die ich verwende. Natürlich verwende ich auch komprimierte Pipes. In allen Fällen übertrifft udpcast die Geschwindigkeit von Netcat um mindestens das Fünffache und ich frage mich, warum das so ist.

Ich neige sogar zu der Annahme, dass Udpcast mit Pipes eine gute Ergänzung für die Netzwerkdateiübertragung ist.

Hier udpcast mit tar und untar pipe für 17,5 GiB über das Netzwerk

Real 9m26.186s
Benutzer 0m1.247s
System 0m23.836s

Und hier ist cp über Samba von Linux nach Windows
real 9m17.729s
user 0m0.311s
sys 0m11.044s

Ist es möglich, die Udpcast-Leistung mit Netcat abzufangen?
Der Grund, warum ich frage, ist, dass manche Distributionen jetzt möglicherweise Udpcast anbieten.

Antwort1

ncverwendet standardmäßig TCP.

TCP beginnt mit einer geringen „Fenstergröße“ und gewinnt während einer Verbindung an Geschwindigkeit, wenn die maximale Fenstergröße größer wird. Darüber hinaus sendet TCP zusätzlichen Datenverkehr, um Verbindungen aufrechtzuerhalten, d. h. ACK-Pakete. Dies ist notwendig, um das Konzept einer „Verbindung“ und einer zuverlässigen, geordneten Übermittlung zu unterstützen.

UDP unterstützt weder Verbindungen noch zuverlässige Zustellung, sodass dieser zusätzliche Ballast entfällt und es daher schneller ist.

Ich habe nicht udpcastviel damit herumgespielt, aber wenn es keine Fehlererkennungsmechanismen hat, besteht das Risiko, dass Sie keine gute Kopie Ihrer Übertragung haben, wenn Ihr Netzwerk beschließt, ein Paket zu verlieren.

nchat, soweit ich mich erinnere, eine -uOption zum Senden/Empfangen mit UDP statt TCP.

verwandte Informationen