第3講 NS2語法及結果分析_第1頁
第3講 NS2語法及結果分析_第2頁
第3講 NS2語法及結果分析_第3頁
第3講 NS2語法及結果分析_第4頁
第3講 NS2語法及結果分析_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

NS2語法及結果分析NS2語法namAwkXgraphGnuplotNS2語法模擬器和節(jié)點每進行一次模擬都需要建立一個Simulator類的實例來控制模擬的過程,Simulator類提供了一些實例過程來創(chuàng)建和管理節(jié)點,setns[newSimulator]這條語句功能:1、包格式初始化;2、產(chǎn)生一個事件調(diào)度計劃;3、選擇一個默認的地址格式節(jié)點(node)是網(wǎng)絡拓撲的重要組成部分。建立一個節(jié)點的基本方法是調(diào)用Simulator類的node過程: $nsnode例如:設置2個節(jié)點,可以表示為setns[newSimulator]

setn0[$nsnode]setn1[$nsnode]一個單播節(jié)點的基本結構如下圖所示,它主要包括兩個Tcl對象:地址分類器(addressclassifier)和端口分類器(portclassifier),它們分別用來判斷分組的目標地址以及分組的目標Agent。

代理(Agent)Agent代表了網(wǎng)絡層分組的起點和終點,并被用于實現(xiàn)如TCP和UDP等網(wǎng)絡協(xié)議。Agent類是由C++和Otcl共同實現(xiàn)的。Agent可以實現(xiàn)網(wǎng)絡層、運輸層等多個層次的協(xié)議,對于一些運輸層的協(xié)議(比如UDP),分組的大小和發(fā)送時間通常是由代表應用層的獨立的對象來控制的,這些控制是通過Agent為應用程序開放的應用程序接口(API)來進行的。對于低層使用的Agent(比如路由Agent),分組的大小和發(fā)送時間通常由Agent自己控制。對于一個TCP

Agent,常用的協(xié)議代理有:

Agent/TCP--------------“Tahoe”TCP發(fā)送端(任何損耗下cwnd=1)Agent/TCP/Reno-------“Reno”TCP發(fā)送端(快速修復)Agent/TCP/Sack1------SackTCP發(fā)送端

Application類在NS中,應用層程序構建在運輸層代理(transportagent)之上,它分為兩大類:流量發(fā)生器(trafficgenerator)和應用模擬器(simulatedapplication)。下圖說明了這兩類應用層程序與運輸層代理之間的關系:流量發(fā)生器一般用在UDP代理之上,應用模擬器一般用在TCP代理之上。Application/Traffic/ExponentialApplication/FTPAgent/UDPAgent/TCP/FullTcpAPIAPI應用程序與運輸層代理之間的關系在NS2中常用的application有:

Application/FTP-----------------------------提供TCP將發(fā)送的數(shù)據(jù)數(shù)量

Application/Traffic/CBR-------------------以持續(xù)的比特率產(chǎn)生包裹

Application/Traffic/Exponential-----------處于中斷周期時,不發(fā)送信息;工作周期時,以持續(xù)的比特率產(chǎn)生包裹。兩個周期的長度均按指數(shù)分布。Application/Traffic/Trace------------------通信量從一個trace文件中產(chǎn)生,并且包裹間的間隔和大小都事先被定義。除了這些application外,還可以利用類提供的方法來產(chǎn)生信息。例如,如果通過UDP發(fā)送數(shù)據(jù),可以用語句

send(intnbytes)--------nbytes是應用程序給出的分組的長度創(chuàng)建一個利用UDP作為傳送協(xié)議的CBR信息源,并將其同節(jié)點n0綁定。

setudp0[newAgent/UDP]

$nsattach-agent$n0$udp0

setcbr0[newApplication/Traffic/CBR]

$cbr0attach-agent$udp0

$cbr0setpacket_size_1000

$udp0setpacket_size_1000

$cbr0setrate_1000000利用TCP作為傳送協(xié)議的FTP

application,并同節(jié)點n1綁定的方法相似:settcp1[newAgent/TCP]$nsattach-agent$n1$tcp1setftp1[newApplication/FTP]$ftp1attach-agent$tcp1$tcp1setpacket_size_1000舉例如果信息流中止處理,udp和tcp就必須和信息量sink相連接。分別用下面兩個類來表示:Agent/TCPSink-------------TCPsinkAgent/Null------------------UDPsink用下面語句表示同udp0連接并同n2綁定的UDPsink:

setnull[newAgent/Null]

$nsattach-agent$n2$null

$nsconnect$udp0$null

標準的TCPsink每接收一個包裹能夠獲得確認信息,并同n3綁定,tcp1連接:setsink[newAgent/Sink]$nsattach-agent$n3$sink$nsconnect$tcp1$sink

