ttcp は米陸軍弾道学研究所で開発されたネットワークベンチマークソフトであり、 現在はパブリックドメインのソフトウェアとなっている。 全ソースが1000行に満たない、小さなソフトウェアである。
任意のホストA→ホストB間でトラフィックを発生させることができるが、 両端のホストに ttcp をインストールしておく必要がある。
ports ツリーに net/ttcp があるので、そこで make install するだけである。
# cd /usr/ports/net/ttcp # make install clean
まず、ftp で ソース、 マニュアル、 ドキュメント を入手する。その上で、以下のような手順でコンパイル・インストールする。
# gcc -O -c ttcp.c # gcc -o ttcp ttcp.o -lsocket -lnsl # mkdir -p /usr/local/bin /usr/local/man/man1 /usr/local/share/doc/ttcp # cp ttcp /usr/local/bin # strip /usr/local/bin/ttcp # cp ttcp.1 /usr/local/man/man1 # cp README /usr/local/share/doc/ttcp
ちなみに、Solaris では /usr/openwin/bin に ttcp という同名のコマンドが存在する (ToolTalk メッセージを発生する cp コマンド) ので、注意すること。
送信側ホストでは Transmission モード、受信側ホストでは Receive モードで ttcp を起動する。
(送信側) # ttcp -t -s 受信側ホスト名 (受信側) # ttcp -r -s
-t は Transmission モード、-r は Receive モードを意味する。
-s オプションは Transmission モードにおいては適当なパターン
(*+,-. /0123456789:;<=>?@ABCD..... といった ASCII
文字の羅列となる) をパケットのデータ部に埋め込み、Receive
モードにおいては受け取ったデータを無条件に捨ててしまう。
送受信するデータ自体が重要でない場合は -s オプションを付けると良い。
-s を付けないと 標準入出力からデータを受け渡しする。
10数秒経つとパケットの送信が終り、 送信側/受信側それぞれで結果が端末に出力される。
(送信側) ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp -> hostb ttcp-t: socket ttcp-t: connect ttcp-t: 16777216 bytes in 15.84 real seconds = 1034.39 KB/sec +++ ttcp-t: 2048 I/O calls, msec/call = 7.92, calls/sec = 129.30 ttcp-t: 0.0user 11.6sys 0:15real 73% 12i+180d 304maxrss 0+2pf 1066+139csw (受信側) ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 172.16.10.25 ttcp-r: 16777216 bytes in 15.83 real seconds = 1034.82 KB/sec +++ ttcp-r: 4015 I/O calls, msec/call = 4.04, calls/sec = 253.59 ttcp-r: 0.0user 1.6sys 0:15real 10% 0i+0d 0maxrss 0+0pf 1826+173csw
上は 100Base-TX スイッチングハブに差した同一セグメントのマシン同士 (どちらもアダプタは 100Base-TX であり、auto negotiation で full duplex となっている) の例であるが、片方のマシンが PCMCIA ネットワークアダプタを持つノート PC であるため、ほぼ 1MB/sec くらいしか出ていない。まあ、こんなものか。
ちなみに、通信自体は TCP で、送信側は任意の high port、受信側は 5001 番ポート (これがデフォルトらしい。-p オプションを使用することにより変更可能) を使用している。