NS2仿真:使用NS仿真軟件模擬簡單網絡模型


NS2仿真實驗報告1

實驗名稱:使用NS仿真軟件模擬簡單網絡模型

實驗日期:2015年3月2日~2015年3月7日

實驗報告日期:2015年3月8日

 

一、實驗環境(網絡平台,操作系統,網絡拓撲圖)

運行平台:虛擬機VMwareWorkstation11.0

操作系統:Linux/CentOS6.5仿真分析工具:NS2.35中的仿真軟件ns,圖形界面nam,編譯工具awk,圖表編輯器xgraph

網絡拓撲圖:


二、  實驗目的

掌握NS2仿真工具的使用方法,能夠模擬真實場景中的網絡傳輸模型,熟悉幾種常用的網絡協議,了解NS仿真軟件的內部結構。通過仿真實驗,模擬網絡數據包收發、傳輸和丟失,並將實驗數據記錄到文件中,使用仿真軟件對實驗數據生成實驗圖表,分析實驗結果。


 

三、實驗內容及步驟(包括主要配置流程,重要部分截圖)

3.1CentOS下安裝ns2.35

3.11第一步:對軟件的運行環境進行配置

CentOS中yum的使用方法:找到安裝包yumsearch *lib*,例如:yum search lib,就可已找到以下的一些安裝包;然后輸入以下命令:

yum installlibX11-devel

yum installlibXt-devel

yum installgcc-c++

3.12第二步:下載和安裝ns2.35

下載ns2.35安裝包,下載后的文件格式是ns2.35.tar.gz,可以在裝有vmware-tools的系統中,直接打開壓縮文件,並且能夠將其拖入到指定安裝的目錄下/home/byf。找到INSTALL文件所在的位置,輸入

./install

3.13第三步:配置系統環境變量

在目錄/etc下,找到profile文件,對該文件進行編譯

sudo geditprogile

輸入相應的路徑:

exportPATH=$PATH:/home/byf/ns-allinone-2.35/bin:/home/byf/ns-allinone/2.35/tcl8.5.10/unix:/home/byf/ns-allinone/2.35/tk8.5.10/unix:/usr/sbin:/usr/bin:/usr/local/bin:usr/local/sbin:/bin:/sbin

exportLD_LIBRARY_PATH=/home/byf/ns-allinone-2.35/otcl-1.14:/home/byf/ns-allinone-2.35/lib

export TCL_LIBRARY=/home/byf/ns-allinone-2.35/tcl8.5.10/library

加粗的字體用作程序運行后,可能出現的一些常規錯誤。

3.14第四步:配置用戶環境變量

接下來是環境變量的配置:在目錄/home/username下(也就是/home/byf)操作:

#sudo gedit .bashrc

根據用戶的習慣,來設置一些工作環境。

3.2編寫一個tcl腳本一般分為以下幾個步驟:

1) 創建模擬器對象,用來定義和控制模擬過程。在這個過程中,首先創建一個simulator 對象。

# 產生一個仿真的對象

set ns [new Simulator]

2) 配置節點屬性。

#針對不同的資料流定義不同的顏色,這是要給NAM用的

$ns color 0 blue

$ns color 1 red

$ns color 2 white

#產生四個網絡節點

set n0 [$ns node]

set n1 [$ns node]

set n2 [$ns node]

set n3 [$ns node]

2) 設置跟蹤文件

#開啟一個trace file,用來記錄封包傳送的過程

set f [open out.tr w]

$ns trace-all $f

#開啟一個NAM trace file

set nf [open out.nam w]

$ns namtrace-all $nf

3) 創建節點拓撲結構。

#把節點連接起來

$ns duplex-link $n0 $n2 5Mb 2ms DropTail

$ns duplex-link $n1 $n2 5Mb 2ms DropTail

$ns duplex-link $n2 $n3 1.5Mb 10ms DropTail

#設定節點的位置,這是要給NAM用的

$ns duplex-link-op $n0 $n2 orient right-up

$ns duplex-link-op $n1 $n2 orient right-down

$ns duplex-link-op $n2 $n3 orient right

 

4) 設置代理和應用層協議,並進行綁定。

#建立一條UDP的聯機

set udp0 [new Agent/UDP]

$ns attach-agent $n0 $udp0

set cbr0 [new Application/Traffic/CBR]

