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仿真軟件的主要途徑,是需要不斷的閱讀優質的源代碼,對未知的代碼行進行注釋,反復的使用和修改成型的源代碼,充分了解代碼內部,各部分的函數、命令以及協議定義的方法,對以后學習代碼庫中的協議代碼有非常重要的幫助。
實驗途中可能會遇到各種問題,但是一定要堅持不斷的閱讀查找,並記錄下來錯誤的地方,找到解決問題的方法。一旦學會使用,就會覺得學習起來非常的簡單,對以后獨立編寫代碼起着支撐的作用。