第五章:zigbee學習筆記之網絡層幀格式分析(下)

寫在前面

  • 去年剛入職的時候,瞭解了一陣子zigbee,寫了學習筆記的第四章(上),後來因爲業務繁忙(自己也懶)所以就沒更新博客了,過年期間覆盤了以下,發現實在不能這樣墮落啊,所以最近要重新寫點博客了。ps:這篇是去年寫的,一直躺在有道雲筆記裏面,今天拿出來更新上去好了。
  • 上一章提到了,NWK層的幀區別是又幀頭的幀控制域(Frame Control)的前兩個bit控制的,而數據幀和命令幀格式有所卻別,不同處如下圖。
    在這裏插入圖片描述

1、數據幀

  • 數據幀的網絡層報頭域有控制域和根據需要適當組合而得到的路由域組成。數據幀的Payload攜帶的信息就是將來應用層的數據。ps:將來應用層的讀屬性,寫屬性等aps層是數據,都是用數據幀發出來的。

2、命令幀

  • 命令幀的區別是根據NWK payload中的命令幀標識符(NWK Command Identifier)來決定的,該域是由一個字節組成。
    在這裏插入圖片描述

2.1、路由請求命令(Route Request)

  • 設備使用路由請求命令來請求在其無線通信範圍內的其他設備發現到達目的設備的路由,以便在網絡中建立一條穩定的使信息更快更經濟地到達目的設備的路由。路由請求命令的載荷格式如下圖。
    在這裏插入圖片描述

2.1.1、命令選擇域(Command Options)

2.1.1.1.多對一路由(Many-to-one)

在這裏插入圖片描述
ps:關於many-to-one更具體的知識,可以參考這篇文檔:https://www.silabs.com/community/wireless/zigbee-and-thread/knowledge-base.entry.html/2017/12/18/_many-to-one_source-JRvm

0:表示不適用many-to-one機制,即單播路由發現。
1:表示啓用many-to-on機制,整個網絡中,會由中心節點,週期性發出many-to-one(默認60s,廣播),使得整個網絡中,具有路由能力的設備都收到這個命令幀,並解析出到中心節點的路徑。

2.1.1.2.Destination IEEE address
2.1.1.3.多播子域(Mulicast)
  • 多播子域是1位。只有命令幀請求多播組路由時,它的值是1,在這個情況下,目的地址域包含期望組的Group ID。

2.2、路由應答命令(Route reply)

  • 路由應答命令的目的設備使用路由應答命令來通知路由請求的源設備已接收到請求命令。ZigBee路由請求所經路由器建立一種能使幀更快捷地從源地址路由到目的地址的狀態路由應答命令的載荷格式如下圖所示。

    在這裏插入圖片描述
  • ps:當zigbee網絡中的A路由設備需要知道去往B設備的路徑時,可以發起到B設備的路由發現(不帶many-to-one),B設備收到後,將會把路徑用route reply應答回去。

2.3、網絡狀態命令(Network Status)

  • 設備使用網絡狀態命令報告從特定設備的NWK 層到到網絡中其他設備的對等NWK 層實體產生的錯誤和其他情況。NWK 狀態命令還可以用來診斷網絡問題,例如地址衝突。
  • 當然,網上也有文章稱它爲路由錯誤命令。當設備無法向前傳送數據時,便使用路由錯誤命令。該命令通知發送數據幀源設備,在傳送數據幀時出現錯誤。
    在這裏插入圖片描述
  • 以下是網絡狀態命令對應的Error Code:
    在這裏插入圖片描述
    詳細介紹如下:
    在這裏插入圖片描述

2.4、斷開命令(Leave)

  • 網絡層管理實體用斷開命令通知網絡中的其他設備設備正在離開網絡或者請求一個設備離開網絡(即設備離網),幀格式如下:
    在這裏插入圖片描述

2.4.1、重新連接子域(Rejoin)

  • 重新連列子域是1bit在比特5的位置上。如果這個子域的值是1,同它目前父設備斷開的設備重新連接到網絡(rejoin)。如果該子域值是0,設備將不重新連接網絡。

2.4.2、請求子域(Request)

  • 請求子域長度是1bit在bit6位置上。如果該bit的值是1,那麼斷開命令幀請求另一個設備離開網絡。如果該子域值是0,那麼斷開命令幀表明發送設備準備斷開網絡。

2.4.3、斷開子設備子域(Remove Children)

  • 斷開子設備子域是1bit長度在bit7的位置。如果該bit的值是1,那麼該設備的子設備也離開網絡(leave)。

2.5、路由記錄命令(Route Record)

  • 路由記錄命令允許把一個單播數據包在通過網絡時採取的路由記錄在命令負載中,併發給目標設備。route record通常會在路由設備擁有到中心節點的路徑後,發送的第一條數據前會將route record發送給中心節點,使中心節點具有到該路由設備的路徑(中心節點的源路由表建立)
  • 路由記錄命令的負載必須按下圖格式編排。
    在這裏插入圖片描述

2.5.1、應答計數器域(Relay Count)

  • 包含路由記錄命令的應答列表域的應答數。發起設備把它初始化爲0,且每接收一個應答加1。

2.5.2、 應答列表域(Relay List)

  • 應答列表域是應答數據包的節點的2字節的短地址的列表。地址是最少的有意義的格式。在發送一個數據包之前接收節點附加它們的短地址給列表。

2.6、重新連接請求命令(Rejoin Request)

  • 重新連接請求命令允許設備重新連接它的網絡。通常是響應通信失敗才這麼做,例如當終端設備不能同它的發起父設備通信。
    在這裏插入圖片描述
  • capability information信息如下:
    在這裏插入圖片描述

2.7、重新連接請求命令(Rejoin response)

  • 設備發送重新連接響應命令來通知它的短地址的子設備和重新連接狀態。幀格式如下
    在這裏插入圖片描述

2.7.1、網絡地址域(Short Address)

  • 如果重新連接成功,那麼這個2字節域包含一個新的被指定的重新連接設備的短地址。如果重新連接沒成功,這個域包含廣播地址(0xffff)。

2.7.2、重新連接狀態域(Rejoin Status)

  • 0x00:表示rejoin請求成功

2.8、鏈路狀態命令

  • 連接狀態命令幀允許鄰居路由器之間通信,直到它們彼此的輸入鏈路成本。
  • 這就是我們常說的鄰居表相關信息。默認情況下,整個網絡中,會每個16s發一次鏈路狀態,來維護設備之間的鄰居表。
    在這裏插入圖片描述
    在這裏插入圖片描述

2.8.1、連接狀態命令選擇域(command option)

  • 命令選項域的條目數子域指明瞭鏈路狀態表中的鏈路狀態條目數。如果這是發送者鏈路狀態的第一幀,第一幀子域設置爲1,如果這是發送者鏈路狀態的最後幀,最後幀子域設置爲1。如果發送者鏈路狀態正好爲一幀,第一幀和最後幀位都應該設置爲1。
  • 如上圖,entry count的數目爲2,因此link status list就有兩個信息。

2.8.2、鏈路狀態表域

  • 鏈路狀態條目按網絡地址以遞增順序排序。如果所有的路由器鄰居不適合一個幀,應發送多個幀。當發送多個幀時,幀N 的鏈路狀態列表的最後網絡地址等於幀N+1 的鏈路狀態列表的第一個網絡地址。
    每個鏈路狀態條目包含一個路由器鄰居的網絡地址,首先是最低字節,其次是鏈路狀態字節。輸入消耗域包含設備估計的鄰居的鏈路消耗,這是1 至7 之間的一個值。輸出消耗域包括來自鄰居表的輸出消耗域的值。

2.9、網絡報告命令(Network report)

  • 網絡層報告命令允許設備報告網絡事件給協調器。可以報告的事件是無限電通信信道條件和PAN ID衝突。網絡層報告命令載荷格式如圖下圖所示。
    在這裏插入圖片描述

2.9.1、命令選擇域(command options)

  • 命令選擇區域包含了記錄信息計數器子域(Report information count)和記錄命令標識符(Report command identifier)

2.9.2、EPID域

  • EPID域包含64位EPID,識別報告設備是哪個網絡的成員

2.10、網絡更新命令(Network update)

  • 網絡更新命令允許由NIB中的nwkManagerAddr參數確定的設備廣播配置信息的改變到網絡中的所有設備。例如廣播網絡將改變短PAN標識符。

剩下的目前還沒碰到,有碰到再更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章