UDPとCBR

シミュレーション結果の処理方法
~awk, gnuplot~
演習第2回
情報通信技術論
インターネット工学
情報通信技術論/インターネット工学
オーク
awkによるデータ処理




データ(テキスト形式)の加工・取り出しが可能
読み込んだデータを1行ごとに処理
C言語っぽい
書式
% awk ‘パターン {アクション}' 入力データファイル
条件が一致した場合に行う操作
If文の条件文みたいなもの
1
情報通信技術論/インターネット工学
awkの簡単な使用例
weather.dat
2列目($2) :Location
3列目($3) :気温
4列目($4) :湿度
Sapporo
Aomori
Akita
Morioka
Sendai
Yamagata
Fukushima
Mito
Utsunomiya
Maebashi
Kumagaya
Tokyo
鹿児島
那覇
Kagoshima
Naha
気象庁ホームページより・一部改変
LocationがSendaiの行を抜き出す
% awk ‘$2 == “Sendai”’ weather.dat
– ‘$2 = “Sendai”’とすると?
9.1
12.1
13.6
12.7
15.6
14.2
16.7
16.4
16.0
17.3
17.8
18.8
84
76
71
69
64
69
57
70
76
65
71
61
19.7
24.3
65
79

湿度が61の行を抜き出す
% awk ‘$4 == 61’ weather.dat

気温が16以下の行を抜き出す
% awk ‘$3 <= 16’ weather.dat

気温>20かつ湿度<80の行を抜き出す
% awk ‘$3>20 && $4<80’ weather.dat
…
札幌
青森
秋田
盛岡
仙台
山形
福島
水戸
宇都宮
前橋
熊谷
東京


使用可能な演算子の例
+, -, *, /, %
<, <=, ==, !=, >, >=
&&, ||
2
情報通信技術論/インターネット工学
行数を数える

wc (Word Count)
– ファイルの行数・単語数・バイト数(サイズ)を表示
% wc weather.dat
47 188 1833 weather.dat

行数だけを出力したい場合
% wc -l weather.dat
3
情報通信技術論/インターネット工学
リダイレクション・パイプ

リダイレクション: awkの実行結果をファイルに保存
– 気温>16である行をfileに保存(上書きに注意)
% awk ‘$3 > 16’ weather.dat > file
– 行数は?
% wc -l file

パイプ: awkの実行結果を入力として他のコマンドを実行
– 気温>16である行の行数
% awk ‘$3 > 16’ weather.dat | wc -l
4
情報通信技術論/インターネット工学
何に使うのか?

sample.tclを実行
% ns sample.tcl
cbr
ノード0
ノード2
ノード1

ノード3
tcp
out.tr, out.tcp, out.namが生成される
5
情報通信技術論/インターネット工学
out.tr (抜粋)
–
–
–
–
–
–
+
+
r
+
+
r
$1: イベント
$2: イベント発生時刻
$3, $4: イベント発生場所(リンク)
$5: パケットの種類
$11: パケットのシーケンス番号
$12: パケット固有の番号(ID)
1 0 2 cbr 210 ------- 0 0.0 3.0 0 0
1 0 2 cbr 210 ------- 0 0.0 3.0 0 0
1.00375 0 2 cbr 210 ------- 0 0.0 3.0 1 1
1.00375 0 2 cbr 210 ------- 0 0.0 3.0 1 1
1.00556 0 2 cbr 210 ------- 0 0.0 3.0 0 0
1.00556 2 3 cbr 210 ------- 0 0.0 3.0 0 0
1.00556 2 3 cbr 210 ------- 0 0.0 3.0 0 0
1.0075 0 2 cbr 210 ------- 0 0.0 3.0 2 2
1.0075 0 2 cbr 210 ------- 0 0.0 3.0 2 2
1.00931 0 2 cbr 210 ------- 0 0.0 3.0 1 1
…
6
情報通信技術論/インターネット工学
パケットの一生を見てみる

