網絡模擬器NS2應用分析

時間:2022-03-12 10:41:00

導語:網絡模擬器NS2應用分析一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

網絡模擬器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