
私は時々、ネットワーク経由でファイルやディスク イメージをコピーするために Netcat を使用します。Netcat は機能を果たしますが、ssh の使用、ssh なし、圧縮の有無に関係なく、常に速度が遅いように感じていました。
udpcastのテストを始めました(http://www.udpcast.linux.lu/cmd.html) 少なくとも 5 倍 (またはそれ以上) 高速であるようです。圧縮パイプを使用した Udpcast は、圧縮パイプを使用しない netcat よりも何倍も高速になることがあります。Nc を使用した圧縮は、通常、ローカル ネットワーク上で速度が低下するため、通常は使用しません。私のネットワークは通常 1gbs で動作しているためです。
以下は私が使用している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.5 GiB の tar と untar パイプを使用した udpcast を実行します。
実数 9分26秒186秒
ユーザー 0分1秒247秒
システム 0分23秒836秒
そして、こちらは Linux から Windows への Samba 経由の cp です。real
9m17.729s
user 0m0.311s
sys 0m11.044s
Netcat で Udpcast のパフォーマンスをキャッチすることは可能ですか?
私が質問する理由は、一部のディストリビューションが Udpcast を提供している場合があるからです。
答え1
nc
デフォルトでは TCP を使用します。
TCP は低い「ウィンドウ サイズ」から開始し、最大ウィンドウ サイズが大きくなると接続中に速度が向上します。さらに、TCP は接続を維持するために追加のトラフィック (ACK パケットなど) を送信します。これは、「接続」の概念と、信頼性が高く順序付けられた配信をサポートするために必要です。
UDP は接続や信頼性の高い配信をサポートしていないため、余分な負担が存在せず、より高速になります。
まだあまり試していませんudpcast
が、エラー検出メカニズムがない場合、ネットワークがパケットをドロップすると、送信した内容の適切なコピーが保持されないリスクがあります。
nc
-u
私の記憶が正しければ、TCP ではなく UDP を使用して送受信するオプションがあります。