版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
NS簡(jiǎn)單工具介紹仿真后數(shù)據(jù)分析對(duì)于使用網(wǎng)絡(luò)仿真軟件來做網(wǎng)絡(luò)效能分析的人而言,步驟通常是先設(shè)計(jì)出符合自己需要的網(wǎng)絡(luò)仿真環(huán)境,設(shè)定其不同的參數(shù),執(zhí)行仿真,收集結(jié)果資料,最后把資料使用圖片或表格把結(jié)果呈現(xiàn)出來以方便分析實(shí)驗(yàn)。一般而言,對(duì)于ns2的初學(xué)者而言,總是會(huì)遇到一個(gè)問題,就是網(wǎng)絡(luò)仿真程序跑完后,接下來該如何分析。這是非常重要的一個(gè)過程,所以希望ns2的初學(xué)者能好好的研究此章節(jié)的內(nèi)容,相信一定會(huì)對(duì)大家的研究有相當(dāng)?shù)膸椭1竟?jié)打算以一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)環(huán)境為范例,介紹如何使用一些工具來分析和呈現(xiàn)仿真結(jié)果,這包含了如何去量測(cè)End-to-EndDelay,JitterPacketLos命和Throughput而采用的方法是去分析traffictrace的方式,這種方法的優(yōu)點(diǎn)是簡(jiǎn)單且不需要去修改到ns2核心的部份,但缺點(diǎn)是若是仿真資料若是太多,traffictra檔案會(huì)太大,這樣會(huì)增加分析所需要的時(shí)間。另外一種方法,是去更改ns2核心,增加或修改一些檔案,把所需要量測(cè)的參數(shù)直接記錄下來,這種方法的優(yōu)點(diǎn)是仿真結(jié)束后,所需要量測(cè)的數(shù)據(jù)已經(jīng)完全記錄下來,但缺點(diǎn)是要?jiǎng)拥絥s2核心的部分,對(duì)于初學(xué)者而言,這是一個(gè)很大的門檻,這個(gè)方法筆者留到后面的章節(jié)在做介紹。筆者先對(duì)要仿真的環(huán)境做一個(gè)簡(jiǎn)單的介紹。這個(gè)網(wǎng)絡(luò)的環(huán)境包含了四個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)(n0n1,n2,n3),如下圖所示。網(wǎng)絡(luò)節(jié)點(diǎn)n0到節(jié)點(diǎn)n2之間,和節(jié)點(diǎn)n1到節(jié)點(diǎn)n2之間的網(wǎng)絡(luò)頻寬(bandwidtl是2Mbps,延遲時(shí)間(propagatiodelayM10ms。網(wǎng)絡(luò)拓樸中的頻寬瓶頸是在節(jié)點(diǎn)n2到節(jié)點(diǎn)n3之間,頻寬為1.7Mbps延遲的時(shí)間為20ms。每個(gè)網(wǎng)絡(luò)節(jié)都是采用DropTailqueue的方式,且在節(jié)點(diǎn)n2到節(jié)點(diǎn)n3之間的最大隊(duì)列長(zhǎng)度是10個(gè)封包的長(zhǎng)度。在節(jié)點(diǎn)n0到n3之間會(huì)有一條FTP的聯(lián)機(jī),F(xiàn)TP應(yīng)用程序是架構(gòu)在TCP之上,所以在寫仿真環(huán)境的描述語言的時(shí)候,必需先建立一條TCP的聯(lián)機(jī),在來源端n0上使用TCPagent產(chǎn)生”tcp”來發(fā)送TCP的封包;在目的地端n3使用TCPsinkagen產(chǎn)生”sink”來接受TCP的資料、并產(chǎn)生回復(fù)封包(ACK)回傳送端、最后把接收的TCP封包釋放。最后要把這兩個(gè)agent連起來(connect)聯(lián)機(jī)才能建立。若是沒有額外的參數(shù)設(shè)定,TCP封包的長(zhǎng)度為1Kbytes在這里順便補(bǔ)充說明一下,對(duì)于ns2仿真參數(shù)內(nèi)定值設(shè)定是在ns-allinone-2.27\ns-2.27目錄下libns-default.,t有想要進(jìn)一步了解的人,可以去查看此檔。另外,在節(jié)點(diǎn)n1到n3之間有一條固定的傳輸速率的聯(lián)機(jī)(ConstantBitRaCBR),CBR應(yīng)用程序是架構(gòu)在UDP之上,因此必需在n1使用UDPagent來產(chǎn)生”udp”用來發(fā)送UDP封包,在n3上使用Nullagent來產(chǎn)生”sink”以接收由n1傳送過來的UDP封包,然后把接收的封包釋放。CBR的傳送速度為1Mbps,每一個(gè)封包大小為1Kbytes>CBR是在0.1秒開始傳送,在4.5秒結(jié)束傳輸;FTP是在1.0秒開始傳送,4.0秒結(jié)束傳輸。[SimulationTopoldgy1kBytefrate:1mbpWcbr[TclScript#產(chǎn)生一個(gè)仿真的對(duì)象setns[newSimulator]#針對(duì)不同的資料流定義不同的顏色,這是要給NAM用的$nscolor1Blue$nscolor2Red#開啟一個(gè)NAMtracefilesetnf[openout.namw]$nsnamtrace-all$nf#開啟一個(gè)tracefilJI來記錄封包傳送的過程setnd[openout.trw]$nstrace-all$nd#定義一個(gè)結(jié)束的程序procfinish{}{globalnsnfnd$nsflush-traceclose$nfclose$nd#以背景執(zhí)行的方式去執(zhí)行NAMexecnamout.nam&exit0}#產(chǎn)生四個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)setn0[$nsnode]setn1[$nsnode]setn2[$nsnode]setn3[$nsnode]#把節(jié)點(diǎn)連接起來$nsduplex-link$n0$n22Mb10msDropTail$nsduplex-link$n1$n22Mb10msDropTail$nsduplex-link$n2$n31.7Mb20msDropTail#設(shè)定ns2到n3之間的QueueSiz為10個(gè)封包大小$nsqueue-limit$n2$n310#設(shè)定節(jié)點(diǎn)的位置,這是要給NAM用的$nsduplex-link-op$n0$n2orientright-down$nsduplex-link-op$n1$n2orientright-up$nsduplex-link-op$n2$n3orientright#觀測(cè)n2到n3之間queue的變化,這是要給NAM用的$nsduplex-link-op$n2$n3queuePos0.5#建立一條TCP的聯(lián)機(jī)settcp[newAgent/TCP]$tcpsetclass_2$nsattach-agent$n0$tcpsetsink[newAgent/TCPSink]$nsattach-agent$n3$sink$nsconnect$tcp$sink#在NAM中,TCP的聯(lián)機(jī)會(huì)以藍(lán)色表示$tcpsetfid_1#在TCP聯(lián)機(jī)之上建立FTP應(yīng)用程序setftp[newApplication/FTP]$ftpattach-agent$tcp$ftpsettype_FTP#建立一條UDP的聯(lián)機(jī)setudp[newAgent/UDP]$nsattach-agent$n1$udpsetnull[newAgent/Null]$nsattach-agent$n3$null$nsconnect$udp$null#在NAM中,UDP的聯(lián)機(jī)會(huì)以紅色表示$udpsetfid_2#在UDP聯(lián)機(jī)之上建立CBR應(yīng)用程序setcbr[newApplication/Traffic/CBR]$cbrattach-agent$udp$cbrsettype_CBR$cbrsetpacket_size_1000$cbrsetrate_1mb$cbrsetrandom_false#設(shè)定FTP和CBR資料傳送開始和結(jié)束時(shí)間$nsat0.1”$cbrstart"$nsat1.0”$ftpstart"$nsat4.0”$ftpstop”$nsat4.5”$cbrstop”#結(jié)束TCP的聯(lián)機(jī)不一定需要寫下面的程序代碼來實(shí)際結(jié)束聯(lián)機(jī))$nsat4.5”$nsdetach-agent$n0$tcp;$nsdetach-agent$n3$sink#在仿真環(huán)境中,5秒后去呼叫finis來結(jié)束仿真這樣要注意仿真環(huán)境中#的5秒并不一定等于實(shí)際仿真的時(shí)間$nsat5.0"finish"#執(zhí)行仿真$nsrun
仿真結(jié)束后,會(huì)產(chǎn)生兩個(gè)檔案,一個(gè)是out.nam這是給NAM用的,用來把仿真的過程用可視化的方式呈現(xiàn)出來,這可以讓使用者用”看”的方式去了解封包傳送是如何從來源端送到接收端。另一個(gè)檔案是out.tr這個(gè)檔案記錄了仿真過程中封包傳送中所有的事件,例如第一筆記錄是一個(gè)CBR的封包,長(zhǎng)度為1000bytes在時(shí)間0.1秒的時(shí)候,從n1傳送到n2。這個(gè)檔案對(duì)我們做效能分析很重要,所以要先對(duì)這個(gè)檔案的格式做仔細(xì)的介紹。+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每一筆記錄的開始都是封包事件發(fā)生的原因,若是r則表示封包被某個(gè)節(jié)點(diǎn)所接收,若是+則表示進(jìn)入了隊(duì)列,若是-則表示離開隊(duì)列,若是d則表示封包被隊(duì)列所丟棄。接著的第二個(gè)字段表示的是事件發(fā)生的時(shí)間;字段三和字段四表示事件發(fā)生的地點(diǎn)從fromnode到tonode;)字段五表示封包的型態(tài);字段六是封包的大小,字段七是封包的旗標(biāo)標(biāo)注;字段八表示封包是屬于那一個(gè)資料流;字段九和字段十是表示封包的來源端和目的端,這兩個(gè)字段的格式是a.ba代表節(jié)點(diǎn)編號(hào),b表示埠號(hào)(portnumber);字段十一表示封包的序號(hào);最后字段十二表示封包的id,以前面tracefil的第一筆為例,意思就是說有一個(gè)封包pakcet為0,資料流id為2,序號(hào)為0,長(zhǎng)度為1000bytes型態(tài)為CBR,它是從來源端1.0要到目的地3.1在時(shí)間0.1秒的時(shí)候,從節(jié)點(diǎn)1進(jìn)入了節(jié)點(diǎn)2的隊(duì)列中。接下來,筆者先簡(jiǎn)單介紹awk,然后如何使用awk去分析tracefile以得到ThroughputDelayJittei和LossRate[awk]簡(jiǎn)介awk是一種程序語言。它具有一般程序語言常見的功能。因awk語言具有某些特點(diǎn),如:使用直譯器(Interpret不需先行編譯;變量無型別之分(Typeless)可使用文字當(dāng)數(shù)組的注標(biāo)(AssociativArray等特色。因此,使用awk撰寫程序比起使用其它語言更簡(jiǎn)潔便利且節(jié)省時(shí)間。awk還具有一些內(nèi)建功能,使得awk擅于處理具資料列(Record)字段(FieldS態(tài)的資料;此外,awk內(nèi)建有pipe的功能,可將處理中的資料傳送給外部的Shell命令加以處理,再將Shell命令處理后的資料傳回awk程序,這個(gè)特點(diǎn)也使得awk程序很容易使用系統(tǒng)資源。awk是如何運(yùn)作的為便于解釋awk程序架構(gòu),以及相關(guān)的術(shù)語,筆者就以上面tracefile為例,來加以介紹。a名詞定義:1.1.資料列:awk從資料文件上讀取的基本單位,以tracef為M例,awk讀入的第一筆資料列為”+0.112cbr100021.03.100”第二筆資料列為“一0.112cbr100021.03.100”一般而言,一筆資料列相當(dāng)于資料文件上的一行資料。2.2.字段(Field)為數(shù)據(jù)列上被分隔開的子字符串。以資料列”+0.112cbr100021.03.100”為例,一二三四五六七八九十十-十二+0.112cbr1000-21.03.100一般而言是以空格符來分隔相鄰的字段。當(dāng)awk讀入資料列后,會(huì)把每個(gè)字段的值存入字段變量。字段變量意義$0為一字符串,其內(nèi)容為目前awk所讀入的資料列.$1代表$0上第一個(gè)字段的資料.$2代表$0上第二欄個(gè)位的資料.b.程序主要節(jié)構(gòu):Pattern1{Actions1}
Pattern2{Pattern2{Actions2}Pattern3{Actions3}一般常用”關(guān)系判斷式”來當(dāng)成Pattern例如:x>3用來判斷變量x是否大于3x==5用來判斷變量x是否等于5awk提供c語言常見的關(guān)系操作數(shù),如:〉、<、>=、<=、==、!=等等Actions是由許多awk指令所構(gòu)成,而awk的指令與c語言中的指令非常類似。IO指令:print、printf(、)getline流程控制指令:if(...){...}els伽hile}(…){…}在awk程序的流程為先判斷Patter的結(jié)果,若為真True則執(zhí)行相對(duì)應(yīng)的Actions若為假False則不執(zhí)行相對(duì)的Actions若是處理的過程中沒有Patternawk會(huì)無條件的去執(zhí)行Actionsc.工作流程:執(zhí)行awk時(shí),它會(huì)反復(fù)進(jìn)行下列四步驟。自動(dòng)從指定的資料文件中讀取一筆資料列。自動(dòng)更新(Update相關(guān)的內(nèi)建變量之值。逐次執(zhí)行程序中所有的Pattern{Actior指令。當(dāng)執(zhí)行完程序中所有Pattern{Actions}時(shí),若資料文件中還有未讀取的料,則反復(fù)執(zhí)行步驟1到步驟4。awk會(huì)自動(dòng)重復(fù)進(jìn)行上述的四個(gè)步驟,所以使用者不須在程序中寫這個(gè)循環(huán)。[End-to-EndDel]y筆者把量測(cè)CBR封包端點(diǎn)到端點(diǎn)間延遲時(shí)間的awk程序,寫在檔案measure-delay.a檔案中,讀者可以參考此范例,修改成符合讀者需求的程序。BEGIN(#程序初始化,設(shè)定一變量以記錄目前最高處理封包的ID。highest_packet_id=0;}(action=$1;time=$2;node_1=$3;node_2=$4;type=$5;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;#記錄目前最高的packetIDif(packet_id>highest_packet_id)highest_packet_id=packet_id;#記錄封包的傳送時(shí)間if(start_time[packet_id]==0)start_time[packet_id]=time;#記錄CBR(flow_id=2)的接收時(shí)間if(flow_id==2&&action!="d")(if(action=="r")(end_time[packet_id]=time;}}else(#把不是flow_id=2的封包或者是flow_id=2旦此封包被drop的時(shí)間設(shè)為-1end_time[packet_id]=-1;}}END(#當(dāng)資料列全部讀取完后,開始計(jì)算有效封包的端點(diǎn)到端點(diǎn)延遲時(shí)間for(packet_id=0;packet_id<=highest_packet_id;packet_id++)(start=start_time[packet_id];end=end_time[packet_id];packet_duration=end—start;#只把接收時(shí)間大于傳送時(shí)間的記錄列出來if(start<end)printf("%f%f\n",start,packet_duration);}}執(zhí)行方法:為shel的提示符號(hào))$awk—fmeasure—delay.awkout.tr若是要把結(jié)果存到檔案,可使用導(dǎo)向的方式。(把結(jié)果存到cbr_dela檔案中)$awk—fmeasure—delay.awkout.tr>cbr_delay執(zhí)行結(jié)果:0.1000000.0387060.1080000.0387060.1160000.0387060.1240000.0387060.1320000.038706Jitt]rJitte就是延遲時(shí)間變化量delayvarianGe由于網(wǎng)絡(luò)的狀態(tài)隨時(shí)都在變化,有時(shí)候流量大,有時(shí)候流量小,當(dāng)流量大的時(shí)候,許多封包就必需在節(jié)點(diǎn)的隊(duì)列中等待被傳送,因此每個(gè)封包從傳送端到目的地端的時(shí)間不一定會(huì)相同,而這個(gè)不同的差異就是所謂的Jitterjitter越大,則表示網(wǎng)絡(luò)越不穩(wěn)定。筆者把量測(cè)CBRflow的Jitterawk寫在檔案measure-jitter.awk內(nèi)。BEGIN{#程序初始化old_time=0;old_seq_no=0;i=0;}{action=$1;time=$2;node_1=$3;node_2=$4;type=$5;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;#判斷是否為n2傳送到n3,且封包型態(tài)為cbr動(dòng)作為接受封包if(node_1==2&&node_2==3&&type=="cbr"&&action=="r"){#求出目前封包的序號(hào)和上次成功接收的序號(hào)差值dif=seq_no-old_seq_no;#處理第一個(gè)接收封包if(dif==0)dif=1;#求出jitterjitter[i]=(time-old_time)/dif;seq[i]=seq_no;i=i+1;old_seq_no=seq_no;old_time=time;}}END{for(j=1;j<i;j++)printf("%d\t%f\n”,seq[j],jitter[j]);}執(zhí)行方法:為shel的提示符號(hào))$awk-fmeasure-jitter.awkout.tr若是要把結(jié)果存到檔案,可使用導(dǎo)向的方式。(把結(jié)果存到cbr_jitt檔案中)$awk-fmeasure-jitter.awkout.tr>cbr_jitter執(zhí)行結(jié)果:0.0080000.0080000.0080000.008000另一種計(jì)算Jitt的方法一更精確的方式]1===============================================================================NormalJitter.awkVersionnow:0.1LastModifiedDate:2004-10-23,19:39:54==Usage==awk-fNormalJitter.awkout.tr==ProgramedBy==查輝(ZHAHUI),Wuhan,China,Email:zhahuiAT==Description==#本awk程序給出了另外一種jitt的計(jì)算方法,這種方法中jitt的計(jì)算是基于以下公式:jitter((recvtime(j)-sendtime(j))-(recvtime(i)-sendtSm中(ij》i)</(j-i),==Attention==NormalJitter.awk^于jitt?計(jì)算完全基于柯志亨博士的measure-delay.a程序中delay的#計(jì)算。而measure-delay.a在柯博士網(wǎng)頁中的ns2模擬例子中是正確的,但是對(duì)于不同的例子i要根#據(jù)情況進(jìn)行一定的修改,并可能需要加入某些魯棒性處理代碼例」如對(duì)于第一個(gè)包的處理,對(duì)】丟包的處#理等)。==Reference==0/~smallko/ns2/ns2.htm==Feedback==#如有任何關(guān)于本程序jitter算的問題,請(qǐng)致信柯志亨(ChihHeng,Ke?士smallko2001AT.或者與本人聯(lián)系。==Acknowledgements==Dr.ChihHeng,Keprovidedvaluabledocumentsandawkfilesuponmyrequests.#BEGIN(#程序初始化,設(shè)定一變量以記錄目前最高處理封包的ID。highest_packet_id=0;}(action=$1;time=$2;node_1=$3;node_2=$4;type=$5;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;#記錄目前最高的packetIDif(packet_id>highest_packet_id)(highest_packet_id=packet_id;}#記錄封包的傳送時(shí)間if(start_time[packet_id](==0)#記錄下包的seq_no—ZHApkt_seqno[packet_id]=seq_no;start_time[packet_id]=time;}#記錄CBR(flow_id=2)的接收時(shí)間if(flow_id==2&&action!="d")(if(action=="r")(end_time[packet_id]=time;}else(#把不是flow_id二的封包或者是flow_id=2旦此封包被drop的時(shí)間設(shè)為-1end_time[packet_id]=-1;}}END(#初始化jittef算所需變量一ZHAlast_seqno=0;last_delay=0;seqno_diff=0;#當(dāng)資料列全部讀取完后,開始計(jì)算有效封包的端點(diǎn)到端點(diǎn)延遲時(shí)間for(packet_id=0;packet_id<=highest_packet_id;packet_id++)(start=start_time[packet_id];end=end_time[packet_id];packet_duration=end-start;#只把接收時(shí)間大于傳送時(shí)間的記錄列出來if(start<end)(#得到了delay值(packet_durati后計(jì)算jitter--ZHAseqno_diff=pkt_seqno[packet_id]-last_seqno;delay_diff=packet_duration-last_delay;if(seqno_diff==0)(jitter=0;}else(jitter=delay_diff/seqno_diff;}printf("%f%f\n",start,jitter);last_seqno=pkt_seqno[packet_id];last_delay=packet_duration;}}}[Loss]筆者把量測(cè)CBRPacketLos的情況寫在檔案measure-drop.a訥。BEGIN{#程序初始化,設(shè)定一變量記錄packet被drop的數(shù)目fsDrops=0;numFs=0;}{action=$1;time=$2;node_1=$3;node_2=$4;src=$5;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;#統(tǒng)計(jì)從n1送出多少packetsif(node_1==1&&node_2==2&&action=="+")numFs++;#統(tǒng)計(jì)flow_i為2,且被drop的封包if(flow_id==2&&action=="d")fsDrops++;}END{printf("numberofpacketssent:%dlost:%d\n”,numFs,fsDrops);}執(zhí)行方法:為shel的提示符號(hào))$awk-fmeasure-drop.awkout.tr執(zhí)行結(jié)果:numberofpacketssent:Uo?3t:8這代表CBR送出了550個(gè)封包,但其中8個(gè)封包丟掉了。[Throughput筆者把量測(cè)CBRThroughput的情況寫在檔案measure-throughput.awk在這里的Throughput是指averagethroughputBEGIN{init=0;i=0;}{action=$1;time=$2;node_1=$3;node_2=$4;src=$5;pktsize=$6;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;if(action=="r"&&node_1==2&&node_2==3&&flow_id==2){pkt_byte_sum[i+1]=pkt_byte_sum[i]+pktsize;if(init==0){start_time=time;init=1;}end_time[i]=time;i=i+1;}END{#為了畫圖好看,把第一筆記錄的throughput設(shè)為零,以表示傳輸開始printf("%.2f\t%.2f\n”,end_time[0],0);for(j=1;j<i;j++){th=pkt_byte_sum[j]/(end_time[j]-start_time)*8/1000;printf("%.2f\t%.2f\n”,end_time[j],th);}#為了畫圖好看,把第后一筆記錄的throughput設(shè)為零,以表示傳輸結(jié)束printf("%.2f\t%.2f\n”,end_time[i-1],0);}執(zhí)行方法:為shel的提示符號(hào))$awk-fmeasure-throughput.awkout.tr若是要把結(jié)果存到檔案,可使用導(dǎo)向的方式。(把結(jié)果存到cbr_throughp檔案中)$awk-fmeasure-throughput.awkout.tr>cbr_throughput執(zhí)行結(jié)果:0.140.000.151000.000.151000.000.161000.00介紹完了如何量測(cè)End-to-EndDelayJitteiPacketLoss和Throughput后,最后就是要把量測(cè)的數(shù)據(jù)畫出來。這里筆者介紹xgraph和gnuplot但是xgraph畫出來的圖真的有點(diǎn)丑,所以就不仔細(xì)介紹。筆者會(huì)把重心放在gnuplot[xgrapH在Shell的提示符號(hào)后輸入startxwin.ba接著會(huì)出現(xiàn)一個(gè)新的窗口,在此窗口輸入xgraphcbr_delay就可以把前面所存下來的檔案畫出來。xgraph的運(yùn)作是把第一排當(dāng)作x軸的資料,第二排當(dāng)作是y軸的資料,然后把圖給畫出來。cbr-delay圖:1.0秒后,網(wǎng)絡(luò)多了FTP的封包,這使得CBR封包和FTP封包必須互相的搶奪網(wǎng)絡(luò)的資源,因此End-to-EndDelayTi旋得不在固定,但等到FTP傳輸結(jié)束后,CBR封包的End-to-EndDelayTime又變成是固定值了。cbr-jittJitte的變化情況跟End-to-End的原因是相同的,都是由于FTP封包的加入才會(huì)指得End-to-EndDelayTi會(huì)e產(chǎn)生變化。cbr-throughp的圖:
口回區(qū)總xgraph看了上面這三張圖,不知道讀者是否有一種感覺,就是真的有點(diǎn)丑。是不是想換個(gè)工具呢?用Excel嗎?筆者認(rèn)為還是一樣丑,所以筆者強(qiáng)力推薦使用接下來要介紹的gnuplot[gnuplo]A.簡(jiǎn)介gnuplot是一個(gè)命令導(dǎo)向的交談式繪圖程序(command-driveninteractivefunctionplottingprogram)。使用者輸入的每一項(xiàng)命令,可以逐步設(shè)定或修改繪圖環(huán)境。它以圖形表達(dá)數(shù)據(jù)或涵數(shù),使我們可以藉由圖形做更進(jìn)一步的分析。口回區(qū)總xgraphB.如何使用gnuplot($為cygwinshell的提示符號(hào))a.a.$startxwin.bat
mallkoPsmallko_nb~startxwin.batonUindousNT/2000/XP/2003tartxwin.batonUindousNT/2000/XP/2003mallkoPsmallko_nb~smallko@smallko_nb"b.b.在新開出來的窗口輸入gnuplot$gnuplot可區(qū)$gnuplotGNUPLOTVersionsmallko@smallko_nb"b.b.在新開出來的窗口輸入gnuplot$gnuplot可區(qū)$gnuplotGNUPLOTVersion3+8jpatchlevel0lastmodifiedWedNov2720:49:0SGMT2002System:CYGWIN_NT-5tllt5+7(0+109/3/2)Copyr-ight(C)1936-1993,1999-2002ThomasUilliamszColinKelleyandmanyothersThisfortheisapre-versionofgnuplot4t0+Pleaserefertothedocumentationcommandsyntaxchanges*Theoldsyntaxwillbeacceptedthroughout4+0series^butallsavefilesusethenewsyr^x+'help'toaccesstheon-linereferencemanualgnuplotFAQisavailablefromhttp://wwwtgnuplottinfo/faq/Sendcommentsandrequestsforhelpto<info-9nuplot-beta@dar-tmouthtedu>Sendbugs^suggestionsandmodsto<infci-gnuplot-beta@dartmouth+edu>Terminaltypegnuplot>|settoxllc.c.執(zhí)行GNUPLOT程序時(shí),GNUPLOT首先檢查是否設(shè)定環(huán)境參數(shù)DISPLAY,若有則依其設(shè)定。當(dāng)其確定為X環(huán)境時(shí),將輸出模式設(shè)定為X11。筆者以cbrdelay為例,先簡(jiǎn)單示范如何把圖給畫出來。畫圖的指令是plot要畫的檔案cbr_delaygnuplot>plotgnuplot>plot“cbrdelay”圖是畫出來了,但是筆者要的不是把數(shù)據(jù)用打點(diǎn)的方式畫出來,而是要把這些點(diǎn)連起來。沒關(guān)系,接下來,只要學(xué)著修改環(huán)境變量,就可以畫出理想的圖了。C.C.修改環(huán)境變量a坐標(biāo)軸(Axis)繪圖參數(shù)在設(shè)定坐標(biāo)軸方面的參數(shù)可分為變量名稱、標(biāo)點(diǎn)、網(wǎng)格、顯示范圍、坐標(biāo)軸顯示方式與顯示與否等六方面的設(shè)定。不過筆者只介紹幾個(gè)常用的設(shè)定,詳細(xì)的設(shè)定可以參考.tw/aspac/reports/94/94002/功能繪圖參數(shù)名稱標(biāo)點(diǎn)設(shè)定xtics,ydtics網(wǎng)格設(shè)定grid坐標(biāo)顯示方式logscale顯示范圍設(shè)定autoscale,xrange,yrange坐標(biāo)軸顯示與否xzeroaxis,yzeroaxis說明:1.xtic是對(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)的狀況。例:原本)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)
ytic與xtic相似,不同點(diǎn)是作用在y軸上。2.網(wǎng)格設(shè)定:在XY坐標(biāo)平面上依刻度畫上方格子。gnuplot>setgridgnuplot>plotsin(x)
GnuplotIfnllX-10-9-S-7-6-5-4-3-2-10123456789103.43街兄-LI花89+若是想要把網(wǎng)格拿掉,只要在下unsetgrid即可。3.坐標(biāo)顯示方式:分為線性與對(duì)數(shù)兩種。一般為前者,若要改為對(duì)數(shù)方式,其語法為:setlogscale<axes><base>其中axes為X軸、Y軸、Z軸的任意組合。base預(yù)設(shè)為10。4.顯示范圍設(shè)定:改變各軸的顯示范圍。autoscale參數(shù)設(shè)定后gnuplot!動(dòng)調(diào)整顯示范圍。而xrangeyrange則是可以由使用者設(shè)定該軸的范圍。以xrange為例,其語法為:setxrange[{<xmin>:<xmax>}]其中參數(shù)<xmin>與<xmax>代表X軸的起點(diǎn)與終點(diǎn),可以是數(shù)字或數(shù)學(xué)式子。例:gnuplot>setxrange[0:10]gnuplot>plotsin(x)
#設(shè)定顯示X坐標(biāo)軸#設(shè)定不顯示X坐標(biāo)軸#檢查X坐標(biāo)軸顯示與否5.5.坐標(biāo)軸顯示與否設(shè)定:設(shè)定是否要畫出坐標(biāo)軸,以X軸為例:setxzeroaxisunsetxzeroaxisshowxzeroaxisgnuplot>setxzeroaxisgnuplot>#設(shè)定顯示X坐標(biāo)軸#設(shè)定不顯示X坐標(biāo)軸#檢查X坐標(biāo)軸顯示與否b.標(biāo)示(Label)GNUPLOT除了繪出圖形外,尚可加入批注做為輔助說明。這批注包括文字與線條兩方面,其提供的設(shè)定有功能繪圖參數(shù)名稱線條arrow文字批注key,label,title,xlabel,ylabel說明:1.1.線條:在圖上畫一線段可以選擇有無箭頭。其語法為setarrow{<tag>}(from<sx>,<sy>{,<sz>}}(to<ex>,<ey>(,<ez>}}((no}head}unsetarrow(<tag>}#刪除一線條showarrow#顯示線條使用情況其中參數(shù)Vtag>是給該條線條一個(gè)整數(shù)名稱,若不設(shè)定則為最小可用整數(shù)。此線條由坐標(biāo)(sx,sy,iszOex,ey,e在)2D中為(sx,s到(ex,ey))參數(shù)nohead為畫沒有箭頭的線段,參數(shù)head或沒有nohead為畫有箭頭的線段。#畫一帶有箭頭的線條由原點(diǎn)到(1,2)gnuplot〉setarrowto1,2#畫一名為3的帶箭頭線條由(0.4,0.:到)(0.2,0。1)
gnuplot>setarrow3from0.4,0.3to0.2,0.1#刪除名為3的線條。gnuplot>unsetarrow3#刪除所有線條。guplot>unsetarrow2.1.文字批注:分為設(shè)定標(biāo)頭(titlK標(biāo)示(labe。)標(biāo)頭(title設(shè)定為在圖的正上方加上說明本圖的文字。其語法為:settitle("<title-text>"}{<xoff>}{,<yoff>}showtitle其中設(shè)定參數(shù)<xoff>或<yoff>為微調(diào)標(biāo)頭放置的地址。xlabel,ylabel的語法與tit堀同,其各自描述一坐標(biāo)軸。標(biāo)示(label):為在圖上任一位置加上文字說明,一般與線條一并使用。setlabel(<tag>}("<label_text>"}(at<x>,<y>{,<z>}}{<justification>}unsetlabel(<tag>}#刪除一標(biāo)示showlabel#顯示標(biāo)示使用情況其中參數(shù)Vtag>與"線條"(arrow)中<tag>意義相同,用以區(qū)別不同的label參數(shù)〈justificati是調(diào)整文字放置的位置,可以是lef,tright或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#再度顯示名稱置。c.圖樣(Style)gnuplot描繪數(shù)據(jù)資料圖形是以讀入檔案中的坐標(biāo)值后,以圖樣繪上。而描繪函數(shù)圖形是計(jì)算若干點(diǎn)的函數(shù)值后,以某種圖樣將函數(shù)值繪上。一般是取樣100點(diǎn)及采取線條作為圖樣。GNUPLOT可提供9種圖樣,分別是例]gnuplot>settitle“cbr_delay”gnuplot>setxlabel“simulationtime”gnupbt>setylabel“
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商場(chǎng)消防安全管理與應(yīng)急處理手冊(cè)(標(biāo)準(zhǔn)版)
- 2026年托福考試閱讀理解與寫作技巧題
- 2026年企業(yè)內(nèi)部控制制度建設(shè)與管理實(shí)務(wù)試題
- 2026年大學(xué)英語四級(jí)考試綜合模擬題
- 修正職業(yè)發(fā)展規(guī)劃
- 小學(xué)升初中語文考試題及答案
- 現(xiàn)代食品分析檢測(cè)技術(shù)
- 2026年巖土勘察中的環(huán)境監(jiān)測(cè)技術(shù)
- 2026年年終總結(jié)報(bào)告頒獎(jiǎng)典禮的魅力
- 2026年新歲歡聚幼兒園元旦活動(dòng)分享
- 北京通州產(chǎn)業(yè)服務(wù)有限公司招聘參考題庫必考題
- 兒科MDT臨床技能情景模擬培訓(xùn)體系
- 【高三上】2026屆12月八省聯(lián)考(T8聯(lián)考)語文試題含答案
- 護(hù)理不良事件根本原因分析
- 社會(huì)心理學(xué)考試題及答案
- 醫(yī)療器械經(jīng)營(yíng)企業(yè)質(zhì)量管理體系文件(2025版)(全套)
- 出鐵廠鐵溝澆注施工方案
- 2025年中小學(xué)教師正高級(jí)職稱評(píng)聘答辯試題(附答案)
- 現(xiàn)代企業(yè)管理體系架構(gòu)及運(yùn)作模式
- 古建筑設(shè)計(jì)工作室創(chuàng)業(yè)
- 公司酶制劑發(fā)酵工工藝技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論