トラフィック・ジェネレーター「D-ITG」を使う
フリーのトラフィック・ジェネレータは幾つかありますが、Linux でも Windows でも、どちらのプラットフォームでも使えるものに D-ITG があります。D-ITG はコマンドラインのツールですが、Java で書かれた GUI のラッパーも公開されています。
Windows へのインストール
D-ITG のサイトで公開されているバイナルをダウンロードしてきます。Beta Version として 2.7.0 beta2、Stable Version として 2.6.1d が公開されていましたが、GUI の Wrapper は 2.6 系のものしか無いようなので、今回は Stable Version(D-ITG-2.6.1d-WINbinaryIPv4.zip)をダウンロードしました。ダウンロードしたアーカイブは適当なフォルダに展開しておきます。今回は "C:\Program Files\D-ITG-2.6.1d-WINbinaryIPv4" へ展開しました。更に、頻繁に使うのであれば PATH 環境変数へ、このフォルダを追加しておいた方が便利です。
Linux へのインストール
D-ITG のソースコードをダウンロードし、make します。しかし、CentOS 5.5 x86_64 環境で試したところ、エラーが出ました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | $ wget http://www.grid.unina.it/software/ITG/codice/D-ITG-2.6.1d.zip
$ unzip D-ITG-2.6.1d.zip
$ cd D-ITG-2.6.1d/src
$ make
・
・
・
make[1]: ディレクトリ `/home/eco/D-ITG-2.6.1d/src/libITG' に入ります
g++ -DLINUX_OS -Wall -Wno-deprecated -fPIC -shared -o libITG.so ITGapi.cpp ../common/thread.o -lpthread
/usr/bin/ld: ../common/thread.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../common/thread.o: could not read symbols: Bad value
collect2: ld はステータス 1 で終了しました
make[1]: *** [libITG.so] エラー 1
make[1]: ディレクトリ `/home/eco/D-ITG-2.6.1d/src/libITG' から出ます
make: *** [libITG] エラー 2
|
"D-ITG-2.6.1d/src/Makefile" を Beta Version の Makefile と差し替えると無事、コンパイル出来ました。Windows と同様、頻繁に D-ITG を使うのであれば D-ITG そのものを /opt などの適当なディレクトリにコピーした上で、(例えば)"/opt/D-ITG-2.6.1d/bin" を環境変数 PATH に追加しておきます。
余談ですが、CentOS 5.5 x86_64 環境であれば、Beta Version は特に問題無く、コンパイル出来ました。
実行してみる
D-ITG は「受信」「送信」「解析」など、役割によって、以下のようにプログラムが分かれています。
- 受信 ・・・ ITGRecv
- 送信 ・・・ ITGSend
- 解析 ・・・ ITGDec
端末間でトラフィックを生成したい場合、まず受信側で ITGRecv を起動しておきます。
| > ITGRecv
Press Ctrl-C to terminate
|
次は送信側から ITGSend でトラフィックを生成・送信します。指定しているオプションの意味は下記の通りです。
| > ITGSend -a 192.168.132.134 -sp 9400 -rp 9500 -C 100 -c 500 -x Result.txt
Started sending packets of flow ID: 1
Finished sending packets of flow ID: 1
|
すると、受信側(ITGRecv)がトラフィックを受信しはじめ、しばらくしたら終了します。
| > ITGRecv
Press Ctrl-C to terminate
*** New Socket IPv4 created for signaling ***
Listening on port : 9500
Finish on port : 9500
|
ITGRecv を実行したディレクトリに指定したログ(今回は "Result.txt")が生成されていますので、これを ITGDec で解析します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | > ITGDec Result.txt
/----------------------------------------------------------
Flow number: 1
From 192.168.132.134:9400
To 192.168.132.134:9500
----------------------------------------------------------
Total time = 9.990000 s
Total packets = 1000
Minimum delay = -0.002000 s
Maximum delay = -0.001000 s
Average delay = -0.001190 s
Average jitter = 0.000080 s
Delay standard deviation = 0.000392 s
Bytes received = 500000
Average bitrate = 400.400400 Kbit/s
Average packet rate = 100.100100 pkt/s
Packets dropped = 0 (0.00 %)
----------------------------------------------------------
__________________________________________________________
**************** TOTAL RESULTS ******************
__________________________________________________________
Number of flows = 1
Total time = 9.990000 s
Total packets = 1000
Minimum delay = -0.002000 s
Maximum delay = 0.000000 s
Average delay = -0.001190 s
Average jitter = 0.000080 s
Delay standard deviation = 0.000392 s
Bytes received = 500000
Average bitrate = 400.400400 Kbit/s
Average packet rate = 100.100100 pkt/s
Packets dropped = 0 (0.00 %)
Error lines = 0
----------------------------------------------------------
|
複数フローのトラフィックを生成する
より高い負荷をかけたい場合には、複数のトラフィックフローを生成することが出来ます。まずはじめに、生成したいトラフィックフローのパラメータを「1 フロー・1 行」にしたテキストファイルを用意しておきます。今回は "Script" という名前で以下のファイルを用意しておきました。
| -a 192.168.132.134 -sp 9501 -rp 9601 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9502 -rp 9602 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9503 -rp 9603 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9504 -rp 9604 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9505 -rp 9605 -C 3000 -c 10000 -T UDP
|
次はシングルフローの時と同様、受信側で ITGRecv を起動しておきます。
| > ITGRecv
Press Ctrl-C to terminate
|
今度は送信側で先ほど用意したファイルをしてして、ITGSend を実行します。
| > ITGSend Script -x MultiFlow-Result.txt
Started sending packets of flow ID: 1
Started sending packets of flow ID: 2
Started sending packets of flow ID: 3
Started sending packets of flow ID: 4
Started sending packets of flow ID: 5
Finished sending packets of flow ID: 1
Finished sending packets of flow ID: 2
Finished sending packets of flow ID: 5
Finished sending packets of flow ID: 3
Finished sending packets of flow ID: 4
|
受信側では以下のように、5 つのフローを受信したことが表示されています。
1
2
3
4
5
6
7
8
9
10
11
12
13 | > ITGRecv
Press Ctrl-C to terminate
*** New Socket IPv4 created for signaling ***
Listening on port : 9601
Listening on port : 9602
Listening on port : 9603
Listening on port : 9604
Listening on port : 9605
Finish on port : 9601
Finish on port : 9602
Finish on port : 9605
Finish on port : 9603
Finish on port : 9604
|
最後に、受信側で ITGDec を使い、ログを解析します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 | > ITGDec MultiFlow-Result.txt
|----------------------------------------------------------
Flow number: 1
From 192.168.132.134:9501
To 192.168.132.134:9601
----------------------------------------------------------
Total time = 10.000000 s
Total packets = 12007
Minimum delay = -0.002000 s
Maximum delay = 0.031000 s
Average delay = -0.000119 s
Average jitter = 0.000292 s
Delay standard deviation = 0.000604 s
Bytes received = 120070000
Average bitrate = 96056.000000 Kbit/s
Average packet rate = 1200.700000 pkt/s
Packets dropped = 131 (1.08 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 2
From 192.168.132.134:9502
To 192.168.132.134:9602
----------------------------------------------------------
Total time = 8.515000 s
Total packets = 9850
Minimum delay = -0.002000 s
Maximum delay = 0.071000 s
Average delay = -0.000776 s
Average jitter = 0.000423 s
Delay standard deviation = 0.001020 s
Bytes received = 98500000
Average bitrate = 92542.571932 Kbit/s
Average packet rate = 1156.782149 pkt/s
Packets dropped = 69 (0.70 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 4
From 192.168.132.134:9504
To 192.168.132.134:9604
----------------------------------------------------------
Total time = 7.868000 s
Total packets = 8600
Minimum delay = 0.000000 s
Maximum delay = 0.002000 s
Average delay = 0.000064 s
Average jitter = 0.000080 s
Delay standard deviation = 0.000268 s
Bytes received = 86000000
Average bitrate = 87442.806304 Kbit/s
Average packet rate = 1093.035079 pkt/s
Packets dropped = 13 (0.15 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 5
From 192.168.132.134:9505
To 192.168.132.134:9605
----------------------------------------------------------
Total time = 7.277000 s
Total packets = 8050
Minimum delay = 0.000000 s
Maximum delay = 0.492000 s
Average delay = 0.000212 s
Average jitter = 0.000141 s
Delay standard deviation = 0.007759 s
Bytes received = 80500000
Average bitrate = 88498.007421 Kbit/s
Average packet rate = 1106.225093 pkt/s
Packets dropped = 660 (7.58 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 3
From 192.168.132.134:9503
To 192.168.132.134:9603
----------------------------------------------------------
Total time = 8.224000 s
Total packets = 8050
Minimum delay = -0.002000 s
Maximum delay = 0.386000 s
Average delay = -0.000625 s
Average jitter = 0.000443 s
Delay standard deviation = 0.006716 s
Bytes received = 80500000
Average bitrate = 78307.392996 Kbit/s
Average packet rate = 978.842412 pkt/s
Packets dropped = 765 (8.68 %)
----------------------------------------------------------
__________________________________________________________
**************** TOTAL RESULTS ******************
__________________________________________________________
Number of flows = 5
Total time = 10.000000 s
Total packets = 46557
Minimum delay = -0.002000 s
Maximum delay = 0.492000 s
Average delay = -0.000255 s
Average jitter = 0.000295 s
Delay standard deviation = 0.004322 s
Bytes received = 465570000
Average bitrate = 372456.000000 Kbit/s
Average packet rate = 4655.700000 pkt/s
Packets dropped = 1638 (3.40 %)
Error lines = 0
----------------------------------------------------------
|
GUI のフロントエンド(ラッパー)を使う
D-ITG には Java で書かれたフロントエンド「Graphical User Interface for D-ITG 2.6」が用意されています。ダウンロードしたアーカイブ内のファイルは、D-ITG(の、ITGRecv や ITGSend)と同じディレクトリに展開し、同ディレクトリで以下のように実行します。
これで GUI のフロントエンドが立ち上がります。
GUI だけに、直感的に利用できて便利です。ただ、シングルフローのトラフィック生成は問題なく使えているのですが、マルチフロー(複数のトラフィックフロー)が上手く生成出来ませんでした。具体的には、マルチフローの設定自体は出来るものの、最初のフローしか実行されません(5 フロー設定しても、最初の 1 フロー目しかトラフィックが生成されていないようです。Windows Server 2008 R2 64bit 環境でテストしました)。