あるパケット(ID=200, cbr)の流れに注目
%
+
r
+
r
awk ‘$12 == 200’ out.tr
1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200
1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200
1.65431 0 2 cbr 210 ------- 0 0.0 3.0 173 200
1.65431 2 3 cbr 210 ------- 0 0.0 3.0 173 200
1.672033 2 3 cbr 210 ------- 0 0.0 3.0 173 200
1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200
cbr
ノード0
ノード2
ノード1
ノード3
tcp
7
情報通信技術論/インターネット工学
パケットの流れ

あるパケット(ID=200, cbr)の流れに注目
%
+
r
+
r
awk ‘$12 == 200’ out.tr
1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200
1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200
1.65431 0 2 cbr 210 ------- 0 0.0 3.0 173 200
1.65431 2 3 cbr 210 ------- 0 0.0 3.0 173 200
1.672033 2 3 cbr 210 ------- 0 0.0 3.0 173 200
1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200
パケット
キュー
(バッファ)
ノード0
ノード2
ノード3
リンク
8
情報通信技術論/インターネット工学
パケットの流れ(ドロップされるパケット)

あるパケット(ID=234, cbr)の流れに注目
%
+
r
+
d
awk ‘$12 == 234’ out.tr
1.6975 0 2 cbr 210 ------- 0 0.0 3.0 186 234
1.6975 0 2 cbr 210 ------- 0 0.0 3.0 186 234
1.70306 0 2 cbr 210 ------- 0 0.0 3.0 186 234
1.70306 2 3 cbr 210 ------- 0 0.0 3.0 186 234
1.70306 2 3 cbr 210 ------- 0 0.0 3.0 186 234
一度キューに入って(入ろうとして)からドロップされる
ドロップ
パケット
キュー
(バッファ)
ノード0
ノード2
ノード3
リンク
9
情報通信技術論/インターネット工学
TCPのシーケンス番号に注目してみる

あるパケット(seqno=100, tcpおよびack)の流れに注目
% awk ‘($5==“tcp”||$5==“ack”) && $11==100’ out.tr
RTT
2.534623
-) 2.489317
0.045306
+
r
+
r
+
r
+
r
2.489317 1 2 tcp 1040 ------- 1 1.0 3.1 100 631
2.49209 1 2 tcp 1040 ------- 1 1.0 3.1 100 631
2.499863 1 2 tcp 1040 ------- 1 1.0 3.1 100 631
2.499863 2 3 tcp 1040 ------- 1 1.0 3.1 100 631
2.503757 2 3 tcp 1040 ------- 1 1.0 3.1 100 631
2.519303 2 3 tcp 1040 ------- 1 1.0 3.1 100 631
2.519303 3 2 ack 40 ------- 1 3.1 1.0 100 643
2.519303 3 2 ack 40 ------- 1 3.1 1.0 100 643
2.529517 3 2 ack 40 ------- 1 3.1 1.0 100 643
2.529517 2 1 ack 40 ------- 1 3.1 1.0 100 643
2.529517 2 1 ack 40 ------- 1 3.1 1.0 100 643
2.534623 2 1 ack 40 ------- 1 3.1 1.0 100 643
tcp
ノード1
ノード3
ノード2
ack
10
情報通信技術論/インターネット工学
送受信パケットの抽出
cbr
ノード0
ノード2
ノード1

ノード3
tcp
送信されたcbrパケットの表示
% awk ‘$1==“+” && $3==0 && $4==2 && $5==“cbr”’ out.tr

送信されたtcpパケットの表示
% awk ‘$1==“+” && $3==1 && $4==2 && $5==“tcp”’ out.tr

受信されたcbr / tcpパケットの表示
% awk ‘$1==“r” && $3==2 && $4==3 && $5==“cbr”’ out.tr
% awk ‘$1==“r” && $3==2 && $4==3 && $5==“tcp”’ out.tr
11
情報通信技術論/インターネット工学
ドロップされたパケットの抽出
cbr
ノード0
ノード2
ノード1

