NS2简单又经典的入门教程Word文件下载.docx
- 文档编号:17279126
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:35
- 大小:624.15KB
NS2简单又经典的入门教程Word文件下载.docx
《NS2简单又经典的入门教程Word文件下载.docx》由会员分享,可在线阅读,更多相关《NS2简单又经典的入门教程Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
procfinish{}{
globalnsnfnd
$nsflush-trace
close$nf
close$nd
#以背景执行的方式去执行NAM
execnamout.nam&
exit0
}
#产生四个网络节点
setn0[$nsnode]
setn1[$nsnode]
setn2[$nsnode]
setn3[$nsnode]
#把节点连接起來
$nsduplex-link$n0$n22Mb10msDropTail
$nsduplex-link$n1$n22Mb10msDropTail
$nsduplex-link$n2$n31.7Mb20msDropTail
#设定ns2到n3之间的QueueSize为10个封包大小
$nsqueue-limit$n2$n310
#设定节点的位置,这是要给NAM用的
$nsduplex-link-op$n0$n2orientright-down
$nsduplex-link-op$n1$n2orientright-up
$nsduplex-link-op$n2$n3orientright
#观测n2到n3之间queue的变化,这是要给NAM用的
$nsduplex-link-op$n2$n3queuePos0.5
#建立一条TCP的连线
settcp[newAgent/TCP]
$tcpsetclass_2
$nsattach-agent$n0$tcp
setsink[newAgent/TCPSink]
$nsattach-agent$n3$sink
$nsconnect$tcp$sink
#在NAM中,TCP的连线会以蓝色表示
$tcpsetfid_1
#在TCP连线之上建立FTP应用程式
setftp[newApplication/FTP]
$ftpattach-agent$tcp
$ftpsettype_FTP
#建立一条UDP的连线
setudp[newAgent/UDP]
$nsattach-agent$n1$udp
setnull[newAgent/Null]
$nsattach-agent$n3$null
$nsconnect$udp$null
#在NAM中,UDP的连线会以紅色表示
$udpsetfid_2
#在UDP连线之上建立CBR应用程式
setcbr[newApplication/Traffic/CBR]
$cbrattach-agent$udp
$cbrsettype_CBR
$cbrsetpacket_size_1000
$cbrsetrate_1mb
$cbrsetrandom_false
#设定FTP和CBR资料传送开始和結束時间
$nsat0.1"
$cbrstart"
$nsat1.0"
$ftpstart"
$nsat4.0"
$ftpstop"
$nsat4.5"
$cbrstop"
#結束TCP的连线(不一定需要写下面的程式來实际結束连线)
$nsdetach-agent$n0$tcp;
$nsdetach-agent$n3$sink"
#在模拟环境中,5秒后去呼叫finish來結束模拟(这样要注意模拟环境中
#的5秒並不一定等于实际模拟的時间
$nsat5.0"
finish"
#执行模拟
$nsrun
3、运行nstool.tcl得到下图
接下來,筆者先簡單介紹awk,然後如何使用awk去分析tracefile,以得到Throughput、Delay、Jitter、和LossRate。
[awk]
A.簡介
awk是一種程式語言。
它具有一般程式語言常見的功能。
因awk語言具有某些特點,如:
使用直譯器(Interpreter)不需先行編譯;
變數無型別之分(Typeless),可使用文字當陣列的註標(AssociativeArray)等特色。
因此,使用awk撰寫程式比起使用其它語言更簡潔便利且節省時間。
awk還具有一些內建功能,使得awk擅於處理具資料列(Record),欄位(Field)型態的資料;
此外,awk內建有pipe的功能,可將處理中的資料傳送給外部的Shell命令加以處理,再將Shell命令處理後的資料傳回awk程式,這個特點也使得awk程式很容易使用系統資源。
B.awk是如何運作的
為便於解釋awk程式架構,以及相關的術語,筆者就以上面tracefile為例,來加以介紹。
a.名詞定義:
1.
資料列:
awk從資料檔上讀取的基本單位,以tracefile為例,awk讀入的
第一筆資料列為”+
0.1
1
2
cbr
1000
-------
1.0
3.1
0
0”
第二筆資料列為“-
cbr
1000
一般而言,一筆資料列相當於資料檔上的一行資料。
2.
欄位(Field):
為資料列上被分隔開的子字串。
以資料列”+
0”為例,
一
二
三
四
五
六
七
八
九
十
十一
十二
+
0.1
1
2
1000
-------
1.0
3.1
一般而言是以空白字元來分隔相鄰的欄位。
當awk讀入資料列後,會把每個欄位的值存入欄位變數。
欄位變數
意義
$0
為一字串,其內容為目前awk所讀入的資料列.
$1
代表$0上第一個欄位的資料.
$2
代表$0上第二欄個位的資料.
……
b.程式主要節構:
Pattern1
{Actions1}
Pattern2
{Actions2}
……………………………
Pattern3
{Actions3}
一般常用”關係判斷式”來當成Pattern。
例如:
x>3用來判斷變數x是否大於3
x==5
用來判斷變數x是否等於5
awk提供c語言常見的關係運算元,如:
>、<、>=、<=、==、!
=等等
Actions是由許多awk指令所構成,而awk的指令與c語言中的指令非常類似。
IO指令:
print、printf()、getline......
流程控制指令
:
if(...){...}else{…}、while(…){…}……
在awk程式的流程為先判斷Pattern的結果,若為真True則執行相對應的Actions,若為假False則不執行相對的Actions。
若是處理的過程中沒有Pattern,awk會無條件的去執行Actions。
c.工作流程:
執行awk時,它會反複進行下列四步驟。
1.自動從指定的資料檔中讀取一筆資料列。
2.自動更新(Update)相關的內建變數之值。
3.逐次執行程式中所有的Pattern{Actions}指令。
4.當執行完程式中所有Pattern{Actions}時,若資料檔中還有未讀取的料,則反覆執行步驟1到步驟4。
awk會自動重覆進行上述的四個步驟,所以使用者不須在程式中寫這個迴圈。
[End-to-EndDelay]
筆者把量測CBR封包端點到端點間延遲時間的awk程式,寫在檔案measure-delay.awk檔案中,讀者可以參考此範例,修改成符合讀者需求的程式。
BEGIN{
#程式初始化,設定一變數以記錄目前最高處理封包的ID。
highest_packet_id=0;
{
action=$1;
time=$2;
node_1=$3;
node_2=$4;
type=$5;
flow_id=$8;
node_1_address=$9;
node_2_address=$10;
seq_no=$11;
packet_id=$12;
#記錄目前最高的packetID
if(packet_id>
highest_packet_id)
highest_packet_id=packet_id;
#記錄封包的傳送時間
if(start_time[packet_id]==0)
start_time[packet_id]=time;
#記錄CBR(flow_id=2)的接收時間
if(flow_id==2&
&
action!
="
d"
){
if(action=="
r"
end_time[packet_id]=time;
}
}else{
#把不是flow_id=2的封包或者是flow_id=2但此封包被drop的時間設為-1
end_time[packet_id]=-1;
}
END{
#當資料列全部讀取完後,開始計算有效封包的端點到端點延遲時間
for(packet_id=0;
packet_id<
=highest_packet_id;
packet_id++){
start=start_time[packet_id];
end=end_time[packet_id];
packet_duration=end-start;
#只把接收時間大於傳送時間的記錄列出來
if(start<
end)printf("
%f%f\n"
start,packet_duration);
執行方法:
($為shell的提示符號)
$awk-fmeasure-delay.awkout.tr
若是要把結果存到檔案,可使用導向的方式。
(把結果存到cbr_delay檔案中)
$awk-fmeasure-delay.awkout.tr>
cbr_delay
執行結果:
0.1000000.038706
0.1080000.038706
0.1160000.038706
0.1240000.038706
0.1320000.038706
………………………
[Jitter]
Jitter就是延遲時間變化量delayvariance,由於網路的狀態隨時都在變化,有時候流量大,有時候流量小,當流量大的時候,許多封包就必需在節點的佇列中等待被傳送,因此每個封包從傳送端到目的地端的時間不一定會相同,而這個不同的差異就是所謂的Jitter。
Jitter越大,則表示網路越不穩定。
筆者把量測CBRflow的Jitter的awk寫在檔案measure-jitter.awk內。
#程式初始化
old_time=0;
old_seq_no=0;
i=0;
node_1_address=$9;
seq_no=$11;
#判斷是否為n2傳送到n3,且封包型態為cbr,動作為接受封包
if(node_1==2&
node_2==3&
type=="
cbr"
&
action=="
){
#求出目前封包的序號和上次成功接收的序號差值
dif=seq_no-old_seq_no;
#處理第一個接收封包
if(dif==0)
dif=1;
#求出jitter
jitter[i]=(time-old_time)/dif;
seq[i]=seq_no;
i=i+1;
old_seq_no=seq_no;
old_time=time;
}
for(j=1;
j<
i;
j++)
printf("
%d\t%f\n"
seq[j],jitter[j]);
$awk-fmeasure-jitter.awkout.tr
(把結果存到cbr_jitter檔案中)
$awk-fmeasure-jitter.awkout.tr>
cbr_jitter
1
0.008000
2
3
4
……………………
[另一種計算Jitter的方法---更精確的方式
#================================================================================
#NormalJitter.awk
#Versionnow:
0.1
#LastModifiedDate:
2004-10-23,19:
39:
54
#==Usage==
#awk-fNormalJitter.awkout.tr
#==ProgramedBy==
#查輝(ZHAHUI),Wuhan,China,Email:
zhahuiATgmail.
#==Description==
#本awk程式給出了另外一種jitter的計算方法,這種方法中jitter的計算是基于以下公式:
#jitter=((recvtime(j)-sendtime(j))-(recvtime(i)-sendtime(i)))/(j-i),其中j>
i。
#==Attention==
#NormalJitter.awk中關於jitter的計算完全基于柯志亨博士的measure-delay.awk程式中delay的
#計算。
而measure-delay.awk在柯博士網頁中的ns2類比例子中是正確的,但是對于不同的例子需要根
#據情況進行一定的修改,並可能需要加入某些魯棒性處理代碼(例如對于第一個包的處理,對于丟包的處
#理等)。
#==Reference==
#140.116.72.80/~smallko/ns2/ns2.htm
#==Feedback==
#如有任何關於本程式jitter計算的問題,請致信
#柯志亨(ChihHeng,Ke)博士smallko2001ATpchome..tw或者與本人聯繫。
#==Acknowledgements==
#Dr.ChihHeng,Keprovidedvaluabledocumentsandawkfilesuponmyrequests.
highest_packet_id){
{
#記錄下包的seq_no--ZHA
pkt_seqno[packet_id]=seq_no;
end_time[packet_id]=time;
#初始化jitter計算所需變量--ZHA
last_seqno=0;
last_delay=0;
seqno_diff=0;
for(packet_id=0;
packet_duration=end-start;
end){
#得到了delay值(packet_duration)后計算jitter--ZHA
seqno_diff=pkt_seqno[packet_id]-last_seqno;
delay_diff=packet_duration-last_delay;
if(seqno_diff==0){
jitter=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NS2 简单 经典 入门教程