實驗 ( 五 ) 網路效能量測

25
實實 ( 實 ) 實實實實實實 實實實實實 COMPUTER NETWORK

Upload: sadah

Post on 24-Jan-2016

96 views

Category:

Documents


0 download

DESCRIPTION

實驗 ( 五 ) 網路效能量測. 計算機網路 COMPUTER NETWORK. 實驗步 驟. 學習 TCL 語言 分析 out.tr 分析相關數值 學習 AWK 語言 利用 NSG2 所提供的範例檔,並產生 TCL 檔 再利用 Out.tr 去計算出有關網路效能的數值. TCL. TCL(Tool Command Language) 用途 : 描述腳本 描述要模擬的網路環境和參數設定. TCL 基本介紹 ( 變數宣告及使用 ). set $ Example 執行方法 執行 結果. variable.tcl. s et name “jim” - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 實驗 ( 五 ) 網路效能量測

實驗 ( 五 ) 網路效能量測計算機網路 COMPUTER NETWORK

Page 2: 實驗 ( 五 ) 網路效能量測

實驗步驟1. 學習 TCL 語言2. 分析 out.tr

3. 分析相關數值4. 學習 AWK 語言5. 利用 NSG2 所提供的範例檔,並產生 TCL 檔6. 再利用 Out.tr 去計算出有關網路效能的數值

Page 3: 實驗 ( 五 ) 網路效能量測

TCLTCL(Tool Command Language)用途:描述腳本描述要模擬的網路環境和參數設定

Page 4: 實驗 ( 五 ) 網路效能量測

TCL 基本介紹 ( 變數宣告及使用 )set $Example

執行方法

執行結果

set name “jim”Puts “my name is $name”

variable.tcl

$ns variable.tcl

my name is jim

Page 5: 實驗 ( 五 ) 網路效能量測

TCL 基本介紹 ( 表示式 )expr判斷真假example

數學表示式Example

set value [expr 0==1]puts $value

expr1.tcl expr2.tcl

set value [expr 2+3]puts $value

$ns expr1.tcl0

$ns expr2.tcl5

Page 6: 實驗 ( 五 ) 網路效能量測

TCL 基本介紹 ( 指令替換 )exampleCommandSubstitution.tcl

puts “I am [expr 10*2] years old”

$ns CommandSubsitution.tclI am 20 years old

Page 7: 實驗 ( 五 ) 網路效能量測

TCL 基本介紹 ( 流程控制 )if-else 、 switch 、 while 、 for 、 foreachexample ControlFlow.tclset my_planet “earth”If {$my_planet == “earth”} { puts “I feel right at home.”} else if {$my_planet == “mars”}{ puts “This is not my home.”} else { puts “I am neither from earth , nor from mars.”}set temp 25If {$temp < 20 } { puts “It’s a little chilly.”} else { puts “Warm enough for me”}

$ns ControlFlow.tclI feel right at home.Warm enough for me.

空格要注意,一定要空,不然不能跑

Page 8: 實驗 ( 五 ) 網路效能量測

TCL 基本介紹 ( 程序 )TCL 中也允許使用者自定程序example procedure.tcl

proc sum_proc {a b} { return[expr $a =$b]}set num1 5set num2 6set sum [sum_proc $num1 $num2]puts “the sum is $sum”

$ns procedure.tclthe sum is 11

空格注意

Page 9: 實驗 ( 五 ) 網路效能量測

TCL 基本介紹 ( 陣列 )example array.tcl

set myarray(0) “Zero”set myarray(1) “One”set myarray(2) “Two”for { set i 0} {$i <3} {incr i 1} { puts $myarray($i)}

$ns array.tclZeroOneTwo

空格要注意,一定要空,不然不能跑

Page 10: 實驗 ( 五 ) 網路效能量測

Out.tr Analysis

欄位一 : 封包事件(r:receive,+:enpueue,-:dequeue,d:drop)欄位二 : 事件發生時間欄位三、欄位四 : from node 到 to node欄位五 : 封包型態欄位六 : 封包大小