ノード3
tcp
廃棄されたcbr /tcpパケットの表示
% awk ‘$1==“d” && $5==“cbr”’ out.tr
% awk ‘$1==“d” && $5==“tcp”’ out.tr
※ 廃棄された場所(リンク)は問わない
12
情報通信技術論/インターネット工学
送受信/ドロップパケット数の算出

送信パケット数の算出
% awk ‘$1==“+” && $3==0 && $4==2 && $5==“cbr”’ out.tr | wc -l
% awk ‘$1==“+” && $3==1 && $4==2 && $5==“tcp”’ out.tr | wc -l

受信パケット数の算出
% awk ‘$1==“r” && $3==2 && $4==3 && $5==“cbr”’ out.tr | wc -l
% awk ‘$1==“r” && $3==2 && $4==3 && $5==“tcp”’ out.tr | wc -l

ドロップパケット数の算出
% awk ‘$1==“d” && $5==“cbr”’ out.tr | wc -l
% awk ‘$1==“d” && $5==“tcp”’ out.tr | wc -l
13
情報通信技術論/インターネット工学
通信品質の評価指標
受信者が受信した量
ヘッダを含む
(総受信パケット数)×(パケットサイズ)[bytes]
スループット[Mbps] =
(通信時間)[s]
送信者がパケットを送出した時間
ドロップの場所は問わない
(総ドロップパケット数)
パケットドロップ率[%] =
(総送信パケット数)
×100
送信者が送信した量
※ M = 106
bps = bit/sec
1 bytes = 8 bits
14
情報通信技術論/インターネット工学
ニュープロット
gnuplotによるグラフ描画

基本的な使用方法
% gnuplot
…
gnuplot> p “データファイル”
u x軸のデータがある列:y軸のデータがある列
t “凡例名”
(※ 実際には1行)
w プロット形式
gnuplot> rep “データファイル” …
…
納得のいくグラフが作成できたら
…
gnuplot> set term post color
gnuplot> set output “ファイル名.ps”
gnuplot> rep
gnuplot> q (終了)
% gv ファイル名.ps (結果の確認)
% lpr ファイル名.ps (印刷)
15
情報通信技術論/インターネット工学
gnuplotの簡単な使用例
sendai.dat
1列目($1) :時刻
2列目($2) :気温
3列目($3) :湿度
# 時刻
1
2
3
4
5
6
7
8
9
10
11
12
気温
18.4
16.0
16.7
16.2
16.0
15.9
16.4
15.7
16.5
16.9
16.3
16.3
湿度
48
67
51
49
50
51
48
57
57
56
65
65
…
23
24
13.3
12.5
83
90
気象庁ホームページより・一部改変

x軸を時刻、y軸を気温としてプロット
gnuplot> p “sendai.dat” u 1:2 w lp
– プロット形式:l, lp, st, d, iなど
– 目的に合わせてプロット形式を選択する
– 凡例はお好みで

x軸を時刻、y軸を湿度として上のグラフに
重ねてプロット
gnuplot> rep “sendai.dat” u 1:3 w lp