也可以用另外的方法創(chuàng)建一個標準的TCP,同n1、n3連接,ID為1:$nscreate-connectionTCP$n1TCPSink$n31鏈路鏈路(Link)是網(wǎng)絡拓撲的第二部分,是NS2復合網(wǎng)絡組件的另一個大類。創(chuàng)建簡單鏈路:

setns[newSimulator]

$nssimplex-link[node0][node1][bandwidth][delay][queue_type]

這個命令建立了一條從node0到node1的鏈路,改link的帶寬為bandwidth,延遲為delay,隊列類型為queue_type。雙向鏈路的創(chuàng)建也相似。例如:創(chuàng)建一條從n0到n2的鏈路,隊列類型為DropTail$nsduplex-link$n0$n215Mb10msDropTailTraceTrace的功能是詳細記錄模擬的過程,trace可以根據(jù)用戶的需要記錄模擬過程中的任何一個細節(jié)。例如下面語句:settrace_all[openall.datw]$nstrace-all$trace_all$nsflush-traceclose$trace_all首先,打開輸出文件,然后處理事件記錄在文件中。模擬的最后,trace緩存被充滿,文件關閉。下面是一個trace文件的例子:+1.8437502cbr210-------00.03.1225610-1.8437502cbr210-------00.03.1225610r1.8447121cbr210-------13.01.0195600d1.8456620ack40-------23.20.182602+1.8456602tcp1000-------20.13.2102611-1.8456602tcp1000-------20.13.2102611

r:接收(receive)+:入隊(enqueue)

d:丟失(drop)-:出隊(dequeue)模擬當模擬拓撲創(chuàng)建之后,所有的代理都要配置,例如模擬的開始和結束。模擬的開始和結束語句為:$nsat$simtime“finish”----------------------模擬結束

$nsrun------------------------------------------模擬開始結束過程:procfinish{}{globalnstrace_all$nsflush-traceclose$trace_allexit0}開始或者結束的時間:$nsat0.0“cbr0start”$nsat50.0“ftp1start”$nsat$simtime“cbr0stop”$nsat$simtime“ftp1stop”簡單的NS2例題創(chuàng)建一個如下圖拓撲結構,加入一個利用UDP作為傳送協(xié)議的CBR信息源,并將所有信息記錄到一個trace文件中。n0n2

n13Mbps1ms5Mbps15ms代碼如下:setns[newSimulator]#Enablingtracingofalleventsofthesimulationsetf[openex.namw]$nsnamtrace-all$fseta[openex.trw]$nstrace-all$a#Definingafinishprocedureprocfinish{}{globalnsfa$nsflush-traceclose$fclose$aexecnamex.nam&exit0}#Creationofthenodessetn0[$nsnode]setn1[$nsnode]setn2[$nsnode]$nscolor1Blue#Creationofthelinks$nsduplex-link$n0$n13Mb1msDropTail$nsduplex-link$n1$n21Mb15msDropTail#Creationofacbr-connectionusingUDPsetudp0[newAgent/UDP]$nsattach-agent$n0$udp0setcbr0[newApplication/Traffic/CBR]$cbr0attach-agent$udp0$cbr0setpacket_size_1000$udp0setpacket_size_1000$cbr0setrate_1000000$udp0setclass_0setnull0[newAgent/Null]$nsattach-agent$n2$null0$nsconnect$udp0$null0$udp0setfid_1#Schedulingtheevents$nsat0.1"$cbr0start"$nsat0.5"$cbr0stop"$nsat1.0"finish"$nsrun用NS執(zhí)行模擬后,顯示如下:(1)網(wǎng)絡原始圖(2)網(wǎng)絡運行仿真圖(節(jié)點1至節(jié)點2)(3)網(wǎng)絡運行仿真圖(節(jié)點0至節(jié)點1至節(jié)點2)結果分析End-to-EndDelay、Jitter、PacketLoss、和ThroughputNam、awk、xgragh、gnuplot等模擬拓撲Tcl腳本Example.tclNam結果Out.tr跟蹤文件格式+0.112cbr1000-------21.03.100-0.112cbr1000-------21.03.100+0.10812cbr1000-------21.03.111-0.10812cbr1000-------21.03.111r0.11412cbr1000-------21.03.100+0.11423cbr1000-------21.03.100-0.11423cbr1000-------21.03.100+0.11612cbr1000-------21.03.122-0.11612cbr1000-------21.03.122r0.12212cbr1000-------21.03.111+0.12223cbr1000-------21.03.111.................................................................awkawk是一種程序語言。它具有一般程序語言常見的功能。因awk語言具有某些特點,如:使用直譯器(Interpreter)不需先行編譯;變量無型別之分(Typeless),可使用文字當數(shù)組的注標(AssociativeArray)等特色。使用awk撰寫程序比起使用其它語言更簡潔便利且節(jié)省時間。awk還具有一些內(nèi)建功能,使得awk擅于處理具數(shù)據(jù)列(Record),字段(Field)型態(tài)的數(shù)據(jù);此外,awk內(nèi)建有pipe的功能,可將處理中的數(shù)據(jù)傳送給外部的Shell命令加以處理,再將Shell命令處理后的數(shù)據(jù)傳回awk程序,這個特點也使得awk程序很容易使用系統(tǒng)資源。Awk如何使用資料列:awk從數(shù)據(jù)文件上讀取的基本單位,以tracefile為例,awk讀入的第一筆資料列為”+0.112cbr1000-------21.03.100”第二筆資料列為“-0.112cbr1000-------21.03.100”一般而言,一筆數(shù)據(jù)列相當于數(shù)據(jù)文件上的一行資料。字段(Field):為數(shù)據(jù)列上被分隔開的子字符串。以資料列”+0.112cbr1000-------21.03.100”為例,一二三四五六七八九十十一十二+0.112cbr1000-------21.03.100一般而言是以空格符來分隔相鄰的字段。當awk讀入數(shù)據(jù)列后,會把每個字段的值存入字段變量。字段變量意義$0為一字符串,其內(nèi)容為目前awk所讀入的資料列.$1代表$0上第一個字段的數(shù)據(jù).$2代表$0上第二欄個位的資料.…………程序主要節(jié)構: Pattern1 {Actions1} Pattern2 {Actions2} …………… Pattern3 {Actions3}一般常用”關系判斷式”來當成Pattern。例如:x>3用來判斷變量x是否大于3x==5用來判斷變量x是否等于5awk提供c語言常見的關系操作數(shù),如:>、<、>=、<=、==、?。降鹊華ctions是由許多awk指令所構成,而awk的指令與c語言中的指令非常類似。IO指令:print、printf()、getline......流程控制指令

