第七章-網(wǎng)絡(luò)協(xié)議要點(diǎn)_第1頁(yè)
第七章-網(wǎng)絡(luò)協(xié)議要點(diǎn)_第2頁(yè)
第七章-網(wǎng)絡(luò)協(xié)議要點(diǎn)_第3頁(yè)
第七章-網(wǎng)絡(luò)協(xié)議要點(diǎn)_第4頁(yè)
第七章-網(wǎng)絡(luò)協(xié)議要點(diǎn)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第七章網(wǎng)絡(luò)協(xié)議第七章網(wǎng)絡(luò)協(xié)議介紹兩種基本的多跳協(xié)議:分發(fā)(Dissemination)和收集(Collection)。分發(fā)協(xié)議可以可靠地傳送小數(shù)據(jù)項(xiàng)到網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)。收集協(xié)議則可以把網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)的小數(shù)據(jù)項(xiàng)傳遞到指定的根節(jié)點(diǎn)。1.分發(fā)協(xié)議分發(fā)協(xié)議主要用于實(shí)現(xiàn)共享變量的網(wǎng)絡(luò)一致性。網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)都保存有該共享變量的一個(gè)副本。在任意給定時(shí)刻,可能會(huì)有2個(gè)節(jié)點(diǎn)的變量值不相同。但隨著時(shí)間的流逝,不一致的節(jié)點(diǎn)數(shù)會(huì)越來(lái)越少,最終整個(gè)網(wǎng)絡(luò)都將統(tǒng)一于一個(gè)相同的變量值。網(wǎng)絡(luò)的一致性并不意味著每個(gè)節(jié)點(diǎn)都能夠發(fā)現(xiàn)變量值的所有變動(dòng),它僅僅表示網(wǎng)絡(luò)最終會(huì)在最新的變量值上達(dá)成一致。能夠?qū)⑿?shù)據(jù)分發(fā)到整個(gè)網(wǎng)絡(luò)中,這個(gè)功能特性對(duì)于傳感器網(wǎng)絡(luò)的應(yīng)用而言是非常有用的。它允許管理員向網(wǎng)絡(luò)注入小段程序、命令以及配置信息。分發(fā)協(xié)議的接口兩個(gè)接口:DisseminationValue和DisseminationUpdate接口。前者適用于分發(fā)數(shù)據(jù)的消費(fèi)者(接收從網(wǎng)絡(luò)中分發(fā)過(guò)來(lái)的數(shù)據(jù)),后者適用于生產(chǎn)者(產(chǎn)生需分發(fā)的數(shù)據(jù))。interfaceDisseminationValue<t>{

commandconstt*get();

eventvoidchanged();

}當(dāng)分發(fā)的變量值發(fā)生改變時(shí),就會(huì)觸發(fā)changed()事件,再進(jìn)行相應(yīng)處理。消費(fèi)者能夠通過(guò)DisseminationValue.get()獲取const類(lèi)型的指針指向數(shù)據(jù)區(qū)域。interfaceDisseminationUpdate<t>{

commandvoidchange(t*newVal);

}調(diào)用change()命令會(huì)隱式地使其函數(shù)參數(shù)成為最新的分發(fā)值,并將其分發(fā)給網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)。分發(fā)協(xié)議的組件DisseminationValue接口和DisseminationUpdate接口由DisseminatorC組件提供。genericconfigurationDisseminatorC(typedeft,uint16_tkey){//通用組件,需實(shí)例化providesinterfaceDisseminationValue<t>;providesinterfaceDisseminationUpdate<t>;}參數(shù)t即數(shù)據(jù)包結(jié)構(gòu)類(lèi)型,其大小必須能夠包含于單個(gè)message_t包。鍵值(key)允許創(chuàng)建不同的DisseminatorC實(shí)例組件,類(lèi)似于A(yíng)M標(biāo)識(shí)號(hào)可以虛擬化AM服務(wù)。該值一般由unique()函數(shù)產(chǎn)生。EasyDissemination實(shí)例一個(gè)源節(jié)點(diǎn)周期性地將其計(jì)數(shù)值分發(fā)給網(wǎng)絡(luò)中的其它節(jié)點(diǎn)。收到該計(jì)數(shù)值的節(jié)點(diǎn)將其顯示到LED燈上。

eventvoidTimer.fired(){

counter=counter+1;postShowCounter();

//disseminatecountervalue

callUpdate.change(&counter);//設(shè)定分發(fā)值

}

eventvoidValue.changed(){//發(fā)現(xiàn)分發(fā)值變動(dòng)

constuint16_t*newVal=callValue.get();

//shownewcounterinLeds

counter=*newVal;

postShowCounter();

}

注意,所有節(jié)點(diǎn)在啟動(dòng)時(shí)必須先開(kāi)啟無(wú)線(xiàn)電服務(wù)。創(chuàng)建EasyDisseminate文件創(chuàng)建EasyDisseminateC.nc文件編寫(xiě)頂層配置文件編寫(xiě)makefile文件仿真測(cè)試分發(fā)協(xié)議的補(bǔ)充說(shuō)明在TinyOS2.x里,對(duì)于小數(shù)據(jù)項(xiàng)的分發(fā)協(xié)議有兩種分發(fā)庫(kù):Drip和DIP。Drip把每個(gè)數(shù)據(jù)項(xiàng)當(dāng)做分發(fā)的單獨(dú)實(shí)體,并提供了很好的粒子性控制,控制何時(shí)如何快速地把想要的數(shù)據(jù)項(xiàng)分發(fā)出去。DIP則把它們當(dāng)做一個(gè)群體,即分發(fā)控制和參數(shù)可以適用于所有的數(shù)據(jù)項(xiàng)集體。Drip應(yīng)該在你只有少數(shù)數(shù)據(jù)項(xiàng)且不確定每個(gè)節(jié)點(diǎn)的數(shù)據(jù)類(lèi)型時(shí)使用。這個(gè)靈活性要求你的網(wǎng)絡(luò)中發(fā)出更多的通知消息。DIP則在所有的節(jié)點(diǎn)有統(tǒng)一的數(shù)據(jù)類(lèi)型,且需要高效率的消息機(jī)制時(shí)使用。configurationEasyDisseminationAppC{}implementation{componentsMainC;

EasyDisseminationC.Boot->MainC;componentsLedsC;

EasyDisseminationC.Leds->LedsC;componentsnewTimerMilliC();

EasyDisseminationC.Timer->TimerMilliC; //part1componentsEasyDisseminationC;componentsDisseminationC;

EasyDisseminationC.DisseminationControl->DisseminationC; //part2componentsnewDisseminatorC(uint16_t,0x1234)asDiss16C;EasyDisseminationC.Value1->Diss16C;EasyDisseminationC.Update1->Diss16C; //part3componentsActiveMessageC;

EasyDisseminationC.RadioControl->ActiveMessageC; //part4}configurationEasyDisseminationAppC{}implementation{componentsMainC;

EasyDisseminationC.Boot->MainC;componentsLedsC;

EasyDisseminationC.Leds->LedsC;componentsnewTimerMilliC();

EasyDisseminationC.Timer->TimerMilliC; //part1componentsEasyDisseminationC;componentsDisseminationC;

EasyDisseminationC.DisseminationControl->DisseminationC; //part2componentsnewDisseminatorC(uint16_t,0x1234)asDiss16C;EasyDisseminationC.Value1->Diss16C;EasyDisseminationC.Update1->Diss16C; //part3}DIP在節(jié)點(diǎn)啟動(dòng)時(shí)就開(kāi)啟了無(wú)線(xiàn)電

Drip協(xié)議與Dip協(xié)議的比較Drip&DipMakefile在應(yīng)用程序的Makefile里設(shè)置相應(yīng)的分發(fā)庫(kù):COMPONENT=EasyDisseminationAppCCFLAGS+=-I$(TOSDIR)/lib/netCFLAGS+=-I$(TOSDIR)/lib/net/dripinclude$(MAKERULES)COMPONENT=EasyDisseminationAppCCFLAGS+=-I$(TOSDIR)/lib/netCFLAGS+=-I$(TOSDIR)/lib/net/dipCFLAGS+=-I$(TOSDIR)/lib/net/dip/interfacesinclude$(MAKERULES)2.收集協(xié)議收集協(xié)議是對(duì)分發(fā)協(xié)議的補(bǔ)充,它要求網(wǎng)絡(luò)中各節(jié)點(diǎn)將采集的數(shù)據(jù)發(fā)送到基站節(jié)點(diǎn)。實(shí)現(xiàn)方式:建立一棵或多棵以基站節(jié)點(diǎn)作為根節(jié)點(diǎn)的收集樹(shù),當(dāng)一個(gè)節(jié)點(diǎn)有數(shù)據(jù)(自己的采集數(shù)據(jù)或來(lái)自其他節(jié)點(diǎn)的轉(zhuǎn)發(fā)數(shù)據(jù))需要發(fā)送到基站節(jié)點(diǎn)時(shí),就會(huì)沿著收集樹(shù)將數(shù)據(jù)發(fā)送給它的父節(jié)點(diǎn),直到數(shù)據(jù)到達(dá)基站節(jié)點(diǎn)。根據(jù)匯聚內(nèi)容的形式,各中轉(zhuǎn)節(jié)點(diǎn)可以檢查過(guò)往的消息包,以便信息統(tǒng)計(jì)或聚合,或抑制重復(fù)的傳輸。注意:該協(xié)議只是盡力(best-effort)把消息發(fā)送到網(wǎng)絡(luò)中至少一個(gè)根節(jié)點(diǎn)。然而,它并不能保證傳輸必定成功。另外,消息的副本有可能傳輸?shù)蕉鄠€(gè)根節(jié)點(diǎn)。數(shù)據(jù)包到達(dá)根節(jié)點(diǎn)的順序也無(wú)法保證。匯聚樹(shù)協(xié)議(CollectionTreeProtocol,CTP)是TinyOS2.x自帶的收集協(xié)議的一種,為網(wǎng)絡(luò)中的節(jié)點(diǎn)提供到根節(jié)點(diǎn)的盡全力的、任意傳播的傳輸機(jī)制。CTP協(xié)議的接口匯聚服務(wù)中,一個(gè)節(jié)點(diǎn)可以扮演4種角色生產(chǎn)者,消費(fèi)者、偵聽(tīng)者、網(wǎng)絡(luò)處理者setRoot()命令設(shè)立收集樹(shù)的根節(jié)點(diǎn)。如果一個(gè)節(jié)點(diǎn)已經(jīng)是根節(jié)點(diǎn),并調(diào)用setRoot命令,則返回SUCCESS。那么接下來(lái)的isRoot命令返回TRUE。interfaceRootControl{commanderror_tsetRoot();commanderror_tunsetRoot();commandboolisRoot();}CTP協(xié)議的組件--1CTP協(xié)議由CollectionC組件提供,其提供了無(wú)線(xiàn)通信的大多數(shù)基本接口。configurationCollectionC{provides{interfaceStdControl;interfaceSend[uint8_tclient];

interfaceReceive[collection_id_tid];//接收到數(shù)據(jù)interfaceReceiveasSnoop[collection_id_t];//偷聽(tīng)到數(shù)據(jù)

interfaceIntercept[collection_id_tid];

interfaceRootControl;//設(shè)置根節(jié)點(diǎn)interfacePacket;//訪(fǎng)問(wèn)匯聚數(shù)據(jù)包的各個(gè)字段interfaceCollectionPacket;

}uses{interfaceCollectionId[uint8_tclient];

}}CTP協(xié)議的組件--2注意:不可以綁定其它組件到CollectionC.Send接口,通用組件CollectionSenderC提供了虛擬化的發(fā)送接口。genericconfigurationCollectionSenderC(collection_id_tcollectid){provides{interfaceSend;interfacePacket;}}事實(shí)上,CollectionSenderC組件是對(duì)CollectionC組件的一種封裝,提供了一種多元化訪(fǎng)問(wèn)的機(jī)制。類(lèi)似于A(yíng)MSenderC組件,只不過(guò)用collection_id_t參數(shù)代替了am_id_t參數(shù)。Receive接口、Snoop接口和Intercept接口必須也都使用相同的collection_id_t參數(shù),才能接收到數(shù)據(jù)。CTP協(xié)議的假設(shè)和限制CTP是基于樹(shù)的匯聚協(xié)議。網(wǎng)絡(luò)中的一些節(jié)點(diǎn)將自己設(shè)為根節(jié)點(diǎn)。節(jié)點(diǎn)之間形成到根節(jié)點(diǎn)的樹(shù)的集合。CTP是沒(méi)有地址的,節(jié)點(diǎn)并不是向固定的根節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,而是通過(guò)選擇下一跳隱式地選擇根節(jié)點(diǎn)。節(jié)點(diǎn)根據(jù)路由梯度形成到根的路由。CTP協(xié)議假設(shè)鏈路層提供了以下功能:1.提供有效的本地廣播地址2.為單播包提供同步的確認(rèn)信息3.提供協(xié)議分派字段以支持多種高層協(xié)議4.具有單跳的源和目的地址字段CTP協(xié)議的假設(shè)和限制CTP假設(shè)它有一部分附近鄰居節(jié)點(diǎn)的鏈路質(zhì)量估計(jì)信息。該信息提供了本節(jié)點(diǎn)與某一鄰居節(jié)點(diǎn)之間的通信過(guò)程中成功地傳輸了單播包的次數(shù)。CTP有一些提高傳輸可靠性的機(jī)制,但它并不保證100%可靠。它是盡力的,但有時(shí)即使盡力了也未必能辦到。CTP是為通信量相對(duì)較低的網(wǎng)絡(luò)設(shè)計(jì)的。帶寬有限的系統(tǒng)可能使用別的協(xié)議更合適,比如能將多個(gè)小的幀組裝成單個(gè)數(shù)據(jù)鏈路層包的協(xié)議匯聚算法問(wèn)題CTP使用期望傳輸值(ETX,ExpectedTransmissions)作為路由梯度。根節(jié)點(diǎn)的ETX為0,其它節(jié)點(diǎn)的ETX為其父節(jié)點(diǎn)的ETX值加上到父節(jié)點(diǎn)鏈路的ETX值。這種相加的方法需要假設(shè)節(jié)點(diǎn)使用鏈路層重傳。如果要給出一種有效的路由,CTP選擇ETX值最小的一種。ETX值用精度為0.01的16位定點(diǎn)實(shí)數(shù)表示。匯聚算法問(wèn)題路由循環(huán)是可能在CTP網(wǎng)絡(luò)中出現(xiàn)的問(wèn)題之一。CTP通過(guò)兩種方法處理路由循環(huán)。第一種是每個(gè)CTP包含有當(dāng)前節(jié)點(diǎn)的ETX值,如果CTP接收到比自己的ETX值小的數(shù)據(jù)幀,則說(shuō)明樹(shù)中有不一致。CTP通過(guò)廣播一個(gè)信息幀以期解決這種不一致性,希望發(fā)送這個(gè)數(shù)據(jù)幀的節(jié)點(diǎn)收到并相應(yīng)地調(diào)整它的路由。CTP的第二種機(jī)制是不考慮ETX值大于一個(gè)固定常量的路由,這個(gè)值取決于實(shí)現(xiàn)。包重復(fù)是CTP中可能發(fā)生的另外一個(gè)問(wèn)題。增加存活時(shí)間THL,重復(fù)的包具有相同的THLCTP協(xié)議幀格式CTP數(shù)據(jù)幀格式如下:CTP路由幀格式如下:CTP實(shí)現(xiàn)CTP的一種實(shí)現(xiàn)可以在tos/lib/net/ctp目錄中找到。三個(gè)主要組件鏈路質(zhì)量估計(jì)器,負(fù)責(zé)估計(jì)單跳的ETX值路由引擎,它根據(jù)鏈路估計(jì)和網(wǎng)絡(luò)層的信息(如擁塞情況)來(lái)決定哪個(gè)鄰居節(jié)點(diǎn)作為路由的下一跳轉(zhuǎn)發(fā)引擎,它維護(hù)發(fā)送包隊(duì)列,決定是否發(fā)送和發(fā)送的時(shí)機(jī)。它的名字有點(diǎn)令人混淆:轉(zhuǎn)發(fā)引擎不僅要轉(zhuǎn)發(fā)從其它節(jié)點(diǎn)過(guò)來(lái)的數(shù)據(jù)包,同時(shí)也要發(fā)送自己產(chǎn)生的數(shù)據(jù)包。鏈路估計(jì)該實(shí)現(xiàn)使用兩種機(jī)制來(lái)估計(jì)鏈路質(zhì)量:周期性的LEEP包和數(shù)據(jù)包。該實(shí)現(xiàn)通過(guò)數(shù)據(jù)傳輸改變對(duì)LEEP的鏈路估計(jì)。估計(jì)器通過(guò)信息幀的ETX值和數(shù)據(jù)估計(jì)產(chǎn)生的ETX值合并,產(chǎn)生指數(shù)權(quán)重的移動(dòng)平均線(xiàn)。CTP收集數(shù)據(jù)估計(jì)的速率與傳輸速率是成比例的,因此它可以快速地檢測(cè)到斷開(kāi)的連接并切換到新的侯選鄰居節(jié)點(diǎn)。組件tos/lib/net/le/LinkEstimatorP實(shí)現(xiàn)了鏈路估計(jì)器。它結(jié)合了基于LEEP和數(shù)據(jù)的估計(jì)。路由引擎該實(shí)現(xiàn)的路由引擎負(fù)責(zé)選擇數(shù)據(jù)傳輸?shù)南乱惶?。它記錄了鏈路估?jì)表中所維護(hù)節(jié)點(diǎn)的路徑ETX值。最小耗費(fèi)的路由,即路徑ETX值和鏈路ETX值之和最小的那條。路徑ETX值就是整條路由的鏈路ETX值。組件tos/lib/net/ctp/CtpRoutingEngineP實(shí)現(xiàn)了該路由引擎。轉(zhuǎn)發(fā)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論