ps (postscript)形式で保存
gnuplot>
gnuplot>
gnuplot>
gnuplot>
set term post color
set output “sendai.ps”
rep
q
16
情報通信技術論/インターネット工学
out.tcp (抜粋)
–
–
–
–
$1: 時刻
$16: 送信シーケンス番号
$18: 輻輳ウインドウサイズ
$20: スロースタート閾値
time: 0.00000 saddr: 1 sport: 0 daddr:
cwnd: 1.000 ssthresh: 20 dupacks: 0
time: 1.53096 saddr: 1 sport: 0 daddr:
cwnd: 2.000 ssthresh: 20 dupacks: 0
time: 1.57005 saddr: 1 sport: 0 daddr:
cwnd: 3.000 ssthresh: 20 dupacks: 0
time: 1.57559 saddr: 1 sport: 0 daddr:
cwnd: 4.000 ssthresh: 20 dupacks: 0
time: 1.60869 saddr: 1 sport: 0 daddr:
cwnd: 5.000 ssthresh: 20 dupacks: 0
time: 1.61535 saddr: 1 sport: 0 daddr:
cwnd: 6.000 ssthresh: 20 dupacks: 0
time: 1.62202 saddr: 1 sport: 0 daddr:
cwnd: 7.000 ssthresh: 20 dupacks: 0
time: 1.62757 saddr: 1 sport: 0 daddr:
cwnd: 8.000 ssthresh: 20 dupacks: 0
time: 1.64733 saddr: 1 sport: 0 daddr:
cwnd: 9.000 ssthresh: 20 dupacks: 0
3 dport: 1
rtt: 0.000
3 dport: 1
rtt: 0.030
3 dport: 1
rtt: 0.040
3 dport: 1
rtt: 0.040
3 dport: 1
rtt: 0.040
3 dport: 1
rtt: 0.040
3 dport: 1
rtt: 0.040
3 dport: 1
rtt: 0.040
3 dport: 1
rtt: 0.040
maxseq: -1
srtt: 0.000
maxseq: 0
srtt: 0.030
maxseq: 2
srtt: 0.030
maxseq: 4
srtt: 0.030
maxseq: 6
srtt: 0.030
maxseq: 8
srtt: 0.030
maxseq: 10
srtt: 0.030
maxseq: 12
srtt: 0.030
maxseq: 14
srtt: 0.030
hiack: -1
seqno: 0
rttvar: 12.000 bkoff:
hiack: 0
seqno: 1
rttvar: 0.015 bkoff:
hiack: 1
seqno: 3
rttvar: 0.015 bkoff:
hiack: 2
seqno: 5
rttvar: 0.015 bkoff:
hiack: 3
seqno: 7
rttvar: 0.015 bkoff:
hiack: 4
seqno: 9
rttvar: 0.015 bkoff:
hiack: 5
seqno: 11
rttvar: 0.015 bkoff:
hiack: 6
seqno: 13
rttvar: 0.015 bkoff:
hiack: 7
seqno: 15
rttvar: 0.015 bkoff:
1
1
1
1
1
1
1
1
1
…
17
情報通信技術論/インターネット工学
各変数の時間変化の図示

シーケンス番号($16: seqno)
gnuplot> p “out.tcp” u 2:16 t “seqno” w l


輻輳ウインドウサイズ($18: cwnd)
スロースタート閾値($20: ssthresh)
gnuplot> p “out.tcp” u 2:18 t “cwnd” w st
gnuplot> rep “out.tcp” u 2:20 t “ssthresh” w st

輻輳ウインドウサイズと”20”の最小値
gnuplot> p “out.tcp” u 2:($18 < 20 ? $18 : 20) w st
※ 単純に列数を示す場合以外は$が必要
18
情報通信技術論/インターネット工学
gnuplot – 補足

ラベルの指定
gnuplot> set xl [x軸のラベル]
gnuplot> set yl [y軸のラベル]
gnuplot> rep

表示範囲の指定
gnuplot> set xr [x軸の最小値:x軸の最大値]
gnuplot> set xr [y軸の最小値:y軸の最大値]
gnuplot> rep

片対数グラフの作成
– x軸を対数プロットにする場合
gnuplot> set log x
gnuplot> rep
19
情報通信技術論/インターネット工学
レポートに関する補足

シミュレーションの実行、結果の処理
– もちろん、他の言語を使用しても構いません



C言語
Perl, Ruby, シェルスクリプト, …
グラフの作成
– もちろん、他のアプリケーションを使用しても構いません



グラフ用紙に手書き
Excel, OpenOffice Calc, …
レポート作成
– 紙で提出してください



レポート用紙に手書き
LaTeX
Word, OpenOffice Writer, 一太郎, …
20