Zigbee解析: NWK層作用
在實際應用中,對MAC及下層的直接修改較少,因此直接看比較重要的NWK層。
首先看一下NWK層的通訊方式及支援的拓撲結構:
· 協調器的NWK層為網路中每一個裝置分配一個短地址。同時NWK層會限制資料幀傳送 的跳數(Hops),這個引數通常稱為Radius,即通訊半徑。另外,通訊機制分為三種:Broadcast,Multicast和Unicast。
o 廣播時,目的地址是0xffff,PAN ID也是0xffff;任何一個裝置的APS子層可以呼叫NWK介面來傳送一個廣播資料;廣播資料不需要ACK,所有廣播資料會被協調器和路由器記錄在一個叫BTT(Broadcast Transaction Table)的表中。
o 多播時,訊息傳送到網路中具有相同Group ID的節點,即同級節點。每個節點可以屬於多個不同的Group,同時會保留這種身份記錄在多播表中。多播有兩種模式:MemberMode和Nonmember Mode,前者多播由組成員傳送訊息,後者由非成員將訊息轉發到成員節點。在Zigbee中,多播只限於資料,對命令不進行多播。
· 除了上述基本模式,還有一種Many-to-One,即多個節點向單個節點傳送資料,非常適用於WSN。只不過是所有節點(包括協調器和路由器)向Sink節點傳送資料。
接下來,看一下Zigbee中NWK支援的兩種常用拓撲:
1.Hierarchical Topology(Tree)
· Zigbee支援樹形拓撲(即Mesh網狀拓撲的一種),特別是提供了一種叫預設分散式地址分配的方式,可以為樹形拓撲結構中每一個節點單獨分配地址,分配地址時只需要知道樹的深度和最大孩子節點數即可。這種演算法會用到一個CSkip函式,引數d表示深度,其示意圖如下:
2. Mesh拓撲:這種拓撲允許節點自動選擇路由,因此可以自修復路由,更加健狀,但是需要更多自行處理。
再接下來,看一下NWK層最最重要的功能:Route,分為以下幾個部分:
· Route Discover:路由發現由協調器節點和路由器節點完成,它們會根據LQI(Link Quality Indicator)來評估包傳輸成功率。在這個過程中,會用到Routing Table,Routing Discovery Table及每個節點都有一個Neighbor Table(如下表)。此外,APL層可以呼叫NLME-Route-Discoery.request原語來請求NWK實現路由發現。如果RD請求只包含一個目的地址,那就是為Unicast通訊找路由;否則如果目的地址是一個16位的Group ID,則是多播尋路由;如果APL層沒有提供任何目的地址,那麼就是請求Many-to-one方式尋路由。對於廣播方式,不需要也不允許請求Routing Discovery。
· Route Maintenance and Repair
最後,看一下NWK層提供的管理服務功能,這一點對於理解組網過程十分重要。主要包括網路發現、網路形成等。
· Network Discovery:由APL層呼叫,NWK層就會利用MAC層的通道掃描來發現是否存在其它網路,掃描完成後會向APL層返回相關的引數。
· Network Formation(生成協調器):NWK層在收到APL的請求後,可以將一個節點設定為協調器。首先,在上一步的主動掃描後,會進行一個ED掃描,該請求是由NLME向MLME提出。根據ED掃描結果,NWK層會選擇一個Frequency Channel和一個PAN ID。通常協調器為設定0x0000作為 它自身的MAC地址。
· Establishing the device as a router:由APL呼叫NWK層的NLME-START-ROUTER原語來完成。
· Joining and Leaving a network:協調器和路由器的NWK層允許其它裝置通過請求MLME並設定macAssociationPermit=TRUE,來完成加入或者退出一個網路。當然,節點的高層可以呼叫NLME-JOIN原主來請求NWK層將節點加入到一個已經存在的網路;相反,應用層也可以呼叫NLME-LEAVE原語來離開一個網路。
· Resetting the NWK Layer:由APL層呼叫NLME-RESET原語實現;
· Synchronization:由NLME-SYNC原語實現,主要用於節點間同步或者從協調器或路由器提取資料。
NWK層資料幀(Frame)格式:
NWK層資料按型別分為Data和Command,格式如下:
其中,Command包括以下:
以下是每一種命令中,NWK Payload的格式:
我們據此來分析一下前面提到的,TI Packet Sniffer收到的每一個資料包中的NWK Payload內容:
根據上面看到的,該包是Link Status查詢包,這是Zigbee-PRO新增的命令,上面沒有這個包的格式,無法繼續分析,但是已經知道該包的含義。因此可以確定Collector路由器節點啟動後會週期性傳送NWK層的Link Status以測試鏈路層的狀態,該訊息的Radius是1。
相關文章
- 全連線層的作用解析
- zigbee無線傳播的例子 應用層
- 手把手教你如何通過CC2531抓取Zigbee包,並解析加密Zigbee包加密
- Zigbee
- Zigbee事件事件
- OSI 七層參考模型的作用模型
- CNN—pooling層的作用CNN
- JS閉包作用域解析JS
- Javascript解析之作用域理解JavaScript
- zigbee 介紹
- [ZigBee] 15、Zigbee協議棧應用(一)——Zigbee協議棧介紹及簡單例子(長文,OSAL及Zigbee入門知識)...協議單例
- 三層交換技術解析
- zigbee路由知識路由
- zigbee協議的缺點 zigbee的主要應用領域協議
- Spring IOC 原理深層解析Spring
- 深度解析HashMap集合底層原理HashMap
- ThreadLocal底層原始碼解析thread原始碼
- H264 NAL層解析
- 持久層Mybatis3底層原始碼分析,原理解析MyBatisS3原始碼
- Python中if __name__ == '__main__'作用解析PythonAI
- Java CompletionService 的作用與場景解析Java
- Javascript解析之this代表物件及作用範圍JavaScript物件
- Promise的分層解析及實現Promise
- 解析ArrayList的底層實現(上)
- AIDL 跨程式呼叫 -- 介面層解析AI
- 三層交換機技術解析(轉)
- 智慧燈控(基於ZigBee)
- zigbee之SampleApp_ProcessEvent()APP
- js作用域(變數提升,預解析)例題JS變數
- 面試題深入解析:Synchronized底層實現面試題synchronized
- 深入解析 Go 中 Slice 底層實現Go
- 深度解析HashMap底層實現架構HashMap架構
- DNS分層結構及DNS解析流程DNS
- iptables深入解析:應用層外掛篇
- 讀取xml檔案 解析雙層xmlXML
- 原始碼解析:網路層 YTKNetwork原始碼
- Vector底層結構和程式碼解析
- DNS解析是什麼?DNS解析在網路通訊中作用有哪些?DNS