
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
nc
verwendet 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 udpcast
viel 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.
nc
hat, soweit ich mich erinnere, eine -u
Option zum Senden/Empfangen mit UDP statt TCP.