:if(...){...}else{…}、while(…){…}……在awk程序的流程為先判斷Pattern的結果,若為真True則執(zhí)行相對應的Actions,若為假False則不執(zhí)行相對的Actions。若是處理的過程中沒有Pattern,awk會無條件的去執(zhí)行Actions。

工作流程

執(zhí)行awk時,它會反復進行下列四步驟。1.自動從指定的數(shù)據(jù)文件中讀取一筆數(shù)據(jù)列。2.自動更新(Update)相關的內(nèi)建變量之值。3.逐次執(zhí)行程序中所有的Pattern{Actions}指令。4.當執(zhí)行完程序中所有Pattern{Actions}時,若數(shù)據(jù)文件中還有未讀取的料,則反復執(zhí)行步驟1到步驟4。awk會自動重復進行上述的四個步驟,所以使用者不須在程序中寫這個循環(huán)。

End-to-EndDelay

把量測CBR封包端點到端點間延遲時間的awk程序,寫在文件measure-delay.awk

中執(zhí)行方法:($為shell的提示符號)$awk-fmeasure-delay.awkout.tr若是要把結果存到檔案,可使用導向的方式。(把結果存到cbr_delay檔案中)$awk-fmeasure-delay.awkout.tr>cbr_delay執(zhí)行結果:0.1000000.0387060.1080000.0387060.1160000.0387060.1240000.0387060.1320000.038706………xgraph

在Shell的提示符號后輸入startxwin.bat

xgraphcbr_delaygnuplot

gnuplot是一個命令導向的交談式繪圖程序(command-driveninteractivefunctionplottingprogram)。使用者輸入的每一項命令,可以逐步設定或修改繪圖環(huán)境。它以圖形表達數(shù)據(jù)或涵數(shù),使我們可以藉由圖形做更進一步的分析。$gnuplot以cbr_delay為例,先簡單示范如何把圖給畫出來。畫圖的指令是plot,要畫的檔案cbr_delay

。gnuplot>plot“cbr_delay”修改環(huán)境變量坐標軸(Axis):繪圖參數(shù)在設定坐標軸方面的參數(shù)可分為變量名稱、標點、網(wǎng)格、顯示范圍、坐標軸顯示方式與顯示與否等六方面的設定。