欄位七 : 旗標欄位八 : 表示封包屬於的資料流欄位九、欄位十 : 封包來源端和目的端 x.y -> x:節點編號 , y:port number欄位十一 : 封包序號欄位十二 : 封包id

Event time Fromnode

Tonode

Packettype

Packetsize

flags FlowId

Srcaddr

Dstaddr

Seqnum

PacketID

+ 0.1 1 2 cbr 1000 --------- 2 1.0 3.1 0 0

1 2 3 4 5 6 7 8 9 10 11 12

Page 11: 實驗 ( 五 ) 網路效能量測

AnalysisEnd-to-End Delay 端點到端點的延遲= receiver time – sender timeJitter 抖動率 ( 延遲時間變化量 )

= (receiver time(j) – sender time(j)) – (receiver time(i) – sender time(i)), j > iThroughput 吞吐量packet loss 封包遺失率Ex: from node=1 to node=2 且 event=“+” 從 n1 送到 n2 封包Flowid=2 & event=“d” 封包遺失所以封包遺失率 = 封包遺失數 /( 封包送達數 + 封包遺失數 )

Page 12: 實驗 ( 五 ) 網路效能量測

AWK一種程式語言變數無形別之分擅長處理資料列、欄位型態的資料。

Page 13: 實驗 ( 五 ) 網路效能量測

AWK

當 awk 讀入資料列後,會把每個欄位的值存入欄位變數欄位變數 意義 上例欄位的東西$0 為一串列,其內容為目前

awk 所獨去的資料列

+ 0.1 1 2 cbr 1000 --------- 2 1.0 3.1 0 0

$1 代表 $0 上第一個欄位的資料

+

$2 代表 $0 上第二個欄位的資料

0.1

$X 代表 $0 上第 X 個欄位的資料

……….

$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12

$0

Page 14: 實驗 ( 五 ) 網路效能量測

AWK程式主要結構

一般常用”關係判斷式來當 Pattern”提供 C語言常見的關係運算元,如 >、 <、 >=、 <=、 ==、 !=…等I/O指令 :print、 printf()…… 等流程控制指令 :if(…){…}else{…} 、 while(…){…}……AWK語言與 C語言類似,在空格不會像 TCL一樣,有一定要空格的問題

Pattern1 { Action1}Pattern2 { Action2}………………………………….Pattern3 { Action3}

Page 15: 實驗 ( 五 ) 網路效能量測

AWK工作流程1. 從指定的資料檔中讀取一筆資料列2. 更新相關的內建變數之值3. 逐次執行程式所有的 Pattern { Actions }4. 當所有的 Pattern{Action} 接執行完時,若資料

檔中還有位讀取的資料則反覆執行步驟 1 步驟 4 *awk 會自動執行上述迴圈步驟,使用者不需再寫迴圈

Page 16: 實驗 ( 五 ) 網路效能量測

AWK 學習網站一血落閣 Linux相關技術學習http://blog.xuite.net/mb1016.flying/linux/28111008-linux+shell+awk+%E8%AA%9E%E6%B3%95

