ZigBee路由協議分析!
一、ZigBee網絡層次結構與地址分配機制
ZigBee網絡中的所有節點都有兩個地址:一個16位網絡短地址和一個64位IEEE擴展地址。其中16位網絡地址僅僅在網絡內部使用,用於路由機制和數據傳輸。這個地址是在節點加入網絡時由
其父節點動態分配的。當網絡中的節點允許一個新節點通過它加入網絡時,它們之間就形成了父子關系。所有加入ZigBee網絡的節點一同組成一棵邏輯樹,邏輯樹中的每一個節點都擁有以下兩個參量:
1)16-bit的網絡地址。只負責節點之間數據傳輸
2)網絡深度。即從該節點到根節點協調器的最短跳數,標識了該節點在網
絡拓撲圖中的層次位置。
當協調器(coordinator)建立了一個新的網絡后,它首先將自己的16位網絡地址初始化為O,同時初始化自己的網絡深度Deptg,=0。
以下通過一個具體的實例來說明ZigBee網絡父節點為子節點分配16位地址的規范。假設一個節點Node(n)想要加入網絡。Node(n)首先發起網絡發現過程,獲取信道上的信標並進行信道選擇后,決定連接到已經在網絡中的節點Node(k)。隨后Node(n)向Node(k)發起入網的關聯請求。關聯請求獲得批准后,Node(n)式加入網絡。Node(k)稱為Node(n)的父節點。可以假設已經存在在網絡中的父節點Node(k)的地址為 Depthk=Depthk+1。


如圖是ZigBee樹狀結構視圖。這里引入三個輔助參數: 參數表示每個深度可以容納的最大子節點個數(Max Children), 表示每個深度可以容納的最大路由器個數(Max Router),。 表示整個網絡的最大深度。根據以上說明,ZigBee網絡父節點為網絡深度d,子節點進行地址分配的規則如下:
(1)假設節點Node(n)是接入其父節點的第n個簡化功能設備節點(RED),即沒有路由能力的節點,則它的父節點Node(n)將會為它分配如F的地址:

(2)設節點Node(n)是接入其父節點的第n個全功能設備節點(FFD),即具各路由能力的節點,則它的父節點Node(n)將會為它分配如下的地址:

其中

當一個路由節點的 為0時,它就不再具備為子節點分配地址的能力,即該路由節點不能在接收新的節點加入網絡。
二、ZigBee路由協議分析
路由技術主要作用是為數據以最佳路徑通過通信子網到達目的節點提供服務。在傳統的OSI參考模型中,網絡層實現路由功能。路由協議是自組網體系結構中不可或缺的重要組成部分,其主要作用是發現和維護路由.具體的說主要有以下幾個方面:監控網絡拓撲結構的變化,交換路由信息,確定目的節點的位置,產生、維護以及取消路由,選擇路由並轉發數據。。為了達到低成本,低功耗,可靠性高的設計目標,ZigBee協議采用以下兩種算法的結合體作為自身的路由算法[1][2]。
(1) AODV:Ad-Hoc On-Demand Distance Vector(按需距離矢量路由)
(2) Cluster-Tree algorithm(樹型網絡結構路由)
其中AODV路由協議是一種按需路由協議,利用擴展環搜索的辦法來限制搜索發現過的目的節點的范圍,支持組播,可以實現在ZigBee節點間動態的,自發的路由,使節點很快的獲得通向所需目的的的路由。這也是ZigBee路由協議的核心。針對自身的特點,ZigBee網絡中使用一種簡化版本的AODV協議(AODV Junior,AODVjr[3])。
Cluster-Tree算法包括地址的分配(configuration of addresses)與尋址路由兩部分(addresses routing)。包括子節點的16位網絡短地址的分配,以及根據目的節點的網絡地址來計算下一跳的算法。
作為兩種算法的結合體,ZigBee網絡中,節點可以按照網絡樹狀結構的父子關系使用Cluster-Tree算法選擇路徑。即每一個節點都會試圖將收到的信息包轉發給自己的后代節點,如果通過計算發現目的地址不是自己的一個后代節點,則將這個數據包轉發給自身上一級的父節點,由父節點進行類似的判斷處理,直到找到目的節點。Cluster-Tree算法的特點在於使不具有路由功能的節點間通過與各自的父節點間的通信仍然可以發送數據分組和控制分組,但它的缺點是效率不高。為了提高效率,ZigBee中允許具有路由功能的節點使用AODVjr算法去發現路由,讓具有路由功能的節點可以不按照父子關系而直接發送信息到其通信范圍內的其他節點。
三、Cluster-Tree路由算法
Cluster-Tree路由算法的描述如下:當一個網絡地址為A,網絡深度為d的路由節點(FFD)收到目的地址為D的轉發數據包時,路由節點首先要判斷目的地址D是否為自身的一個子節點,然后根據判斷的結果采取不同的方式來處理這個數據。若地址D滿足一下判別式,則可以判斷D地址節點是A地址節點的一個后代節點:

如果D不在這個范圍之內則D地址節點是A地址節點的父節點。
判斷后采取的數據包轉發措施如下:
1) 目的節點是自身的一個后代節點,則下一跳(next hop)的節點地址為

2) 目的節點不是自身的一個后代節點,路由節點將把該包送交自己的父節點處理。這一點與TCP/IP協議中路由器將路由表項中不存在的數據包自己的網關處理類似。
四、AODVjr路由算法
AODVjr路由時一種按需分配的路由協議,只有在路由節點接收到網絡數據包,並且網絡數據包的目的地址不在節點的路由表中時才會進行路由發現過程。也就是說,路由表的內容是按照需要建立的,而且她可能僅僅是整個網絡拓撲結構的一部分。
AODVjr的優點是,相對於有線網絡的路由協議而言,它不需要周期性的路由信息廣播,節省了一定的網絡資源,並降低了網絡功耗。缺點是在需要時才發起路由尋找過程,會增加數據到達目的地址的時間。由於ZigBee網絡中對數據的實時性要求不大,而更重視對網絡能量的節省,因此AODVjr非常適合應用在ZigBee網絡中。
一次路由建立由以下三個步驟組成:
1) 路由發現
2) 反向路由建立
3) 正向路由的建立
經過這三個步驟,即可建立起一條路由節點到目的節點的有效傳輸路徑。在這個路由建立過程中,AODVjr使用3種消息作為控制信息:
1)Route Request(RREQ),路由請求
2)Route Replies(RREP),路由回復
3)Route Error(RERR),路由錯誤
以下將對路由建立的三個過程進行詳細描述。
(1)路由發現過程
對於一個具有路由能力的節點,當接收到一個從網絡層的更高層發出的發送數據幀的請求,且路由表中沒有和目的節點對應的條目時,它就會發起路由發現過程。源節點首先創建一個路由請求分組(RREQ),並使用多播(Multi.Broadcast)的方式向周圍節點進行廣播。
如果一個節點發起了路由發現過程,它就應該建立相應的路由表條目和路由發現表條目,狀態設置為路由發現中。任何一個節點都可能從不同的鄰居節點處接收到廣播的RREQ。接收到后節點將進行如下分析:
1)如果是第一次接收到這個RREQ消息,且消息的目的地址不是自己,則節點會保留這個RREQ分組的信息用於建立反向路徑,然后將這個RREQ消息廣播出去。
2)如果之前已經接受過這個RREQ消息,表明這是由於網絡內多個節點頻繁廣播產生的多余消息,對路由建立過程沒有任何作用,則節點將丟棄這個消息。
(2)反向路由建立過程
當RREQ消息從一個源節點轉發到不同的目的地時,沿途所經過的節點都要自動建立到源節點的反向路由。也就是記錄當前接收到的RREQ消息是由哪一個節點轉發而來的的。通過記錄收到的第一個RREQ消息的鄰居地址來建立反向路由,這些反向路由將會維持一定時間,該段時間足夠RREQ消息在網內轉發以及產生的RREP消息返回源節點。
當RREQ消息最終到達了目的節點,節點驗證RREQ中的目的地址為自己的地址之后,目的節點就會產生RREP消息,作為一個對RREQ消息的應答。由於之前已經建立了明確的反向路由,因此RREP無需進行廣播,只需按照反向路由的指導,采取單播的方式即可把RREP消息傳送給源節點。
(3)正向路由建立過程
在RREP以單播方式轉發回源節點的過程中,沿着這條路徑上的每一個節點都會根據PREP的指導建立到目的節點的路由,也就是說確定到目的地址節點的下一跳(next-hop)。方法就是記錄RREP是從哪一個節點傳播而來.然后將該鄰居節點寫入路由表中的路由表項。一直到RREP傳送到源節點。至此.一次路由建立過程完畢。源節點與目標節點之間可以開始數據傳輸。可以看出,AODV是按照需求驅動的、使用RREQ.RREP控制實現的、先廣播,后單播的路由的路由建立過程。
