Netcatを試してみる(ファイル転送)
nc
ファイル転送ができるに注目する
- 二台間で
送信側
と受信側
の関係を作ったとする - 両方に
nc
をインストール > RH系ならyum install nc
- 特定のポート(デフォルト:TCP)で待ち受けが可能な状態をつくる
テストファイルの用意(dd)
- 100Mのファイルをひとつ用意
dd if=/dev/zero of=/tmp/nc_test_file01 bs=100M count=1
実践
- ファイルを持っている
送信側
は下記設定で送信待機するnc -l 28282 < /tmp/nc_test_file01
- ファイルが欲しい
受信側
は特定ファイル名を指定出力するために、ファイルをとりにいく time nc <送信側のHostname/IP> 28282 > /tmp/nc_test_file01_get
上記の関係になる。 この結果、指定したファイルをゲットできる。
比較計測
- 速いの?
- timeつけてみて、比較。普段のscpとかで。
- あくまで比較するだけのレベル
real 0m8.961s
... 上記のncreal 0m14.623s
... scp (10Mb/sな環境だった)- 速い?掘り下げる。
比較計測2
- 100Mだったファイルを1Gに変更してみる
- rsyncも、と思ったがわかりやすく二つでの比較
- 結果
容量 | 計測時間 | 使用ソフト |
---|---|---|
1G | 1m31.781s | nc |
1G | 1m37.217s | scp |
あまりかわらない。あれ?
ネットワーク帯域計測
- ifstat いれて様子見
- ex)
sudo rpm -Uvh http://pkgs.repoforge.org/ifstat/ifstat-1.1-1.2.el6.rf.x86_64.rpm --test
- 同じく帯域を同様平均 10Mb/s付近で転送しているから当たり前かこの数字は。
$ ifstat -i eth0 eth0 KB/s in KB/s out 11414.64 248.18 8806.71 187.34 11322.78 240.96 〜省略〜
- 100Mbps使えるインタフェース。帯域で比較すべきか。
- 帯域を使い切るかが、速いかどうかでは、ある。(もともとそこでみないとダメか。)
ちょっと環境用意できなかった。
上記にあるように、インタフェースの速度が早く帯域がよくないとあまり意味ない、か比較。
用途
- とにかく巨大な少数ファイルをローカル間で高速に転送するとき(バックアップのバックアップとか)に使えるかな。
- ネットワーク帯域を圧迫する環境か程度は気にしたい
別用途
- ncで多段SSHで(省略)使っている。
展望
- 複数ファイル高速化、複数セッションで転送ってなときは、
nc
を使えるのか使うべきなのか他のやりかたでいいのか。 - そもそも、ファイル転送する仕組みをとにかく複数起動すればいいだけか。
- GNU Parallel 使ってかつ複数ファイルの転送かつ
nc
みたいなことうまいこと実現できないのかな? - まちうけのポートのセッションまでParallelにできるわけじゃないから、その場合は複数セッションをはれるソフトの方が有利なのかな?
- ネットワーク帯域、IO、CPU使い切りで短時間にファイル転送する方法に今興味があるので調べていきたい