網絡模擬器NS2應用分析
時間:2022-03-12 10:41:00
導語:網絡模擬器NS2應用分析一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
摘要隨著Internet的迅猛發展,網絡模擬占有十分重要的位置。文中探討和分析了NS-2的結構、功能及其使用方法,最后給出一個實例,具體解釋了NS-2的使用方法和用相關工具對輸出結果進行處理的方法,得到了預期的模擬結果。
關鍵詞網絡模擬;NS;應用
引言
隨著Internet的迅猛發展,網絡規模和復雜性的迅速增加,網絡研究人員一方面要不斷思考新的網絡協議和算法,為網絡發展做前瞻性的基礎研究;另一方面也要研究如何利用和整合現有的網絡資源,使網絡達到最高效能。無論是哪一方面都需要對新的網絡方案進行驗證和分析。分析方法的有效性和精確性受假設的限制很大。實驗方法的局限在于成本很高,實驗床的規模很難做到很大,不能實現網絡中的多種通信流量和拓撲的融合。而模擬方法在很大程度上可以彌補前兩種方法的不足。NS-2是美國DARPA支持的項目VINT(theVirtualInterNetTested)中的基礎和核心部分。由USI/ISI,XeroxPARC,LBNL和UCBerkeley這些美國大學和實驗室合作研究開發,其目的在于建立一個網絡仿真平臺,為網絡研究人員提供一系列的仿真工具,來實現新的網絡協議的設計和實現。
1NS-2體系結構及功能模塊
1.1NS-2簡介
NS-2是面向對象的,基于離散事件驅動的網絡環境模擬器。它實現了多種網絡協議的模擬,如網絡協議TCP、UDP,流量源行為,如FTP、Telnet、Web、CBR、VBR;實現了DropTail、RED、CBQ等幾種路由器隊列管理機制以及Dijkstra,動態路由、靜態路由、組播路由等路由算法。此外,NS-2還支持組播協議SRM及部分MAC層協議。
NS-2用C++和Otcl語言編寫而成。它是免費的,開放源代碼的,可以很方便地擴展NS-2的功能,將自己開發的新協議模塊集成到NS-2環境中。
1.2NS-2體系結構
NS-2的結構如圖1所示。
NS-2采用了兩級體系結構,為了提高代碼的執行效率,NS-2將數據操作與控制部分的實現相分離,事件調度器和基本的網絡組件使用C++編寫和編譯,其主要功能是實現對數據包的處理;NS-2的前端是一個Otcl解釋器,主要的功能是對模擬環境的配置、建立。從圖1的左下角看,用戶利用Otcl庫中的模擬對象設計和運行TCL仿真,事件調度器和網絡組件通過OTcl鏈接(tclcl類)和Otcl相關聯,這樣用戶可以在Otcl空間能夠方便地對C++對象的函數和變量進行修改與配置。
1.3NS-2的功能模塊
在NS-2中,整個模擬過程由一個名為Simulator的Tcl類來定義和控制的,Simulator類提供了一系列對模擬進行配置的接口,這其中包括選擇“事件調度器(eventscheduler)”的接口。進行模擬通常要首先創建一個Simulator類的實例對象,并調用該對象的一系列方法來創建節點(Node)、拓撲(Topology)等模擬所必需的對象。
模擬器封裝了許多功能模塊:節點、鏈路、分組、、流量發生器、應用模擬器等。
1)事件調度器:NS-2是一個事件驅動的模擬器,調度器也就成為NS-2的調度中心,主要功能是處理分組(packet)的延遲和充當定時器。從所有事件中選擇發生時刻最早的事件執行,調用它的handle函數,把該事件執行完畢,然后從剩余的所有事件中選擇發生時刻最早的事件執行,如此反復執行。NS-2只支持單線程,如果有多于一個事件安排在同一時刻,那么會按照事件代碼插入的先后次序執行。
2)節點(Node):表示端節點和路由器,主要由地址分類器、端口分類器、多播分類器和復制器等模擬組件構成。分類器從邏輯上匹配一個分組,并基于匹配的結果把該分組傳遞給相應的對象。復制器是生成一個分組的多份拷貝,并把這些拷貝轉發到各個訂閱了某一多播組G的輸出鏈路。
3)鏈路(Link):用來連接網絡節點,所有的鏈路都是以隊列的形式來管理分組的到達、離開和丟棄。主要由DelayLink、Queues和TTLChcker等連接器(Connector)構成。DelayLink構造鏈路帶寬和延遲特征;Queues構造和模擬與該鏈路相連的路由器的輸出緩沖;TTLChcker對該鏈路的數據包的TTL字段減1操作,并丟棄TTL值為0的數據包。(圖2)
圖2鏈路
4)分組(Packet):是對象間交互的基本單元。由一系列分組頭和一個可選的數據空間組成。分組頭的結構在Simulator對象創建時就被初始化了,同時每個分組頭相對于分組的起始地址的偏移量也被記錄下來,提供用戶來存取各個頭部所包含的信息。
5)(Agent):代表了網絡層分組的起點和終點,并被用于實現如TCP和UDP等網絡協議。Agent類支持分組的產生和接收,C++的Agent包含一系列的內部狀態變量來表示分組的各個域。Agent可以實現多個層次的協議,對于一些運輸層的協議,分組的大小和發送時間通常由Agen提供的應用程序接口(API)來控制,對于在低層使用的Agent(路由Agent),分組的大小和發送時間通常由Agent自己控制。
6)流量發生器(trafficgenerator)、應用模擬器(simulatedapplication):是構建在運輸層之上,流量發生器是模擬應用程序產生網絡通信量,有四類:(1)EXPOO_Traffic、(2)POO_Traffic、(3)CBR_Traffic、(4)TafficTrace,它們一般用在UDP之上,應用模擬器有FTP,Telnet,一般用在TCP之上。
2用NS-2進行網絡模擬
進行模擬之前,首先要分析模擬涉及哪個層次。NS模擬分兩個層次:一個是基于Otcl編程的層次,利用NS已有的網絡元素實現模擬,無需對NS本身進行任何修改,只要編寫Otcl腳本,另一個層次是基于C++和Otcl編程的層次,如果NS中沒有所需的網絡對象,就需要對NS擴展,利用Otcl和NS的接口類實現NS的更新,然后再編寫Otcl腳本。整個模擬的過程如圖3所示:
圖3利用NS-2進行網絡模擬的過程
2.1Otcl實現模擬的一般過程
(1)建立networkmodel:描述模擬網絡拓撲結構,確定鏈路的基本特性,如延遲、帶寬和丟失策略等。
(2)建立trafficmodel:包括端設備的協議綁定和通信業務量模型的建立,配置業務量模型的參數,從而確定網絡上的業務量分布。
(3)設置Trace對象。Trace對象能夠把模擬過程中發生的特定類型的事件記錄在Trace文件中。NS通過Trace文件來保存整個模擬過程。模擬完成后,用戶可以對Trace文件進行分析研究。
(4)編寫其他的輔助過程,設定模擬開始/結束時間,運行Otcl腳本仿真。
(5)追蹤分析結果:對Trace文件進行分析,利用gawk、xgraph、gnuplot得出有用的數據曲線,或者用Nam觀看網絡模擬運行過程。
2.2C++建立新協議或修改已有網絡對象進行擴展要考慮的問題
如果模擬只要求對現有的協議進行簡單修改即可完成,無需建立新的協議,則找到相應的待修改協議代碼進行預期的修改,然后直接編譯生成新的NS。然而,當建立新協議時一般需要考慮以下問題:
(1)首先定義頭文件,包括數據結構和決定新的繼承結構,并建立恰當的類定義。
(2)定義C++代碼和Otcl代碼之間的接口連接,即定義OTcl連接函數。
(3)至少定義接收函數recv()和命令函數command()。
(4)新協議代碼完成后,要對相關文件進行改動。例如,如果定義了一個新分組頭,要改動NS目錄下packet.h文件的enumpacket_t{}和classp_info{}相應部分;改動tcl/lib/ns-default.tcl文件,定義Tcl對象的缺省值;改動tcl/lib/ns-packet.tcl文件,在該文件中為新的分組增加一個入口;改動Makefile文件,將*.o文件加入到該文件NS對象文件列表中。
(5)在NS目錄下運行MakeDepend和Make,重新編譯NS,至此生成了新的NS。
3應用實例
本例將介紹如何使用一些工具來分析和呈現模擬結果,主要是測量端到端的延遲,而采用的方法一是去分析Trace文件,方法二是去修改NS核心,把所需要測量的數據直接記錄下來,限于篇幅我們不在此進一步介紹方法二。模擬場景如圖4所示,包含四個節點(n0,n1,n2,n3),假設n0,n2和n1,n2之間鏈路帶寬2Mbps,延遲為10ms;n2和n3之間鏈路帶寬1.7Mbps,延遲為20ms;每個鏈路用DropTail策略;n2和n3之間鏈路最大隊列長度為10;n0,n3之間有一條建立在TCP上的FTP連接,n1,n3之間有一條建立在UDP上CBR連接;CBR是在
0.1秒開始發送,在4.5秒結束,FTP是在1.0秒開始發送,在4.0秒結束。
圖4模擬場景
3.1建立Otcl模擬代碼文件
#創建一個模擬對象
setns[newSimulator]
#為數據流定義不同的顏色,供NAM用
$nscolor1Blue
$nscolor2Red
#打開一個NAMtracefile
setnf[openout.namw]
$nsnamtrace-all$nf
#打開一個tracefile記錄數據包的傳送過程
setnd[openout.trw]
$nstrace-all$nd
#定義一個結束程序
procfinish{}{
globalnsnfnd
$nsflush-trace
#關閉NAMtracefile
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
#設定n2和n3之間最大隊列長度為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間的隊列位置,供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"
#在5.0秒調用finish過程結束模擬
$nsat5.0"finish"
#執行模擬
$nsrun
本例子在FedoraCore4,ns-2.29下測試通過,模擬結束后,產生兩個文件,一個是out.nam,這是供NAM用的,用來可視化整個模擬過程;另一個是out.tr,記錄了模擬過程中數據包傳送中的所有事件,這是我們分析的重點。
3.2利用awk提取out.tr文件中的數據
awk是一種程序語言,可以使用很短的代碼輕易地完成對文本檔案做修改、分析、提取和比較等處理。根據Trace文件格式,我們很容易寫出測量CBR數據包端到端延遲時間的awk程序delay.awk:
#測量CBR數據包端到端延遲時間
BEGIN{
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;
if(packet_id>highest_packet_id)
highest_packet_id=packet_id;
if(start_time[packet_id]==0)
start_time[packet_id]=time;
if(flow_id==2&&action!="d"){
if(action=="r"){
end_time[packet_id]=time;
}
}else{
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);
}
}
本例執行并把結果重定向到cbr_delay文件中:$awk–fdelay.awkout.tr>cbr_delay
3.3利用Xgraph繪出圖形
Xgraph是ns-allinone包中自帶的一個小巧的繪圖工具,它可以根據數據文件里的數據繪制出相應的圖形。本例執行:$xgraphcbr_delay,結果如圖5所示:
圖5cbr_delay圖
由圖可以看出:在一剛開始的時候,由于只有CBR的數據包,所以端到端的延遲是固定的,但在1.0秒后,FTP數據包參與爭奪網絡資源,因此,端到端的延遲變得不固定,但等到FTP傳輸結束后,CBR數據包的端到端的延遲又變得固定了。
4結論
網絡模擬日益成為分析、研究、設計和改善網絡性能的強大工具,NS-2便是其中功能強大且可以免費得到的一種。本文詳細討論了NS-2的結構、功能及其使用方法,并給出一個實例具體解釋NS-2的使用及使用相關工具對輸出結果進行處理??偟膩碚f,NS-2結構復雜,有一個相對陡峭的學習曲線,希望本文對學習NS-2能有所裨益。
參考文獻
[1]www.isi.edu/nsnam/NSDB.
[2]nile.wpi.edu/NSDB.
[3]劉俊,徐昌彪,隆克平.基于NS的網絡仿真探討J.計算機應用研究,2002
[4]140.116.72.80/~smallko/ns2/ns2.htmDB
- 上一篇:ATM新型CAN信息傳遞方法
- 下一篇:AdHoc網絡應用論文