ZigBee路由協(xié)議分析及仿真實(shí)現(xiàn)-畢業(yè)論文_第1頁
ZigBee路由協(xié)議分析及仿真實(shí)現(xiàn)-畢業(yè)論文_第2頁
ZigBee路由協(xié)議分析及仿真實(shí)現(xiàn)-畢業(yè)論文_第3頁
ZigBee路由協(xié)議分析及仿真實(shí)現(xiàn)-畢業(yè)論文_第4頁
ZigBee路由協(xié)議分析及仿真實(shí)現(xiàn)-畢業(yè)論文_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

ZigBee路由協(xié)議分析及仿真實(shí)現(xiàn)-畢業(yè)論文河南城建學(xué)院本科畢業(yè)設(shè)計(論文) STYLEREF"標(biāo)題1"錯誤!文檔中沒有指定樣式的文字。摘要作為無線傳感器網(wǎng)絡(luò)(WSNWirelessSensorNetworks)的一項(xiàng)新型技術(shù),ZigBee技術(shù)具有低功耗、低速率、低延時、低成本等特性,具有強(qiáng)大的組網(wǎng)能力和超大的網(wǎng)絡(luò)容量,可以廣泛應(yīng)用在消費(fèi)電子產(chǎn)品、家居與樓宇自動化、工業(yè)控制、醫(yī)療設(shè)備等領(lǐng)域。由于其獨(dú)有的特性,ZigBee無線技術(shù)也是無線傳感器網(wǎng)絡(luò)的首先技術(shù),具有廣闊的發(fā)展前景。ZigBee協(xié)議標(biāo)準(zhǔn)采用開放系統(tǒng)接口(0SI)分層結(jié)構(gòu),其中物理層和媒體接入層由IEEE802.15.4工作小組制定,而網(wǎng)絡(luò)層,安全層和應(yīng)用框架層由ZigBee聯(lián)盟制定。本文根據(jù)IEEE802.15.4標(biāo)準(zhǔn)規(guī)范與ZigBee標(biāo)準(zhǔn)規(guī)范,簡單扼要地闡述了ZigBee協(xié)議棧的協(xié)議棧架構(gòu),重點(diǎn)講解了ZigBee網(wǎng)絡(luò)層樹路由和網(wǎng)狀網(wǎng)路由。然后講解了NS2網(wǎng)絡(luò)仿真軟件的工作原理,詳細(xì)介紹了仿真環(huán)境的搭建和仿真分析的過程。通過對CLUSTER-TREE路由算法和AODVjr路由算法在不同發(fā)包間隔下的平均延時、丟包率和控制包數(shù)量模擬,獲得仿真結(jié)果。AbstractAsaWSN(WirelessSensornetwork),anewtechnology,ZigBeetechnologywithlowpowerconsumption,lowspeed,lowlatency,lowcostfeatures,isapowerfulnetworkingcapabilitiesandlargenetworkcapacity,andcanbewidelyusedinconsumerelectronics,homeandbuildingautomation,industrialcontrol,medicalequipmentandotherfields.Becauseofitsuniqueproperties,ZigBeewirelesstechnologyisthefirsttechnologyofwirelesssensornetwork,hasabroaddevelopmentprospects.ZigBeeprotocolstandardusingopensysteminterface(OSI)hierarchicalstructure,includingthephysicallayerandthemediaaccesslayershallbeformulatedbytheIEEE802.15.4workinggroup,andthenetworklayer,securityandapplicationframeworklayershallbeformulatedbytheZigBeealliance.Inthispaper,basedonIEEE802.15.4standardspecificationandZigBeestandards,brieflyexpoundsthesimpleZigBeeprotocolstackprotocolstackarchitecture,focusingontheZigBeenetworklayerroutingandmeshnetworksbythetree.ThenexplainedtheworkingprincipleofNS2networksimulationsoftware,introducesindetailtheprocessoftheconstructionofthesimulationenvironmentandsimulationanalysis.RoutingalgorithmbasedonCLUSTER-TREEandAODVjrroutingalgorithmunderdifferentcontractawardingintervalaveragedelay,packetlossrateandthecontrolpacketnumbersimulation,thesimulationresults.KEYWORDS:NS2,ZigBee,CLUSTER-TREE,AODVjr目錄摘要 請求請求高協(xié)議層低協(xié)議層確認(rèn)指示相應(yīng)圖2.2SAP和原語示意圖2.3ZigBee網(wǎng)絡(luò)層路由協(xié)議2.3.1ZigBee支持的網(wǎng)絡(luò)拓?fù)鋃igBee網(wǎng)絡(luò)支持3種網(wǎng)絡(luò)拓?fù)洹切屯負(fù)洹湫瓮負(fù)浜途W(wǎng)狀拓?fù)?,如圖2.3所示。星型拓?fù)渲虚g為ZigBee協(xié)調(diào)器,它負(fù)責(zé)網(wǎng)絡(luò)的建立服務(wù)維護(hù),其他節(jié)點(diǎn)是ZigBee的末端節(jié)點(diǎn),直接與協(xié)調(diào)器進(jìn)行通信。樹形拓?fù)渲杏袇f(xié)調(diào)器、路由器、末端設(shè)備,樹形拓?fù)渲袇f(xié)調(diào)器負(fù)責(zé)網(wǎng)絡(luò)的建立和維護(hù),同時需要確定一些參數(shù),網(wǎng)絡(luò)中的節(jié)點(diǎn)并不一定直接與協(xié)調(diào)器通信,可能要通過若干個路由器后才能與協(xié)調(diào)器通信。網(wǎng)狀拓?fù)渲型湫瓮蠐湟粯右簿哂袇f(xié)調(diào)器、路由器、末端設(shè)備,但是它拓?fù)浣㈧`活,不需要再建立網(wǎng)絡(luò)的時候限制網(wǎng)絡(luò)的形狀,并且節(jié)點(diǎn)之間通信可以通過最優(yōu)路徑進(jìn)行。((a)星型拓?fù)?a)樹形拓?fù)?a)網(wǎng)狀拓?fù)淠┒斯?jié)點(diǎn)路由器協(xié)調(diào)器圖2.3ZigBee支持網(wǎng)絡(luò)拓?fù)?.3.2ZigBee網(wǎng)絡(luò)編址方式ZigBee網(wǎng)絡(luò)的編址方式主要有以下兩種,一是樹形編址,二是隨機(jī)編址。ZigBee網(wǎng)絡(luò)中默認(rèn)的地址分配機(jī)制是樹形編址。在使用這種編址機(jī)制時,首先要確定部分網(wǎng)絡(luò)參數(shù),包括網(wǎng)絡(luò)最大深度Lm,子節(jié)點(diǎn)最大數(shù)目Cm,子節(jié)點(diǎn)當(dāng)中路由器的數(shù)量Rm。協(xié)調(diào)器節(jié)點(diǎn)的深度為0,其他節(jié)點(diǎn)的深度為其父節(jié)點(diǎn)的深度加1。樹形節(jié)點(diǎn)的地址可以由父節(jié)點(diǎn)計算得到。節(jié)點(diǎn)地址計算公式如式(2.1)An=Ap+CSkip(d)×Rm+n式(2.1)其中,An代表節(jié)點(diǎn)的地址,Ap代表父節(jié)點(diǎn)的地址,n是1~(Cm-Rm)的值,CSkip(d)是計算預(yù)留地址塊大小的函數(shù),其計算公式如式(2.2)CSkip(d)=1+Cm(Lm-d-1),Rm=1式(2.2)CSkip(d)=(1+Cm-Rm-Cm×Rm^(Lm-d-1))/(1-Rm),Rm≠1在這種編址方式中,每個路由器節(jié)點(diǎn)都可以給自己的子節(jié)點(diǎn)分配地址,并不需要專門的節(jié)點(diǎn)分配地址,因此又有分布式地址分配方式之稱。這種地址分配方式的缺點(diǎn)是網(wǎng)絡(luò)拓?fù)涫艿胶艽蟮南拗?,同時造成地址浪費(fèi)。這種編址的好處是路由算法簡單。隨機(jī)編址機(jī)制相對于樹形編址更加簡單。節(jié)點(diǎn)加入網(wǎng)絡(luò)時,它的父節(jié)點(diǎn)隨機(jī)給它分配一個地址,為了盡量避免地址沖突,父節(jié)點(diǎn)為其分配地址之前首先檢查已知的地址,包括路由表、網(wǎng)絡(luò)管理器地址、鄰居表、路由記錄表等中存儲的地址信息。即使這樣也難免出現(xiàn)地址沖突的情況,這是就需要引入地址沖突檢測和解決機(jī)制。2.3.3ZigBee網(wǎng)絡(luò)路由算法介紹ZigBee的路由包括單播路由、廣播路由、組播路由,這里只介紹與本論文相關(guān)的單播路由。單播路由包括樹路由、網(wǎng)狀網(wǎng)路由。樹路由使用CLUSTER-TREE算法,它依賴于前面講到的樹形編址。樹路由過程除了幾個必須的網(wǎng)絡(luò)拓?fù)鋮?shù)外,不需要存儲其他的信息,計算也很簡單,但是由于只能沿著樹路徑傳遞數(shù)據(jù),路徑單一,效率一般情況下比較低,而且可靠性不強(qiáng),如出現(xiàn)單點(diǎn)故障。網(wǎng)狀網(wǎng)路由是ZigBee中一個高效的路由方案,它采用簡化后的AODV算法,稱之為AODVjr。AODVjr對路由請求,路由應(yīng)答等命令進(jìn)行了適當(dāng)?shù)男薷?,將?biāo)志位、源和目的序號等去掉了,把條數(shù)域改為了路徑代價域。這種路由算法適合于拓?fù)浜屯ㄐ怒h(huán)境承載數(shù)據(jù)量不是很重,而且有時會發(fā)生變化的網(wǎng)絡(luò)。使用AODVjr算法節(jié)點(diǎn)之間通信會尋找一條最佳路徑。通過“路由代價”來判斷最佳路徑。2.4NS2網(wǎng)絡(luò)仿真軟件介紹2.4.1NS2軟件概述人們提出了很多方法來驗(yàn)證網(wǎng)絡(luò)協(xié)議的正確性和相關(guān)性能的測試,目前使用最為廣泛的就是通過使用模擬仿真器的虛擬環(huán)境來進(jìn)行測試。而流行的網(wǎng)絡(luò)模擬仿真軟件使用最多的就是NS2和OPNET了,NS2是開源的免費(fèi)的,而OPNET是商業(yè)軟件,并不開源,所以現(xiàn)在NS2已經(jīng)被廣大高校用于網(wǎng)絡(luò)分析、研究和教學(xué)。NS2支持大量的協(xié)議,并提供了豐富的測試腳本。NS(NetworkSimulator)是網(wǎng)絡(luò)模擬器的意思,NS2是其第二版。NS是由伯克利大學(xué)開發(fā)的一款開源的網(wǎng)絡(luò)模擬軟件,它是一個面向?qū)ο蟮木W(wǎng)絡(luò)模擬器,使用C++和OTcl(OrientedToolCommandLanguage)作為開發(fā)語言,因此又被稱為分裂對象模型開發(fā)機(jī)制。NS2的系統(tǒng)結(jié)構(gòu)圖如圖2.4所示。圖2.4NS2系統(tǒng)結(jié)構(gòu)圖NS2本質(zhì)上是一個離散事件模擬器,其本身有一個虛擬時鐘,所有的模擬都由離散事件驅(qū)動。模擬器所做的就是不停的處理一個個事件,直到所有的時間都被處理完或者某一特定的事件發(fā)生為止。NS2擁有大量的構(gòu)件庫,例如鏈路的隊(duì)列、節(jié)點(diǎn)、分組、鏈路等,并通過對象實(shí)現(xiàn)這些實(shí)體的特性和功能,這些對象易于組合、易于擴(kuò)展。用戶可以充分利用這些已有的對象,進(jìn)行少量的擴(kuò)展,組合出所需要研究的網(wǎng)絡(luò)系統(tǒng)的模型。圖2.5給出了NS構(gòu)件庫的部分類層次結(jié)構(gòu)。圖2.5部分網(wǎng)絡(luò)構(gòu)建層次結(jié)構(gòu)2.4.2trace文件格式介紹Trace文件是在模擬過程中是生成的記錄模擬每一個分組調(diào)度事件的文件,一次模擬生成的信息基本上全體現(xiàn)在Trace文件中。Trace文件包含很多有用的可供參考的數(shù)據(jù),我們需要從中篩選出我們關(guān)注的數(shù)據(jù)進(jìn)行分析。NS發(fā)展過程中對無線Trace的格式進(jìn)行過修訂,目前NS兼容修訂前的無線Trace格式,稱修訂前的格式為無線網(wǎng)絡(luò)Trace舊格式。這次論文自使用到Trace舊格式,所以只講解舊格式。下面是無線網(wǎng)絡(luò)Trace舊格式。Event/Time/Node/Layer/Flags/Pktid/Pkttype/Pktsize/[MACLayerInfo]//[IPInfo]動作/時間/節(jié)點(diǎn)/層次//分組UID/分組類型/分組大小/[MAC層信息]//[IP層信息]s7.200665000_1_MAC0undefined75[0ffffffff1800][1:255-1:255300][zbr102]s7.200665000_6_MAC0undefined75[0ffffffff6800][6:255-1:255300][zbr102]D7.202937033_2_MACLQI0undefined75[0ffffffff3800][3:255-1:255300][zbr102]D7.202937033_0_MACLQI0undefined75[0ffffffff3800][3:255-1:255300][zbr102]r7.203577033_4_MAC0undefined68[0ffffffff3800][3:255-1:255300][zbr102]r7.203602033_4_RTR0undefined68[0ffffffff3800][3:255-1:255300][zbr102]無線網(wǎng)絡(luò)的Trace舊格式的記錄的每項(xiàng)信息:Event:事件的類型,有4種類型s、r、d和f,分別表示分組的發(fā)送、接收、丟棄、和轉(zhuǎn)發(fā)事件。2.Time:時間的發(fā)生時間。3.Node:事件發(fā)生的節(jié)點(diǎn)ID。4.Layer:發(fā)生事件所在的層。5.Flags:標(biāo)志項(xiàng)。6.Pktid:分組的id。7.Pkttype:分組的類型。8.Pktsize:分組的類型。9.[MACLayerInfo]:MAC層的信息。包含四項(xiàng)內(nèi)容:第一項(xiàng)是發(fā)送節(jié)點(diǎn)在無線信道上發(fā)送該分組所期望的時間,其值為十六進(jìn)制表示,單位為妙;第二項(xiàng)是接收節(jié)點(diǎn)的MAC地址;第三項(xiàng)內(nèi)容是發(fā)送節(jié)點(diǎn)的MAC地址;第四項(xiàng)表示MAC層封裝的分組類型,例如0X800表示IP分組,0X0806表示ARP分組。10.:分隔符。11.[IPInfo]:IP層的信息。包含四項(xiàng)內(nèi)容:第一項(xiàng)是發(fā)送分組的源節(jié)點(diǎn)地址,格式為“節(jié)點(diǎn)號:端口號”;第二項(xiàng)是接收分組的目的節(jié)點(diǎn)地址,格式為“節(jié)點(diǎn)號:端口號”;第三項(xiàng)是分組的TTL值;第四項(xiàng)是源節(jié)點(diǎn)到目的節(jié)點(diǎn)的條數(shù)。3仿真環(huán)境搭建過程3.1Fedora21安裝過程首先在Fedora官方網(wǎng)站下載Fedora21Workstation。網(wǎng)址:/zh_CN/workstation/download/,有32位和64位Workstation可選,我選用的是32位Workstation。1.下載之后打開VMWareWorkstation,點(diǎn)擊新建虛擬機(jī)。,如圖3.1所示:圖3.1創(chuàng)建虛擬機(jī)2.選擇典型(推薦)(T)安裝,單擊下一步。如圖3.2所示:圖3.2選擇典型安裝3.點(diǎn)擊安裝光盤映像文件(iso)前的小圓點(diǎn),然后點(diǎn)擊瀏覽,找到自己剛才下載的Fedora-Live-Workstation-i686-21-5.iso文件。然后單擊下一步。如圖3.3所示:圖3.3選擇安裝源文件鏡像4.客戶機(jī)操作系統(tǒng)選擇Linux(L),版本選擇Fedora,然后單擊下一步。(注:如果你下載的是64位的Workstation,請選擇Fedora64位。)如圖3.4所示:圖3.4選擇客戶機(jī)操作系統(tǒng)5.為自己的虛擬機(jī)起一個名字,這個可以隨意,最好是一眼就能看出是什么系統(tǒng),什么版本,我這里取名為Fedora。位置(L)是你想要將Fedora虛擬機(jī)安裝的位置,最好選用一個剩余空間大于20G的磁盤,我選用的位置為:G:\VirtualMachine\fedora。如圖3.5所示:圖3.5命名虛擬機(jī)6.默認(rèn)配置給Fedora的容量為20G,將虛擬磁盤拆分成多個文件。這里保持默認(rèn)就好,然后單擊下一步。如圖3.6所示:圖3.6指定磁盤容量7.單擊完成結(jié)束配置。如圖3.7所示:圖3.7已準(zhǔn)備好創(chuàng)建虛擬機(jī)8.單擊打開此虛擬機(jī),開始正式安裝Fedora21(注:安裝前可以設(shè)置一下內(nèi)存了處理器,默認(rèn)為1GB,1處理器,如果你的電腦是2GB,4處理器,就可以設(shè)置為2GB,4處理器,只需要單擊【編輯虛擬機(jī)設(shè)置】設(shè)置就好。增加內(nèi)存和處理器可以使虛擬器安裝更快。如果不設(shè)置,等安裝完成后下次開機(jī)前在設(shè)置也可以。)如圖3.8所示:圖3.8開啟虛擬機(jī)9.然后出現(xiàn)如下圖的界面,選擇StartFedoraLive,開始進(jìn)行安裝。如圖3.9所示:圖3.9開始安裝Fedora10.選擇InstalltoHardDrive,如果選擇TryFedora只是試用Fedora而真正的安裝到硬盤。如圖3.10所示:圖3.10安裝到硬盤11.選擇安裝的語言,我選擇的中文,然后單擊【繼續(xù)】。如圖3.11所示;圖3.11選擇語言12.接下來設(shè)置日期和時間、鍵盤、安裝位置、網(wǎng)絡(luò)和主機(jī)名。只要設(shè)置安裝位置就好,其他的保持默認(rèn)。單擊帶有感嘆號的【安裝位置】,設(shè)置虛擬機(jī)的安裝位置。如圖3.12所示:圖3.12安裝信息摘要13.安裝位置是使我們前面第6步設(shè)置的20G硬盤,然后單擊【完成】。如圖3.13所示:圖3.13安裝目標(biāo)位置14.完成以上配置,然后單擊【開始安裝】,這個過程要進(jìn)行大概十分鐘。如圖3.14所示:圖3.14開始安裝15.在系統(tǒng)安裝過程中設(shè)置一下root密碼,和創(chuàng)建用戶。單擊【ROOT密碼】設(shè)置root密碼;單擊【創(chuàng)建用戶】創(chuàng)建普通用戶。如圖3.15所示:圖3.15設(shè)置用戶密碼16.root密碼最好是復(fù)雜度高的密碼,這樣有助于保護(hù)系統(tǒng)的安全性,root密碼一定要記好,如果忘記,要想修改root密碼是很麻煩的。如果你設(shè)置了一個簡單的密碼,如123,系統(tǒng)會提示你密碼太簡單,如果你向繼續(xù)使用這個密碼,單擊兩次【完成】按鈕就可以了。如圖3.16所示:圖3.16設(shè)置root用戶密碼17.為普通用戶設(shè)置用戶名和密碼,也可以不設(shè)置密碼。如圖3.17所示圖3.17設(shè)置普通用戶18.等待安裝進(jìn)度條完成安裝,然后單擊【完成配置】。如圖3.18所示:圖3.18完成配置19.接下來,系統(tǒng)自動進(jìn)行一些配置,重新啟動就可以開始使用Fedora21了。如圖3.19所示:圖3.19Fedora21界面20.在Fedora的terminal中輸入ifconfg,發(fā)現(xiàn)Fedora并沒有獲取到IP地址,說明Fedora沒有連上Internet?,F(xiàn)在關(guān)閉Fedora,做一些配置使其能夠連上Internet,因?yàn)楹罄m(xù)步驟安裝軟件需要使用網(wǎng)絡(luò)。如圖3.20所示:圖3.20查看網(wǎng)絡(luò)21.網(wǎng)絡(luò)適配器設(shè)置為NAT。如圖3.21所示:圖3.21網(wǎng)絡(luò)適配器配置22.接下來單擊菜單欄【編輯】,選擇【虛擬網(wǎng)絡(luò)編輯器】,對虛擬網(wǎng)絡(luò)進(jìn)行設(shè)置。如圖3.22所示:圖3.22虛擬網(wǎng)絡(luò)編輯器23.單擊左下角的【恢復(fù)默認(rèn)設(shè)置】,然后單擊確定,就會出現(xiàn)中間的小界面,需要等待大概1分鐘。如圖3.23所示:圖3.23恢復(fù)默認(rèn)設(shè)置24.接下來重新啟動Fedora21,就會在右上角顯示一個小方塊,提示有限鏈接,在terminal中輸入ifconfig可以看到獲取到了IP地址。這是Fedora就可以正常使用了。如圖3.24所示:圖3.24查看網(wǎng)址3.2NS2的安裝過程要安裝NS2網(wǎng)絡(luò)模擬器,首先要下載ns-allinone-2.35.tar.gz安裝包,直接在網(wǎng)上搜索ns-allinone-2.35.tar.gz就可以找到很多,我是通過Fedora下自帶的火狐瀏覽器下載的,默認(rèn)保存在~/下載文件夾下。如圖3.25所示:圖3.25下載NS2軟件包然后打開終端先進(jìn)行NS2安裝前的其他必須軟件的安裝,否則NS2安裝的時候會報錯,如checkingforgcc…no等等。打開終端(terminal)依次在終端下輸入命令yuminstallgcc。YUM會自動下載rpm包和具有依賴關(guān)系的rpm包,進(jìn)行自動安裝。如圖3.26所示:圖3.26安裝gcc當(dāng)出現(xiàn)Isthisok[y/d/N]:,鍵入y,按enter鍵。如圖3.27所示:圖3.27安裝gcc安裝完成會出現(xiàn)如下提示。如圖3.28所示:圖3.28安裝gcc接下來還有很多類似的操作,命令分別是:yuminstallgcc-c++ 安裝gcc-c++;yuminstalllibX11-devel安裝libX11-devel;yuminstallxorg-x11-proto-devel安裝xorg-x11-proto-devel;yuminstalllibXt-devel安裝libXt-devel;yuminstalllibXmu-devel安裝libXmu-devel。接下來就可以安裝NS-allinone-2.35了,首先將解壓到自己想要安裝的文件夾下面,我是先解壓到當(dāng)前文件夾下,命令:tar–zxvfns-allinone-2.35.tar.gz然后再將解壓后的文件移動到/usr/local/文件夾下,命令:mvns-allinone-2.35/usr/local/。接下來進(jìn)入解壓后的文件夾,命令:cd/usr/local/ns-allinone-2.35。如圖3.29所示:圖3.29安裝NS2接下來要修改一個文件linkstate中l(wèi)s.h文件。命令:vi./ns-2.35/linkstate/ls.h在第137行添加高亮的符號。如果沒有修改待會安裝的時候就會出現(xiàn)make…[linkstate/ls.o]錯誤。(注:vi中常用命令:1.顯示行號,:setnu2.編輯i3.退出esc4.保存退出:x)。如圖3.30所示:圖3.30安裝NS2安裝NS2,執(zhí)行一個安裝文件系統(tǒng)會自動安裝所有內(nèi)容。首先進(jìn)入/usr/local/ns-allinone-2.35/文件夾下。然后輸入命令./install,安裝完成會出現(xiàn)安裝成功的提示。這個過程比較慢,大概需要十幾分鐘。如圖3.31所示:圖3.31安裝NS2接下來要配置環(huán)境變量,命令vi/root/.bash_profile在其最后一行添加下列環(huán)境變量參數(shù)。exportPATH="$PATH:/usr/local/ns-allinone-2.35/bin:/usr/local/ns-allinone-2.35/tcl8.5.10/unix:/usr/local/ns-allinone-2.35/tk8.5.10/unix"exportPATH="$PATH:/usr/local/ns-allinone-2.35/otcl-1.14:/usr/local/ns-allinone-2.35/lib"exportLD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/ns-allinone-2.35/tcl8.5.10/librarary"接下來關(guān)閉終端,重新打開,然后測試環(huán)境變量是否設(shè)置成功,在終端下輸入ns,如果出現(xiàn)%說明環(huán)境變量配置成功。如圖3.32所示:圖3.32測試NS2運(yùn)行測試用例,測試是否安裝成功。命令:ns/usr/local/ns-allinone-2.35/ns-2.35/tcl/ex/simple.tcl,運(yùn)行成功出現(xiàn)如下圖所示的界面。如圖3.33所示:圖3.33測試NS23.3NS2中添加ZBR路由協(xié)議的過程3.3.1協(xié)議底層文件新建的協(xié)議名字就叫做zbr,在/usr/local/ns-allinone-2.35/ns-2.35/文件夾下新建zbr目錄,在zbr目錄下包含zbr.h,zbr.cc,zbr_packet.h,zbr_rtable.h,zbr_rtable.cc,zbr_link.cc,zbr_link.h,zbr_rqueue.cc,zbr_rqueue.h九個文件,這9個文件包含在畢業(yè)設(shè)計的光盤中。3.3.2需要修改的文件需要對ns2中的一些文件進(jìn)行修改,來使這個協(xié)議在tcl中被調(diào)用,需要修改的文件有以下幾個:common/packet.h;trace/cmu-trace.h;trace/cmu-trace.cc;tcl/lib/ns-packet.tcl;tcl/lib/ns-default.tcl;tcl/lib/ns-lib.tcl;queue/priqueue.cc;Makefile3.3.3需要修改的具體內(nèi)容common/packet.h(兩個需要修改的地方,添加代碼)第一個大約在202行:staticconstpacket_tPT_MDART=72;staticconstpacket_tPT_ZBR=73; //新添加staticpacket_tPT_NTYPE=74;//這一行必須為最后一行第二個大約在421行:name_[PT_DCCP_RESET]="DCCP_Reset";name_[PT_ZBR]="zbr";//新添加name_[PT_NTYPE]="undefined";trace/cmu-trace.h(一個需要修改的地方:添加代碼)大約在165行: voidformat_mdart(Packet*p,intoffset); voidformat_zbr(Packet*p,intoffset);//新添加 //Thisholdsallthetracersaddedatrun-time staticPacketTracer*pktTrc_;trace/cmu-trace.cc(需要修改三個地方)第一個:在大約55行添加頭文件:#include<zbr/zbr_packet.h>第二個:找個合適的地方加上下面的函數(shù):可以在大約864行添加voidCMUTrace::format_zbr(Packet*p,intoffset){structhdr_zbr*zh=HDR_ZBR(p);structhdr_zbr_request*rq=HDR_ZBR_REQUEST(p);structhdr_zbr_reply*rp=HDR_ZBR_REPLY(p);switch(zh->ah_type){caseZBRTYPE_RREQ: if(pt_->tagged()){ sprintf(pt_->buffer()+offset, "-zbr:t%x-zbr:h%d-zbr:b%d-zbr:d%d" "-zbr:ds%d-zbr:s%d-zbr:ss%d" "-zbr:cREQUEST", rq->rq_type,rq->rq_hop_count,rq->rq_bcast_id,rq->rq_dst,rq->rq_dst_seqno,rq->rq_src,rq->rq_src_seqno); }elseif(newtrace_){ sprintf(pt_->buffer()+offset, "-Pzbr-Pt0x%x-Ph%d-Pb%d-Pd%d-Pds%d-Ps%d-Pss%d-PcREQUEST", rq->rq_type,rq->rq_hop_count,rq->rq_bcast_id,rq->rq_dst,rq->rq_dst_seqno,rq->rq_src,rq->rq_src_seqno); }else{ sprintf(pt_->buffer()+offset, "[0x%x%d%d[%d%d][%d%d]](REQUEST)", rq->rq_type,rq->rq_hop_count,rq->rq_bcast_id,rq->rq_dst,rq->rq_dst_seqno,rq->rq_src,rq->rq_src_seqno); }break;caseZBRTYPE_RREP:caseZBRTYPE_HELLO: caseZBRTYPE_RERR: if(pt_->tagged()){ sprintf(pt_->buffer()+offset, "-zbr:t%x-zbr:h%d-zbr:d%d-zbr:ds%d" "-zbr:l%f-zbr:c%s", rp->rp_type, rp->rp_hop_count, rp->rp_dst, rp->rp_dst_seqno, rp->rp_lifetime, rp->rp_type==AODVTYPE_RREP?"REPLY": (rp->rp_type==AODVTYPE_RERR?"ERROR": "HELLO")); }elseif(newtrace_){ sprintf(pt_->buffer()+offset, "-Pzbr-Pt0x%x-Ph%d-Pd%d-Pds%d-Pl%f-Pc%s", rp->rp_type, rp->rp_hop_count, rp->rp_dst, rp->rp_dst_seqno, rp->rp_lifetime, rp->rp_type==ZBRTYPE_RREP?"REPLY": (rp->rp_type==ZBRTYPE_RERR?"ERROR": "HELLO")); }else{ sprintf(pt_->buffer()+offset, "[0x%x%d[%d%d]%f](%s)", rp->rp_type, rp->rp_hop_count, rp->rp_dst, rp->rp_dst_seqno, rp->rp_lifetime, rp->rp_type==ZBRTYPE_RREP?"REPLY": (rp->rp_type==ZBRTYPE_RERR?"ERROR": "HELLO")); }break;default:#ifdefWIN32fprintf(stderr, "CMUTrace::format_zbr:invalidZBRpackettype\n");#else fprintf(stderr, "%s:invalidZBRpackettype\n",__FUNCTION__);#endifabort();}}第三個:在大約1529行添加casePT_PING: break;casePT_ZBR://新添加 format_zbr(p,offset);//新添加 break;//新添加casePT_ARP: format_arp(p,offset); break;tcl/lib/ns-packet.tcl(需要修改一個:添加)大約172行:添加:#Wireless: ARP #AddressResolutionProtocol,networkwirelessstack GAF #GeographicAdaptiveDelity,forad-hocnetworks LL #networkwirelessstackLRWPAN#zheng,wpan/p802_15_4mac.cc Mac #networkwirelessstack ZBR#ZigBee新添加tcl/lib/ns-default.tcl(需要修改一個)最后一行添加:#DefaultsdefinedforzbrAgent/ZBRsetaccessible_var_truetcl/lib/ns-lib.tcl(需要修改兩個)第一個:大約672行添加ZBR{setragent[$selfcreate-zbr-agent$node]}第二個:大約891行添加Simulatorinstproccreate-zbr-agent{node}{ #Createzbrroutingagent setragent[newAgent/ZBR[$nodenode-addr]] $selfat0.0"$ragentstart" $nodesetragent_$ragent return$ragent}queue/priqueue.cc(需要修改一個)大約93行:casePT_AODV:casePT_ZBR://新添加casePT_AOMDV:wpan/p802_15_4sscs.h(需要修改一個)在大約57行,打開ZigBeeIF:#defineZigBeeIFwpan/p802_15_4sscs.cc(需要修改一個)大約在179行添加#ifdefZigBeeIF boolnoCapacity; intchild_num; intlogAddr;#endif //weassigntheclustertreeaddressastheMACshortaddressMakefile(需要修改一個)修改OBJ_CC=\大約在335行:zbr/zbr.ozbr/zbr_link.ozbr/zbr_rtable.ozbr/zbr_rqueue.o\3.3.4編譯進(jìn)入ns-2.35目錄下輸入下名命令進(jìn)行編譯:$makeclean$make$sudomakeinstall以后若修改了程序,需要先make再執(zhí)行sudomakeinstall(這一步必須執(zhí)行)3.3.5測試腳本參考ns-allinone-2.35/ns-2.35/tcl/ex/wpan下面的腳本。3.4gnuplot的安裝gnuplot是一個使用命令進(jìn)行科學(xué)繪制圖形的工具,它能夠把數(shù)據(jù)函數(shù)或數(shù)據(jù)資料轉(zhuǎn)換成直觀的二維或三維圖形,方便進(jìn)行數(shù)據(jù)分析。這次設(shè)計要使用到這個工具,用它將測試出來的數(shù)據(jù)繪制成為圖形,方便對比和分析。gnuplot的安裝過程十分簡單,在終端下輸入命令:yuminstallgnuplot進(jìn)行安裝就可以了。安裝完成后在Fedora終端運(yùn)行命令gnuplot,就會進(jìn)入gnuplot的繪圖環(huán)境,再輸入plotsin(x)就會自動繪制出sin(x)的曲線圖。如圖3.34所示:圖3.34測試gnuplot3.5本章小結(jié)俗話說:工欲善其事必先利其器。本章節(jié)基于windows7操作系統(tǒng),在其上安裝VMWareWorkstation,然后在VM中安裝Linux工作環(huán)境,如RedHat、CentOS、Ubuntu、Fedora等,這里選擇了Fedora21作為Linux工作環(huán)境,然后在Fedora上安裝了NS2網(wǎng)絡(luò)模擬軟件,在NS2網(wǎng)絡(luò)模擬軟件中添加了這次設(shè)計需要的ZBR路由協(xié)議,而后有安裝了gnuplot繪圖軟件。Linux工作環(huán)境、NS2軟件、ZBR協(xié)議、gnuplot繪圖軟件都是進(jìn)行協(xié)議仿真和分析必不可少的工具,只有做好了前面的鋪墊工作,才能做接下來要做的仿真工作。上面的工作還有一個替代方案。就是在windows工作環(huán)境下安裝cygwin+ns2進(jìn)行仿真實(shí)驗(yàn)。4仿真過程與仿真結(jié)果分析4.1使用NS2進(jìn)行模擬的基本流程使用NS2進(jìn)行網(wǎng)絡(luò)模擬基本操作流程如圖4.1所示,用戶首先進(jìn)行問題定義,考慮自己要模擬什么內(nèi)容,大概的拓?fù)鋺?yīng)該怎樣,是否需要對源代碼進(jìn)行修改或添加功能等。如果需要添加或修改代碼,如圖中右邊方框中所示,有一個對NS2源碼進(jìn)行修改、重新編譯和調(diào)試的過程;如果不需要修改代碼,即采用NS2已有構(gòu)件即可完成模擬工作,那么用戶的主要任務(wù)就是編寫Tcl/OTcl模擬代碼,生成一個.tcl腳本文件,并在NS2環(huán)境下執(zhí)行該腳本進(jìn)行模擬,模擬程序結(jié)束后會生成相應(yīng)的Trace文件,即模擬結(jié)果文件,用戶使用不同的工具對腳本中的內(nèi)容進(jìn)行分析得到想要的結(jié)果圖表。如果使我們所預(yù)期的,那么整個模擬過程即可順利結(jié)束,否則,應(yīng)該分析問題所在,并重新考慮問題定義、源碼及Tcl腳本的修改。需要需要修改源代碼時額外工作量滿意不滿意未通過通過需要結(jié)束分析任務(wù)需要修改源代碼?編寫Tcl腳本執(zhí)行模擬分析結(jié)果結(jié)果滿意?開始分析問題所在修改源代碼重新編譯NS編譯通過?調(diào)試NS不需要圖4.1NS2進(jìn)行圖4.1NS2進(jìn)行網(wǎng)絡(luò)模擬基本流程圖4.2星型拓?fù)洵h(huán)境搭建和模擬4.2.1任務(wù)分析拓?fù)涔苍O(shè)置7個節(jié)點(diǎn),其中中心節(jié)點(diǎn)作為PAN協(xié)調(diào)器,其余6個節(jié)點(diǎn)為設(shè)備節(jié)點(diǎn)。節(jié)點(diǎn)0、節(jié)點(diǎn)1、節(jié)點(diǎn)3、節(jié)點(diǎn)4、節(jié)點(diǎn)5、節(jié)點(diǎn)6分別向節(jié)點(diǎn)2發(fā)送CBR(ConstantBitRate)恒定速率數(shù)據(jù)流,分別使用cluster-tree路由協(xié)議和zbr路由協(xié)議對其做Trace記錄,然后分析對比兩種算法的平均延遲、丟包率、控制包數(shù)量。4.2.2編寫Tcl腳本設(shè)置各個節(jié)點(diǎn)的位置,保存在topo.scn中,這個文件供tcl腳本使用。以節(jié)點(diǎn)0為例,node_(0)為節(jié)點(diǎn)的名字,setX_25是設(shè)置x坐標(biāo)為25,setY_25是設(shè)置y坐標(biāo)為25,setZ_0是設(shè)置Z坐標(biāo)為0,因?yàn)樵O(shè)計中選用的是TwoRayGround,既二徑傳輸信道,沒有使用到三維,所以Z坐標(biāo)設(shè)置為0,這樣0節(jié)點(diǎn)正好位于拓?fù)鋱D的中心。其他六個節(jié)點(diǎn)按照同樣的方法進(jìn)行設(shè)置。下面是節(jié)點(diǎn)0的位置代碼。$node_(0)setX_25$node_(0)setY_25$node_(0)setZ_0拓?fù)涞慕Y(jié)構(gòu)圖如圖4.2所示:圖4.2星型拓?fù)湎旅婢帉懩M仿真的tcl腳本,使用tcl來描述模擬環(huán)境中網(wǎng)絡(luò)的環(huán)境和參數(shù)設(shè)置,腳本文件保存在star.tcl中。下面是一些重要代碼描述:設(shè)置無線節(jié)點(diǎn)參數(shù),包括無線節(jié)點(diǎn)使用的物理信道、無線電波傳播模型、物理層使用標(biāo)準(zhǔn)、MAC使用標(biāo)準(zhǔn)、接口隊(duì)列類型、鏈路層類型、天線模型、使用的路由協(xié)議等,這里面由于是做ZigBee的協(xié)議仿真,所以在物理層和MAC層標(biāo)準(zhǔn)使用802.15.4,路由協(xié)議使用ZBR(ZigBeeRouting)。setval(chan)Channel/WirelessChannel;#物理信道類型setval(prop)Propagation/TwoRayGround;#無線電波傳播模型setval(netif)Phy/WirelessPhy/802_15_4 ;#物理層使用802.15.4標(biāo)準(zhǔn)setval(mac)Mac/802_15_4;#媒體接入層使用802.15.4標(biāo)準(zhǔn)setval(ifq)Queue/DropTail/PriQueue;#接口隊(duì)列類型setval(ll)LL;#鏈路層類型setval(ant)Antenna/OmniAntenna;#天線模型setval(ifqlen)150;#最大包隊(duì)列setval(nn)7;#移動節(jié)點(diǎn)數(shù)量setval(rp)ZBR;#路由協(xié)議為ZigBee協(xié)議setval(x) 50 ;#設(shè)定拓?fù)浞秶L度50msetval(y) 50 ;#設(shè)定拓?fù)浞秶獙挾?0m開啟Trace跟蹤文件和NAM顯示文件,在運(yùn)行完tcl腳本后運(yùn)用star.tr進(jìn)行結(jié)果分析,運(yùn)用star.nam進(jìn)行模擬演示。setns_ [newSimulator];#初始化一個仿真對象ns_settracefd[open./star.trw];#trace跟蹤文件保存在star.tr中$ns_trace-all$tracefd;#開啟trace跟蹤文件if{"$val(nam)"=="star.nam"}{;#namtrace顯示文件,保存在star.nam中setnamtrace[open./$val(nam)w]$ns_namtrace-all-wireless$namtrace$val(x)$val(y)}設(shè)置每個節(jié)點(diǎn)的通信半徑為15m。CSThresh_信號感應(yīng)門限,當(dāng)兩個信號發(fā)生碰撞,被某幾個節(jié)點(diǎn)同時接收時,若其中一個信號的強(qiáng)度是另一個的CSThresh_倍以上時,雖然受到另一信號的干擾,它仍能被解調(diào),假若不滿足這一條件,兩個信號都不能直接被接收端感應(yīng)。RXThresh_信號接收門限,當(dāng)信號強(qiáng)度大于信號接收門限才能被接受。#Formodel'TwoRayGround'setdist(5m)7.69113e-06;#距離為5m時信號接收或發(fā)送門限值setdist(9m)2.37381e-06;#距離為9m時信號接收或發(fā)送門限值setdist(10m)1.92278e-06;#距離為10m時信號接收或發(fā)送門限值setdist(11m)1.58908e-06;#距離為11m時信號接收或發(fā)送門限值setdist(12m)1.33527e-06;#距離為12m時信號接收或發(fā)送門限值setdist(13m)1.13774e-06;#距離為13m時信號接收或發(fā)送門限值setdist(14m)9.81011e-07;#距離為14m時信號接收或發(fā)送門限值setdist(15m)8.54570e-07;#距離為15m時信號接收或發(fā)送門限值setdist(16m)7.51087e-07;#距離為16m時信號接收或發(fā)送門限值setdist(20m)4.80696e-07;#距離為20m時信號接收或發(fā)送門限值setdist(25m)3.07645e-07;#距離為25m時信號接收或發(fā)送門限值setdist(30m)2.13643e-07;#距離為30m時信號接收或發(fā)送門限值setdist(35m)1.56962e-07;#距離為35m時信號接收或發(fā)送門限值setdist(40m)1.20174e-07;#距離為40m時信號接收或發(fā)送門限值Phy/WirelessPhysetCSThresh_$dist(15m);#設(shè)置CSThresh為15mPhy/WirelessPhysetRXThresh_$dist(15m);#設(shè)置RXThresh為15m配置節(jié)點(diǎn)的屬性,默認(rèn)為RN+,使用AODVjr路由算法,將RNType設(shè)置為1就是使用CLUSTER-TREE路由算法。#defaultisRN+,soonlysetRN-$node_(0)RNType0$node_(1)RNType0$node_(2)RNType0$node_(3)RNType0$node_(4)RNType0$node_(5)RNType0調(diào)用節(jié)點(diǎn)的位置信息。source./topo.scn開啟PAN協(xié)調(diào)器、協(xié)調(diào)器和設(shè)備。$nodesscsstartPANCoord<txBeacon=1><beaconOrder=3><SuperframeOrder=3>這條命令用來開啟一個新的PAN,并且節(jié)點(diǎn)會被作為PAN協(xié)調(diào)器,使用時可以省略一下參數(shù),省略的參數(shù)就是用默認(rèn)配置。$nodesscsstartDevice<isFFD=1><assoPermit=1><txBeacon=0><beaconOrder=3><SuperframeOrder=3>這條命令用于開啟一個設(shè)備或協(xié)調(diào)器,可以省略一些參數(shù),如:$node_(0)sscsstartDevice0表示開啟一個沒有協(xié)調(diào)器能力的設(shè)備;如:$node_(0)sscsstartDevice表示開啟一個非信標(biāo)模式的協(xié)調(diào)器;如:$node_(0)sscsstartDevice111表示開啟一個信標(biāo)模式的協(xié)調(diào)器。$nodesscsstartCTPANCoord<txBeacon=1><beaconOrder=3><SuperframeOrder=3>這條命令用于開啟一個基于clustertree的PAN協(xié)調(diào)器。$nodesscsstartCTDevice<isFFD=1><assoPermit=1><txBeacon=0><beaconOrder=3><SuperframeOrder=3>這條命令用于開啟一個基于clustertree的設(shè)備,其用法與命令(b)相似。$ns_at0.0 "$node_(0)NodeLabelPANCoor"$ns_at0.0 "$node_(0)sscsstartCTPANCoord";#在0.0秒開啟PAN節(jié)點(diǎn)0$ns_at0.5 "$node_(1)sscsstartCTDevice10" ;#在0.5秒開啟設(shè)備節(jié)點(diǎn)1$ns_at1.5 "$node_(2)sscsstartCTDevice10"$ns_at2.5 "$node_(3)sscsstartCTDevice10"$ns_at3.5 "$node_(4)sscsstartCTDevice10"$ns_at4.5 "$node_(5)sscsstartCTDevice10"$ns_at5.5 "$node_(6)sscsstartCTDevice10"控制節(jié)點(diǎn)間流量,控制節(jié)點(diǎn)間流量源節(jié)點(diǎn),目的節(jié)點(diǎn),發(fā)送間隔,開始時間。if{("$val(traffic)"=="cbr")||("$val(traffic)"=="poisson")}{puts"\nTraffic:$val(traffic)"#Mac/802_15_4wpanCmdack4dataonputs[format"Acknowledgementfordata:%s"[Mac/802_15_4wpanCmdack4data]]#修改nam演示速度$ns_at$appTime1"Mac/802_15_4wpanNamPlaybackRate0.3ms"$ns_at[expr$appTime1+0.5]"Mac/802_15_4wpanNamPlaybackRate1.5ms"#設(shè)置節(jié)點(diǎn)流量的源、目的、發(fā)送間隔、開始時間$val(traffic)traffic021.4$appTime1$val(traffic)traffic121.4$appTime2$val(traffic)traffic321.4$appTime3$val(traffic)traffic421.4$appTime4$val(traffic)traffic521.4$appTime5$val(traffic)traffic621.4$appTime6#設(shè)置提示信息$ns_at$appTime1"$ns_trace-annotate\"(at$appTime1)$val(traffic)trafficfromnode0tonode2\""$ns_at$appTime3"$ns_trace-annotate\"(at$appTime2)$val(traffic)trafficfromnode1tonode2\""$ns_at$appTime5"$ns_trace-annotate\"(at$appTime3)$val(traffic)trafficfromnode3tonode2\""$ns_at$appTime1"$ns_trace-annotate\"(at$appTime4)$val(traffic)trafficfromnode4tonode2\""$ns_at$appTime3"$ns_trace-annotate\"(at$appTime5)$val(traffic)trafficfromnode5tonode2\""$ns_at$appTime5"$ns_trace-annotate\"(at$appTime6)$val(traffic)trafficfromnode6tonode2\""#設(shè)置不同類型流量的顯示顏色Mac/802_15_4wpanNamFlowClr-pAODV-ctomatoMac/802_15_4wpanNamFlowClr-pARP-cgreenMac/802_15_4wpanNamFlowClr-pMAC-s0-d-1-cnavyif{"$val(traffic)"=="cbr"}{ setpktTypecbr}else{ setpktTypeexp}#設(shè)置點(diǎn)到點(diǎn)流量的顯示顏色Mac/802_15_4wpanNamFlowClr-p$pktType-s0-d2-cblueMac/802_15_4wpanNamFlowClr-p$pktType-s1-d2-cgreen4Mac/802_15_4wpanNamFlowClr-p$pktType-s3-d2-ccyan4Mac/802_15_4wpanNamFlowClr-p$pktType-s4-d2-credMac/802_15_4wpanNamFlowClr-p$pktType-s5-d2-cyellowMac/802_15_4wpanNamFlowClr-p$pktType-s6-d2-cblack}結(jié)束進(jìn)程,相當(dāng)于程序中的析構(gòu)函數(shù),將開始創(chuàng)建的trace進(jìn)程,如果要演示nam動畫,就執(zhí)行namcstop{}{globalns_tracefdappTime1valenv$ns_flush-traceclose$tracefd;#關(guān)閉trace進(jìn)程sethasDISPLAY0foreachindex[arraynamesenv]{#puts"$index:$env($index)"if{("$index"=="DISPLAY")&&("$env($index)"!="")}{sethasDISPLAY1}}if{("$val(nam)"=="test1.nam")&&("$hasDISPLAY"=="1")}{ execnamstar.nam&;#執(zhí)行nam演示仿真過程}}開始執(zhí)行仿真模擬。puts"\nStartingSimulation..."$ns_run;#開始執(zhí)行仿真模擬4.2.3執(zhí)行模擬執(zhí)行star.tcl腳本,在Fedora終端中的star.tcl存放的文件夾下輸入命令nsstar.tcl,運(yùn)行完成后使用ls命令查看當(dāng)前文件夾中的所有文件,會發(fā)現(xiàn)產(chǎn)生了star.tr和star.nam兩個文件,其中star.tr是trace跟蹤文件,star.nam是NAM顯示文件。其中star.tr文件用于后續(xù)做數(shù)據(jù)分析使用,star.nam文件用來簡單的動畫演示整個模擬過程。4.2.4修改路由算法復(fù)制star.tcl更名為star2.tcl,命令:cpstar.tclstar2.tcl。然后打開start2.tcl將tcl腳本中的star.tr改為star2.tr,將star.nam改為star2.nam,然后修改節(jié)點(diǎn)的屬性RNType=1,修改節(jié)點(diǎn)的開啟命令。#defaultisRN+,soonlysetRN-$node_(0)RNType1;#使用AODVjr算法$node_(1)RNType1$node_(2)RNType1$node_(3)RNType1$node_(4)RNType1$node_(5)RNType1$node_(6)RNType1#開啟設(shè)備和協(xié)調(diào)器$ns_at0.0 "$node_(0)NodeLabelPANCoor"#startPANCoord<txBeacon=1><BO=3><SO=3>$ns_at0.0 "$node_(0)sscsstartPANCoord" #startDevice<isFFD=1><assoPermit=1><txBeacon=0><BO=3><SO=3>#$ns_at0.5 "$node_(1)sscsstartDevice10" #$ns_at1.5 "$node_(2)sscsstartDevice10"#$ns_at2.5 "$node_(3)sscsstartDevice10"#$ns_at3.5 "$node_(4)sscsstartDevice10"#$ns_at4.5 "$node_(5)sscsstartDevice10"#$ns_at5.5 "$node_(6)sscsstartDevice10"4.2.5再次執(zhí)行模擬執(zhí)行star2.tcl腳本,在Fedora終端中的star2.tcl存放的文件夾下輸入命令nsstar2.tcl,運(yùn)行完成后使用ls命令查看當(dāng)前文件夾中的所有文件,會發(fā)現(xiàn)產(chǎn)生了star2.tr和star2.nam兩個文件,其中star2.tr是trace跟蹤文件,star2.nam是NAM顯示文件。4.3星型拓?fù)浞抡娼Y(jié)果分析利用仿真模擬后產(chǎn)生的star.tr文件,對Trace結(jié)果進(jìn)行分析,比較使用AODVjr和CLUSTER-TREE路由算法端到端的平均延時、控制包的個數(shù)、數(shù)據(jù)包的丟失率。4.3.1gawk工具介紹在進(jìn)行分析Trace結(jié)果的過程中會使用到Linux中的gawk工具,gawk每次從Trace文件中讀取一行,將讀取的數(shù)據(jù)行分割成n個字段,一般來說是以空格符來分割相鄰的字段。表4.1以start.tr中的一行數(shù)據(jù)為例進(jìn)行說明。表4.1字段分割表$1$2$3$4$5$6$7$8$9$10$11$12$13$14S7.200000000_2_AGT1cbr70[0000][2:12:2320][0]00當(dāng)gawk把一行數(shù)據(jù)讀入之后,會把每一個字段存放在字段變量內(nèi),如表4.2所示:表4.2字段變量說明字段變量意義$0為一字符串,其內(nèi)容為目前awk所讀入的數(shù)據(jù)行$1代表$0上第一個字段的數(shù)據(jù)$2代表$0上第二個字段的數(shù)據(jù)……編寫awk文件result.awk計算平均時延、丟包率、控制包數(shù)量。result.awk文件代碼與注釋如下:BEGIN\{highest_packet_id=0;#初始化最高分組IDrecv_packets=0;#初始化接收包數(shù)量send_packets=0; #初始化發(fā)送包數(shù)量ctrl_packets=0;#初始化控制包數(shù)量}{action=$1;#第1個字段$1標(biāo)識事件的類型time=$2; #第2個字段$2標(biāo)識事件發(fā)送時間node=$3; #第3個字段$3標(biāo)識事件發(fā)生所在的節(jié)點(diǎn)agent=$4; #第4個字段$4標(biāo)識事件所發(fā)生的代理packet_id=$6; #第6個字段$6標(biāo)識事件的分組IDtype=$7; #第7個字段$7標(biāo)識事件的分組類型#更新最高分組IDif(action=="s"&&packet_id>=highest_packet_id)highest_packet_id=packet_id;#記錄發(fā)包時間和發(fā)包數(shù)量if(action=="s"&&agent=="AGT"&&type=="cbr")\{send_time[packet_id]=time; ++send_packets;}#記錄發(fā)包時間和和控制包數(shù)量if(action=="s"&&agent=="RTR")\{send_time[packet_id]=time; ++ctrl_packets;}#記錄接收包時間和控制包數(shù)量if(action=="r"&&agent=="AGT"&&type!="cbr")\{recv_time[packet_id]=time;++recv_packets;}}END\{lost_ratio=(send_packets-recv_packets)/(send_packets+1);#+1是因?yàn)橛?號分組的原因printf("Sendpackets=%d\n",send_packets);#輸出發(fā)送包數(shù)量printf("Recvpackets=%d\n",recv_packets);#輸出接收包數(shù)量printf("Lostratio=%.9f\n",lost_ratio);#輸出丟包率average_delay=sum/(recv_packets);printf("Theaveragedelaytime=%.9f\n",average_delay);#輸出平均延時printf("TheCtrlpacket=%d\n",ctrl_packets);#控制包數(shù)量}4.3.2傳輸延時網(wǎng)絡(luò)的傳輸時延D(end-to-endDelay)定義為源節(jié)點(diǎn)發(fā)送出一個分組到目的節(jié)點(diǎn)接收到該分組之間的時間差,它包括電(或光)信號在物理介質(zhì)中的傳播延時和數(shù)據(jù)在網(wǎng)絡(luò)中的處理延時,也即指網(wǎng)絡(luò)中數(shù)據(jù)流量傳輸所用的時間。在分析網(wǎng)絡(luò)的傳輸時延時,一般都統(tǒng)計平均傳輸時延D,平均傳輸時延D的計算如式(4.1)。平均延時=所有延時之和÷傳輸數(shù)據(jù)包數(shù)量式(4.1)打開star.tcl腳本,設(shè)置數(shù)據(jù)流的發(fā)送包間隔為0.1秒,執(zhí)行nsstar.tcl,產(chǎn)生star.tr文件,然后執(zhí)行awk–fresult.awkstar.tcl計算出傳輸延時,然后平均延遲數(shù)據(jù)記錄到rt_delay.data,如圖4.3所示。圖4.3result.awk運(yùn)行結(jié)果然后再分別修改數(shù)據(jù)流的發(fā)送包間隔為0.2秒、0.3秒、0.4秒……1.0秒,重復(fù)上述步驟,將平均延遲保存到rt_delay.data中。打開star2.tcl文件,按照star.tcl的步驟,將計算出來的數(shù)據(jù)保存在zbr_delay.data中。在終端輸入gnuplot進(jìn)入gnuplot繪圖進(jìn)程,然后輸入下面命令:gnuplot>setxlabel"發(fā)包間隔"gnuplot>setylabel"平均延遲"gnuplot>plot"rt_delay.data"withlinespoints,"zbr_delay.data"withlinespoints繪制出cluster-tree路由協(xié)議與ZBR路由協(xié)議在不同發(fā)包間隔下的平均延遲對比圖樣,如圖4.4所示。圖4.4平均延遲圖樣從圖中可以看出cluster-tree的平均延遲在發(fā)包間隔高于0.2秒時都高于AODVjr路由協(xié)議,這主要是因?yàn)槭褂肁ODVjr路由算法的發(fā)送報文可以選用最佳路徑,在物理介質(zhì)間的傳輸時間會更短,但二者相差不多,主要是拓?fù)涮?,最佳路徑和樹形路徑的距離相差無幾。4.3.3丟包率丟包率L(PacketLossRatio)定義了傳輸期間網(wǎng)絡(luò)丟失分組的數(shù)量,通常指的是在特定時間段內(nèi)丟失的分組占傳輸?shù)臄?shù)據(jù)總量的比例。發(fā)生丟包的原因很多,例如網(wǎng)絡(luò)擁塞、接收分組的緩沖區(qū)太小、TTL值超過規(guī)定值以及無線信號的同頻干擾等。丟包率也是反應(yīng)網(wǎng)絡(luò)質(zhì)量的一個重要參數(shù),丟包率的計算公式如式(4.2)。丟包率=(發(fā)送包數(shù)量-接收包數(shù)量)/發(fā)送包數(shù)量式(4.2)打開star.tcl腳本,設(shè)置數(shù)據(jù)流的發(fā)送包間隔為0.1秒,執(zhí)行nsstar.tcl,產(chǎn)生star.tr文件,然后執(zhí)行awk–fresult.awkstar.tcl計算出傳輸延時,然后平均延遲數(shù)據(jù)記錄到rt_ratio.data,然后再分別修改數(shù)據(jù)流的發(fā)送包間隔為0.2秒、0.3秒、0.4秒……1.0秒,重復(fù)上述步驟,將平均延遲保存到rt_ratio.data中。打開star2.tcl文件,按照star.tcl的步驟,將計算出來的數(shù)據(jù)保存在zbr_ratio.data中。在終端輸入gnuplot進(jìn)入gnuplot繪圖進(jìn)程,然后輸入下面命令:gnuplot>setxlabel"發(fā)包間隔"gnuplot>setylabel"丟包率"gnuplot>plot"rt_ratio.data"withlinespoints,"zbr_ratio.data"withlinespoints繪制出cluster-tree路由協(xié)議與ZBR路由協(xié)議在不同發(fā)包間隔下的丟包率對比圖樣,如圖4.5所示。圖4.5丟包率圖樣從丟包率來看,ZBR協(xié)議丟包率要小于CLUSTER-TREE,由于相對于CLUSTER-TREE而言,ZBR使用了AODVjr算法,路徑更短,丟包率相對較小。4.3.4控制包數(shù)量控制包的數(shù)量定義了在發(fā)送數(shù)據(jù)包的數(shù)量一樣時,控制包的數(shù)量越少,數(shù)據(jù)傳輸效率就越高。打開star.tcl腳本,設(shè)置數(shù)據(jù)流的發(fā)送包間隔為0.1秒,執(zhí)行nsstar.tcl,產(chǎn)生star.tr文件,然后執(zhí)行awk–fresult.awkstar.tcl計算出傳輸延時,然后平均延遲數(shù)據(jù)記錄到rt_control.data,然后再分別修改數(shù)據(jù)流的發(fā)送包間隔為0.2秒、0.3秒、0.4秒……1.0秒,重復(fù)上述步驟,將平均延遲保存到rt_control.data中。打開star2.tcl文件,按照sta

溫馨提示

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

評論

0/150

提交評論