430 likes | 645 Views
電腦網路實驗課程 NS2(Network Simulation,version 2). Environment set up NS2 TCL Awk Simulation. NS2. (Network Simulation , version2). NS2 (Network Simulation , version2). 網路模擬的優點 模擬時間少、成本低 提供網路研究學者驗證自己提出的方法是否有效 NS2 由 UC Berkeley 所開發 由 C++ 和 OTcl 為開發語言. Install NS2.
E N D
Environment set up • NS2 • TCL • Awk • Simulation
NS2 (NetworkSimulation,version2)
NS2(NetworkSimulation,version2) • 網路模擬的優點 • 模擬時間少、成本低 • 提供網路研究學者驗證自己提出的方法是否有效 • NS2 • 由UCBerkeley所開發 • 由C++和OTcl為開發語言
Install NS2 • 下載檔案(http://sourceforge.net/project/showfiles.php?group_id=149743&package_id=169689) • $sudo apt-get install tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev libxmu-dev libxmu-headers g++ libpcap-dev gnuplot(ubuntu需要安裝)
解壓縮檔案 $tarzxvfns-allinone-2.35.tar.gz • 把解壓後的資料夾移動到想要安裝的位置 $ sudo mv ns-allinone-2.35 /home/ns2 • $cdns-allinone-2.35 • $./install
$vi~/.bashrc(增加自己家目錄的export) • exportPATH=$PATH:/home/ns2/ns-allinone-2.29/bin:/home/ns2/ns-allinone-2.29/tcl8.4.11/unix:/home/ns2/ns-allinone-2.29/tk8.4.11/unix • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /home/ns2/ns- allinone-2.29/otcl-1.11:/home/ns2/ns-allinone-2.29/lib • exportTCL_LIBRARY=/home/ns2/ns-allinone-2.29/tcl8.4.11/library
Environment Testing • $ns • $cd ns-2.35 ./validate
TCL (ToolCommandLanguage)
TCL(ToolCommandLanguage) • 在NS2扮演的角色為描述腳本 • 描述網路環境和參數設定
變數宣告及使用Variable • set • $ • Example setmonth3 setday30 setdate“$month-$day” puts$date #nsdate.tcl #3-30
expr • TCL包含很多種表示式,如數學表示式、關係表示 式…等,統常會用”expr”去判斷真假或求值 Example setvalue[expr2>=1] puts$value #nsexpr1.tcl #1
setvalue[expr5+2] puts$value #nsexpr2.tcl #7
把執行的結果取代tclscript • Example puts“Iam[expr5+2]yearsold,andmyI.Q.is[expr55+20].” #nsexpr3.tcl #Iam7yearsold,andmyI.Q.is75. setmy_height6.0 puts“IfIwas2inchestaller,Iwouldbe[expr $my_height+(2.0/12.0)]feettall.” #nsexpr4.tcl #IfIwas2inchestaller,Iwouldbe6.166666666666667feettall.
TCL也有提供控制程式運作流程的方法,包含 if-else,switch,while,for,foreach…等 • Example setpass69 if{$pass>=60}{ puts“Congratulationspass.” }else{ puts“Fail.” } #nscontrol1.tcl #Congratulationspass.
setnum_class80 switch$num_class{ 100{puts“Perfect.”} 80{puts“Good.”} 60{puts“Bad.”} } #nscontrol2.tcl #Good for{seti0}{$i<10}{incri2}{ puts“Forloopnumber$i.” } # # # # # # nscontrol3.tcl Forloopnumber Forloopnumber Forloopnumber Forloopnumber Forloopnumber 0 2 4 6 8
seti1 while{$i<10}{ puts“Whileloopnumber$i” incri2 } # # # # # # nscontrol4.tcl Whileloopnumber Whileloopnumber Whileloopnumber Whileloopnumber Whileloopnumber 1 3 5 7 9
讓使用者自定程序 • procname params body • name為程序的名稱 • params為參數列表 • body為程序主體 procname{params}{ body… }
procsum_proc{ab}{ return[expr$a+$b] } setvalue12 setvalue8 Setsum[sum_proc$value1$value2] puts“sum_procvalue=$sum” #nsproc1.tcl #sum_procvalue=20 • Example
Example for{seti0}{$i<0}{incri1}{ setmyarray($i)$i puts“myarray$ivalue=$myarray($i)” } #nsarrays1.tcl #myarray0value #myarray1value #myarray2value #myarray3value . . #myarray9value =0 =1 =2 =3 . . =9
puts未指定輸出裝置,內定輸出裝置是螢幕;若有puts未指定輸出裝置,內定輸出裝置是螢幕;若有 指定輸出裝置為檔案,會把秀出來的內容寫入檔案 • Example setf[open“/tmp/myfile”“w”] for{seti0}{$i<0}{incri1}{ setmyarray($i)$i puts$f“myarray$ivalue=$myarray($i)” } close$f #nsoutput1.tcl
使用直譯器不須先行編譯 awk擅長處理如 ◦資料列 + 0.1 1 2 cbr 1000 ----- 2 1.0 3.1 0 0 一 + 二 0.1 三 1 四 2 五 cbr 六 1000 七 ----- 八 2 九 1.0 十 3.1 十一 0 十二 0 awk分析 欄位資料內容 為一字串,目前awk所讀入的資料列 代表$0資料列的第一個欄位資料 代表$0資料列的第二個欄位資料 欄位變數 $0 $1 $2
Pattern1 Pattern2 . . Patternn {Actions1} {Actions2} . . {Actionsn} • 程式結構 • 一般常用關係判斷式來當成Pattern • >,<,>=,<=,==,&&,!=…等 • Actions為awk由語言所構成,awk語言與c語言很類似 • printf、if(…){…}else{…}、while(…){…}
工作流程 • 從指定的資料檔中讀取一筆資料列 • 更新相關變數之值 • 逐次執行程式中所有pattern{actions} • 反覆執行①-③,一直到資料讀取完畢,awk會自動執 行上述步驟,所以使用者不用在程式中寫這個迴圈 流程
此模擬為TCP和UDP傳送封包的過程,並設有DropTail佇此模擬為TCP和UDP傳送封包的過程,並設有DropTail佇 列;先使用CBR封包傳送一段時間後再開始送FTP封包, 因FTP與CBR互搶頻寬,所以就會發生封包停在佇列的情 況,等有限的佇列滿的時候就會看到開始丟棄封包
傳輸節點S1、S2、路由器r、資料接收端d • s1→r • TCP • 2Mbps頻寬,10ms延遲時間 • Start1.0s,End4.0s • s2→r • UDP • 2Mbps頻寬,10ms延遲時間 • Start0.1s,End4.5s • r→d • 1.7mbps頻寬,20ms延遲時間 • Droptail佇列機制,最大佇列10個封包長度
FTP s1 TCP sink 2Mbps,10ms d 1.7Mbps,20ms s2 r Null sec 2Mbps,10ms UDP cbr ftp cbr 0.1 1.0 4.04.5
FTP s1,ID=0 TCP sink 2Mbps,10ms d,ID=2 1.7Mbps,20ms r,ID=1
Summary: Generic Script Structure 1. Create Simulator object set ns [new Simulator] 2.[Turn on tracing] #nam trace, packet trace 3.Create topology # node,link(queue-size) # nam position 4.[Setup packet loss, link dynamics] 5.Create: protocol agents application and/or setup traffic sources 6.Post-processing procs #ex.finish() 7.Start simulation #simulation scenario
#產生一個新的模擬物件 setns[newSimulator] #設定封包顏色給NAM用 $nscolor1Blue #開一個NAM紀錄檔 setnf[openout.namw] $nsnamtrace-all$nf #開一個模擬過程的紀錄檔,紀錄封包傳送過程 setnd[openout.trw] $nstrace-all$nd #定義一個結束的程序 procfinish{}{ globalnsnfnd $nsflush-trace close $nf close $nd execnamout.nam& exit0 }
#設定傳輸節點,s1的id是0,r的id是1,d的id是2(id會按照所建順序依序產生)#設定傳輸節點,s1的id是0,r的id是1,d的id是2(id會按照所建順序依序產生) sets1[$nsnode] setr[$nsnode] setd[$nsnode] #設定各連線的傳輸頻寬、延遲時間、佇列機制 $nsduplex-link$s1$r2Mb10msDropTail $nsduplex-link$r$d1.7Mb20msDropTail #設定佇列大小 $nsqueue-limit$r$d10 #設定模擬畫面節點位置 $nsduplex-link-op$s1$rorientright-down $nsduplex-link-op$r$dorientright #設定來觀察r-d佇列的變化(NAM) $nsduplex-link-op$r$dqueuePos0.5
#開始建立一個TCP的連線 settcp[newAgent/TCP] #設定節點的通訊協定 $nsattach-agent$s1$tcp #設定TCP的接收端,此TCPSinkagent收到tcp封包會回ack set sink [new Agent/TCPSink] $ns attach-agent $d $sink $ns connect$tcp $sink #設定此TCP連線為藍色(NAM) $tcp set fid_ 1 #建立一個FTP應用程式在TCP連線上 set ftp [new Application/FTP] #設定ftp為tcp協定 $ftp attach-agent $tcp $ftp set type_ FTP
#開始建立一個UDP的連線 #設定此UDP連線為?色(NAM) #建立一個cbr應用程式在UDP連線上 #設定FTP和cbr傳送的起始時間和結束時間 $nsat1.0"$ftpstart" $nsat4.0"$ftpstop" #結束TCP的連線 $nsat4.5"$nsdetach-agent $s1$tcp" $nsat4.5"$nsdetach-agent $d$sink" #5秒後結束此模擬 $nsat5.0"finish" #開始執行模擬 $nsrun
TCPSimulation TCP&UDPSimulation
event time From To Packet Packet flags fid Src Dst Seq Packet node node type size addr addr num Id 欄位一:封包事件 欄位二:事件發生時間 欄位三、欄位四:fromnode到tonode 欄位五:封包型態 欄位六:封包大小 欄位七:旗標 欄位八:表示封包屬於的資料流 欄位九、欄位十:封包來源端和目的端 ◦x.y->x:節點編號,y:portnumber 欄位十一:封包序號 欄位十二:封包id
1.安裝NS2,並且可執行任一範例 • 安裝及模擬的操作過程請以圖片及文字說明(word) • 2.實做TCP與UDP模擬實驗 • 將實做部分程式碼補上即可,並繳交完整程式碼及記錄檔 • 3.使用awk語言分析記錄檔 • 將實做部分程式碼貼上即可,並繳交完整程式碼
DownloadNS2all-in-one • http://sourceforge.net/projects/nsnam/files/allinone/ • DownloadVirtualbox • http://www.virtualbox.org/wiki/Downloads • 柯志亨,計算機網路實驗以NS2模擬工具實做,學貫行銷,2005