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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

send(intnbytes)--------nbytes是應(yīng)用程序給出的分組的長(zhǎng)度創(chuàng)建一個(gè)利用UDP作為傳送協(xié)議的CBR信息源,并將其同節(jié)點(diǎn)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é)點(diǎn)n1綁定的方法相似:settcp1[newAgent/TCP]$nsattach-agent$n1$tcp1setftp1[newApplication/FTP]$ftp1attach-agent$tcp1$tcp1setpacket_size_1000舉例如果信息流中止處理,udp和tcp就必須和信息量sink相連接。分別用下面兩個(gè)類來表示:Agent/TCPSink-------------TCPsinkAgent/Null------------------UDPsink用下面語句表示同udp0連接并同n2綁定的UDPsink:

setnull[newAgent/Null]

$nsattach-agent$n2$null

$nsconnect$udp0$null

標(biāo)準(zhǔn)的TCPsink每接收一個(gè)包裹能夠獲得確認(rèn)信息,并同n3綁定,tcp1連接:setsink[newAgent/Sink]$nsattach-agent$n3$sink$nsconnect$tcp1$sink

也可以用另外的方法創(chuàng)建一個(gè)標(biāo)準(zhǔn)的TCP,同n1、n3連接,ID為1:$nscreate-connectionTCP$n1TCPSink$n31鏈路鏈路(Link)是網(wǎng)絡(luò)拓?fù)涞牡诙糠?,是NS2復(fù)合網(wǎng)絡(luò)組件的另一個(gè)大類。創(chuàng)建簡(jiǎn)單鏈路:

setns[newSimulator]

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

這個(gè)命令建立了一條從node0到node1的鏈路,改link的帶寬為bandwidth,延遲為delay,隊(duì)列類型為queue_type。雙向鏈路的創(chuàng)建也相似。例如:創(chuàng)建一條從n0到n2的鏈路,隊(duì)列類型為DropTail$nsduplex-link$n0$n215Mb10msDropTailTraceTrace的功能是詳細(xì)記錄模擬的過程,trace可以根據(jù)用戶的需要記錄模擬過程中的任何一個(gè)細(xì)節(jié)。例如下面語句:settrace_all[openall.datw]$nstrace-all$trace_all$nsflush-traceclose$trace_all首先,打開輸出文件,然后處理事件記錄在文件中。模擬的最后,trace緩存被充滿,文件關(guān)閉。下面是一個(gè)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)+:入隊(duì)(enqueue)

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

$nsrun------------------------------------------模擬開始結(jié)束過程:procfinish{}{globalnstrace_all$nsflush-traceclose$trace_allexit0}開始或者結(jié)束的時(shí)間:$nsat0.0“cbr0start”$nsat50.0“ftp1start”$nsat$simtime“cbr0stop”$nsat$simtime“ftp1stop”簡(jiǎn)單的NS2例題創(chuàng)建一個(gè)如下圖拓?fù)浣Y(jié)構(gòu),加入一個(gè)利用UDP作為傳送協(xié)議的CBR信息源,并將所有信息記錄到一個(gè)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)絡(luò)原始圖(2)網(wǎng)絡(luò)運(yùn)行仿真圖(節(jié)點(diǎn)1至節(jié)點(diǎn)2)(3)網(wǎng)絡(luò)運(yùn)行仿真圖(節(jié)點(diǎn)0至節(jié)點(diǎn)1至節(jié)點(diǎn)2)結(jié)果分析End-to-EndDelay、Jitter、PacketLoss、和ThroughputNam、awk、xgragh、gnuplot等模擬拓?fù)銽cl腳本Example.tclNam結(jié)果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語言具有某些特點(diǎn),如:使用直譯器(Interpreter)不需先行編譯;變量無型別之分(Typeless),可使用文字當(dāng)數(shù)組的注標(biāo)(AssociativeArray)等特色。使用awk撰寫程序比起使用其它語言更簡(jiǎn)潔便利且節(jié)省時(shí)間。awk還具有一些內(nèi)建功能,使得awk擅于處理具數(shù)據(jù)列(Record),字段(Field)型態(tài)的數(shù)據(jù);此外,awk內(nèi)建有pipe的功能,可將處理中的數(shù)據(jù)傳送給外部的Shell命令加以處理,再將Shell命令處理后的數(shù)據(jù)傳回awk程序,這個(gè)特點(diǎn)也使得awk程序很容易使用系統(tǒng)資源。Awk如何使用資料列:awk從數(shù)據(jù)文件上讀取的基本單位,以tracefile為例,awk讀入的第一筆資料列為”+0.112cbr1000-------21.03.100”第二筆資料列為“-0.112cbr1000-------21.03.100”一般而言,一筆數(shù)據(jù)列相當(dāng)于數(shù)據(jù)文件上的一行資料。字段(Field):為數(shù)據(jù)列上被分隔開的子字符串。以資料列”+0.112cbr1000-------21.03.100”為例,一二三四五六七八九十十一十二+0.112cbr1000-------21.03.100一般而言是以空格符來分隔相鄰的字段。當(dāng)awk讀入數(shù)據(jù)列后,會(huì)把每個(gè)字段的值存入字段變量。字段變量意義$0為一字符串,其內(nèi)容為目前awk所讀入的資料列.$1代表$0上第一個(gè)字段的數(shù)據(jù).$2代表$0上第二欄個(gè)位的資料.…………程序主要節(jié)構(gòu): Pattern1 {Actions1} Pattern2 {Actions2} …………… Pattern3 {Actions3}一般常用”關(guān)系判斷式”來當(dāng)成Pattern。例如:x>3用來判斷變量x是否大于3x==5用來判斷變量x是否等于5awk提供c語言常見的關(guān)系操作數(shù),如:>、<、>=、<=、==、?。降鹊華ctions是由許多awk指令所構(gòu)成,而awk的指令與c語言中的指令非常類似。IO指令:print、printf()、getline......流程控制指令

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

工作流程

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

End-to-EndDelay

把量測(cè)CBR封包端點(diǎn)到端點(diǎn)間延遲時(shí)間的awk程序,寫在文件measure-delay.awk

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

在Shell的提示符號(hào)后輸入startxwin.bat

xgraphcbr_delaygnuplot

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

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

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

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

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

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

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

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

label。參數(shù)

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

left,right或

center。

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

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

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

unsetkey #不顯示名稱

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論