NS2简单又经典的入门教程Word文档格式.doc

上传人:wj 文档编号:348758 上传时间:2023-04-28 格式:DOC 页数:35 大小:953.50KB
下载 相关 举报
NS2简单又经典的入门教程Word文档格式.doc_第1页
第1页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第2页
第2页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第3页
第3页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第4页
第4页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第5页
第5页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第6页
第6页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第7页
第7页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第8页
第8页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第9页
第9页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第10页
第10页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第11页
第11页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第12页
第12页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第13页
第13页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第14页
第14页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第15页
第15页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第16页
第16页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第17页
第17页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第18页
第18页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第19页
第19页 / 共35页
NS2简单又经典的入门教程Word文档格式.doc_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

NS2简单又经典的入门教程Word文档格式.doc

《NS2简单又经典的入门教程Word文档格式.doc》由会员分享,可在线阅读,更多相关《NS2简单又经典的入门教程Word文档格式.doc(35页珍藏版)》请在冰点文库上搜索。

NS2简单又经典的入门教程Word文档格式.doc

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 

cbr 

1000 

------- 

1.0 

3.1 

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

0.008000

……………………

[另一種計算Jitter的方法---更精確的方式

#================================================================================

#NormalJitter.awk

#Versionnow:

0.1

#LastModifiedDate:

2004-10-23,19:

39:

54

#==Usage==

#awk-fNormalJitter.awkout.tr

#==ProgramedBy==

#查輝(ZHAHUI),Wuhan,China,Email:

zhahuiAT

#==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==

#http:

//140.116.72.80/~smallko/ns2/ns2.htm

#==Feedback==

#如有任何關於本程式jitter計算的問題,請致信

#柯志亨(ChihHeng,Ke)博士smallko2001AT.tw或者與本人聯繫。

#==Acknowledgements==

#Dr.ChihHeng,Keprovidedvaluabledocumentsandawkfilesuponmyrequests.

highest_packet_id){

highest_packet_id=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;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2