此網站是翻譯成繁中版 來源出處 (weekly123的专栏 http://blog.csdn.net/weekly123/article/details/1465675)網站二http://lalakiwe.myweb.hinet.net/Documents/awk/awk_1.html

Page 17: 實驗 ( 五 ) 網路效能量測

作業本實驗將利用 NSG2 實作範例圖 ( 圖同實驗三 ) 所產生的 tcl 檔和 out.tr 檔再撰寫一程式,計算每個封包之 delay time , jitter

及 Package Loss Rate

Page 18: 實驗 ( 五 ) 網路效能量測

PacketLoss.awk BEGIN {# 程式初始化 , 設定一變數記錄 packet 被 drop 的數目

fsDrops = 0;

numFs = 0; }

{ action = $1;

time = $2;

from = $3;

to = $4;

type = $5;

pktsize = $6;

flow_id = $8;

src = $9;

dst = $10; seq_no = $11; packet_id = $12; #統計從n1送出多少packets #統計flow_id為2,且被drop的封包

} END { printf }

Page 19: 實驗 ( 五 ) 網路效能量測

Delay.awk(1) BEGIN {

# 程式初始化,設定一變數以記錄目前最高處理封包的 ID 。

highest_packet_id = 0;

}

{ action = $1;

time = $2;

from = $3;

to = $4;

type = $5;

pktsize = $6;

flow_id = $8;

src = $9;

dst = $10;

seq_no = $11;

packet_id = $12;

# 記錄目前最高的 packet ID

if ( packet_id > highest_packet_id )

# 記錄封包的傳送時間

if ( start_time[packet_id] == 0 )

start_time[packet_id] = time;

Page 20: 實驗 ( 五 ) 網路效能量測

Delay.awk(2) # 記錄 CBR (flow_id=2) 的接收時間

if ( flow_id == 2 && action != "d" ) {

if ( action == "r" ) {

}

} else {

# 把不是 flow_id=2 的封包或者是 flow_id=2 但此封包被 drop 的時間設為 -1

}

}

END {

# 當資料列全部讀取完後,開始計算有效封包的端點到端點延遲時間

for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ ) {

start =

end =

packet_duration = end - start;

# 只把接收時間大於傳送時間的記錄列出來 if ( start < end ) printf("%f %f\n", start, packet_duration);

}

}

Page 21: 實驗 ( 五 ) 網路效能量測

Jitter.awk(1) BEGIN {# 程式初始化,設定一變數以記錄目前最高處理封包的 ID 。

highest_packet_id = 0;}

{ action = $1;

time = $2;

from = $3;

to = $4;

type = $5;

pktsize = $6;

flow_id = $8;

src = $9;

dst = $10;

seq_no = $11;

packet_id = $12;

# 記錄目前最高的 packet ID

if ( packet_id > highest_packet_id )

# 記錄封包的傳送時間

if ( start_time[packet_id] == 0 ) {

# 記錄下包的 seq_no

pkt_seqno[packet_id] = seq_no;

start_time[packet_id] = time; }

}

Page 22: 實驗 ( 五 ) 網路效能量測

Jitter.awk(2) # 記錄 CBR (flow_id=2) 的接收時間 if ( flow_id == 2 && action != "d" ) {

if ( action == "r" ) {

}

} else {

# 把不是 flow_id=2 的封包或者是 flow_id=2但此封包被丟棄的時間設為 -1

}

END {

# 初始化 jitter 計算所需變量 last_seqno = 0;

last_delay = 0;

seqno_diff = 0;

# 當資料列全部讀取完後,開始計算有效封包的端點到端點延遲時間

for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ ) {

start =

end =

packet_duration = end - start;

Page 23: 實驗 ( 五 ) 網路效能量測

Jitter.awk(3) # 只把接收時間大於傳送時間的記錄列出來

if ( start < end ) {

# 得到了 delay 值 (packet_duration) 後計算 jitter

seqno_diff =

delay_diff =

if (seqno_diff == 0) {

jitter =0;

} else {

jitter = delay_diff/seqno_diff;

}

printf("%f %f\n", start, jitter);

last_seqno = pkt_seqno[packet_id];

last_delay = packet_duration;

}

}

}

Page 24: 實驗 ( 五 ) 網路效能量測

HINT根據上列 (P17~P22 投影片 ) 提示,來完成橘色空格,並完成 AWK 檔,搭配 out.tr 來計算出相關數值

如果真的不熟悉 AEK 語言

,也可以由 (P17~P22 投影片 )

提示,自行做出 C 、 C++ 程式語言版本,來計算出相關數值

Page 25: 實驗 ( 五 ) 網路效能量測

作業Doc 檔上,須說明 :1. 封面 ( 班級、學號、姓名 ) 檔名範例 :Hw3_498410561_ 張建雄2. 相關程式碼3. Terminal 在執行 $awk 結果之截圖 ( 如有三個 awk 檔,則截三個圖 )

4. 如果是用其他語言的也須附上截圖5. 心得若有問題請 e-mail 給助教