功能繪圖參數(shù)名稱標點設定xtics,ydtics網(wǎng)格設定grid坐標顯示方式logscale顯示范圍設定autoscale,xrange,yrange坐標軸顯示與否xzeroaxis,yzeroaxisxtics是對X坐標軸上的標點做設定。如起始點、結束點、間隔或在軸上特定點放特定的名稱。其語法為:setxtics{{<start>,<incr>{,<end>}}| {({"<label>"}<pos>{,{"<label>"}<pos>}...)}}unsetxtics#不標示任何X軸上的標點。showxtics#顯示X軸標點的狀況。ytics與xtics相似,不同點是作用在y軸上gnuplot>plotsin(x)在x軸上的標點設定是以5為單位。若是覺得想要把標點距離設小一點,例如設為1,可以使用gnuplot>setxtics-10,1,10gnuplot>plotsin(x)網(wǎng)格設定在XY坐標平面上依刻度畫上方格子。gnuplot>setgridgnuplot>plotsin(x)若是想要把網(wǎng)格拿掉,只要在下unsetgrid即可

坐標顯示方式分為線性與對數(shù)兩種。一般為前者,若要改為對數(shù)方式,其語法為:setlogscale<axes><base>其中axes為X軸、Y軸、Z軸的任意組合。base預設為10。顯示范圍設定改變各軸的顯示范圍。autoscale參數(shù)設定后gnuplot自動調(diào)整顯示范圍。而xrange、yrange則是可以由使用者設定該軸的范圍。以xrange為例,其語法為:

setxrange[{<xmin>:<xmax>}]其中參數(shù)<xmin>與<xmax>代表X軸的起點與終點,可以是數(shù)字或數(shù)學式子。例:gnuplot>setxrange[0:10]gnuplot>plotsin(x)坐標軸顯示與否設定設定是否要畫出坐標軸,以X軸為例:setxzeroaxis#設定顯示X坐標軸unsetxzeroaxis#設定不顯示X坐標軸showxzeroaxis#檢查X坐標軸顯示與否gnuplot>setxzeroaxisgnuplot>plotsin(x)標示(Label)GNUPLOT除了繪出圖形外,尚可加入批注做為輔助說明。這批注包括文字與線條兩方面,其提供的設定有

功能繪圖參數(shù)名稱線條arrow文字批注key,label,title,xlabel,ylabel線條在圖上畫一線段可以選擇有無箭頭。其語法為setarrow{<tag>}{from<sx>,<sy>{,<sz>}}{to<ex>,<ey>{,<ez>}}{{no}head}unsetarrow{<tag>}#刪除一線條showarrow#顯示線條使用情況其中參數(shù)<tag>是給該條線條一個整數(shù)名稱,若不設定則為最小可用整數(shù)。此線條由坐標(sx,sy,sz)到(ex,ey,ez)(在2D中為(sx,sy)到(ex,ey))。參數(shù)nohead為畫沒有箭頭的線段,參數(shù)head或沒有nohead為畫有箭頭的線段。#畫一帶有箭頭的線條由原點到(1,2)。gnuplot>setarrowto1,2#畫一名為3的帶箭頭線條由(0.4,0.3)到(0.2,0.1)。gnuplot>setarrow3from0.4,0.3to0.2,0.1#刪除名為3的線條。gnuplot>unsetarrow3#刪除所有線條。guplot>unsetarrow文字批注分為設定標頭(title)和標示(label)。標頭(title):設定為在圖的正上方加上說明本圖的文字。其語法為:settitle{"<title-text>"}{<xoff>}{,<yoff>}showtitle其中設定參數(shù)<xoff>或<yoff>為微調(diào)標頭放置的地址。xlabel,ylabel的語法與title相同,其各自描述一坐標軸。標示(label)為在圖上任一位置加上文字說明,一般與線條一并使用。

setlabel{<tag>}{"<label_text>"}

{at<x>,<y>{,<z>}}{<justification>} unsetlabel{<tag>}#刪除一標示showlabel#顯示標示使用情況其中參數(shù)<tag>與"線條"(arrow)中<tag>意義相同,用以區(qū)別不同的

label。參數(shù)

<justification>是調(diào)整文字放置的位置,可以是

left,right或

center。

#將y=x放在坐標(1,2)之處。gnuplot>setlabel“y=x”at1,2 #將y=x^2放在坐標(2,3)之處,并命名為3。

gnuplot>setlabel3"y=x^2"at2,3right #將名為3的標示居中放置。

gnuplot>setlabel3center#刪除名為3的標示。gnuplot>unsetlabel3#刪除所有標示。gnuplot>unsellabel一般繪一圖形后,gnuplot會將函數(shù)名稱或圖形文件名稱置于右上角。key參數(shù)設定可改變名稱放置位置。其語法為: setkey setkey<x>,<y>{,<z>} #其中參數(shù)<x>,<y>,<z>設定名稱放置位置。

unsetkey #不顯示名稱

showkey #再度顯示名稱例gnuplot>settitle“cbr_delay”gnuplot>set

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論