$cbr0 attach-agent $udp0

#建立一條UDP的聯機

set udp1 [new Agent/UDP]

$ns attach-agent $n3 $udp1

#在NAM中,UDP的聯機以紅色表示

$udp1 set class_ 1

#在UDP聯機之上建立CBR應用程序

set cbr1 [new Application/Traffic/CBR]

$cbr1 attach-agent $udp1

set null0 [new Agent/Null]

$ns attach-agent $n3 $null0

set null1 [new Agent/Null]

$ns attach-agent $n1 $null1

$ns connect $udp0 $null0

$ns connect $udp1 $null1

$ns at 1.0 "$cbr0 start"

$ns at 1.1 "$cbr1 start"

#建立一條TCP的聯機

set tcp [new Agent/TCP]

$tcp set class_ 2

set sink [new Agent/TCPSink]

$ns attach-agent $n0 $tcp

$ns attach-agent $n3 $sink

$ns connect $tcp $sink

#在TCP聯機之上建立FTP應用程序

set ftp [new Application/FTP]

5) 使用模擬器對象的at過程設置節點事件和時間的對應關系。

#設定FTP和CBR資料傳送開始和結束時間

$ns at 1.2 "$ftp start"

#結束TCP的聯機(不一定需要寫下面的程序代碼來實際結束聯機)

$ns at 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3$sink"

puts $f "$now [expr(($bw0+$holdrate1)*8)/(2*$time*1000000)]"

puts [$cbr0 set packetSize_]

puts [$cbr0 set interval_]

6) 使用#定義一個結束的程序

proc finish {} {

       global ns f nf

       $ns flush-trace

       close $f

       close $nf

    exec xgraph out.tr-geometry 800x400 &

       puts "runningnam..."

       exec nam out.nam &

       exit 0

}

#執行仿真

$ns run模擬器對象的run過程開始模擬。

7) 結果分析。模擬結束后,將得到保存模擬過程的trace文件,接下來的主要工作就是對於這個結果文件根據需求進行數據分析,同時可以用gnuplot等畫圖工具直觀的顯示數據分析結果。


 

四、實驗結果(包括最終實驗結果,重要部分截圖)

在1.0s時節點0開始通過節點2,向節點3傳輸用戶數據包,代碼為:

$ns at 1.0"$cbr0 start",執行結果如下圖所示:

節點3在1.1s時通過節點2向節點1傳輸用戶數據包,代碼為:

$ns at 1.1"$cbr1 start",執行結果如下圖所示:

 

在1.2s時,開始出現數據傳輸中斷,數據包在節點2發生丟失現象,代碼為:$ns at 1.2 "$ftp start",代碼的執行結果如下圖所示:

 

在1.35s左右數據回復傳輸,代碼為:$nsat 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"執行的結果如下圖所示:

 


 

五、試驗中的問題及心得

5.1一些出現最多的問題:

nam: Can't finda usable tk.tcl in the following directories:

    /home/byf/ns-allinone-2.35/tcl8.5.10/library/tk8.5/home/byf/ns-allinone-2.35/tcl8.5.10/tk8.5 ./lib/tk8.5/home/byf/ns-allinone-2.35/lib/tk8.5 ./library

……

This probablymeans that tk wasn't installed properly.

是由於環境變量的問題,例如環境變量的目錄在/home/username/ns2.35,而用戶執行的目錄在/home/username下,這樣就會出現上述的問題。

六、實驗思考

通過本次實驗,初步的了解到NS仿真工具的基本功能,並能夠給一些簡單的模型進行仿真實驗分析,以及進一步對網絡協議的了解,編寫簡單的網絡協議算法,通過比較仿真的數據,反映網絡協議的優劣。對已經存在的協議進一步提出改進的算法,來提升網絡的傳輸性能。學習NS仿真軟件的主要途徑,是需要不斷的閱讀優質的源代碼,對未知的代碼行進行注釋,反復的使用和修改成型的源代碼,充分了解代碼內部,各部分的函數、命令以及協議定義的方法,對以后學習代碼庫中的協議代碼有非常重要的幫助。

實驗途中可能會遇到各種問題,但是一定要堅持不斷的閱讀查找,並記錄下來錯誤的地方,找到解決問題的方法。一旦學會使用,就會覺得學習起來非常的簡單,對以后獨立編寫代碼起着支撐的作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM