1.1解析ZigBee堆棧架構
ZigBee堆棧是在IEEE 802.15.4標准基礎上建立的,定義了協議的MAC和PHY層。ZigBee設備應該包括IEEE802.15.4(該標准定義了RF射頻以及與相鄰設備之間的通信)的PHY和MAC層,以及ZigBee堆棧層:網絡層(NWK)、應用層和安全服務提供層。圖1-1給出了這些組件的概況。
1.1.1ZigBee堆棧層
每個ZigBee設備都與一個特定模板有關,可能是公共模板或私有模板。這些模板定義了設備的應用環境、設備類型以及用於設備間通信的簇。公共模板可以確保不同供應商的設備在相同應用領域中的互操作性。
設備是由模板定義的,並以應用對象(Application Objects)的形式實現(見圖1-1)。每個應用對象通過一個端點連接到ZigBee堆棧的余下部分,它們都是器件中可尋址的組件 圖1-1 zigbe堆棧框架
從應用角度看,通信的本質就是端點到端點的連接(例如,一個帶開關組件的設備與帶一個或多個燈組件的遠端設備進行通信,目的是將這些燈點亮)。
端點之間的通信是通過稱之為簇的數據結構實現的。這些簇是應用對象之間共享信息所需的全部屬性的容器,在特殊應用中使用的簇在模板中有定義。圖1-1-2就是設備及其接口的一個例子:
圖1-1-2
每個接口都能接收(用於輸入)或發送(用於輸出)簇格式的數據。一共有二個特殊的端點,即端點0和端點255。端點0用於整個ZigBee設備的配置和管理。應用程序可以通過端點0與ZigBee堆棧的其它層通信,從而實現對這些層的初始化和配置。附屬在端點0的對象被稱為ZigBee設備對象(ZD0)。端點255用於向所有端點的廣播。端點241到254是保留端點。
所有端點都使用應用支持子層(APS)提供的服務。APS通過網絡層和安全服務提供層與端點相接,並為數據傳送、安全和綁定提供服務,因此能夠適配不同但兼容的設備,比如帶燈的開關。
APS使用網絡層(NWK)提供的服務。NWK負責設備到設備的通信,並負責網絡中設備初始化所包含的活動、消息路由和網絡發現。應用層可以通過ZigBee設備對象(ZD0)對網絡層參數進行配置和訪問。
1.1.2 802.15.4 MAC層
IEEE 802.15.4標准為低速率無線個人域網(LR-WPAN)定義了OSI模型開始的兩層。PHY層定義了無線射頻應該具備的特征,它支持二種不同的射頻信號,分別位於2450MHz波段和868/915MHz波段。2450MHz波段射頻可以提供250kbps的數據速率和16個不同的信道。868/915MHz波段中,868MHz支持1個數據速率為20kbps的信道,915MHz支持10個數據速率為40kbps的信道。
MAC層負責相鄰設備間的單跳數據通信。它負責建立與網絡的同步,支持關聯和去關聯以及MAC層安全:它能提供二個設備之間的可靠鏈接。
1.1.3 關於服務接入點
ZigBee堆棧的不同層與802.15.4 MAC通過服務接入點(SAP)進行通信。SAP是某一特定層提供的服務與上層之間的接口。
ZigBee堆棧的大多數層有兩個接口:數據實體接口和管理實體接口。數據實體接口的目標是向上層提供所需的常規數據服務。管理實體接口的目標是向上層提供訪問內部層參數、配置和管理數據的機制。
1.1.4 ZigBee的安全性
安全機制由安全服務提供層提供。然而值得注意的是,系統的整體安全性是在模板級定義的,這意味着模板應該定義某一特定網絡中應該實現何種類型的安全。
每一層(MAC、網絡或應用層)都能被保護,為了降低存儲要求,它們可以分享安全鑰匙。SSP是通過ZD0進行初始化和配置的,要求實現高級加密標准(AES)。ZigBee規范定義了信任中心的用途。信任中心是在網絡中分配安全鑰匙的一種令人信任的設備。
1.1.5 ZigBee堆棧容量和ZigBee設備
根據ZigBee堆棧規定的所有功能和支持,我們很容易推測ZigBee堆棧實現需要用到設備中的大量存儲器資源。 不過ZigBee規范定義了三種類型的設備,每種都有自己的功能要求:ZigBee協調器是啟動和配置網絡的一種設備。協調器可以保持間接尋址用的綁定表格,支持關聯,同時還能設計信任中心和執行其它活動。一個ZigBee網絡只允許有一個ZigBee協調器。
ZigBee路由器是一種支持關聯的設備,能夠將消息轉發到其它設備。ZigBee網格或樹型網絡可以有多個ZigBee路由器。ZigBee星型網絡不支持ZigBee路由器。
ZigBee端終設備可以執行它的相關功能,並使用ZigBee網絡到達其它需要與其通信的設備。它的存儲器容量要求最少。然而需要特別注意的是,網絡的特定架構會戲劇性地影響設備所需的資源。NWK支持的網絡拓撲有星型、樹型和網格型。在這幾種網絡拓撲中,星型網絡對資源的要求最低。
ZigBee堆棧應該可以提供ZigBee規范要求的所有功能,因此制造商的重點工作是開發實際的應用。為了更加容易實現,如果制造商使用某種公共模板,那么可用大多數現成的配置。如果沒有合適的公共模板,則可以充分利用其它模板已經做過的工作創建自己的模板。
ZigBee協議棧體系包含一系列的層元件,其中有IEEE802.15.4 2003標准中的MAC層和PHY層,當然也包括ZigBee組織設計的NWK層。每個層的元件有其特定的服務功能。本說明描述內容涉及ZigBee協議棧的各層元件,但側重於描述最具實際和理論探討性的APL應用層和NWK網絡層。圖1-1為ZigBee棧結構框圖。

2.APL應用層介紹
2.1.1應用層簡介
如圖2-1所示,ZigBee應用層由三個部分組成,APS子層、ZDO(包含ZDO管理平台)和制造商定義的應用對象。
圖2-1 zigbee協議堆棧分層結構
2.1.2應用層框架
ZigBee中的應用框架是為駐扎在ZigBee設備中的應用對象提供活動的環境。
最多可以定義240個相對獨立的應用程序對象,且任何一個對象的端點編號都是從1到240。此外還有兩個附加的終端節點,為了APSDE-SAP的使用:端點號0固定用於ZDO數據接口;另外一個端點255固定用於所有應用對象廣播數據的數據接口功能。端點241-254保留(留給未來擴展使用)。
2.1.2.1應用Profiles
應用profiles是一組統一的消息,消息格式和處理方法,允許開發者建立一個可以共同使用的分布式應用程序,這些應用是利用駐扎在獨立設備中的應用實體來實現的。這些應用profiles允許應用程序發送命令、請求數據和處理命令的請求。
2.1.2.2簇
簇標識符可用來區分不同的簇,簇標識符聯系着從設備流出和向設備流入的數據。在特殊的應用profiles范圍內,簇標識符是唯一的。
2.1.3ZigBee設備對象
ZigBee設備對象(ZDO),描述了一個基本的功能函數,這個功能在應用對象、設備profile和APS之間提供了一個接口。ZDO位於應用框架和應用支持子層之間。它滿足所有在ZigBee協議棧中應用操作的一般需要。此外ZDO還有以下作用:
(1)初始化應用支持子層(APS),網絡層(NWK),安全服務規范(SSS)。
(2)從終端應用集合中配置的信息來確定和執行安全管理、發現、網絡管理、以及綁定管理。
ZDO描述了應用框架層中應用對象的公用接口以及控制設備和應用對象的網絡功能。在終端節點0, ZDO提供了與協議棧中與低一層連接的接口,如果是數據則通過APSDE-SAP,如果是控制信息則通過APSME-SAP。ZDO的具體描述在2.5節。
2.1.3.1設備發現
設備發現是ZigBee設備為什么能發現其他設備的過程。這有兩種形式的設備發現請求:IEEE地址請求和網絡地址請求。IEEE地址請求是單播到一個特殊的設備且假定網絡地址已經知道。網絡地址請求是廣播且攜帶一個已知的IEEE地址作為負載。
2.1.3.2服務發現
服務發現是為什么一個已知設備被其他設備發現的能力的過程。服務發現通過在一個已知設備的每一個端點發送詢問或通過使用一個匹配服務(廣播或者單播)。服務發現方便定義和使用各種描述來概述一個設備的能力。
服務發現信息在網絡中也許被隱藏,在這種情況下,設備提供的特殊服務便可能不在操作發生的時候到達。
2.2 ZigBee應用支持子層APS
APS提供了這樣的接口:在NWK層和APL層之間,從ZDO到供應商的應用對象的通用服務集。這服務由兩個實體實現:APS數據實體(APSDE)和APS管理實體(APSME)。
(1)APSDE提供在同一個網絡中的兩個或者更多的應用實體之間的數據通信。通過APSDE服務接入點(APSDE-SAP);
(2)APSME提供多種服務給應用對象,這些服務包含安全服務和綁定設備,並維護管理對象的數據庫,也就是我們常說的AIB。通過APSME服務接入點(APSME-SAP)。
2.2.1 范圍
這一小節描述了應用層部分提供的服務規范和生產商定義的應用對象與ZigBee設備對象之間的接口。規范定義了允許應用對象傳輸數據的數據服務和提供綁定機制的管理服務。另外,它還定義了應用支持子層的幀格式和幀類型。如圖2-2

圖2-2 zigbee幀格式
2.2.2 目的
這小節的目的是定義ZigBee應用支持子層的功能。該功能建立在兩個基礎之上,一是正確運行ZigBee網絡層的驅動功能,二是制造商定義的應用對象所需要的功能。
2.2.3 應用支持子層簡介
應用支持子層給網絡層和應用層通過ZigBee設備對象和制造商定義的應用對象使用的一組服務提供了接口,該接口提供了ZigBee設備對象和制造商定義的應用對象使用的一組服務。通過兩個實體提供這些服務:數據服務和管理服務。APS數據實體(APSDE)通過與之連接的SAP,即APSDE-SAP提供數據傳輸服務。APS管理實體(APSME)通過與之連接的SAP,即APSME-SAP提供管理服務,並且維護一個管理實體數據庫,即APS信息庫(NIB)。
2.2.3.1 應用支持子層的數據實體(APSDE)
APSDE向網絡層提供數據服務,並且為ZDO和應用對象提供服務,完成兩個或多個設備之間傳輸應用層PDU。這些設備本身必須在同一個網絡。
APSDU將提供如下服務:
生成應用層的協議數據單元(APDU):APSDE將應用層協議數據單元(PDU)加上適當的協議幀頭生成應用子層的協議數據單元(PDU)。
綁定:兩個設備服務和需求相匹配的能力。一旦兩個設備綁定了,APSDE將可以把從一個綁定設備接受到的信息傳送給另一個設備。
組地址過濾:提供了基於終點組成員的過濾組地址信息的能力。
可靠傳輸:比從網絡層僅僅通過端對端的傳輸增加了可靠性
拒絕重復:提供傳送的信息不會被重復接收
支持大批量的傳輸:提供兩個設備間順序傳輸大批量的數據的能力。
碎片:當消息的長度大於單個網絡層幀時,可以分割並重組消息。
流控制:APS提供避免傳輸消息淹沒接收者的措施。
阻塞控制:APS層使用“盡力”原則,提供措施避免傳輸消息淹沒中間網絡。
2.2.3.2 應用支持子層的管理實體(APSME)
APSME應提供管理服務支持應用程序符合堆棧。
APSME應具有基於兩個設備的服務和需求向匹配的能力。該服務稱為綁定服務,APSME應具有能力來構建和維護綁定表來存儲這些信息。
另外,APSME應提供如下服務:
1 應用層信息庫管理:讀取與設置設備應用層信息庫屬性的能力
2 安全:與其他設備通過使用安全密鑰建立可信關系的能力
2.2.4 服務規范
應用支持子層為上層實體(NHLE)與網絡層提供了一個接口。APS層理論上包含一個管理實體稱為APS層,管理實體(APSME)。這個實體通過調用子層的管理函數來提供服務接口。APSME還負責維護一個關於APS子層管理實體的數據庫。這是一個關於APS子層信息庫(AIB)的數據庫.圖2-3描述了APS子層的構成和接口。

圖2-3 應用支持之層參考模型
APS子層通過兩個服務指針(SAPs)提供兩種服務。APS數據服務通過APS子層數據實體服務指針SAP(APSDE-SAP),APS管理服務通過APS則層管理實體服務指針SAP(APSME-SAP).這兩個服務通過NLDE-SAP和NLME-SAP 接口 (見3.2小節)提供了NHLE和網絡層之間的接口。網絡層和APS子層之間的NLME-SAP接口只支持NLME-GET 和 NLME-SET原語,其他的NLME-SAP原語只可以通過ZDO實現(見2.5小節)。除了這些外部接口以外,在APSME和APSDE之間還有一個內部的接口,支持APSME使用APS數據服務。
2.2.4.1 APS數據服務
APS子層數據實體SAP(APSDE-SAP)支持在兩個同等的應用實體之間傳輸應用協議數據單元。表2-1列出了APSDE-SAP支持的原語。每一個原語將在下面的小節論述。
2.2.4.1.1 APSDE-DATA.request
該原語請求從本地NHLE向一個同等的NHLE實體傳輸NHLE PDU(ASDU)。
2.2.4.1.1.1 服務原語的語法
該原語的語法如下:
APSDE-DATA_request
{
DstAddrMode
DSTAddress
DstEndpoint
Profiled
Clusterld
SrcEndpoint
asduLength
asdu
TxOpionts
RadiusCounter
}
表2.2詳細說明了APSDE-DATA.request原語的參數。
2.2.4.1.1.2 產生
當有一個數據PDU(ASDU)由本地NHLE向一個同等的NHLE傳輸時,由本地NHLE生成該原語。
2.2.4.1.1.3 2
當APS子層實體接收到該原語時,便開始傳輸提供的ASDU。
如果DstAddrMode參數為0x00,並且接收該原語的設備的APSDE支持綁定表,那么在綁定表中根據參數SrcEndpoint和ClusterId所指定的endpoint和cluster identifiers尋找相關聯的綁定表入口。如果沒有綁定表入口,APSDE將發送狀態參數為NO_BOUND_DEVICE 的語APSDE-DATA.confirm原語。如果找到了一個或多個綁定表入口,APSDE將構建APDU,其endpoint信息從綁定表入口獲得,當通過網絡層傳輸信息幀時,其destination address信息從綁定表入口獲得。如果存在多於一個綁定表入口,當接收到相應的NLDE-DATA.confirm原語,按上面描述的,APSDE將構建並向下一個綁定表入口傳輸APDU,直到沒有綁定表入口剩余。如果接收到該原語設備的APSDE不支持綁定表,那么APSDE將發送狀態參數為NOT_SUPPORTED的APSDE-DATA.confirm原語。
如果DstAddrMode參數為0x02,DstAddress參數包含擴展的64位IEEE地址,首次必須使用NIB(見表2.24)屬性中的nwkAddressMap映射相應的16位網絡地址。如果找不到相應的16位網絡地址,那么APSDE將發送狀態參數為NO_SHORT_ADDRESS的APSDE-DATA.confirm原語。如果找到了相應的16位網絡地址,其值將被用在NLDE-DATA.request原語中,參數DstEndpoint將被置在作為結果的APDU中。如果DstAddrMode參數為0x01,表明為群地址,參數DstAddress將被解釋為16位的全地址。這個地址將被放置在APS頭中的群地址域,參數DstEndpoint將被忽略,APS頭中的destination endpoint域將被省略。APS頭中的幀控制域的delivery mode子域值在這種情況下為0x03.
如果DstAddrMode參數為0x02,DstAddress參數包含16位的網絡地址,並且提供參數DstEndpoint,當目的網絡地址用於應用響應,並且網絡地址部位后面的數據傳輸請求保留時,上層只能使用DstAddrMode為0x02.
應用程序可以通過使用參數RadiusCounter來限制在網絡中傳輸數據幀的跳數。如果參數RadiusCounter為0x00,網絡層在網絡中傳輸信息幀沒有約束。如果參數RadiusCounter為非零,則網絡層將允許信息幀在網絡中傳輸存在最多RadiusCounter跳。
如果DstAddrMode參數為0x01,表明為群地址,或者DstAddrMode參數為0x00,並且相應的綁定表入口包含哪一個群地址,那么APSME將檢查NIB(見表3.42)中的屬性nwkUseMulticast值。如果屬性值為FALSE,那么輸出幀的幀控制域中的delivery mode子域設為0b11,16位的目的群地址將設置輸出幀APS頭中的group address域,該幀將以廣播方式傳輸。傳輸該幀的原語NLDE-DATA.request的DstAddr參數設置為值0xfffd,廣播給所有RxOnWhenIdle=TRUE的設備。如果屬性nwkUseMulticast值為TRUE,那么該幀將使用網絡層多點傳送方式傳輸,群地址不用放置在輸出幀的APS頭中。
如果參數TxOptions指定使用安全傳輸,則APS子層將使用安全服務為ASDU提供安全(見4.2.4小節)。如果安全處理失敗,則APSDE發送狀態參數為SECURITY_FAIL的APSDE-DATA.confirm原語。
APSDE使用NLDE-DATA.request原語向網絡層傳輸構造幀。當接收到NLDE-DATA.confirm原語,APSDE則發送APSDE-DATA.confirm原語,其狀態參數值域從網絡層接收到的一致。
APSDE通過每次發送使NLDE-DATA.request原語的DiscoverRoute參數值為0x01確保網絡層中的路由發現始終激活。
如果傳輸的ASDU大於合適的單個幀,當沒有請求確認傳輸或者在TxOptions域的fragmentation permitted標志位設為0時,則放棄傳輸ASDU,APSDE將發送狀態參數為INVALID_REQUEST的APSDE-DATA.confirm原語。
如果傳輸的ASDU大於合適的單個幀,當請求確認傳輸並且在TxOptions域的fragmentation permitted標志位設為1時,ASDU將按照2.2.8.3.5小節所述分裂為多個APDU。如果請求傳輸和安全處理,那么每一個APDU都要進行處理。注意不要使用分裂處理,除非相應的上層文件或者相互明確表明幀的傳輸允許分裂處理,並且說明了塊的數量和總共傳輸的大小。
2.2.4.1.2 APSDE-DATA.confirm
該原語報告從本地NHLE向一個同等的NHLE傳輸PDU數據的結果。
2.2.4.1.2.1 服務原語的語法
該原語的語法如下:
APSDE-DATA.confirm {
DstAddMode
DstAddress
DstEndpoint
SrcEndpoint
Status
}
表2.3詳細介紹了APSDE-DATA.confirm原語的參數。
2.2.4.1.2.2 產生
該原語有本地APS子層產生作為對APSDE-DATA.request原語的響應。該原語返回的狀態參數值為SUCCESS,表明請求傳輸成功,或者為錯誤代碼NO_SHORT_ADDRESS , NO_BOUND_DEVICE 或SECURITY_FAIL或者為任何NLDE-DATA.confirm原語返回的狀態值。這些狀態值的路由在2.2.4.1.2小節中進行了詳細的描述。
2.2.4.1.2.3 接收
接收到該原語,發起設備的上層被通報請求傳輸的結果。如果傳輸成功,狀態參數值設置為SUCCESS。否則,狀態參數表明錯誤。
2.2.4.1.3 APSDE-DATA.indication
該原語表明一個PDU數據向本地應用實體的APS子層傳輸。
2.2.4.1.3.1 服務原語的語法
該原語的語法如下:
APSDE-DATA.indication
{
DstAddrMode
DSTAddress
DstEndpoint
SrcAddrMode
SARCAddress
SrcEndpoint
Profield
Clusterld
asduLength
asdu
WasBroadcast
SecurityStatus
LinkQuality
}
表2.4詳細描述了APSDE-DATA.indication原語的參數。
2.2.4.1.3.2 產生
該原語由APS子層產生,當從本地網絡層實體接收到適當地址的數據幀時,APS子層向上層發送該原語。如果ASDU頭的幀控制域表明該幀安全保護,則按照4.2.4小節的描述進行安全處理。
該原語由APS子層產生,當通過NLDE-DATA.indication原語從網絡層接收到適當地址的數據幀時,發送給上層實體。如果APDU頭的幀控制域表明該幀安全保護,則按照4.2.4小節的描述進行安全處理。
接收到的幀的源地址必須通過NIB(見表2.24)中的屬性nwkAddressMap映射為相應的擴展的64位IEEE地址。如果能找到相應的64為IEEE地址,則APSDE發送該原語,其參數SrcAddrMode設為0x02,SrcAddress參數設為相應的64位IEEE地址。如果找不到相應的64位IEEE地址,APSDE將發送該原語,其參數SrcAddrMode設為0x01,參數SrcAddress設為接收幀包含的16位源地址。
2.2.4.1.3.3 接收
接收到該原語,上層被通報有數據到達該設備。
2.2.4.2 APS管理服務
APS管理實體SAP(APSME-SAP)支持上層和APSME層之間傳輸管理命令。表2.5總結了APSME通過APSME-SAP接口支持的原語。各原語的詳細描述見下面小節。
2.2.4.3 綁定原語
這組原語定義了設備上層如何將一個綁定記錄加入(提交)其本地綁定表或將綁定記錄從本地綁定表中移除。
只有支持綁定表或者綁定表存儲器的設備支持這些原語。如果其他設備從上層接收到這些原語,那么這些原語將被忽略。
2.2.4.3.1 APSME-BIND.request
該原語允許支持綁定的設備上層通過在本地綁定表中建立一個入口請求將兩個設備綁定。
2.2.4.6.1.1 服務原語的語法
該原語的語法如下:
APSME-BIND.request {
SrcAddr
SrcEndpoint
Clusterld
DstAddrMode
DstAddr
DstEndpoint
}
表2.6詳細描述了APSME-BIND.request原語的參數。
2.2.4.3.1.2 產生
該原語由上層產生發送給APS子層,在支持綁定表的設備上發起綁定操作。
2.2.4.3.1.3 接收
一旦被當前沒有加入到網絡或不支持綁定表的設備接收到該原語,那么APSME將發送狀態參數為ILLEGAL_REQUEST的APSME-BIND.confirm原語。
如果支持綁定表的設備的APS子層從NHLE接收該原語,APSME將試圖直接從其綁定表中建立指定的入口。如果可以建立入口,APSME將發送狀態參數為SUCCESS的APSME-BIND.confirm原語。如果因為其綁定表缺乏能力而無法建立入口,APSME將發送狀態參數為TABLE_FULL的APSME-BIND.confirm原語。
2.2.4.3.2 APSME-BIND.confirm
該原語使設備得到其上層請求綁定兩個設備的結果。
2.2.4.3.2.1 服務原語的語法
該原語的語法如下:
APSME-BIND.confirm {
Status
SrcAddr
SrcEndpoint
Clusterld
DstAddrMode
DstAddr
DstEndpoint
}
表2.7詳細描述了APSME-BIND.confirm原語的語法。
2.2.4.3.2.2 產生
該原語由APSME產生作為APSME-BIND.request原語的響應發送給NHLE。如果請求成功,那么狀態參數將表明一個成功的綁定請求。否則,狀態參數則為錯誤碼ILLEGAL_DEVICE、 ILLEGAL_REQUEST 或TABLE_FULL。
2.2.4.3.2.3 接收
接收到該原語,上層就被通知其綁定請求的結果。如果綁定請求成功,狀態參數設置為SUCCESS。否則,狀態參數表明錯誤。
2.2.4.3.3 APSME-UNBIND.request
該原語允許支持綁定的設備上層通過在本地綁定表中移除一個入口請求將兩個設備解除綁定。
2.2.4.3.3.1 服務原語的語法:
APSME-UNBIND.request {
SrcAddr
SrcEndpoint
Clusterld
DstAddrMode
DstAddr
DstEndpoint
}
表2.8詳細描述了APSME-UNBIND.request原語的參數。
2.2.4.3.3.2 產生
該原語有上層產生發送給APS子層,在支持綁定表的設備上發起解除綁定操作。
2.2.4.3.3.3 接收
一旦被當前沒有加入到網絡或不支持綁定表的設備接收到該原語,那么APSME將發送狀態參數為ILLEGAL_REQUEST的APSME-UNBIND.confirm原語。
如果支持綁定表的設備的APS子層從NHLE接收該原語,APSME將在綁定表中查找指定的入口。如果入口存在,APSME將移除這個入口並發送狀態參數為SUCCESS的APSME-UNBIND.confirm原語(見2.2.4.3.4小節)。如果沒有找到入口,APSME將發送狀態參數為INVALID_BINDING的APSME-UNBIND.confirm原語。如果該設備不在網絡中,APSME將發送狀態參數為ILLEGAL_DEVICE的APSME-BIND.confirm原語。
2.2.4.3.4 APSME-UNBIND.confirm
該原語使設備得到其上層請求解除兩個設備綁定的結果。
2.2.4.3.4.1 服務原語的語法
該原語的語法如下:
APSME-UNBIND.confirm {
Status
SrcAddr
SrcEndpoint
Clusterld
DstAddrMode
DstAddr
DstEndpoint
}
表2.9詳細描述了APSME-UNBIND.confirm原語的語法。
2.2.4.3.4.2 產生
該原語由APSME產生作為APSME-UNBIND.request原語的響應發送給NHLE。如果請求成功,那么狀態參數將表明一個成功的解除綁定請求。否則,狀態參數則為錯誤碼ILLEGAL_DEVICE、 ILLEGAL_REQUEST 或INVALID_BINDING。
2.2.4.3.4.3 接收
接收到該原語,上層就被通知其解除綁定請求的結果。如果解除綁定請求成功,狀態參數設置為SUCCESS。否則,狀態參數表明錯誤。
2.2.4.4 信息庫的維護
這組原語定義了設備上層如何讀取和寫入AIB中的屬性。
2.2.4.4.1 APSME-GET.request
該原語允許設備上層從AIB中讀取屬性值。
2.2.4.4.1.1 服務原語的語法
該原語的語法如下:
APSME-GET.request {
AIBAttribute
}
表2.10描述了該原語的參數。
2.2.4.4.1.2 產生
該原語由上層產生並發送給APSME來讀取AIB中的屬性。
2.2.4.4.1.3 接收
接收到該原語,APSME試圖從數據庫中得到AIB屬性。如果在數據庫中沒有相應的AIB屬性表標識符,APSME將發送狀態參數為UNSUPPORTED_ATTRIBUTE的APSME-GET.confirm原語。
如果成功得到了AIB屬性,APSME將發送狀態參數為SUCCESS,包含AIB屬性標識符和屬性值的APSME-GET.confirm原語。
2.2.4.4.2 APSME-GET.confirm
該原語向上層報告從AIB中讀取屬性值的結果。
2.2.4.4.2.1 服務原語的語法
該原語的語法如下:
APSME-GET.confirm {
Status
AIBAttribute
AIBAttributeLength
AIBAttributeValue
}
表2.11描述了該原語的參數。
2.2.4.4.2.2 產生
該原語由APSME產生,發送給上層作為對APSME-GET.request原語的響應。該原語返回狀態SUCCESS,表明請求讀取AIB屬性請求成功,或者返回錯誤碼UNSUPPORTED_ATTRIBUTE.這些狀態在2.2.4.4.1.3小節進行了描述。
2.2.4.4.2.3 接收
接收到該原語,上層得知讀取AIB屬性請求的結果。如果讀取AIB屬性請求成功,狀態參數設置為SUCCESS。否則,狀態參數表明錯誤。
2.2.4.4.3 ASPME-SET.request
該原語允許設備上層將屬性值寫入AIB。
2.2.4.4.3.1 服務原語的語法
該原語的語法如下:
APSME-SET.request {
AIBAttribute
AIBAttributeLength
AIBAttributeValue
}
表2.12描述了該原語的參數。
2.2.4.4.3.2 產生
該原語由上層產生並發送給APSME在AIB中寫入一個屬性值。
2.2.4.4.3.3 接收
接收到該原語,APSME試圖將給定的數據庫中的值寫入AIB屬性。如果在數據庫中沒有AIB屬性參數指定的屬性,APSME將發送狀態參數為UNSUPPORTED_ATTRIBUTE的APSME-SET.confirm原語。如果AIB屬性值參數給定的值超過了有效的屬性范圍,APSME將發送狀態參數為INVALID_PARAMETER的APSME-SET.confirm原語。
如果成功寫入了AIB屬性,APSME將發送狀態參數為SUCCESS的APSME-SET.confirm原語。
2.2.4.4.4 APSME-SET.confirm
該原語向上層報告向AIB屬性中寫入屬性值的結果。
2.2.4.4.4.1 服務原語的語法
該原語的語法如下:
APSME-SET.confirm {
Status
AIBAttribute
}
表2.13描述了該原語的參數。
2.2.4.4.4.2 產生
該原語由APSME產生,發送給上層作為對APSME-SET.request原語的響應。該原語返回狀態SUCCESS,表明將屬性值寫入AIB屬性的請求成功,或者返回錯誤碼INVALID_PARAMETER或UNSUPPORTED_ATTRIBUTE.這些狀態在2.2.4.4.3.3小節進行了描述。
2.2.4.4.4.3 接收
接收到該原語,上層得知寫入AIB屬性請求的結果。如果寫入AIB屬性請求成功,狀態參數設置為SUCCESS。否則,狀態參數表明錯誤。
2.2.4.5 組管理
這組原語允許上層在當前設備中通過在組表中添加和移除入口來管理每個端點的組關系。
2.2.4.5.1 APSME-ADD-GROUP.request
該原語允許上層請求一個特定的組的組關系加入到特定的端點。
2.2.4.5.1.1 服務原語的語法
該原語的語法如下:
APSME-ADD-GROUP.request {
GroupAddress
Endpoint
}
表2.14描述了該原語的參數。
2.2.4.5.1.2 產生
當上層要將一個特定組的關系加入一個端點時產生該原語,設置了組地址的幀將被傳送給該端點。
2.2.4.5.1.3 接收
如果接收到該原語,其GroupAddress參數的值超出了有效范圍,APSME將向上層發送狀態參數為INVALID_PARAMETER的APSME-ADD-GROUP.condirm原語。同樣,如果Endpoint參數值為0x00或當前設備的其它沒有執行的端點,APSME將發送狀態參數為INVALID_PARAMETER的APSME-ADD-GRROUP.confirm原語。
完成上述參數檢測后,APSME將檢查組表中是否存在包含給定參數GroupAddress和Endpoint的入口。如果該入口已存在於組表中,APSME將向上層發送狀態參數為SUCCESS的APSME-ADD-GROUP.confirm原語。如果沒有該入口,表中還有入口空間,APSME將在組表中建立一個新的入口,其參數為給定的GroupAddress和Endpoint值。入口加入到APS組表后,APSME將發送NLME-SET.request原語來確保相應的網絡層組表中的nwkGroupIDTable屬性與APS子層中的組表包含的組地址列表相一致。一旦兩個表一致了,APSME將向上層發送狀態參數為SUCCESS的APSME-ADD-GROUP.confirm原語。如果沒有給定參數GroupAddress和Endpoint的入口並且組表中沒有建立另一個入口的空間,APSME將向上層發送狀態參數為TABLE_FULL的APSME-ADD-GROUP.confirm原語。
2.2.4.5.2 APSME-ADD-GROUP.confirm
該原語使得設備得知其將一個組添加到端點的請求結果。
2.2.4.5.2.1 服務原語的語法
該原語的語法如下:
APSME-ADD-GROUP.confirm {
Status
GroupAddress
Endpoint
}
表2.15描述了該原語的參數。
2.2.4.5.2.2 產生
該原語由APSME產生並發送給上層作為對APSME-ADD-GROUP.request原語的響應。如果APSME-ADD-GROUP.request成功,那么狀態參數值為SUCCESS。如果APSME-ADD-GROUP.request中的參數為無效值,那么狀態產生設置為INVALID_PARAMETER。如果APSME試圖加入一個組表入口,但表中已沒有加入其它入口的空間,狀態參數設置為TABLE_FULL。
2.2.4.5.2.3 接收
上層接收到該原語,則得知添加組請求的結果。狀態參數值如上面所述。
2.2.4.5.3 APSME-REMOVE-GROUP.request
該原語允許上層請求將一個特定的組的組關系從特定的端點中移除。
2.2.4.5.3.1 服務原語的語法
該原語的語法如下:
APSME-REMOVE-GROUP.request {
GroupAddress
Endpoint
}
表2.16描述了該原語的參數。
2.2.4.5.3.2 產生
當上層要將一個特定組的關系從一個端點中移除時產生該原語,設置了組地址的幀將不被傳送給該端點。
2.2.4.5.3.3 接收
如果接收到該原語,其GroupAddress參數的值超出了有效范圍,APSME將向上層發送狀態參數為INVALID_PARAMETER的APSME-REMOVE-GROUP.condirm原語。同樣,如果Endpoint參數值為0x00或當前設備的其它沒有執行的端點,APSME將發送狀態參數為INVALID_PARAMETER的APSME-REMOVE-GRROUP.confirm原語。
完成上述參數檢測后,APSME將檢查組表中是否存在包含給定參數GroupAddress和Endpoint的入口。如果該入口已存在於組表中,該入口將被移除。APSME將發送NLME-SET.request原語來確保相應的網絡層組表中的nwkGroupIDTable屬性與APS子層中的組表包含的組地址列表相一致。一旦兩個表一致了,APSME將向上層發送狀態參數為SUCCESS的APSME-REMOVE-GROUP.confirm原語。如果沒有該入口,APSME將向上層發送狀態參數為SUCCESS的APSME-REMOVE-GROUP.confirm原語。
2.2.4.5.4 APSME-REMOVE-GROUP.confirm
該原語使得設備得知其將一個組從端點中移除的請求結果。
2.2.4.5.4.1 服務原語的語法
該原語的語法如下:
APSME-REMOVE-GROUP.confirm {
Status
GroupAddress
Endpoint
}
表2.17描述了該原語的參數。
2.2.4.5.4.2 產生
該原語由APSME產生並發送給上層作為對APSME-REMOVE-GROUP.request原語的響應。如果APSME-REMOVE-GROUP.request成功,那么狀態參數值為SUCCESS。如果APSME-REMOVE-GROUP.request中有參數為無效值,那么狀態產生設置為INVALID_PARAMETER。
2.2.4.5.4.3 接收
上層接收到該原語,則得知移除組請求的結果。狀態參數值如上面所述。
2.2.4.5.5 APSME-REMOVE-ALL-GROUP.request
當上層想要將所有組中的關系從端點中移除時產生該原語,因此,沒有組地址的幀傳送給端點。
2.2.4.5.5.1 服務原語的語法
該原語的語法如下:
APSME-REMOVE-ALL-GROUPS.request {
Endpoint
}
表2.18描述了該原語的參數。
2.2.4.5.5.2 產生
當上層想要將所有組中的關系從端點中移除時產生該原語,因此,沒有組地址的幀傳送給端點。
2.2.4.5.5.3 接收
接收到該原語,如果Endpoint參數值為0x00或當前設備的其它沒有執行的端點,APSME將發送狀態參數為INVALID_PARAMETER的APSME-REMOVE-ALL-GRROUP.confirm原語。
完成上述參數Endpoint檢測后,APSME將從組表中移除所有與該端點相關的入口。APSME將發送NLME-SET.request原語來確保相應的網絡層組表中的nwkGroupIDTable屬性與APS子層中的組表包含的組地址列表相一致。一旦兩個表一致了,APSME將向上層發送狀態參數為SUCCESS的APSME-REMOVE-ALL-GROUP.confirm原語。
2.2.4.5.6 APSME-REMOVE-ALL-GROUP.confirm
該原語使得設備得知其從一個端點中移除所有組的請求結果。
2.2.4.5.6.1 服務原語的語法
該原語的語法如下:
表2.19描述了該原語的參數。
2.2.4.5.6.2 產生
該原語由APSME產生並發送給上層作為對APSME-REMOVE-ALL-GROUP.request原語的響應。如果APSME-REMOVE-ALL-GROUP.request成功,那么狀態參數值為SUCCESS。如果APSME-REMOVE-ALL-GROUP.request中有參數為無效值,那么狀態產生設置為INVALID_PARAMETER。
2.2.4.5.6.3 接收
上層接收到該原語,則得知從端點中移除所有組請求的結果。狀態參數值如上面所述。
2.2.5 幀格式
這小節描述了APS層的幀格式(APDU)。每一個APS幀包含如下的基本組成:
1、APS頭,由幀控制和地址信息組成。
2、APS有效載荷,變長,包含幀類型指定的信息。
APS子層的幀作為有序域按照指定的順序進行描述。這小節的所有幀格式都按照網絡層的傳輸順序進行描述,從左至右,最左的位最先傳輸。每個域中的長度為k位都從0(最左、最低)至k-1(最右、最高)排號。域中長度小於一個字節的值都按照從最低位至最高位的順序向網絡層傳輸。
2.2.5.1 常規的APDU幀格式
APS幀格式由一個APS幀頭和APS有效載荷組成。APS幀頭域有固定的順序,在幀中可以不包含地址域。常規的APS幀格式如表2.2所示。
2.2.5.1.1 幀控制域
幀控制域8比特長,包含定義的幀類型、地址域和其它控制標志信息。幀控制域如表2.3所示的格式。
2.2.5.1.1.1 幀類型子域
幀類型子域為2比特長,可設置為表2.20所列出的值。
2.2.5.1.1.2 傳輸模式子域
傳輸模式子域2比特長,可設置為表2.21所列出的值。
如果值為0b00,幀將被發送給接收設備給定的端點。
如果值為0b10,消息為廣播發送。在這種情況下,消息將被發送給所選擇的使用的廣播地址的所有設備和所有端點,見3.7.5小節。
如果值為0b11,將使用組地址,幀只被發送給APS頭中組地址域所確定的在組中表示組成員的設備端點。注意,源設備的其它端點可能是輸出幀組地址的成員。幀將被發送給指定組的成員,包括源設備的其它端點。
2.2.5.1.1.3 安全子域
安全服務提供者(見4章)管理安全子域。
2.2.5.1.1.4 確認請求子域
確認請求子域1比特長,指定了當前的傳輸是否要求接收者接收到幀后發送確認幀。如果該子域設置為1,確定接收的為有效幀后,接收者需要構建並向發起者發送確認幀。如果該子域為0,確定接收的為有效幀后,接收者不向發起者發送確認幀。
2.2.5.1.1.5 延長頭存在
延長頭存在子域為1比特長,指定在幀中是否包含延長頭。如果該子域設置為1,那么延長頭包含在幀中。否則,不包含在幀中。
2.2.5.1.2 目的端點域
目的端點8比特長,指定幀的最終接收端點。如果幀控制域中的傳輸模式子域為0b00(標准單播發送),那么幀中包含該域。
目的端點值為0x00,該幀的目的地址為每個設備的ZOD。目的端點值為0x01-0xf0,幀目的地址為操作的端點。目的端點值為0xff,幀目的地址為除了端點0x00的所有活躍的端點。端點(0xf1-0xfe)保留。
2.2.5.1.3 組地址域
組地址域16比特長,只有當幀控制中的傳輸模式子域為0b11時存在該域。在這種情況下,目的端點不存在。如果幀中的APS頭包含組地址域,幀將被發送設備中組表中由組地址域確定的所有端點。
設備的nwkUseMukticast設置為TRUE,輸出幀不設置組地址域。
2.2.5.1.4 簇標識符域
簇標識符16比特長,指定由請求中SrcAddr所指示的用於設備綁定操作的簇標識符。幀控制域的幀類型子域指定簇標識符域是否存在。該域只用於數據幀,不用於命令幀。
2.2.5.1.5 Profile標識符域
Profile標識符2字節長,指定在傳輸幀的過程中,用於設備過濾消息和幀的Profile標識符。該域之用於數據幀和確認鎮。
2.2.5.1.6 源端點域
源端點域8比特長,指定發起者幀的端點。源端點值為0x00,表明從每個設備的ZDO發起。源端點值為0x01-0xf0,表明幀從應用操作的端點發起。其它的端點(0xf1-0xfe)保留。
2.2.5.1.7 APS計數器
該域8比特長,用於防止接收重復幀,如2.2.8.4.2小節。每新傳輸一次該值加一。
2.2.5.1.8 延長頭子域
延長頭子域包含深層子域,格式如表2.4所示。
2.2.5.1.8.1延長幀控制域
延長幀控制域長8比特,包含使用分裂的定義信息。延長幀控制域的格式如表2.5所示。
分裂子域2比特長,值為表2.22所列出的任意值。
2.2.5.1.8.2 塊序號
塊序號域為1字節長,用於如下所述的分裂控制:如果分裂子域的設置表示不是分裂傳輸,那么子域中不包含塊序號域。如果分裂域設置為01,那么子域中包含塊序號域,並且該域表示在分裂傳輸中塊的序號。如果分裂域設置為10,那么子域中包含塊序號域,並且表示當前幀傳輸的塊序號,用值0x02表示第二個分裂塊,0x03表示第三個,等等。
2.2.5.1.8.3 應答位域
應答位域為1字節長,用於2.2.8.4.3小節所描述的APS確認,表示成功傳輸哪個ASDU分裂塊。該域只有在幀類型域表明為確認幀並且分裂子域表明是分裂傳輸使才出現。
2.2.5.1.9 幀有效載荷域
幀有效載荷域為變長,包含各個幀類型指定的信息。
2.2.5.2 個別幀類型的格式
定義了三種幀類型:數據、APS命令和確認幀。每一個幀類型都在下面的小節進行討論。
2.2.5.2.1 數據幀格式
數據幀的格式如表2.6所示。
數據幀中域的順序如表2.2所示的APS幀順序。
2.2.5.2.1.1 數據幀APS幀頭域
數據幀的APS幀頭域包含幀控制、簇標識符、Profile標識符、源端點和APS計數器域。數據幀是否包含目的端點和延長頭域則各自按照幀控制域中的傳輸模式和延長頭存在域的規定。
在幀控制域中,幀類型應包含如表2.20所示的表示數據幀的值。源端點存在域設置為1.所有其它域根據使用數據幀的意圖設置。
2.2.5.2.1.2 數據有效載荷域
對於輸出的數據幀,數據有效載荷應包含部分或全部上層請求APS數據服務傳輸的字節序列。對於輸入數據幀,數據有效載荷域應包含APS數據服務接收到的轉發給目的設備或如果協調器是其中的目的地發送給上層字節序列。
2.2.5.2.2 APS命令幀格式
APS命令幀格式如表2.7所示。
APS命令幀中域的順序如表2.7所示的APS幀順序。
2.2.5.2.2.1 APS命令你幀APS頭域
APS命令幀的APS頭域應包含幀控制和APS計數器域。如果幀控制域中的傳輸模式子域表明為組地址,則幀中應包含組地址域。在該版本的規范中,APS命令幀不能分裂,並且沒有延長頭域。
在幀控制域中,幀類型子域應包含表明是APS命令幀的值,如表2.20所示。APS命令有效載荷應根據使用APS命令幀的意圖進行適當的設置。
2.2.5.2.2.2 APS命令標識符域
APS命令標識符域表明正在使用APS命令。
2.2.5.2.2.3 APS命令有效載荷域
APS命令幀的APS命令有效載荷域應包含APS命令本身。
2.2.5.2.3 確認幀格式
確認幀格式如表2.8所示。
確認幀中域的順序應與表2.8所示的APS幀中域順序一致。
2.2.5.2.3.1 確認幀APS頭域
確認幀的APS頭域應包含幀控制、簇標識符、Profile標識符和APS計數器。源和目的端點都應包含在確認幀中。是否包含延長頭域則按照幀控制域中延長頭存在子域的要求設備。
在幀控制域中,幀類型子域應包含如表2020所示的表示為確認幀的值。延長頭存在域應包含同樣表明為確認幀的值。所有其它子域則根據使用確認幀的意圖進行適當的設置。
確認幀源端點的值反映了要求進行確認的幀的目的端點的值。同樣,確認幀目的端點的值反映了要求進行確認的幀的源端點的值。
APS計數器域包含與確認的幀相一致的值。
如果延長頭域存在,延長的幀控制域的分裂域應包含域確認的幀一致的值。如果該幀使用分裂,那么應包含塊序號和請求域。如果傳輸的使分裂的第一個幀,那么塊序號應為0,否則應包含域確認的幀一致的值。
2.2.6 命令幀
這部分規范沒有命令幀。APS命令幀和原語的相關安全問題見4.5.9小節。
2.2.7 常數和PIB屬性
2.2.7.1 APS常數
APS子層常量的定義與描述見表2.23.
2.2.7.2 APS信息數據庫
APS信息數據庫包含管理設備APS層需要的屬性。AIB屬性如表2.24所示。AIB還包含一些管理安全服務的屬性。這些屬性在4.5.10小節列出。
2.2.8 功能描述
2.3ZigBee應用程序框架
2.3.1建立一個ZigBee Profile
在ZigBee網絡中兩個設備之間通信的關鍵是統一一個profile。
Profile的一個例子就是智能家居。這個ZigBee profile允許一系列設備類型交換控制消息來構造一個無線智能家居應用。這些設備被設計成很好的交換已知信息來實現這些控制,如控制燈的開和關,發送一個亮度傳感器測量給一個照明設備控制器或者如果已有的傳感器檢測到移動就發送一個警告信息。
Profile另一個類型的例子是在連個ZigBee設備間定義了普通行為。為了舉例說明,無線網絡在網絡中依靠自制設備的能力來同網絡連接和發現其他設備和在設備上的服務。設備和服務發現是在設備的profile中支持的特性。
2.3.1.1從ZigBee聯盟獲得的Profile標識符
ZigBee在兩個分開的等級定義Profile,這兩個等級是:私人的和公開的。這些等級的精確定義和標准是在ZigBee聯盟和在這個文件范圍之外的一個管理問題。為了這個技術規范的目的,對Profile標識符標准是唯一的。到最后,對一個Profile標識符的應用程序,每一個Profile必須以向ZigBee聯盟的一個請求開始。一旦獲得Profile標識符,Profile標識符允許Profile設計者有如小定義:
(1) 設備描述
(2) 簇標識符
Profile標識符的應用的市場空間對從ZigBee聯盟發行Profile標識符是一個關鍵的標准。Profile需要覆蓋一個足夠寬的設備范圍來允許互動性來發生在沒有過度范圍設備之間,且導致用來描述它們接口的一個簇標識符的不足。相反的。Profile不能被定義的太狹窄導致很多被個人Profile標識符描述的設備導致Profile標識符尋址空間的浪費,且在描述設備如何接口時產生互操作性。在ZigBee聯盟里的政策組將就如何定義Profile建立標准,且幫助請求者制作它們的Profile標識符請求。
2.3.1.2定義設備描述和簇
Profile標識符是在ZigBee協議中主要的主要枚舉量。每一個唯一的Profile標識符定義了設備描述和簇標識符的一個聯合的枚舉量。例如,對Profile標識符“1”,存在一些被16位值描述的設備描述(就是說在每一個Profile中可能有65536個設備描述)和一些被16位值描述的簇標識符(就是說在每一個Profile中可能有65536個標識符)。每一個簇標識符也支持一些被16位值描述的屬性。例如,每一個Profile標識符最多有65536格簇標識符且每一個這樣的標識符最多又可以包含65536格屬性。Profile開發者的責任就是定義和分配設備描述,簇標識符和在它們已分配的Profile標識符里的屬性。注意設備描述、簇標識符和屬性標識符的定義必須很小心的采用以保證簡單描述的有效建立和當交換消息時單一化處理。
設備描述和簇標識符必須通過將被處理的已知的profile標識符來完成。在任何消息被定向到一個設備之前,ZigBee協議采用已經使用服務發現確定profile在設備和端點的支持。同樣的,綁定處理采用相似的服務發現,且profile發生,由於作為結果的匹配提取到源地址、源端點、簇標識符、目的地址和目的端點。
2.3.1.3在端點配置profile
在一個單獨的ZigBee設備也許包含許多的profile的維持,這些profile是由在這些profile定義的各種簇標識符的子集提供的,且維持多樣的設備描述。在設備里使用一個分層尋址定義的能力如下:
(1) 設備:設備是由有唯一的IEEE和網絡地址的單個無線電來維持的。
(2) 端點:這是一個8位的域,描述了不同的應用程序,這些應用都是由單個無線電來維持的。端點0x00用來尋址設備profile,設備profile是每個ZigBee設備必須使用的;端點0xff用來尋址所有活動的端點(廣播端點),且端點0xf1-0xfe保留。結果,一個單獨的物理ZigBee無線電能維持最多240個應用程序在端點0x01-0xf0.
應用程序決定關於如何造設備端點配置應用程序和哪個端點來廣播(advertise)。唯一的要求是每個端點都建立簡單的描述符,且這些描述符對於服務發現是有效的。
2.3.1.4激活安全發現
一旦設備被建立維護特殊的profile且同簇描述符使用一致,簇描述符使用是為在這些profile中的設備描述,那么應用程序能被配置。為了達到這一點,每一個應用程序被分配給個別的端點,且每一個都使用簡單描述符來描述。通過簡單描述和在ZigBee設被profile中描述的其他服務發現機制,激活服務發現,設備的綁定被維持和在補充的設備間應用程序的通知。
重要的一點是服務發現是以profile標識符、輸入簇標識符列表和輸出簇標識符列表(設備描述很明顯的丟失了)為基礎構成的。設備描述是在表示profile的類型的設備里規定必選的和可選的簇標識符維持的一個簡單的協定。另外,期望設備描述枚舉在PDA里使用或者其他輔助的綁定設備提供設備能力的額外描述。
2.3.1.5混合標准和所有權Profile
一個例子,ZigBee設備能被建立帶有一個為了一個標准而寫的單獨的端點應用程序,公開的ZigBee profile標識符“XX”。如果生產商想配置一個ZigBee設備支持的標准profile“XX”,且提供給賣主特殊的擴展名,這些擴展名將被advertised在一個孤立的端點。維持標准的profile標識符“XX”,但生產時沒有賣主擴展名的設備將僅僅advertised維持單獨的profile標識符“XX”,且不能使用賣主擴展名響應或者建立消息。
2.3.1.6激活相反的兼容性
在先前的例子中,使用一個標准建立一個設備,這個標准公布ZigBee profile標識符“XX”,它包含了標准的profile的最初版本。如果ZigBee聯盟將更新這個標准profile來建立新的特性和加法(additions),修訂本將組合成一個新的標准profile,這個新的標准profile有一個新的profile標識符(即“XY”)。有profile標識符“XX”的設備應域新設備兼容,這新的設備對於profile標識符“XX”和profile標識符“XY”有新設備advertised維持。以這種方式,新設備使用profile標識符“XX”與舊設備通信,然而,也可以使用profile標識符“XY”與舊設備通信在相同的應用程序里。在ZigBee中的服務發現特性激活網絡中的設備來確定維持級別。
2.3.2ZigBee描述
ZigBee設備使用描述符數據結構來描述它們自己。包含在這些描述符里的實際數據被定義在個人的設備描述符里。有五個描述符:節點、節點電源、簡單的、復雜的和使用者,如表2.25所示。
表2.25ZigBee描述符
| 描述符名稱 |
狀態 |
描述 |
| Node |
M |
節點的類型和能力 |
| Node power |
M |
節點電源特性 |
| Simple |
M |
包含在節點里的設備描述 |
| Complex |
O |
設備描述的進一步信息 |
| User |
O |
定義的使用者的描述符 |
2.3.2.1描述符傳送
節點、節點電源、簡單的和使用者描述符按它們出現在各自的表中的順序傳送,也就是,在表頭的域第一個傳送,表底的域最后傳送。每一個individual域按第一章規定的順序傳送。復雜的描述符的格式和傳送如圖2.15所示。
| 字節:1 |
可變長 |
… |
可變長 |
| 域計數器 |
域1 |
… |
域n |
圖2.15復雜描述符的格式
包含在復雜標識符里的每一個域的格式如圖2.16所示。
| 字節:1 |
可變長 |
| 壓縮的XML標志 |
域數據 |
圖2.16individual復雜描述符域的格式
2.3.2.1.1域計數器域
域計數器域長度為1字節,且規定包含在描述符里的域的數值,每一個格式描述如圖。
2.3.2.1.1壓縮的XML標志域
壓縮的XML標志域長度為1字節,且規定當前域的XML標志。復雜標識符的壓縮XML標志如表2.37所示。
2.3.2.1.1域數據域
域數據域是可變長且包含當前域的信息規定,如壓縮XML標志域表明的。
2.3.2.2經由描述符發現
在ZDO管理實體設備中詢問標識符信息,且使用ZigBee設備標識符請求原語的服務發現尋址到端點0。發現操作的詳細描述見2.4.2.1節。信息通過ZigBee設備profile指示(indication)原語返回。
節點、節點電源、復雜和使用者標識符應用於完整節點。簡單標識符必須為了每個被定義的端點在節點里而被規定。如果一個節點包含多個子組,這些將在孤立的端點上,且對於這些特殊的描述符通過在ZigBee設備profile里包含的相關的端點數來讀取。
2.3.2.3復合設備(Composite Devices)
一個ZigBee節點包含分開的子組的數,每一個都有它自己的簡單標識符。對於發現機制是在ZigBee設備profile發現部分描述。
2.3.4節點描述符
節點描述符包含ZigBee節點能力的信息,且對於每個節點都是必選的。在一個節點里僅僅有一個節點描述符。
節點描述符的域如表2.26所示,是按照傳送的順序。
表2.26節點描述符域
| 域名 |
長度(bit) |
| 邏輯類型 |
3 |
| 有效復雜描述符 |
1 |
| 有效使用者描述符 |
1 |
| 保留 |
3 |
| APS標志 |
3 |
| 頻率組合(Frequency band) |
5 |
| MAC能力標志 |
8 |
| 生產商代碼 |
16 |
| 最大緩沖值 |
8 |
| 最大轉換值(Maximum transfer size) |
16 |
| 服務器MASK |
16 |
2.3.2.4.1邏輯類型域
節點的邏輯類型域是3個bit長,且規定ZigBee節點的設備類型,邏輯類型域設置為表2.27的一個非保留值。
表2.27邏輯類型域的值
| 邏輯類型域值b2b1b0 |
描述 |
| 000 |
ZigBee協調器 |
| 001 |
ZigBee路由器 |
| 010 |
ZigBee終端設備 |
| 011-111 |
保留 |
2.3.2.4.2有效復雜描述符域
節點描述符的有效復雜描述符域是1bit長,且規定一個復雜描述符在這個設備上是否有效。如果這個域設置為1,復雜描述符有效;如果這個域設置為0,復雜描述符無效。
2.3.2.4.3有效使用者描述符域
節點描述符的有效使用者描述符域是1bit長,且規定一個使用描述符在這個設備上是否有效。如果這個域設置為1,使用者描述符有效;如果這個域設置為0,使用者描述符無效。
2.3.2.4.4APS標志域
節點描述符的APS標志域是3bit長,且規定節點的應用支持子層的能力。
這個域是普遍的不維持且設置為0。(This field is currently not supported and shall be set to zero.)
2.3.2.4.5頻率組合域
節點描述符的頻率組合域是5bit長,且規定節點使用的IEEE802.15.4支持的頻率組合。對每一個IEEE802.15.4支持的頻率組合,頻率組合域都有相應位,如表2.28所示,使用哪個頻率組合相應位設置為1,其他位設置為0。
表2.28頻率組合域的值
| 頻率組合域位數 |
支持的頻率組合 |
| 0 |
868- 868.6 MHz |
| 1 |
保留 |
| 2 |
902- 928 MHz |
| 3 |
2400 -2483.5 MHz |
| 4 |
保留 |
2.3.2.4.6MAC層能力標志域
MAC層能力標志域長度為8bit,且規定了節點的能力,是IEEE802.15.4MAC子層所要求的。MAC層能力標志域格式如圖2.27所示。
| 比特:0 |
1 |
2 |
3 |
4-5 |
6 |
7 |
| 可選的PAN協調器 |
設備類型 |
電源源 |
空閑時接收機開 |
安全能力 |
分配地址 |
|
圖2.17MAC層能力標志域格式
可選的PAN協調器子域長度是1位,且如果這個節點有成為PAN協調器的能力,該域設置為1。否則設置為0。
設備類型子域1位長,且如果這個節點是一個全功能設備(FFD),該域設置為1。否則設置為0,表明是一個簡化功能設備(RFD)。
電源源子域長度是1位,且如果當前的電源源是主電源,該域設置為1。否則該域設置為0。這個信息是從節點電源(power)描述符的節點當前電源源域獲得的。
空閑時接收機開子域長度是1位,且如果在空閑周期時設備使能它的接收機保存電源,該域設置為1。否則該域設置為0(參見2.3.2.5節)
安全能力子域長度是1位,且如果設備有使用【B1】規定的安全組使發送和接收幀安全的能力,該域設置為1。否則該域設置為0。
分配地址子域長度是1位,且總設置為1。
2.3.2.4.7生產商代碼域
節點描述符生產商代碼域長度是16位,且規定了一個由ZigBee聯盟分配的生產商代碼,與設備相關。
2.3.2.4.8最大緩沖值子域
節點描述符的最大緩沖域值長度8位,有效范圍是0x00-0x7f,且規定了節點的應用支持子層(ASDU)的最大值,是以字節的方式。在分裂或者重新組合之前,這是要傳輸到應用層或者從應用層過來的數據或者命令的最大值。
這個域為了網絡管理被作為高水平表示使用。
2.3.2.4.9最大轉換值
節點描述符的最大轉換值長度是16位,有效值范圍是0x0000-0x7ffff,且以字節形式規定了轉換到這個節點或從這個節點轉換的最大值在一個單個消息轉換里。這個值能超過節點最大緩沖值域的值(參見2.3.2.4.8)。
2.3.2.4.10服務Mask域
節點描述符的服務Mask域長度是16位,位設置表示這個節點的系統服務能力。系統里的其他節點使用這個使特殊系統服務發現便利。位設置如表2.29定義。
表2.29服務Mask位分配
| 位數 |
分配 |
| 0 |
主要信托中心 |
| 1 |
備份信托中心 |
| 2 |
主要綁定表高速緩沖存儲器 |
| 3 |
備份綁定表高速緩沖存儲器 |
| 4 |
主要發現高速緩沖存儲器 |
| 5 |
備份發現高速緩沖存儲器 |
| 6 |
網絡管理 |
| 7-15 |
保留 |
2.3.2.5節點電源描述符
節點電源描述符給節點的電源狀態一個動態表示,且對每一個節點都是必須有的。在一個節點里就只有一個節點電源描述符。
節點電源描述域如表2.30所示,按照傳輸的順序。
表2.30節點電源描述域
| 域名 |
長度(bit) |
| 當前電源模式 |
4 |
| 有效的電源源 |
4 |
| 當前的電源源 |
4 |
| 當前電源源級別 |
4 |
2.3.2.5.1當前電源模式域
節點電源描述符的當前電源模式域長4位,且規定了節點的當前休眠/省電模式。當前節點模式域設置為表2.31所列的一個非保留值。
表2.31當前電源模式域的值
| 當前電源模式值b3b2b1b0 |
描述 |
| 0000 |
接收機與節點描述符的空閑時接收機開子域同步 |
| 0001 |
接收機如節點電源描述符定義的那樣周期性的開始 |
| 0010 |
當有激勵是接收機開,舉例來說是使用者按下按鈕 |
| 0011-1111 |
保留 |
2.3.2.5.2有效電源源域
節點描述符的有效電源源域長度4位,且規定了在這個節點的有效電源源。對於每個節點支持的電源源,有效的電源源域的相應的位如表2.32所列,設置為1,其他位設置為0。
表2.32有效電源源域的值
| 有效電源源域位數 |
支持的電源源 |
| 0 |
持續的電源(主要的)(Constant (mains) power) |
| 1 |
可充電電池 |
| 2 |
可任意使用的電池(Disposable battery) |
| 3 |
保留 |
2.3.2.5.3當前電源源域
節點描述符的當前電源源域長度4位,且規定節點使用的當前電源源。對於所選擇當前電源源,當前電源源域相應的位如表2.23所列設置為1.其他位設置為0。
表2.23當前電源源域的值
| 當前電源源域位數 |
當前電源源 |
| 0 |
持續的電源(主要的)(Constant (mains) pow |
| 1 |
可充電電池 |
| 2 |
可任意使用的電池(Disposable battery) |
| 3 |
保留 |
2.3.2.5.4當前電源源級別域
節點描述符的當前電源源級別域長度4位,且規定了電源源負荷的級別。當前電源源域設置成表2.34所列的非保留值之一。
表2.34當前電源源級別域的值
| 當前電源源級別域b3b2b1b0 |
負荷水平 |
| 0000 |
危急的(Critical)沒有電?? |
| 0100 |
33% |
| 1000 |
66% |
| 1100 |
100% |
| 其他值 |
保留 |
2.3.2.6簡單描述符
簡單描述符包含節點里的每一個端點的特定信息。簡單描述符在節點里存在的每一個端點是必選的。
簡單描述符域如表2.35所示,是按照傳輸的順序。這個描述符在整個空間進行傳輸,簡單描述符的全部長度應小於等於maxCommandSize。
表2.35簡單描述符域
| 域名 |
長度(bits) |
| 端點 |
8 |
| 應用profile標識符 |
16 |
| 應用設備標識符 |
16 |
| 應用設備版本 |
4 |
| 保留 |
4 |
| 應用輸入簇計數器 |
8 |
| 應用輸入簇列表器 |
16*i(i是應用輸入簇計數器的值) |
| 應用輸出簇計數器 |
8 |
| 應用輸出簇列表器 |
16*o(o是應用輸出簇計器的值) |
2.3.2.6.1端點域
簡單描述符的端點域長度是8位,且規定在這個描述相關的節點里的端點。應用只用端點1-240。
2.3.2.6.2應用profile標識符域
簡單描述符的應用profile標識符域長度是16位,且規定在這個端點上支持的profile。Profile標識符從ZigBee聯盟處獲得。
2.3.2.6.3應用設備標識符域
簡單描述符的應用設備標識符域長度是16位,且規定在這個端點上支持的設備描述符。設備描述符從ZigBee聯盟處獲得。
2.3.2.6.4應用設備版本域
簡單描述符的應用設備版本域長度是4位,且規定在這個端點上支持的設備描述符的版本。設備描述符的版本設置為表2.36所列的非保留值之一。
表2.36應用設備版本域的值
| 6應用設備版本域的值b3b2b1b0 |
描述 |
| 0000 |
版本1.0 |
| 0001-1111 |
保留 |
2.3.2.6.5應用輸入簇計數器域
簡單描述符的應用輸入簇計數器域長度是8位,且規定在這個端點上支持的輸入簇數,將出現在應用輸入簇列表域。如果這個域的是0,應用輸入列表域不被包含。
3.2.2.6.6應用輸入簇列表
簡單描述符的應用輸入簇列表長度為16*i,i是應用輸入簇計數器域的值,且規定了在這個端點上支持的輸入列表,在綁定程序期間使用。
應用輸入簇列表僅僅在輸入簇計數器域的值大於0是才有。
2.3.2.6.7應用輸出簇計數器域
簡單描述符的應用輸出簇計數器域長度是8位,且規定在這個端點上支持的輸出簇數,將出現在應用輸出簇列表域。如果這個域的是0,應用輸出列表域不被包含。
3.2.2.6.6應用輸出簇列表
簡單描述符的應用輸出簇列表長度為16*o,o是應用輸出簇計數器域的值,且規定了在這個端點上支持的輸出列表,在綁定程序期間使用。
應用輸出簇列表僅僅在輸出簇計數器域的值大於0是才有。
2.3.2.7復雜描述符
復雜描述包含在節點里的每一個復雜描述符的擴展信息。復雜描述的使用是可選的。
由於在這個描述符里的擴展的和復雜的特性,它使用壓縮的XML標志以XML格式存在。描述符的每個域如表2.37所示,可以以任何順序傳輸。作為這個標識符需要在整個空間傳輸,復雜描述符的全部長度應小於等於maxCommandSize。
表2.37復雜描述符域
| 域名 |
XML標志 |
復雜XML標志值b3b2b1b0 |
數據類型 |
| 保留 |
- |
0000 |
- |
| 語言和字符設置 |
<語言代碼> |
0001 |
參見2.3.2.7.1 |
| 生產商名稱 |
<生產商名稱> |
0010 |
字符串 |
| 模型名稱 |
<模型名稱> |
0011 |
字符串 |
| 連續數 |
<連續數> |
0100 |
字符串 |
| 設備URL |
<設備URL > |
0101 |
字符串 |
| 圖標(Icon) |
<圖標> |
0110 |
字節串 |
| 圖標URL |
<大綱 > |
0111 |
字符串 |
| 保留 |
- |
1000-1111 |
- |
2.3.2.7.1語言和特性設置域
語言和字符設置域是3字節長,且規定了在復雜描述符里的字符字節串使用的語言和字符設置。語言和字符設置域的格式如圖2.18所示。
| 字節:2 |
1 |
| ISO639-1語言代碼 |
字符設置標識符 |
圖2.18語言和字符設置域格式
ISO639-1語言代碼域是2字節長,且規定了為字符串使用的語言,如【B5】定義。
字符設置標識符子域長度是1字節,且規定了在字符設置里的字符使用的編碼。這個子域設置為表2.38所列的非保留值之一。
表2.38字符設置標識符子域的值
| 字符設置標識符值 |
每個標識符的比特數 |
描述 |
| 0x00 |
8 |
ISO646,ASCII字符設置。每一個特性都適合一個字節的最沒有意義的7 bit,帶有最有意義bit設置為0(見【B6】)?? |
| 0x01-0xff |
- |
保留 |
如果語言和字符設置都沒有規定,語言默認為英語(語言代碼=“EN”)且字符設置為ISO 646。
2.3.2.7.2生產商名稱域
生產商名稱域是可變長,且包含字符串表明設備生產商的名稱。
2.3.2.7.3模型名稱域
模型名稱域是可變長,且包含字符串表明設備生產商模型的名稱。
2.3.2.7.4連續數域
連續數域是可變長,且包含字符串表明設備生產商連續數。
2.3.2.7.5設備URL域
設備URL是可變長,且包含字符串表明URL,通過它更多的關於設備的信息可以獲得。
2.3.2.7.6圖標域
圖標域是可變長,且包含一個字節串,這個字節串攜帶一個圖標數據,能表明在計算機、網關或者PDA上的設備。圖標的格式是32*32像素的PNG圖像。
2.3.2.7.7圖標URL域
圖標URL域是可變長,且包含字符串表明URL,通過它可以獲得設備的圖標。
2.3.2.8使用者標識符
使用者標識符包含允許使用者使用user-friendly字符標識符來識別設備的信息,這些字符串如“Bedroom TV”或者“Stairs light”。使用者標識符的使用是可選的。這個標識符包括一個單獨的域,使用ASCII字符設置,且包含一個16個字符的最大值。
使用者標識符域如表2.39所示,按照它們傳輸的順序。
表2.39使用者標識符域
| 域名 |
長度(字節) |
| 使用者標識符 |
16 |
2.3.3功能描述
2.3.3.1接受和拒絕
應用程序框架能通過APS子層的數據服務過濾到達的幀,且僅存在對在每個活動的(active)端點上執行的應用有影響的幀。
應用程序框架通過APSDEDATA.indication原語從APS子層接收數據,且被標定為一個特殊的端點(DstEndpoint參數)和一個特殊的profile(ProfileId參數)。
如果應用程序框架為一個不活動的端點接收一個幀,丟棄該幀。否則,應用程序框架應確定是否規定profile標識符與在規定的端點上執行的profile標識相匹配。如果profile標識符不匹配,那么應用程序框架拒絕該幀。反之,應用程序框架應傳遞接收到的幀的載荷到執行在規定端點的應用。
2.5ZigBee設備對象(ZDO)
2.5.1范圍
本小節介紹在ZigBee應用支持子層和網絡層頂端執行ZigBee設備對性應用需要的概念、結構和原語。
ZDO是使用網絡和應用支持層原語執行ZigBee終端設備、路由器和協調器的一個應用。
ZDOProfile使用簇來描述它的原語。ZigBee設備Profile簇不使用屬性,且同在消息傳輸協議里的消息類似。在ZigBee設備中使用簇標識符來列舉在ZDO中使用的消息。
ZDO也使用配置屬性。這些屬性不是任何簇的元素。在ZDO中的配置屬性是由應用或者是棧Profile設置的配置參數。雖然配置屬性和ZigBee設備Profile都由ZDO來使用,但是配置屬性和ZigBee設備Profile無關。
2.5.2設備對象描述
ZDO是應用解決方案,駐扎在ZigBee協議棧中的APL層和APS層之上,如圖1.1所示。
ZDO有以下功能:
(1)初始化應用支持子層(APS),網絡層(NWK),安全服務提供(SSP)和任何其他ZigBee設備層而不是駐扎在端點1-240的終端應用。
(2)從終端應用中集合配置信息來確定和執行下節描述的功能。
2.5.2.1最初的發現高速緩沖器設備操作(Primary Discovery Cache)
最初的發現高速緩沖器設備是通過設備的配置和在節點描述符里的advertisement來指定的。最初的發現高速緩沖器設備操作作為一個狀態機,這個狀態機是關於客戶機希望使用最初的發現高速緩沖器。如下的狀態和操作,如圖2.99描述的,應被最初的發現高速緩沖器設備支持:
1.未發現的:
客戶使用有限的半徑廣播到所有的RxOnWhenIdle設備消息Discovery Register請求來定位在請求提供的半徑范圍內的Primary Discovery Cache設備
2. 發現的:
客戶使用單播發現高速緩存器請求,這個請求是定向到Discovery Cache設備,這個設備白含它願意存儲的發現高速緩存器信息的大小。Discovery Cache Device將響應,參數是SUCCESS或者TABLE_FULL。
3.已注冊的:
當客戶從Discovery Cache設備接收到SUCCESS狀態,這個狀態就從先前的Discovery Cache請求處到達。客戶現在必須使用節點描述符(NodeDescriptor)存儲請求、電源描述符存儲請求、活動的端點存儲請求和簡單描述符存儲請求上載它的發現信息來激活Primary Discovery Cache設備為了它自己的利益來充分的響應。
4.未注冊的:
客戶(或任何其他設備)也許請求不被注冊。移動節點高速緩存器(Remove Node Cache)請求移動設備從Primary Discovery Cache設備。
Primary Discovery Cache設備響應設備和它支持的所有注冊的客戶的服務發現請求。Find Node Cache請求被想定位設備和為了已給設備的服務發現請求的客戶使用。注意如果發現信息被設備本身保持,設備也必須響應來確認它自己作為發現信息的儲藏。見圖2.99為狀態機處理Primary Discovery Cache設備的詳細信息。
2.5.2.2設備和服務發現
在一個單獨的PAN里,這個功能將支持設備和服務發現。另外,對於ZigBee協調器、ZigBee路由器和ZigBee終端設備類型,這個功能將做如下處理:
(1)在每一使用休眠的ZigBee終端設備、ZigBee路由器(或ZigBee協調器)的網絡,必須被設計作為如它們的節點描述符描述的Primary Discovery Cache Devices。這些Primary Cache Devices 是它們自己可發現的,且提供服務器服務來上載和存儲代表休眠的ZigBee終端設備的發現信息。另外Primary Cache Devices響應代表休眠Zigbee]終端設備的發現請求。每一個Primary Discovery Cache Device是ZigBee路由器或者ZigBee協調器。
(2)對於被:Config_Node_Power,設備和服務發現指示想要休眠的ZigBee終端設備將管理被ZigBee終端設備選擇的Primary Discovery Cache設備上的網絡地址、IEEE地址、活動節點、簡單描述符、節點描述符和電源描述符的上載和存儲來允許在這些休眠設備上的設備和服務發現操作。
(3)對於被設計作為Primary Discovery Cache Device的ZigBee協調器和ZigBee路由器,這個功能將代表休眠ZigBee終端設備響應發現請求,這些終端設備已經注冊和上載了它們的發現信息。
(4)對於所有的ZigBee設備、設備和服務發現將支持設備和從其他設備過過來的服務發現請求,且允許從其他本地的應用對象過來的請求的產生。注意設備和服務發現服務是由Primary Discovery Cache設備代表其他ZigBee終端設備提供的。萬一Primary Discovery Cache Device是請求的目標,那么NWKAddrOfInterest或者Interest域的設備將被請求和/或響應填滿來區分從設備來的請求的目標,這個設備是發現的目標。將支持下邊的發現特性:
(1)設備發現:
——以ZigBee協調器或者路由器IEEE地址的一個單播詢問為基礎,被請求設備的IEEE地址,隨機的,所有聯合設備的網絡地址將被返回。
——以ZigBee終端設備的IEEE地址的一個單播詢問為基礎,被請求的設備的IEEE地址被返回。
——以ZigBee協調器或者帶有一個已經提供的IEEE地址的路由器網絡地址的一個多播詢問(任何廣播地址類型)為基礎,被請求的設備的網絡地址,隨機的,所有聯合設備的網絡地址將被返回。
——以帶有已經提供的IEEE地址的ZigBee終端設備的網絡地址的廣播查詢(任何廣播地址類型)為基礎。被請求設備的網絡地址被返回。響應的設備將使用APS層為單播響應已知的服務來廣播查詢。
(2)服務發現:以如下的輸入為基礎,相應的響應被提供:
——網絡層地址加上(plus)活動的端點查詢類型——指定設備將返回在那個設備里的所有應用的端點數。
——網絡層地址或廣播地址(任何廣播地址類型)加上服務匹配,這些匹配包括Profile ID和隨意的,輸入和輸出簇——指定的設備匹配帶有所有活動的端點的Profile ID來確定一個匹配。如果沒有輸入或者輸出簇被規定,匹配請求的端點被返回。如果那些匹配的輸入和/或輸出簇在請求里被提供,且任何匹配在帶有提供匹配的設備上的端點列表的響應里被提供。響應的設備應該使用APS層已知的服務,這服務是為了單播響應到廣播查詢的。萬一應用profiles想列舉輸入簇和它們的帶有相同簇標識符的響應輸出簇,應用profile將僅僅在為服務發現目的的簡單標識符里列出輸入簇。在這些情況下它將被采用,應用profile提供關於輸入和響應輸出的簇標識符的使用的細節。
——網絡層地址加上節點標識符或標識符查詢類型——指定的地址將為設備返回聯合端點的簡單標識符。
——隨意的,網絡層地址加上復雜或者使用者標識符查詢類型——如果支持,指定的地址將為設備返回復雜或者使用者標識符。
2.5.2.3安全管理
這個功能確定是否使能安全,如果使能,將做如下處理:
建立鑰匙
傳輸鑰匙
請求鑰匙
更新設備
移動設備
轉換鑰匙
安全管理功能按安全服務規范執行。安全管理由ZDO發出APSME原語來執行,步驟如下:
與信托中心通信(假定是ZigBee協調器)來獲得Master Key,在設備和信托中心之間(如果設備是ZigBee協調器或者信托中心的Master Key被重新分配這一步忽略)。這一步使用傳輸鑰匙原語。
與信托中心建立一個Link Key。這一步使用APSMEEstablish-Key原語。
從信托中心獲得網絡鑰匙使用安全的通信與信托中心。這一步使用APSME-TRANSPORT-KEY原語。
作為必須的,建立Link Key和Master Key與在網絡中被確定為消息的目的的指定的設備。這步使用APSMEESTABLISH-KEY和/或APSME-REQUEST-KEY原語。
使用APSMEDEVICE-UPDATE通知任何一個設備的信托中心連接網絡。這個功能只有設備是ZigBee路由器時才執行。
允許設備使用APSMEREQUEST-KEY原語從信托中心獲得鑰匙。
允許信托中心從網絡中移動設備,使用APSME-REMOVE-DEVICE原語。
允許信托中心轉換active的網絡鑰匙,使用APSMESWITCH-KEY原語。
2.5.2.4網絡管理
這個功能將執行ZigBee協調器、ZigBee路由器或者ZigBee終端設備邏輯設備類型根據已確定的配置設置,通過程序應用或者在安裝期間。如果設備類型是一個ZigBee協調器或者Zigbee終端設備,這個功能將提供選擇一個存在的PAN來加入和如果網絡通信斷開執行允許設備重新加入的程序的能力。如果設備類型是ZigBee協調器或者是Zigbee路由器,這個功能將提供為一個新的PAN建立選擇一個未用的信道。注意在沒有一個設備是預先指定為協調器的情況下,配置一個網絡是可能的,這時,第一個全功能設備(FFD)被確定為ZigBee協調器的角色。網絡管理做如下處理:
允許為網絡信道列表的規定掃描程序。缺省值是規定在已選擇的操作聯合的所有信道的使用。
管理網絡掃描程序來確定鄰居網絡和它們協調器和路由器的一致性。
允許一個信道的選擇來啟動一個PAN(ZigBee協調器)或者一個存在的PAN的選擇來連接(ZigBee路由器或者Zigbee終端設備)。
支持孤點和擴展的程序來重新連接網絡,包括支持可攜帶的內部PAN。
也許支持直接連接。對於ZigBee協調器和ZigBee路由器,直接連接的一個本地版本被支持來使能設備通過孤點或者重新連接流程來加入網絡。
2.5.2.5綁定管理
綁定管理執行下列任務:
為綁定表建立一個資源值。這個資源值是通過程序應用或通過一個在安裝期間定義的配置參數確定的。
從APS綁定表增加或者減少實體處理綁定請求。
從外部應用支持綁定和解綁定命令,如那些是主機在一個PDA上來支持協助綁定。綁定和解綁定命令將通過ZigBee設備Profile(見2.4節)被支持。
對於ZigBee協調器,支持終端設備綁定,這綁定允許以按鈕按壓或其他手動菜單為基礎的綁定。
2.5.2.6節點管理
對於Zigbee協調器和路由器,節點管理功能執行以下步驟:
允許遙控操作命令來執行網絡發現
提供遙控操作命令來重新獲得路由表
提供遙控操作命令來重新獲得綁定表
提供一個遙控操作命令來使一個設備離開網絡或者是命令另一個設備離開網絡
提供一個遙控操作命令來重新獲得LQI,是為這個遙遠的設備的鄰居獲得的。
允許源設備向一個初始化綁定表高速緩沖寄存器登記的能力來保持他們自己綁定表
允許配置工具把一個設備換成另一個設備,這個設備是在所有的綁定表入口中,這個入口涉及到他。
允許初始化綁定表高速緩沖寄存器備份和恢復個人綁定入口或者入口綁定表或者保持他們自己綁定表的源設備的表
提供一個遙控操作命令來允許或者禁止連接一個特殊的路由器;或者通常允許或者禁止通過信托中心連接
2.5.3層接口描述
不像對於應用居住的上述的端點1-240的其他設備描述,Zigbee設備對象(ZDO)接口除了APSDE-SAP之外,通過APSME-SAP到APS,通過NLME-SAP到NWK。ZDO在端點0上通信像所有其他應用一樣通過Profiles使用APSDE-SAP。ZDO使用的Profile是ZigBee 設備Profile(見2.4節)
2.5.4系統使用方法
標題在協議版本發布的圖表的同一頁。
2.5.5對象定義和行為
2.5.5.1對象概述
ZigBee設備對象包括五個對象:
設備和服務發現
網絡管理
綁定管理
安全管理
節點管理
表2.132描述這些ZigBee設備對象
表2.132 ZigBee設備對象
| 對象 |
描述 |
|
| 名稱 |
狀態 |
|
| :Device_and_Service_Discovery |
M |
處理設備和安全發現 |
| :Network_Manager |
M |
處理網絡行為,如網絡發現,斷開/加入網絡,重新設置一個網絡連接和建立一個網絡 |
| :Binding_Manager |
O |
處理終端設備綁定,綁定和解綁行為 |
| :Security_Manager |
O |
處理安全服務,如鑰匙裝載,鑰匙建立,鑰匙傳輸和認證 |
| :Node_Manager |
O |
處理操作功能 |
2.5.5.2可選的和強制的對象和屬性
作為強制的列出的對象將在所有ZigBee設備中存在。然而,對於確定的ZigBee邏輯類型,對於所有ZigBee設備作為可選的列出的對象對於特殊的邏輯設備類型也許是強制的。例如,在網絡管理對象中的NLMENETWORK-FORMATION.request原語是強制對象且是可選屬性,盡管對於Zigbee協調器邏輯設備類型屬性是必需的。每一個設備類型部分的介紹將詳細說明邏輯設備類型的對象和屬性支持的必要條件。
2.5.5.3安全鑰匙使用方法
ZigBee設備對象也許為了由ZigBee設備Profile原語建立的數據包使用安全。這些在端點使用APSDE的應用數據包將使用網絡鑰匙,不使用個人連接鑰匙。
2.5.5.4公共的和私人的方法
能夠到達設備的任何端點應用的方法叫做公共方法。私人方法是僅僅可以到達端點0的設備應用,且不是到達終端設備(運行在端點1到240)
2.5.5.5狀態機功能描述
2.5.5.5.1ZigBee協調器
2.5.5.5.1.1初始化
在執行中應該安排供應(Provision)來提供期望網絡配置參數(:Config_NWK_Mode_and_Params)的一個單獨復制到ZigBee設備對象的網絡對象。另外,安排供應來提供配置元素來描述節點描述符,電源描述符,簡單描述符為每一個活動的端點,和應用加上活動端點的列舉。???這些配置將包括在:Config_Node_Descriptor,:Config_Power_Descriptor 和 :Config_Simple_Descriptors里,如果:Config_Node_Descriptor配置對象表明這個設備是Primary Discovery Cache設備,那么這個設備將被配置成處理服務器命令,是為了聯合請求Primary Discovery Cache 的ZigBee設備Profile。且將會根據2.5.2.1節提供的狀態機描述符來處理。
如果支持,將安排供應為復雜描述符,使用者描述符,綁定入口最大值和master key 提供配置元素。這些元素將包含在:Config_Complex_Descriptor,:Config_User_Descriptor,:Config_Max_Bind 和:Config_Master_Key里。
設備應用使用NLME-NETWORK-DISCOVERY.request原語,其中:Config NWK Mode and Params的ChannelList部分能掃描指定的信道。作為結果的NLME-NETWORK-DISCOVERY.confirm原語將提供一個網絡清單,這個網絡清單詳細描述了在這個范圍內的活動的PANs。設備應用將比較信道清單和網絡清單,且選擇一個未使用過的信道。
未使用信道選擇的運算法則的規定將留給工具(implementer?)。一旦未使用的信道被確定,設備應用將設置nwkSecurityLevel和nwkSecureAllFrames的NIB屬性,是根據設備使用的堆棧Profile里的規定建立的值來設置的。它將使用NLME-NETWORK-FORMATION.request原語,原語使用在:Config NWK Mode and Params規定的參數來建立一個PAN在那個信道。在nwkExtendedPANID里,擴展的PANID域將被設置。設備應用將通過NLME-NETWORK-FORMATION.confirm原語來核對返回的狀態來檢查PAN的成功建立。:Config_Permit_Join_Duration將根據使用NLME-PERMIT-JOINING.request原語提供的缺省參數值來設置。另外, nwkNetworkBroadcastDeliveryTime和nwkTransactionPersistenceTime網絡信息塊參數將分別的設置為with :Config NWK BroadcastDeliveryTime 和:Config NWK TransactionPersistenceTime(參見第三章)
應該安排供應來確保從端點0到240的終端設備的APS原語命令返回合適的錯誤狀態值,是在ZigBee設備對象的初始化狀態完成之前,且轉換正常的操作狀態。
2.5.5.1.2正常的操作狀態
在這個狀態中,Zigbee協調器將處理直接連接地址清單,是在:Config_NWK_Join_Direct_Addrs里,通過為每個仔清單里包含的地址產生NLME-DIRECTJOIN.request原語。直接連接地址處理過程將使用:Config_Max_Assoc參數來測試在:Config_NWK_Join_Direct_Addrs里是否成功處理直接連接地址。
ZigBee協調器將響應任何的設備發現或者服務發現操作,是由它自己設備請求的,且如果他被指定作為一個Primary Discovery Cache設備,也將代表注冊的設備響應,這些設備已經存儲了發現信息。設備應用將確保綁定入口數不超過:Config_Max_Bind屬性。
ZigBee協調器將支持NLME-PERMIT-JOINING.request原語和NLME-PERMIT-JOINING.confirm原語允許網絡連接處理的應用控制。
ZigBee協調器將支持NLME-LEAVE.request和NLMELEAVE.indication原語,原語使用:Config_NWK_Leave_removeChildren屬性,在這個屬性里適當允許在應用控制下的聯合設備的移除。導致移除的條件也許包括缺少安全信任,設備的移除是通過一個有特權的應用或者是例外的發現。
ZigBee協調器應包含當前聯合的設備的清單,且方便了孤點掃描的支持,並且重新連接處理使能先前的聯合設備來重新連接到網絡。ZigBee協調器也許為設備維持直接包含在網絡中的能力,是通過NLME-DIRECTJOIN.request和NLME-DIRECT-JOIN.confirm原語。這個特性應允許ZigBee IEEE 地址清單被提供給Zigbee協調器,因為那些地址被包含作為先前的聯合設備。對於由這些地址的ZigBee設備通過孤點或者重新連接程序而不是聯合的直接的連接到網絡是可能的。
ZigBee協調器應處理End_Device_Bind_req從ZigBee路由器和終端設備。一旦接收到一個End_Device_Bind_req,ZigBee協調器將使用屬性中的:Config_EndDev_Bind_Timeout的值,且等待第二個End_Device_Bind_req的到來。第二個指示在timeout期間到達,ZigBee協調器將在兩個指示之間匹配Profile ID。如果在兩個指示中的Profile IDs不匹配,一個適當的錯誤狀態將通過End_Device_Bind_req返回到每個設備,。如果Profile IDs匹配,ZigBee協調器將匹配兩個指示里的AppInClusterLists和AppOutClusterLists。第一個指示的AppInClusterLists的Cluster IDs和第二個指示里的AppOutClusterLists的Cluster IDs匹配將被保存在一個清單里為指示End_Device_Bind_req。
ZigBee協調器將處理從其它ZigBee設備來的Device_annce信息。一旦接收到Device_annce,ZigBee協調器將檢查所有的內部表,這些內部表是為PAN中設備維持64位IEEE地址為了與在Device_annce信息中提供的地址相匹配。如果匹配存在,ZigBee協調器將根據匹配的64位IEEE地址更新它的nwkAddressMapNIB屬性來反映包含在Device_annce中的更新的16位網絡地址。
2.5.5.5.1.3信托中心操作
當網絡中安全使能時,ZigBee協調器將行使一個信托中心的功能。
信托中心被網絡中的新設備通知,是通過APSMEDEVICE-UPDATE .indication原語。信托中心也能選擇允許設備保持在網絡中或者是強迫他離開網絡,是通過APSMEREMOVE-
DEVICE.request原語。這個選擇是使用網絡控制原則制定的,是在這個協議范圍外的。
如果信托中心決定允許設備保持在網絡中,他將和設備建立一個master key,是通過APSME-TRANSPORTKEY.request原語,除非master key已經在兩個設備中可用,且信托中心使用out-of-band機制來保證安全和認證。一旦交換了master key,信托中心將使用APSMEESTABLISH-KEY.request原語與設備建立一個link key,且將使用APSME-ESTABLISHKEY.response原語相應link key建立的請求。
信托中心將提供給設備網絡鑰匙,是通過使用APSMETRANSPORT-KEY.request.原語。一旦通過APSME-REQUEST-KEY.indication原語從設備接收到一個請求,他將提供網絡鑰匙。
信托中心再任何兩個設備間將支持link keys的建立,是通過提供給他們一個共同的鑰匙。一旦接收到APSMEREQUEST-KEY.indication原語請求一個應用鑰匙,信托中心將建立一個master key或者link key,並且使用the APSMETRANSPORT-KEY.request.原語傳輸它到兩個設備。
信托中心將周期性的更新網絡鑰匙,是根據一個原則,這個原則的詳細內容在本協議范圍外。網絡中的所有設備將被更新新的網絡鑰匙,是通過APSME-TRANSPORT-KEY.request原語。
2.5.5.5.2ZigBee路由器
2.5.5.5.2.1初始化
在執行中應該安排供應(Provision)來提供期望網絡配置參數(:Config_NWK_Mode_and_Params)的一個單獨復制到ZigBee設備對象的網絡對象。如果:Config_Node_Descriptor配置對象表明這個設備是Primary Discovery Cache設備,設備將被配置成處理服務器命令為聯合了請求Primary Discovery Cache的ZigBee設備Profile,且將根據2.5.2.1節提供的狀態機描述來操作。
如果支持,將安排作為復雜描述符,使用者使用描述符,為綁定入口最大值和master key提供配置元素。這些元素將被包含在:Config_Complex_Descriptor, :Config_User_Descriptor,以及:Config_Max_Bind 和:Config_Master_Key里。
設備應用將使用帶有:Config_NWK_Mode_and_Params的ChannelList選項的NLME-NETWORK-DISCOVERY.request原語,然后使用NLME-NETWORK-DISCOVERY.
request原語屬性來掃描特殊的信道。
作為結果的NLME-NETWORK-DISCOVERY.confirm原語將提供一個詳細描述在那個范圍內的活躍的PANs的網絡清單(NetworkList)。NLME-NETWORKDISCOVERY.request程序將被:Config_NWK_Scan_Attempts執行,每一個被:Config_NWK_Time_btwn_Scans及時的分離。重復NLMENETWORK-DISCOVERY.request原語的目的是提供一個更正確的鄰居列表和到網絡層的聯合的連接質量指示。設備應用將比較信道清單(ChannelList)和網絡清單(NetworkList),且選擇一個存在的PAN來連接。PAN選擇的運算法則的規范將留給profile 描述,而且也許包含擴展的PAN ID。
3.1網絡層狀態值
網絡層確認原語通常都包括一個參數,這個參數記錄回答請求原語的狀態。網絡層狀態參數值如表3.1所示。
表3.1
| 名稱 |
值 |
描述 |
| SUCCESS |
0x00 |
請求執行成功 |
| INVALID_PARAMETER |
0xc1 |
從高層發出的原語無效或者超出范圍 |
| INVALID_REQUEST |
0xc2 |
考慮到網絡層目前的狀態,高層發送的請求原語無效或者不能執行 |
| NOT_PERMITTED |
0xc3 |
NLME-JOIN.request原語不被接受 |
| STARTUP_FAILURE |
0xc4 |
NLME-NETWORK-FORMATION.request原語啟動網絡失敗 |
| ALREADY_PRESENT |
0xc5 |
產生NLMEDIRECT-JOIN.request原語的設備的鄰居表中已經存在有地址設備提供的NLMEDIRECT-JOIN.request原語 |
| SYNC_FAILURE |
0xc6 |
用來表明在MAC層NLME-SYNC.request原語失敗 |
| NEIGHBOR_TABLE_FULL |
0xc7 |
NLME-JOIN-DIRECTLY.reques失敗,因為鄰居表沒有更多的空間 |
| UNKNOWN_DEVICE |
0xc8 |
NLME-LEAVE.request原語失敗,因為產生原語的設備地址不在鄰居表中的參數列表中 |
| UNSUPPORTED_ATTRIBUTE |
0xc9 |
NLME-GET.request or NLME-SET.request原語產生帶有未知的屬性標識符 |
| NO_NETWORKS |
0xca |
沒有檢測到網絡環境產生NLME-JOIN.request原語 |
| LEAVE_UNCONFIRMED |
0xcb |
設備確認從網絡出發失敗 |
| MAX_FRM_CNTR |
0xcc |
因為幀計數器達到最大值,所以輸出幀安全處理失敗 |
| NO_KEY |
0xcd |
輸出幀嘗試安全處理且失敗,因為對於處理沒有有效的鑰匙 |
| BAD_CCM_OUTPUT |
0xce |
輸出幀嘗試安全處理且失敗,因為安全設計產生一個錯誤的輸出 |
| NO_ROUTING CAPACITY |
0xcf |
由於缺少路由表或者發現路由表能力,嘗試發現路由失敗 |
| ROUTE_DISCOVERY_FAILED |
0xd0 |
嘗試發現路由失敗,由於缺少路由能力 |
| ROUTE_ERROR |
0xd1 |
由於發送設備的路由失敗,NLDE-DATA.request原語失敗 |
| BT_TABLE_FULL |
0xd2 |
由於沒有足夠的空間在BTT,嘗試發送一個廣播幀或成員模式多點傳送失敗 |
| FRAME_NOT_BUFFERED |
0xd3 |
一個非成員多點傳送幀丟棄未決路由發現 |
3.2概況描述
3.2.1網絡層概述
ZigBee網絡層的主要功能就是提供一些必要的函數,確保ZIgBee的MAC層(IEEE 802.15.4-2003)正常工作,並且為應用層提供合適的服務接口。為了向應用層提供其接口,網絡層提供了兩個必須的功能服務實體,它們分別為數據服務實體和管理服務實體。網絡層數據實體(NLDE)通過網絡層數據服務實體服務接入點(NLDE-SAP)提供數據傳輸服務,網絡層管理實體(NLME)通過網絡層管理實體服務接入點(NLME-SAP)提供網絡管理服務。網絡層管理實體利用網絡層數據實體完成一些網絡的管理工作,並且,網絡層管理實體完成對網絡信息庫(NIB)的維護和管理,下面分別對它們的功能進行介紹。
3.2.1.1網絡層數據實體(NLDE)
網絡層數據實體為數據提供服務,在連個或者更多的設備之間傳送數據時,將按照應用協議數據單元(APDU)的格式進行傳送,並且這些設備必須在同一個網絡中,即在同一個內部個域網中。
網絡層數據實體提供如下服務:
(1) 生成網絡層協議數據單元(NPDU):網絡層數據實體通過增加一個適當的協議頭,從應用支持層協議數據單元中生成網絡層的協議數據單元。
(2) 指定拓撲傳輸路由,網絡層數據實體能夠發送一個網絡層的協議數據單元到一個合適的設備,該設備可能是最終目的通信設備,也可能是在通信鏈路中的一個中間通信設備。
(3) 安全:確保通信的真實性和機密性。
3.2.1.2網絡層管理實體(NLME)
網絡層管理實體提供網絡管理服務,允許應用與堆棧相互作用。網絡層管理實體應該提供如下服務:
(1) 配置一個新的設備:為保證設備正常工作的需要,設備應具有足夠的堆棧,以滿足配置的需要。配置選項包括對一個ZigBee協調器或者連接一個現有網絡設備的初始化的操作。
(2) 初始化一個網絡:使之具有建立一個新網絡的能力。
(3) 連接和斷開網絡。具有連接或者斷開一個網絡的能力,以及為建立一個ZigBee協調器或者路由器,具有要求設備同網絡斷開的能力。
(4) 尋址:ZigBee協調器和路由器具有為新加入網絡的設備分配地址的能力。
(5) 鄰居設備發現:具有發現、記錄和匯報有關一跳鄰居設備信息的能力。
(6) 路由發現:具有發現和記錄有效地傳送信息的網絡路由的能力。
(7) 接收控制:具有控制設備接收狀態的能力,即控制接收機什么時間接收、接收時間的長短,以保證MAC層的同步或正正常接收等。
3.3 網絡層服務協議
圖3.1給出了網絡層各組成部分和接口。
網絡層通過兩種服務接入點提供響應的兩種服務。它們分別是網絡層數據服務和網絡層管理服務。網絡層數據服務通過網絡層數據實體服務接入點接入,網絡層管理服務通過網絡層管理實體服務接入點接入。這兩種服務通過MCPS-SAP和MLME-SPA接口為MAC層提供接口。除此之外,在NLME和NLDE間還有一個接口使得NLME可以使用網絡層數據服務。
3.3.1網絡層數據服務
網絡層數據實體服務接入點支持對等應用實體之間的應用協議數據單元的傳輸。表3.2列出了網絡層數據實體服務接入點支持的原語,下面小節就是對這些原語的討論。
3.3.1.1 NLDE-DATA.request 原語
該原語請求從本地應用支持層實體到單個或者多個對等的應用支持層實體的協議數據單元傳輸。
3.3.1.1.1 服務原語的語法
該服務原語的語法如下所示:
表3.3描述了NLDE-DATA.request函數原語的參數
3.3.1.1.2 產生
當一個NSDU要傳送到一個對等的應用支持層實體時,本地應用支持層實體就會生成該原語。
3.3.1.1.3 接收
當一個不與網絡連接的設備接收到該原語時,該設備網絡層將發出一個狀態參數為INVALID-REQUEST的NLDE-DATA.confirm原語。
網絡層數據實體在接受到該原語時,為傳送NSDU包,需要構造一個NPDU包。在處理過程中,如果網絡層數據實體在發送NSDU包之前,先發送了NLDE-DATA.cindirm原語,則將發起所有的后續處理。在構造新的NPDU過程中,網絡層頭的目的地址域設置為參數DstAddr所提供的值,源地址域設置為MAC PIB中屬性macShortAddress的值。網絡層幀頭幀控制域中的路由發現域設置為DiscoverRoute參數的值。如果提供的Radius參數不為0,那么它將設置在網絡層幀頭的radius域,如果值為0,那么網絡層幀頭中的radius域設置NWK IB中nwkMaxDepth屬性值的二倍。網絡層將會生成一個如3.7.2.1小節所描述的系列號。這個序列號可以插入到網絡層幀頭的sequence number域。幀頭的多點發送標志位將根據DstAddrMode的值設置。如果DstAddrMode的參數值為0x01,網絡層幀頭將包含multicast control域,該域的設置如下:
(1) 如果該節點是DstAddr參數所包含的節點,那么multicast mode域置為0x01
(2) 否則,multicast mode域設為0x00
(3) non-member radius和max non-member radius域按照NonmemberRadius的值設置
一旦構造好NSDU包,如果是單播,將按照3.7.3.3小節所描述的過程為NSDU包確定傳輸路由;如果是廣播,則參見3.7.4小節;如果是多點通信,則參見3.7.5.2小節。當確定了NSDU包傳輸路由后,通過MCPS-DATA.request原語來發送NSDU包,在該原語中參數SrcAddrMode 和 DstAddrMode都設置為0x02,表明適應16位的網絡地址。參數SrcPANId 和 DstPANId應設置為MAC PIB中的macPANId值。SrcAddr參數值設置為MAC PIB中的macShortAddr值。DstAddr參數值為由路由程序所決定的下一跳地址。當TxOptions與0x01相與時,該參數值應為非零值,表示發送需要確認。在接收到MCPS-DATA.confirm原語時,網絡層數據試題發送NLDE-DATA.confirm原語,該原語中的參數狀態為MAC層所接收到的狀態。
如果在網絡層信息數據庫(NIB)中所確定的網絡安全級別標准為一個非零值,並且SecurityEnable值為TRUE,則在幀發送之前,按照4.4小節所描述對幀進行安全處理。否則,網絡層不對該幀進行安全處理。如果安全處理已經進行了,但是由於某些原因而失敗了,那么,將丟棄該幀,並且網絡層數據實體將發送NLDE-DATA.confirm原語,該原語的狀態參數為安全方案所返回的值。
3.3.1.2 NLDE-DATA.confirm 原語
該原語提供了從本地應用支持層實體到一個對等應用支持成實體傳送NSDU包請求原語的結果。
3.3.1.2.1 服務原語的語法
該原語的語法如下所示:
表3.4詳細描述了NLDE-DATA.confirm原語的參數。
3.3.1.2.2 產生
該原語為本地網絡層數據實體對接收到NLDE-DATA.request原語而產生的響應。
Status域將反映相應的請求結果,詳見3.3.1.2.3小節。
3.3.1.2.3 接收
接收到該原語,開始設備的APS子層將被通知傳輸請求的結果。如果傳輸成功了,那么status參數為SUCCESS。否則,status參數表明傳輸的錯誤。
3.3.1.3 NLDE-DATA.indication原語
該原語表示一個NSDU包從網絡層到本地應用支持層實體的傳送。
3.3.1.3.1 服務原語的語法
該原語的語法如下:
表3.5描述了NLDE-DATA.request原語的參數。
3.3.1.3.2 產生
當本地MAC層實體接收到一個適當地址的數據幀時,就生成該原語,並發送給應用支持層。
3.3.1.3.3 接收
當應用支持層接收到該原語時,則被通知一個數據幀到達設備,就可得到設備所接收的數據。
3.3.1.3.4 網絡管理服務
網絡層管理實體服務接入點為其上層和網絡層管理實體之間傳送管理命令提供接口。表3.6列出了NLME所支持的NLME-SPA原語,下面的小節詳細介紹了這些原語。
3.3.2網絡發現
網絡層管理實體服務接入點支持運行網絡的發現。采用NLME-NETWORK-DISCOVERY原語來發現網絡。
3.3.2.1 NLME-NETWORK-DISCOVERY.request原語
該原語支持網絡層上層應用該原語來發現在POS范圍內正在運行的網絡。
3.3.2.1.1 服務原語的語法
該原語的語法如下:
表3.7詳細描述了NLME-NETWORK-DISCOVERY.request原語的參數。
3.3.2.1.2 產生
該原語由ZigBee設備網絡層上層產生,發送給它的網絡層管理實體,請求網絡層發現當前在POS正在運行的網絡。
3.3.2.1.3 接收
網絡層在接收到該原語后,將通過檢查ScanChannels參數確定的信道以及ScanDuration參數所確定的掃描時間,發現在POS中正在運行的網絡。通過MLME-SCAN.request原語進行掃描。
在接收到MLME-SCAN.confirm原語后,網絡層管理實體發送NLMENETWORK-
DISCOVERY.confirm原語,其原語參數為發現網絡信息以及隨MLME-SCAN.confirm原語返回的狀態參數值。
3.3.2.2 NLME-NETWORK-DISCOVERY.confirm 原語
該原語返回網絡發現操作的結果。
3.3.2.2.1 服務原語的語法
該原語的語法如下:
表3.8詳細描述了NLME-NETWORK-DISCOVERY.confirm原語的參數。
表3.9給出了NetworkDescriptor參數中網絡描述符所包含的具體內容。
3.3.2.2.2 產生
當NLME-NETWORK-DISCOVERY.request原語執行完成后,網絡層管理實體生成該原語,並發送給網絡上層。
3.3.2.2.3 接收
其上層接收到該原語后,就可得到網絡的搜索結果。
3.3.3網絡的形成
本小節原語定義了一個設備的應用層如何初始化,使其自身成為一個新的ZigBee網絡協調器。
3.3.3.1 NLME-NETWORK-FORMATION.request 原語
該原語允許高層使用該原語請求設備發起一個新的ZigBee網絡。並將其自身作為ZigBee協調器。
3.3.3.1.1 服務原語的語法
該原語的語法如下:
表3.10詳細描述了NLME-NETWORK-FORMATION.request原語的參數。
3.3.3.1.2 產生
該原語由具有ZigBee協調器能力設備的應用層生成,發送給它的網絡層管理實體,請求初始化設備,使之成為一個新網絡的協調器。
3.3.3.1.3 接收
在網絡中,當一個沒有ZigBee協調器能力的設備接收到該原語時,網絡層管理實體就會返回狀態參數為INVALID-REQUEST的NLME-NETWORK-FORMATION.confirm原語。
如果設備被初始化為ZigBee協調器,網絡層管理實體請求MAC層首先執行一個能量檢測掃描,然后在所指定的信道上執行主動掃描。為了執行掃描任務,網絡層管理實體將向MAC發送ScanType參數設置為能量檢測掃描的MLME-SCAN.request原語;然后,再發送ScanType為主動掃描的MLME-SCAN.request原語。在主動掃描完成以后,網絡層管理實體從MAC層接收到MLME-SCAN.confirm原語,並且選擇一個合適的信道。網絡層將選擇一個個域網標識符,並且確保其不會與所選擇信道的現有網絡個域網標識符參數產生沖突。一旦合適的信道和個域網標識符PANId確定后,網絡層管理實體將選擇0x0000作為16位的短MAC地址,並且告知MAC層。為了實現該目的,網絡層管理實體將向MAC層大宋MLME-SET.request原語來設置MAC PIB中的macShortAddress屬性。如果NIB中的屬性nwkExtendedPANId值為0x0000000000000000,那么該屬性將被設置為MAC層的aExtendedAddress值。如果不能找到合適的信道和個域網標識符PANId,網絡層管理實體將會發出狀態參數為START_FAILURE的NLME-NETWORK-FORMATION.confirm原語。
如果在上層的請求中只提供了一個信道,那么網絡層管理實體在開始形成網絡前不需要進行能量檢測掃描。主動掃描仍需要進行,確保所選擇的個域網標識符不與現有網絡中的標識符發生沖突。
開始一個新的網絡,網絡層管理實體向MAC層發送MLME-START.request原語。MLME-START.request原語的PANCoordinator參數設置為TRUE。MLME-START.request原語中的BeaconOrder和SuperframeOrder參數都設置為15,表明沒有超幀信標。MLME-START.request中的參數CoordRealignment設置為False。在接收到相應的MLME-START.confirm原語時,網絡層管路實體將會向其上層發送NLME-NETWORK-FORMATION.confirm原語,其中的狀態參數為MLME-START.confirm原語所返回的狀態參數值。
3.3.3.2 NLME-NETWORK-FORMATION.confirm 原語
該原語返回在網絡中初始化一個ZigBee協調器請求的執行結果。
3.3.3.2.1 服務原語的語法
該原語的語法如下:
表3.11詳細描述了NLME-NETWORK-FORMATION.confirm原語的參數。
3.3.3.2.2 產生
該原語由網絡層管理實體生成,作為對NLME-NETWORK-FORMATION.request原語的響應,發送給其上層。該原語返回的狀態為INVALID_REQUEST、STARTUP_FAILURE或者MLME-START.confirm原語所返回的狀態。3.3.3.1.3描述了在那些條件下返回這些值。
3.3.3.2.3 接收
接收到該原語,上層就可得知初始化一個ZigBee協調器的執行結果。如果成功執行了請求原語,則狀態參數設置為SUCCESS。否則,狀態參數為錯誤狀態。
3.3.4允許設備連接
該原語定義了ZigBee協調器或路由器的上層如何設置其設備允許其他設備同其網絡連接。
3.3.4.1 NLME-PERMIT-JOINING.request 原語
該原語允許ZigBee協調其或路由器上層設定其MAC層連接許可標志,在一定期間內,允許其他設備同網絡連接。
3.3.4.1.1 服務原語的語法
該原語的語法如下:
表3.12詳細描述了NLME-PERMIT-JOINING.request原語的參數。
3.3.4.1.3 產生
當ZigBee協調器或路由器上層希望其他設備加入或阻止加入其網絡時,將生成該原語,並傳送給網絡層管理實體。
3.3.4.1.3 接收
僅允許ZigBee協調器或路由器的上層發送該原語。如果ZigBee終端設備的網絡層管理實體收到該原語,則將返回狀態為INVALID_REQUEST的NLME-PERMIT-JOINING.confirm原語。
一旦網絡層管理實體接收到參數PermitDuration的值為0x00的原語,則通過向MAC層發送MLME-SET.request原語將MAC層的PIB的macAssociationPermit屬性設置為FALSE。一旦收到MLME-SET.confirm原語,則網絡層管理實體發送NLME-PERMITJOINING.
Confirm原語,將其狀態值設置為從MAC層所收到的狀態。
一旦網絡層管理實體接收到參數PermitDuration的值為0xff的原語,則通過向MAC層發送MLME-SET.request原語將MAC層的PIB的macAssociationPermit屬性設置為TRUE。一旦收到MLME-SET.confirm原語,則網絡層管理實體發送NLME-PERMITJOINING.
Confirm原語,將其狀態值設置為從MAC層所收到的狀態。
如果收到參數PermitDuration的值為除0x00或0xFF外的值,則網絡層管理實體MAC層的PIB的macAssociationPermit屬性設置為TRUE。當網絡層管理實體收到MLME-SET.confirm原語后,將會啟動一個計時器,在PermitDuration秒后,停止計時。一旦計時器啟動,網絡層管理實體將發送NLME-PERMIT-JOINING.confirm原語,其狀態值設置為從MAC層所得到的狀態值。如果計時器超時,網絡層管理實體將發送參數macAssociationPermit為FALSE的MLME-SET.request原語。
任何一個由上層發出的NLME-PERMIT-JOINING.request原語,可以取代所有一切的請求。
3.3.4.2 NLME-PERMIT-JOINING.confirm原語
該原語向ZigBee協調器或路由器的上層返回允許設備連接網絡請求原語的執行結果。
3.3.4.2.1 服務原語的語法
該原語的語法如下:
表3.13詳細描述了NLME-PERMIT-JOINING.confirm原語的參數。
3.3.4.2.2 產生
該原語由ZigBee協調器或路由器初始化的網絡管理實體生成,並且向上層發送作為對NLME-PERMIT-JOINING.request原語的確認。其狀態參數既可以為MAC層所收到的狀態,也可以INVALID-REQUEST的出錯代碼。這些狀態值的原因詳見3.3.4.1小節。
3.3.4.2.3 接收
當接收到該原語后,所初始化的設備上層即可得知允許其他設備連接網絡請求原語的執行結果。
3.3.5路由器初始化
該原語允許一個新加入網絡的ZigBee路由器開始參加ZigBee路由器的活動,包括數據幀的路由、路由發現、接收其他設備加入網絡的請求。
3.3.5.1 NLME-START-ROUTER.request原語
該原語允許一個ZigBee路由器的上層發起路由。
3.3.5.1.1 服務原語的語法
該原語的語法如下:
3.3.5.1.2 產生
該原語由新設備的網絡層管理實體上層生成,並發出給網絡管理實體要求將設備初始化為ZigBee路由器。
3.3.5.1.3 接收
如果不是作為網絡ZigBee路由器的設備接收到該原語后,網絡層管理實體將返回狀態參數為INVALID_REQUEST的NLME-START-ROUTER.confirm原語。
為初始化一個路由,網絡層管理實體向MAC層發送MLME-START.request原語,MLME-START.request原語中的BeaconOrder 和 SuperframeOrder參數值設置為15,表明beaconless操作。MLME-START.request原語的CoordRealignment參數設置為FALSE。
當網絡層管理實體收到相應的MLME-START.confirm原語,將向上層發送NLME-START-ROUTER.confirm原語,其中其狀態值與MLME-START.confirm原語中的狀態值一樣。只有當MLME-START.confirm原語返回的狀態值為SUCCESS時,設備開始作為ZigBee路由器開始工作,包括數據幀的路由、路由發現、接收設備加入網絡的請求。否則,設備不允許做這些工作。
3.3.5.2 NLME-START-ROUTER.confirm原語
該原語返回執行ZigBee;路由器配置初始化的結果。
3.3.5.2.1 服務原語的語法
該原語的語法如下:
表3.14描述了NLME-START-ROUTER.confirm原語的參數。
3.3.5.2.2 產生
該原語由網絡層管理實體生成,在接收到NLME-START-ROUTER.request原語時,向上層發送該原語作為響應。該原語返回的參數值為INVALID_REQUEST或者為MLME-START.confirm所返回的任何狀態值。3.3.5.1.3小節描述了在哪些條件下返回這些值。
3.3.5.2.3 接收
接收到該原語,上層就得到ZigBee路由器初始化請求的結果。如果網絡層管理實體已經成功設置,其返回的參數狀態為SUCCESS,否則,參數狀態為出錯信息。
3.3.6能量掃描
該原語定義了設備的上層如何操作能量掃描
3.3.6.1 NLME-ED-SCAN.request原語
該原語允許上層請求本地信道進行能量掃描。
3.3.6.1.1 服務原語的語法
原語的語法如下:
表3.15詳細描述了服務原語的參數。
3.3.6.1.2 產生
上層產生該原語要求:
·管理信道的能量掃描
3.3.6.1.3 接收
如果是連接到網絡的設備接收到該原語,設備將停止接收任何新的NLDE-DATA.request原語,返回錯誤代碼INVALID REQUEST。完成未解決的NLDE-DATA.request原語。一旦完成了未解決的NLDE-DATA.request原語,設備將臨時停止網絡操作,進行能量掃描。網絡層管理實體向MAC層發送參數ScanType表示為能量掃描,參數ScanChannels和ScanDuration根據網絡層管理實體請求設置的MLME-SCAN.request原語。
3.3.6.2 NLME-ED-SCAN.confirm原語
該原語返回上層請求能量掃描的結果。
3.3.6.2.1 服務原語的語法
該原語的語法如下:
表3.16詳細描述了該原語的參數。
3.3.6.2.2 產生
該原語由ZigBee設備的網絡層管理實體生生成,作為對NLME-ED-SCAN.request原語的響應。其狀態表明從MAC層收到的MLME-SCAN.confirm原語所返回的狀態。ScannedChannels表明那個信道被掃描了(1=信道已掃描)。EnergyDetectList包含信道掃描的結果(0x00-0xff)。其值與MAC層硬件表示為[dBm]無關。 (e.g. [-185 dBm ..
70dBm])參考IEEE802.15.4-2003。
3.3.6.2.3 接收
接收到該原語,上層得到能量掃描的結果。
3.3.7設備同網絡連接
該原語給定了設備同網絡連接的方式:
(1) 通過聯合方式請求連接網絡
(2) 直接請求連接網絡
(3) 如果成為孤點設備,請求重新連接網絡
3.3.7.1 NLME-JOIN.request 原語
該原語允許設備上層通過該原語以直接或間接方式請求連接網絡,或者當設備為孤點設備時,請求重新連接網絡。或者在一個網絡中為設備改變操作的信道。
3.3.7.1.1 服務原語的語法
該原語的語法如下:
表3.17詳細描述了NLME-JOIN.request原語的參數。
3.3.7.1.2 產生
設備的上層使用該原語請求:
(1) 通過使用MAC層連接過程請求同新網絡連接
(2) 直接使用MAC層孤點過程請求連接網絡
(3) 在成為孤點設備后,完成設備位置確定,並且重新連接網絡
(4) 為連接到網絡的設備改變操作信道
3.3.7.1.3 接收
如果收到該原語的設備已經同網絡連接,並且RejoinNetwork參數為0x00,則網絡管理實體將返回參數狀態為INVALID_REQUEST的NLME-JOIN.confirm原語。
如果收到該原語的設備目前還沒有同網絡連接,並且RejoinNetwork參數為0x00,則設備嘗試連接由參數ExtendedPANId所指定的網絡。網絡層管理實體發送MLME-ASSOCIATE.request原語,其中參數CoordAddress設置為在它的鄰居表中的路由器地址,滿足如下條件:
(1) 路由器屬於參數CoordAddress所標識的網絡
(2) 路由器對連接請求開發,is advertising capacity of the correctdevice type
(3) 當按照3.7.3.1小節誒所描述的計算方法,所計算連接成本最大為3時,設備收到幀的鏈路質量。
如果設備存在於鄰居表中,且滿足上述條件,原語MLME-ASSOCIATE.request中的LogicalChannel參數設置為鄰居表中的地址,該地址與協調器地址的潛在父節點地址相對應。CapabilityInformation參數的位字段如表3.18所示。這里所收集的性能信息作為網絡信息庫的屬性nwkCapabilityInformation存儲起來(見表3.42)。如果多台設備滿足上述要求,網絡信息庫中的nwkAddrAlloc屬性為TRUE,則連接設備將選擇最小深度的父節點。
如果在鄰居表中不存在符合條件的設備,則網絡層發送狀態為NOT_PERMITTED的NLME-JOIN.confirm原語。否則,網絡層管理實體發送狀態與收到MLME-ASSOCIATE.confirm原語中的狀態相一致的NLME-JOIN.confirm原語。
如果RejoinNetwork參數的值為0x00,且參數JoinAsRouter的值為TRUE,則設備將作為一個ZigBee路由器運行。如果參數JoinAsRouter的值為FALSE,則設備作為終端設備,不參與路由選擇。
如果設備接收到該原語,且參數RejoinNetwork值為0x01,則發送MLME-SCAN.request原語,其參數ScanType設置為孤點掃描,ScanChannels 和 ScanDuration參數與NLME-JOIN.request原語的參數一致。網絡層管理實體接收到MLME-SCAN.confirm原語,則發送NLME-JOIN.confirm原語,如果設備沒有能力找到要連接的網絡,其狀態值為NO_NETWORKS,否則參數狀態為MLME-SCAN.confirm原語所返回的狀態值。
如果沒有同網絡連接的設備接收到該原語,並且RejoinNetwork參數值為0x02,則網絡層管理實體發送狀態參數為INVALID_REQUEST的NLME-JOIN.confirm原語。
如果當前與網絡連接的設備接收到該原語,其RejoinNetwork參數值為0x02,則設備試圖重新與當前的網絡連接。在這種情況下,當下面情況為真時,網絡層管理實體通過向它的鄰居表中的路由地址發送重新建立網絡連接請求命令初始化重新建立網絡連接:
- 路由器有能力接收JoinAsRouter參數定義的設備類型
- 當按照3.3.7.1小節描述的計算方法,所計算連接成本最大為3時,設備收到幀的鏈路質量。
- 如果網絡信息庫中的屬性nwkAddrAlloc值為0x00,並且由多於一個滿足上述兩個條件的潛在的父節點存在,則連接設備將選擇最小深度的樹根。
如果設備存在於鄰居表中,且滿足上述條件,重新連接請求命令的目的地址設置為潛在的父節點的網絡地址。參數CapabilityInformation位如表3.18所示。這里的能力信息如網絡信息庫中屬性nwkCapabilityInformation所示。(見表3.42).
如果在鄰居表中不存在符合條件的設備,則網絡層發送狀態為NOT_PERMITTED的NLME-JOIN.confirm原語。否則,網絡層管理實體發送狀態與收到重新連接響應命令狀態參數值一致的NLME-JOIN.confirm原語。
一旦設備成功同網絡連接,它將把網絡信息庫中屬性nwkExtendedPANID的值設置為連接網絡的PAN標識符。
如果設備接收到該原語,且參數RejoinNetwork值為0x03,設備試圖把操作信道改變為參數ScanChannel所提供的信道。如果在參數ScanChannel中,提供多個信道,網絡層管理實體將發送狀態參數為INVALID_REQUEST的NLME-JOIN.confirm原語。否則,網絡層管理實體發送NLME-JOIN.confirm原語,其狀態參數為從轉換的信道接收的狀態參數值。
3.3.7.2 NLME-JION.indication原語
當一個新設備通過聯合方式或者按照3.7.1.3.3小節所描述的重新連接的方式連接網絡成功后,就發送該原語通知ZigBee協調器或路由器的上層。
3.3.7.2.1 服務原語的語法
該原語的語法如下:
表3.19詳細描述了NLME-JION.indication原語的參數。
3.3.7.2.2 產生
在通過如表3.31所示的MAC層的聯合方式成功的將一個新的設備連接到網絡或如表3.36所示的網絡層管理實體的重新連接方式將設備重新連接網絡成功后,ZigBee協調器和路由器的網絡層管理實體生成該原語,並向其上層傳送。
3.3.7.2.3 接收
設備上層收到該原語就可得知一個新的設備已經成功地連接到本網絡。
3.3.7.3 NLME-JOIN.confirm原語
設備上層通過該原語可得知其請求連接網絡的結果。
3.3.7.3.1 服務原語的語法
該原語的語法如下:
表3.20詳細描述了NLME-JOIN.confirm原語的參數
3.3.7.3.2 產生
網絡層管理實體接收到NLME-JOIN.request時,對其NLME進行初始化,並生成該原語,發送給其上層作為對網絡連接請求原語的響應。如果連接請求成功,則狀態參數為SUCCESS,否則,狀態參數為錯誤代碼。如INVALID_REQUEST、NOT_PERMITTED、 NO_NETWORKS或者為MLME-ASSOCIATE.confirm 和MLME-SCAN.confirm原語所返回的狀態值。這些狀態值的情況如3.3.7.1.3小節所述。
3.3.7.3.3 接收
正在初始化設備的上層接收到該原語后,就可得到各種連接方式請求的執行結果,連接方式為聯合方式,直接連接方式或古典連接方式。
3.3.8直接將設備同網絡連接
該原語定義了ZigBee協調器或路由器上層利用直接請求的方式,將另一個設備同自身網絡連接。
3.3.8.1 NLME-DIRECT-JOIN.request原語
該原語給出了ZigBee協調器或路由器的上層如何請求直接把另一個設備連接到自己的網絡中。3.3.8.1.1 服務原語的語法
該原語的語法如下:
表3.21詳細描述了NLME-DIRECT-JOIN.request原語的參數。
3.3.8.1.2 產生
ZigBee協調器或路由器生成該原語把新設備直接連接到自己的網絡。這個過程不需要任何傳輸。
3.3.8.1.3 接收
網絡層管理實體接收到此原語后,將會嘗試把參數DeviceAddress所給定地址的設備連接到鄰居表中,而參數CapabilityInformation設定了加入網絡后設備的運行能力。在執行協議中,alternate PAN coordinator位為0。如果設備作為ZigBee路由器,那么其device type位為1,如果為終端設備則為0。如果設備的電源為交流電源,則power source位置為1,否則為0。如果設備在空閑期間,設備接收器打開,則receiver on when idle位置為1,否則置為0。如果設備具有安全操作能力,則security capability位置為1,否則為0.
如果網絡層管理實體成功地把連接設備加入其鄰居表,則發送狀態參數為SUCCESS的NLME-DIRECT-JOIN.confirm原語。如果網絡層管理實體發現所要加入的設備已在其鄰接表中,則發送狀態參數為ALREADY_PRESENT的NLME-DIRECT-JOIN.confirm原語。如果網絡層管理實體不能將新的設備加入到鄰接表中,則發送狀態參數為NEIGHBOR_TABLE_FULL的NLME-DIRECT-JOIN.confirm原語。
3.3.8.2 NLME-DIRECT-JOIN.confirm 原語
該原語向ZigBee協調器或路由器上層通告直接把一設備加入網絡請求原語的執行結果。
3.3.8.2.1 服務原語的語法
該原語的語法如下:
表3.22詳細描述了NLME-DIRECT-JOIN.confirm原語的參數。
3.3.8.2.2 產生
在接收到NLME-DIRECT-JOIN.request原語后,網絡層管理實體生成該原語,並向上層發送作為對請求原語的響應。如果請求成功,則參數表示連接成功,否則,狀態參數為錯誤代碼,即為ALREADY_PRESENT或 NEIGHBOR_TABLE_FULL。這些狀態值的理由如3.3.8.1.3小節所述。
3.3.8.2.3 接收
正在初始化設備的上層接收到該原語后,即可得到其直接把一設備加入網絡的請求原語執行結果。
3.3.9斷開網絡
本小節介紹了設備上層請求自身或其他設備同網絡斷開連接的原語,同時也介紹了當設備成功地同網絡斷開后,向ZigBee協調器上層報告時所采用的原語。
3.3.9.1 NLME-LEAVE.request原語
設備上層利用該原語請求自身或者其他設備同網絡斷開連接。
3.3.9.1.1 服務原語的語法
該原語的語法如下:
表3.23詳細描述了NLME-LEAVE.request原語的參數。
3.3.9.1.2 產生
當設備上層需要同網絡斷開連接,或者ZigBee協調器或路由器上層准備將一個設備同網絡斷開連接時,生成該原語。
3.3.9.1.3 接收
如果設備沒有同網絡連接,而設備的網絡層管理實體接收到該原語,則網絡層管理實體發送狀態參數為INVALID_REQUEST的NLME-LEAVE.confirm原語。當一個網絡連接設備的網絡層管理實體接收到該原語,並且其DeviceAddress參數為NULL,RemoveChildren參數為FALSE時,網絡層管理實體將按照3.7.1.8.1小節所述將自身與網絡斷開連接。網絡層管理實體將清除路由表入口參數,並向MAC層發送MLME-RESET.request原語。如果網絡層管理實體收到MLME-RESET.confirm原語其狀態參數不為SUCCESS,時,網絡層管理實體可能會選擇重發復位請求。網絡層管理實體也將把相對於父節點的鄰居表入口的relationship域設置為0x03,表明沒有關系。如果接收到的NLME-LEAVE.request原語的DeviceAddress參數為NULL,RemoveChildren參數為TRUE,那么網絡層管理實體將試圖如3.7.1.8.3小節所述,移除其子節點。
當ZigBee協調器或路由器接收到該原語,且原語的設備地址參數不為NULL,則網絡層管理實體將判斷所指定設備是否存在於鄰居表中,。如果所請求設備不存在於鄰居表中,則網絡層管理實體將發送狀態值為UNKNOWN_DEVICE的NLME-LEAVE.confirm原語。如果所請求的設備存在於鄰居表中,網絡層管理實體將按照3.7.1.8.3小節所述將設備從網絡移除。如果RemoveChildren參數為TRUE,將請求移除該設備的子節點。移除結束,網絡層管理實體將發送NLME-LEAVE.confirm原語,其參數DeviceAddress為移除設備的64位IEEE地址,狀態參數為MCPS-DATA.confirm原語所返回的狀態值。然后對應於移除設備的鄰居表的relationship域將被更新。Relationship域按照NLME-LEAVE.request原語的Rejoin參數進行更新。如果Rejoin域的值為FALSE,那么relationship域為0x03,表明沒有關系。如果Rejoin域為TRUE,那么relationship域為0x04,表明節點屬於上一層的子節點。
3.3.9.2 NLLME-LEAVE.indication原語
3.3.9.2.1 服務原語的語法
該原語的語法如下:
表3.24詳細描述了NLLME-LEAVE.indication原語的參數。
3.3.9.2.2 產生
當與ZigBee協調器或路由器所連接的設備同網絡斷開時,協調器或路由器的網絡層管理實體生層該原語,並且發送到ZigBee協調器或路由器的上層。該原語也可由ZigBee路由器或終端設備的網絡層管理實體生層,並發送給設備上層以表明該設備已同該設備所連接的ZigBee協調器或路由器成功地斷開連接。
3.3.9.2.3 接收
ZigBee協調器或路由器上層一旦收到該原語,就可得到與其連接的設備已離開網絡的消息。ZigBee路由器或終端設備上層也由該原語可得到它與所連接的ZigBee協調器或路由器斷開的通告消息。
如果參數Rejoin值為TRUE,那么上層期望按照3.7.1.3小節所述的NLME-JOIN.request原語重新與網絡連接。如果參數Rejoin值為FALSE,離開的設備將不能自動的與網絡重新連接,盡管可能在上層的指導下與網絡重新連接。
3.3.9.3 NLME-LEAVE.confirm原語
該原語向一個設備上層通告請求設備自身或其他設備離開連接網絡的結果。
3.3.9.3.1 服務原語的語法
該原語的語法如下:
表3.25詳細描述了NLME-LEAVE.confirm原語的參數
3.3.9.3.2 產生
該原語向一個設備上層通告請求設備自身或者其他設備離開連接網絡的結果。如果請求斷開連接原語成功執行,則該狀態參數值表明為成功地斷開連接;否則,狀態參數為INVALID_REQUEST或UNKNOWN_DEVICE或為MCPS-DATA.confirm原語所返回的任意狀態值。這些狀態值的原因如3.3.9.1.3小節所述。
3.3.9.3.3 接收
正在初始化中的設備上層收到此原語,就可得到請求自身或其他設備同網絡斷開的執行結果。
3.3.10重新復位設備
該原語介紹了一個設備應用層如何請求重新復位它的網絡層。
3.3.10.1 NLME-RESET.request原語
設備應用層采用該原語請求網絡層執行重新復位操作。
3.3.10.1.1 服務原語的語法
該原語的語法如下:
該原語無參數。
3.3.10.1.2 產生
該原語由設備應用層生成,並且發送到該設備的網絡層管理實體,用來請求網絡層重新復位網絡層,以使它恢復到初始狀態。
3.3.10.1.3 接收
網絡層管理實體一旦收到該原語,就行MAC層發送SetDefaultPIB參數置為TRUE的MLME-RESET.request原語。網絡層一旦收到所對應的MLME-RESET.confirm原語,將清除設備所有的內部變量和路由表入口參數,並將所有的NIB屬性設為默認值,從而重新復位網絡層。在網絡層重新復位后,網絡層管理實體將發出MLME-RESET.confirm原語;並且當MAC層成功地重新復位時,原語的狀態參數設置為SUCCESS,否則狀態參數設置為DISABLE_TRX_FAILURE。
如果此原語發送到一個已連接網絡設備的網絡層管理實體,任何使用NLME-LEAVE.request原語請求斷開連接的企圖都由上層進行優先判斷。
3.3.10.2 NLME-RESET.confirm原語
該原語用來向設備應用層報告請求重新復位網絡層的執行結果。
3.3.10.2.1 服務原語的語法
該原語的語法如下:
表3.26詳細描述了NLME-RESET.confirm原語的參數
3.3.10.2.2 產生
該原語由設備的網絡層管理實體生成,並發送到它的上層用開對NLME-RESET.request原語進行確認。如果請求成功,則狀態參數表明進行了一次成功的重新復位操作。否則,狀態參數為DISABLE_TRX_FAILURE的錯誤代碼。這些狀態值的原因如3.3.10.1.3小節所述。
3.3.10.2.3 接收
在收到該原語后,該設備應用層就會得到它請求網絡層重新復位的執行結果。
3.3.10.3 網絡層重新復位的順序圖
圖3.2描述了重新復位網絡層所必須的順序圖
3.3.11接收機同步
該原語介紹了一個設備應用層如何使它得得接收機與ZigBee協調器或路由器同步,並從網絡層中得到它的數據。
3.3.11.1 NLME-SYNC.request原語
設備應用層使用該原語與ZigBee協調器或路由器進行同步,或從ZigBee協調器或路由器中得到它的數據。
3.3.11.1.1 服務原語的語法
該原語的語法如下:
3.3.11.1.2 產生
無論何時,設備應用層要與Zigbee協調器或路由器實現同步,或查詢在協調器或路由器中是否存在它的數據時,都可生成該原語。
3.3.11.1.3 接收
接收到該原語,網絡層管理實體將向MAC層發送MLME-POLL.request原語,並將它的參數TrackBeacon置為FALSE。在收到相應的MLME-POLL.confirm原語后,網絡層管理實體將發送NLME-SYNC.confirm原語,其狀態參數與MLME-POLL.confirm原語的狀態參數一致。
3.3.11.2 NLME-SYNC.indication原語
該原語向設備的應用層通告MAC層丟失網絡同步信號。
3.3.11.2.1 服務原語的語法
該原語的語法如下:
該原語無參數。
3.3.11.2.2 產生
網絡層管理實體通過MLME-SYNC-LOSS.indication原語從MAC層得到丟失同步信號通知后,就會生成該原語。該原語跟隨着NLME-SYNC.request原語之后,發送到網絡層管理實體。
3.3.11.2.3 接收
接收到該原語,其應用層就可得到設備的MAC層丟失了網絡的同步信標。
3.3.11.3 NLME-SYNC.confirm原語
該原語用來向設備應用層報告它所請求網絡同步的執行結果,或報告請求從ZigBee協調器或路由器中所得到數據的結果。
3.3.11.3.1 服務原語的語法
該原語的語法如下:
表3.27詳細描述了NLME-SYNC.confirm原語的參數。
3.3.11.3.2 產生
該原語由正在初始化中的網絡層管理實體生成,並發送到它的應用層用以對NLME-SYNC.request原語的確認。如果請求原語成功執行,狀態參數表明為一次成功的狀態改變嘗試。否則,狀態參數為錯誤代碼。這些狀態的原因如3.3.11.1.3小節所述。
3.3.11.3.3 接收
設備應用層收到此原語后,就可得到請求同步或請求從ZigBee協調器或路由器取得數據原語的執行結果。如果請求執行成功,則狀態參數置為SUCCESS;否則,狀態參數為錯誤狀態代碼。
3.3.12信息庫維護
該原語介紹了設備上層如何讀寫網絡信息庫的屬性
3.3.12.1 NLME-GET.request原語
設備上層應用該原語請求讀取網絡信息庫中某一屬性值。
3.3.12.1.1 服務原語的語法
該原語的語法如下:
表3.28詳細描述了NLME-GET.request原語的參數。
3.3.12.1.2 產生
該原語由設備網絡層管理實體的上層生成,並發送給網絡層管理實體以便從網絡信息庫中讀取所指定的屬性值。
3.3.12.1.3 接收
網絡層管理實體一旦接收到該原語,就試圖從它的數據庫中獲取所請求的屬性值。如果在數據庫中沒有找到所指定的屬性標識符,則發送狀態為UNSUPPORTED_ATTRIBUTE的NLME-GET.confirm原語。
如果網絡層管理實體成功地獲取了所請求的屬性值,則發送狀態參數為SUCCESS以及NIB屬性標識符和屬性值的NLME-GET.confirm原語。
3.3.12.2 NLME-GET.confirm原語
該原語報告了從網絡信息庫中讀取屬性值的執行結果。
3.3.12.2.1 服務原語的語法
該原語的語法如下:
表3.29詳細描述可該原語的參數。
3.3.12.2.2 產生
該原語由網絡層管理實體生成,並發送給它的上層,作為對NLME-GET.request原語的確認。該原語返回的狀態參數為SUCCESS,則表明成功地讀取了所請求的NIB屬性值,或者為UNSUPPORTED_ATTRIBUTE的錯誤代碼。
3.3.12.2.3 接收
網絡層管理實體上層一旦接收到該原語,就可得知讀取NIB屬性請求原語的執行結果。如果成功地執行了請求原語,則狀態參數置為SUCCESS。否則,狀態參數為錯誤代碼。
3.3.13.3 NLME-SET.request原語
網絡層管理實體上層使用該原語向網絡信息庫寫入所指定的屬性值。
3.3.13.3.1 服務原語的語法
該原語語法如下:
表3.30詳細描述了該原語的參數。
3.3.12.3.2 產生
該原語由網絡層管理實體上層生成,並發送給網絡層管理實體,以此向網絡信息庫寫入所給定的屬性值。
3.3.12.3.3 接收
網絡層管理實體一旦接收到該原語,就試圖向它的數據庫中寫入所指定的屬性值。如果所指定的屬性參數在數據庫中不存在,則網絡層管理實體將發送狀態參數為UNSUPPORTED_ATTRIBUTE的NLME-SET.confirm原語。如果所指定的屬性值超出了所給定屬性的正常范圍,則網絡層管理實體將發送狀態為INVALID_PARAMETER的NLME-SET.confirm原語。
如果成功地寫入了NIB屬性,網絡層管理實體將發送狀態為SUCCESS的NLME-SET.confirm原語。
3.3.12.4 NLME-SET.confirm原語
該原語報告了嘗試向網絡信息管理庫中寫入屬性值的執行結果。
3.3.12.4.1 服務原語的語法
該原語的語法如下:
表3.31詳細描述了該原語的參數。
3.3.12.4.2 產生
該原語由網絡層管理實體生成,並向其上層發送,作為對NLME-SET.request原語的確認。如果該原語返回的狀態為SUCCESS,則表明所指定的屬性值已經成功地寫入所指定的NIB屬性中,或者狀態為INVALID_PARAMETER或UNSUPPORTED_ATTRIBUTE。這些狀態值的情況如3.3.12.3.3小節所述。
3.3.12.4.3 接收
網絡層管理實體上層一旦接收到該原語,就可得知請求寫入NIB屬性值原語的執行結果。如果成功執行,則狀態參數為SUCCESS;否則,狀態參數為出錯代碼。
3.3.13路由錯誤報告
該原語用來描述設備網絡層通知其上層發生路由失敗,結果是至少一個單播或多播幀發送失敗或通過該設備轉發信息幀失敗。廣播幀的路由錯誤是幀發送到如表3.23所示的廣播地址沒有報告。
3.3.13.1 NLME-ROUTE-ERROR.indication原語
該原語向設備上層通告網絡通信失敗。
3.3.13.1.1 服務原語的語法
該原語的語法如下:
表3.32詳細描述了該原語的參數。
3.3.13.1.2 產生
當如下情況發生時,設備的網絡層用該原語通知設備的上層:
(1) 設備發現或重修ShortAddr參數所給地址的路由發生錯誤
(2) 因為表3.40所給出的原因,設備向參數ShortAddr所給出的16位網絡地址的終端子設備發送數據幀失敗
(3) 設備收到該設備的路由錯誤命令幀。在這種情況下,參數ShortAddr域將反映目的地址的值和命令幀的錯誤碼域。
接收
設備上層通過該原語被通告與確定地址的通信失敗。
3.3.14路由發現
該原語用來定義設備上層如何初始化路由發現,如單播路由發現、多點傳送路由發現和多對一路由發現,並被通知路由發現的結果信息。
3.3.14.1 NLME-ROUTE-DISCOBERY.request原語
該原語允許設備上層初始化路由發現。
3.3.14.1.1 服務原語的語法
該原語的語法如下:
表3.33詳細描述了該原語的參數。
3.3.14.1.2 產生
該原語由ZigBee協調器或路由器的上層產生並發送給網絡層管理實體請求初始化路由發現。
3.3.14.1.3 接收
如果是ZigBee終端設備的網絡層管理實體接收到該原語,那么網絡層管理實體將向上層發送狀態參數為INVALID_REQUEST的NLME-ROUTE-DISCOVERY.confirm原語。
如果該原語的DstAddrMode參數不為0x00,並且DstAddr參數不為廣播地址,那么網絡層管理實體將向上層發送狀態值為INVALID_REQUEST的NLME-ROUTE-DISCOVERY.confirm原語。
如果接收到該原語的ZigBee路由器或協調器沒有路由能力,並且DstAddrMode參數為0x01或0x02,那么網絡層管理實體將向上層發送狀態值為NO_ROUTING_CAPACITY的NLME-ROUTE-DISCOVERY.confirm原語。
如果接收到該原語的ZigBee路由器或協調器有路由能力,並且參數DstAddrMode的值為0x02,網絡層將開始發現從當前設備到參數DstAddr所示的16位網絡地址設備的路由。初始化發現單播路由的詳細描述見3.7.3.5.1小節。
如果接收到該原語的ZigBee路由器或協調器有路由能力,並且參數DstAddrMode的值為0x01,網絡層管理實體將通過查看在nwkGroupIDTabl入口中是否有與目的地址相對應的入口來檢查該設備是否是DstAddr參數所確定的多點傳輸組標識符的一員。如果設備時多點傳輸組中的一員,則網絡層管理實體將立即發送狀態值為SUCCESS的NLME-ROUTE-DISCOVERY.confirm原語,終止NLME-ROUTEDISCOVERY.request原語的后續處理。如果設備不是多點傳輸組的一員,網絡層管理實體將初始化一個從當前設備到由DstAddr參數確定的多點傳輸組的單播路由發現。初始化發現單播路由的詳細描述見3.7.3.5.1小節。
如果接收到該原語的ZigBee路由器或協調器的DstAddrMode參數為0x00,網絡層管理實體將初始化多對一路由發現。初始化多對一路由發現的過程詳見3.7.3.5.1小節。
在任何一個上述的三中路由發現情況下,網絡層管理實體將使用MAC層的MCPS-DATA.request原語試圖傳輸一個路由發現命令幀來初始化路由發現。如果提供了可選參數Radius,那么該值將出現在輸出幀的網絡層幀頭的radius域;如果沒有提供該值,那么如果要傳輸數據幀,網絡層幀頭的radius域將設置為網絡層信息庫中nwkMaxDepth參數的二倍。如果MAC層因為某些原因傳輸路由請求命令幀失敗,那么網絡層管理實體將向上層發送ROUTE-DISCOVERY.confirm原語,其狀態參數與MCPS-DATA.confirm原語返回的狀態值一致。如果路由發現命令幀發送成功,並且參數DstAddrMode值為0x00,表明為多對一路由發現,網絡層管理實體將立即發送狀態值為SUCCESS的ROUTE-DISCOVERY.confirm原語。否則,網絡層管理實體將等待直到接收到路由響應命令幀或路由發現操作超時,如3.7.3.5小節所示。如果在路由發現操作時間結束前接收到路由響應命令幀,網絡層管理實體將向上層發送狀態值為SUCCESS的NLME-ROUTE-DISCOVERY.confirm原語。如果操作時間超時,將發送狀態值為ROUTE_DISCOVERY_FAILED的NLME_ROUTE-DISCOVERY.confirm原語。
3.3.14.2 NLME-ROUTE-DISCOVERY.confirm原語
該原語用來向設備上層報告初始化路由發現操作的結果。
3.3.14.2.1 服務原語的語法
該原語的語法如下:
表3.34詳細描述了NLME-ROUTE-DISCOVERY.confirm原語的參數。
3.3.14.2.2 產生
該原語由網絡層管理實體產生,並作為初始化路由發現的結果發送給設備上層。
3.3.14.2.3 接收
設備上層通過該原語得知初始化路由發現的執行結果。可能的狀態參數和它們在何種情況下產生如3.3.14.1.3小節所述。
3.3.15網絡回退
該原語用來定義設備上層如何在改變信道前初始化網絡回退。
3.3.15.1 NLME-START-BACKOFF.request原語
設備上層利用該原語用來請求初始化網絡回退。
3.3.15.1.1 服務原語的語法
該原語的語法如下:
表3.35詳細描述了NLME-START-BACKOFF.request原語的參數。
3.3.15.1.2 產生
設備上層在改變信道前利用該原語確保在執行改變信道時沒有傳輸數據包。
3.3.15.1.3 接收
接收到該原語,網絡層管理實體將不再處理NLDE-DATA.requests原語,並返回BACKOFF PERIOD錯誤代碼。NLDE-DATA.confirm and .indication將繼續正常處理。
3.4幀格式
本小節詳細介紹了網絡層幀的格式,即網絡協議數據單元(NPDU)的格式。網絡層幀由下列基本部分組成:
(1) 網絡層幀頭,包含幀控制、地址和序列信息。
(2) 網絡層幀的可變長有效幀載荷,包含幀類型所指定的信息。
網絡層幀是一種按指定的序列排列的序列。本節中所有的幀格式按MAC層的傳播順序來描述,即從左到右,最左邊的比特位最先發送。長度為k個比特的幀,按從0(最左為最低位)到k-1(最右為最高位)進行編號。幀長度大於一個8比特的幀,將按照最小序列的比特組到最大序列號的比特組順序傳送到MAC層。
3.4.1通用網絡層幀格式
網絡層幀格式通常由一個網絡層報頭和一個網絡層有效載荷組成。網絡層報頭按固定順序出現。然而,僅僅只有多播標志值是1時才存在多播控制域。網絡層幀格式如圖3.3所示。
| 字節:2 |
2 |
2 |
1 |
1 |
0/8 |
0/8 |
0/1 |
變長 |
變長 |
| 幀控制 |
目的地址 |
源地址 |
廣播半徑域 |
廣播序列號 |
目的IEEE地址 |
源IEEE地址 |
多點傳送控制 |
源路由幀 |
幀的有效載荷 |
|
網絡層幀報頭 |
網絡層的有效載荷 |
||||||||
圖3.3通用網絡層幀格式
3.4.1.1幀控制域
幀控制域為16位,包含所定義的幀類型、地址和序列域以及其他控制標記。幀控制域格式如圖3.4所示。
| 比特0-1 |
2-5 |
6-7 |
8 |
9 |
10 |
11 |
12 |
13-15 |
| 幀類型 |
協議版本 |
發現路由 |
多播標記 |
安全 |
源路由 |
目的IEEE地址 |
源IEEE地址 |
保留 |
圖3.4幀控制域格式
3.4.1.1.1幀類型子域
幀類型子域為2bit,其值為表3.36中所列的非保留值。
表3.36幀類型子域值
| 幀類型值b1 b0 |
幀類型名 |
| 00 |
數據 |
| 01 |
網絡層命令 |
| 10,11 |
保留 |
3.4.1.1.2協議版本子域
協議版本子域為4bit,設置值反應了所使用的ZigBee網絡層協議版本號特定設備上所使用的協議版本應像固定網絡層協議版本號一樣。
3.4.1.1.3發現路由子域
發現路由子域用根據幀的傳送控制路由發現操作。(見3.7.3.5)
對於網絡層命令幀,路由發現子域設置為0x00表明抑制路由發現。
表3.37發現路由子域值
| 發現路由子域值 |
域意義 |
| 0x00 |
抑制路由發現 |
| 0x01 |
使能路由發現 |
| 0x02 |
強制路由發現 |
| 0x03 |
保留 |
3.4.1.1.4多播標志域
多播標志域為1bit,如果是單播或者廣播幀,值為0,如果為多播幀值為1。
3.4.1.1.5安全子域
安全子域值為1時,該幀才具有網絡層安全操作能力。如果該幀的安全由另一層來完成或者完成被禁止,則該值是0。
3.4.1.1.6源路由子域
源路由子域值為1時,源路由子幀才在網絡報頭中存在。如果源路由子幀不存在則源路由子域值為0。
3.4.1.1.7目的IEEE地址子域
目的IEEE地址是1時,網絡幀報頭包含整個目的IEEE地址。
3.4.1.1.8源IEEE地址子域
源IEEE地址是1時,網絡幀報頭包含整個源IEEE地址。
3.4.1.2目的地址域
在網絡層幀中必須有目的地址域,其長度是2字節。如果幀控制域的多播標志子域值是0,那么目的地址域值是16位的目的設備網絡地址或者為廣播地址(見表)。如果多播標志子域值是1,目的地址域是16位目的多播組的Group ID。值得注意的是設備的網絡地址與IEEE802.15.4-2003協議中的MAC層16位短地址相同。
3.4.1.3源地址域
在網絡層幀中必須有源地址域,其長度是2字節,其值是源設備的網絡地址。值得注意的是設備的網絡地址與在IEEE802.15.4-2003協議中的MAC層16位短地址相同。
3.4.1.4半徑域
在網絡層幀中必須有半徑域,其長度是1字節,並且限定了傳輸半徑范圍。每個設備接收一次該幀,則該值減以。
3.4.1.5序列號域
在每個幀中都包含序列號域,其長度是1字節。每發送一個新的幀序列號值加1。幀的源地址和序列號子域是一對,在限定了序列號1字節的長度內是唯一的標識符。關於使用序列號的更多信息,見3.7.2節。
3.4.1.6目的IEEE地址域
如果存在目的IEEE地址域,則包含與包含在網絡層地址頭中的目的地址域的16位網絡地址相對應的64位IEEE地址。如果該16位網絡地址是廣播或者多播地址那么目的IEEE地址不存在。
3.4.1.7源IEEE地址
如果存在源IEEE地址域,則包含與包含在網絡層地址頭中的源地址域的16位網絡地址相對應的64位IEEE地址。
3.4.1.8多播控制域
多播控制域是1字節長度且只有多播標志子域值是1時存在。它分成3個子域如圖3.5所示。
| 比特:0-1 |
2-4 |
5-7 |
| 多播模式 |
非成員半徑 |
最低非成員半徑 |
圖3.5多播控制域幀格式
3.4.1.8.1多播模式子域
多播模式子域表明無論是使用成員或非成員模式傳輸該幀。成員模式在目的組成員設備中使用傳送多播幀。非成員模式是從不是多播組成員設備到是多播組成員設備換算多播幀。
表3.38多播模式子域值
| 多播模式域值b0b1 |
域意義 |
| 00 |
非成員模式 |
| 01 |
成員模式 |
| 10 |
保留 |
| 11 |
保留 |
3.4.1.8.2非成員半徑子域
當不是目的組成員設備轉播時,非成員半徑域表明成員模式多播范圍。接收設備是目的組成員將設置該子域值是最大非成員半徑(MaxNonmemberRadius)域的值。如果NonmemberRadius field的值是0,接收設備不是目的組成員時將丟棄該幀,且如果NonmemberRadius域的值是在0x01到0x06范圍內,那么將耗盡此域。如果NonmemberRadius域值是0x07表明無限的范圍且不能被耗盡。
3.4.1.8.3最大非成員半徑(MaxNonmemberRadius)子域
該幀的非成員半徑域的最大值。
3.4.1.9源路由子幀域
如果幀控制域的源路由子域的值是1,才存在源路由子幀域。它分成三個子域如圖3.6所示。
| 字節:1 |
1 |
可變 |
| 應答 計數器 |
應答索引 |
應答列表 |
圖3.6源路由子幀格式
3.4.1.9.1應答計數器子域
應答計數器子域表明包含在源路由子幀轉發列表里的應答的數值。
3.4.1.9.2轉發索引
應答索引子域表明傳輸的數據包的應答列表子域的下一轉發的索引。這個域被數據包的發送設備初始化為0,且每轉發一次就加1。
3.4.1.9. 應答列表子域
應答列表子域是節點的2字節短地址的列表,這個域用來為源路由數據包的目的轉發。地址是最無意義字節格式(formatted least significant byte first,???)且在源路由中有順序的出現。
3.4.1.10幀有效載荷域
幀有效載荷的長度是可變的,包含了各種幀類型的具體信息。
3.4.2各種幀類型的格式
定義了兩種類型的網絡層幀,它們分別是數據幀和網絡層命令幀。在下面將對這兩種幀類型進行討論。
3.4.2.1數據幀格式
數據幀格式如圖3.7所示。
| 字節:2 |
可變長 |
可變長 |
| 幀控制 |
路由域 |
數據載荷 |
| 網絡層幀頭 |
網絡層載荷 |
|
圖3.7數據幀格式
數據幀各部分的順序與圖3.3所示的通用網絡層幀格式的順序相同。
3.4.2.1.1數據幀網絡層報頭域
數據幀的網絡層報頭域有控制域和根據需要適當組合而得到的路由域組成。
如表3.36所示,在幀控制域中,幀類型子域應表示數據幀的值。根據數據幀的用途,對其他所有的子域進行設置。
根據幀控制域中的設置(參見圖3.4),路由為地址域和廣播域經過適當組合得到的。
3.4.2.1.2數據的有效載荷域
數據幀的數據有效載荷域包含字節的序列,該序列為網絡層上層要求網絡層傳送的數據。
3.4.2.2網絡層命令幀格式
網絡層命令幀格式如圖3.8所示。
| 字節:2 |
可變長 |
1 |
可變長 |
| 幀控制 |
路由域 |
網絡層命令標識符 |
網絡層命令載荷 |
| 網絡層幀報頭 |
網絡層載荷 |
||
圖3.8網絡層命令幀格式
網絡層命令幀各部分的順序與圖3.3所示的通用網絡層幀格式的順序相同。
3.4.2.2.1網絡層命令幀中的網絡層幀報頭域
網絡層命令幀中的網絡層幀報頭域由幀控制域和根據需要適當組合得到的路由域組成。
如表3.36所示,在幀控制域中,幀類型子域應表示網絡層命令幀的值。根據網絡層命令幀的用途,對其他所有的子域進行設置。
根據幀控制域中的設置,路由為地址域和廣播域經過適當組合得到的。
3.4.2.2網絡成命令標識符
網絡層命令標識符域表明所使用的網絡層命令,其值如表3.39所列的非保留值之一。
3.4.2.2.3網絡層命令的有效載荷域
網絡層命令幀的網絡層命令載荷域包含網絡層命令本身。
3.5命令幀
網絡層定義的命令幀,如表3.39所示。本小節詳細介紹網絡層管理實體如何構造要傳遞的各種命令。
表3.39網絡層命令幀
| 命令幀標識符 |
命令名稱 |
|
| 0x01 |
路由請求 |
3.5.1節 |
| 0x02 |
路由應答 |
3.5.2節 |
| 0x03 |
路由錯誤 |
3.5.3節 |
| 0x04 |
斷開 |
3.5.4節 |
| 0x05 |
路由記錄 |
3.5.5節 |
| 0x06 |
重新連接請求 |
3.5.6節 |
| 0x07 |
重新加入響應 |
3.5.7節 |
| 0x08 |
連接狀態 |
3.5.8節 |
| 0x09 |
網絡報告 |
3.5.9節 |
| 0x0A |
網絡更新 |
3.5.10節 |
| 0x0B- 0xFF |
保留 |
—— |
3.5.1路由請求命令
設備使用路由請求命令來請求在其無線通信范圍內的其他設備發現到達目的設備的路由,以便在網絡中建立一條穩定的使信息更快更經濟地到達目的設備的路由。路由請求命令的載荷格式如圖3.9所示。
| 字節:1 |
1 |
1 |
2 |
1 |
| 命令幀標識符(見表3.39) |
命令選擇 |
路由請求標識 |
目的地址 |
路由開銷 |
| 網絡層載荷 |
||||
圖3.9路由請求命令幀格式
3.5.1.1MAC數據服務請求
為了利用MAC層數據服務(在IEEE 802.15.4-2003【B1】)來傳輸這個命令,在MAC層幀報頭包含如下信息:
(1)目的PAN標識符設置為發送路由請求命令設備的PAN標識符。
(2)目的地址必須為廣播地址0xffff。
(3)源MAC地址和PAN標識符設置為發送路由請求命令設備的地址和PAN標識符,該設備不一定是命令源發送設備。
(4)因為任何來自於網絡層的可靠幀都使用網絡層的安全協議,幀控制域將禁止MAC層對MAC層數據幀使用安全功能。由於該幀為廣播幀,因此不需要確認。地址模式以及內部PAN標記設置為支持在這里所描述的地址域。
3.5.1.2網絡層幀報頭域
為了傳送路由請求命令幀到它的目的設備,且為了路由發現過程正確完成,應提供如下信息:
(1) 網絡層幀頭的源地址域設置成發送設備的地址。
(2) 網絡層幀頭的目的地址域設置成設備的廣播地址,macRxOnWhenIdle的值等於TRUE(參見表3.51)
(3) 網絡層幀頭的發現路由子域設置成抑制路由發現(參見表3.36)
(4) 作為一個網絡層命令幀,幀控制域的源IEEE地址子域設置成1,且網絡層幀頭的源IEEE地址域存在且包含幀發送此幀設備的64位IEEE地址。如果試圖發現的設備的64位IEEE地址已經知道,那么幀控制域的目的IEEE地址子域的值是1,且網絡層幀頭的目的IEEE地址域存在且包含設備的64位IEEE地址。
3.5.1.3網絡層幀有效載荷域
網絡層幀的載荷包含命令標識符域、命令選擇域、路由請求標識符域、目的地址和最新的路由總開銷域。
命令幀標識符應包含表明路由請求命令幀的值。
3.5.1.3.1命令選擇域
8位的命令選擇域格式如圖3.10所示。
| 比特:0-4???5哪去了 |
6 |
7 |
| 保留 |
多播 |
保留 |
圖3.10路由請求命令選擇域
3.5.1.3.1.1多播子域
多播子域是1位。只有命令幀請求多播組路由時,它的值是1,在這個情況下,目的地址域包含期望組的Group ID。
3.5.1.3.2路由請求標識符
路由請求標識符為一個8bit的路由請求序列號,在特定設備的網絡層每發送一次路由請求,該標識符增加1。
3.5.1.3.3目的地址
目的地址長2字節,標識路由請求命令幀的目的地址。
3.5.1.3.4路由開銷
路由開銷域長度為8bit,常常用來積累路由請求命令幀在網絡中傳送的開銷信息。(參見3.7.3.5.2節)
3.5.2路由應答命令
路由應答命令的目的設備使用路由應答命令來通知路由請求的源設備已接收到請求命令。ZigBee路由請求所經路由器建立一種能使幀更快捷地從源地址路由到目的地址的狀態路由應答命令的載荷格式如圖3.11所示。
| 字節:1 |
1 |
1 |
2 |
2 |
1 |
| 命令標識符(參見表3.39) |
命令選擇 |
路由請求標識符 |
源地址 |
響應地址 |
路由開銷 |
| 網絡層載荷 |
|||||
圖3.11路由應答命令幀格式
3.5.2.1MAC層數據服務請求
根據802.15.4協議標准,為了利用MAC層數據服務來傳輸該命令,在MAC層幀報頭中應包含一下信息。
(1) 目的MAC層地址和PAN標識符分別設置為路由請求命令幀的發起端路由中第一跳的網絡地址和PAN標識符。目的PAN標識符必須與命令起始端的PAN標識符相同。
(2) 源MAC地址和PAN標識符設置為發送路由應答命令的設備的地址和PAN標識符,該設備不一定為源命令發送的設備。
(3) 幀控制域設置為禁止MAC數據幀使用MAC層安全功能,因此任何來自於網絡層的可靠的幀都使用網絡層的安全協議。傳輸選擇應設置為請求命令確認。地址模式以及內部PAN標記設置為支持這里所描述的地址域。
3.5.2.2網絡層幀報頭域
為了傳送路由應答到目的地,並且使路由發現進程正確無誤,必須提供下列信息:
(1) 網絡層幀控制域中的幀類型子域應設置為表明此幀為網絡層命令幀。
(2) 在網絡層幀報頭中的目的地址域應設置為回到相應路由請求的發起端路由的第一跳的網絡地址。
(3) 網絡層幀報頭中的源地址應設置為傳送此幀設備的網絡層的16位網絡地址。
(4) 網絡層幀報頭中的發現路由子域設置成抑制路由發現(參見表3.36)
(5) 作為一個網絡層命令幀,幀控制域的源IEEE地址子域設置成1,且網絡層幀頭的源IEEE地址域存在且包含幀發送此幀設備的64位IEEE地址。如果試圖發現的設備的64位IEEE地址已經知道,那么幀控制域的目的IEEE地址子域的值是1,且網絡層幀頭的目的IEEE地址域存在且包含所應答的路由請求命令幀的發送端的64位IEEE地址。
3.5.2.3網絡層有效載荷域
網絡層有效載荷域包含命令標識符、命令選擇域、路由請求標識符域、源地址和應答地址和最新的路由開銷總和。
命令標識符域包含表明路由應答命令幀的值。
3.5.2.3.1命令選擇域
8bit的命令選擇域的格式如圖3.12所示。
| 比特:0-5 |
6 |
7 |
| 保留 |
多播域 |
保留 |
圖3.12路由應答命令選擇域格式
3.5.2.3.1.1多播子域
多播子域是1位。只有命令幀應答多播組路由時,它的值是1,在這個情況下,響應者地址域包含期望組的Group ID。
3.5.2.3.2路由請求標識符
路由請求標識符應長度是8位的所應答的路由請求幀序列號。
3.5.2.3.3源地址
源地址長度為2字節,包含所應答的路由請求命令幀發起端的16位的網絡地址。
3.5.2.3.4響應地址
響應地址長度為2字節,且與相應的路由請求命令幀的目的地址域的值相同。
3.5.2.3.5路由成本
路由成本用來收集當路由應答命令幀穿梭於網絡時鏈路成本。
3.5.3路由錯誤命令
當設備無法向前傳送數據時,便使用路由錯誤命令。該命令通知發送數據幀源設備,在傳送數據幀時出現錯誤。路由錯誤命令的載荷格式如圖3.13所示。
| 字節:1 |
1 |
2 |
| 命令幀標識符(參見表3.39) |
錯誤代碼 |
目的地址 |
圖3.13路由錯誤命令幀格式
3.5.3.1MAC層數據服務要求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,應提供下列信息。
(1) 目的MAC層地址和PAN標識符應分別設置為出現傳送故障的數據幀的發起端所經路由中第一跳的地址和PAN標識符。
(2) 源MAC層地址和PAN標識符應設置為發送路由錯誤命令的設備地址和PAN標識符。
(3) 幀控制域應設為使MAC數據幀禁止使用MAC安全功能,因此任何來自於網絡層的可靠的幀都使用網絡層的安全協議。是否執行發送該路由錯誤命令須取決於是否需要確認。
(4) 地址模式和內部PAN標記應設置為這里所描述的支持地址域。
3.5.3.2網絡層幀報頭域
為了傳送路由錯誤命令幀,網絡層幀報頭中的地址域應為與出現傳送錯誤數據幀的發起端地址相同。
網絡層幀報頭中的源地址應設置為發送路由錯誤命令的設備地址。
網絡層幀報頭中的發現路由子域應設置為抑制路由發現(參見表3.36)
3.5.3.3網絡層載荷域
路由錯誤命令幀的網絡層幀載荷域包含如下描述的命令標識符域、錯誤代碼域和目的地址域。命令幀標識符域設置為為了描述如表3.39所定義的路由錯誤代碼命令幀。
3.5.3.3.1錯誤代碼
錯誤代碼為表3.40所示的非保留值之一。
表3.40路由錯誤命令幀的錯誤代碼
| 值 |
錯誤代碼 |
| 0x00 |
無有效路由 |
| 0x01 |
樹狀態鏈路失敗 |
| 0x02 |
非樹狀態鏈路失敗 |
| 0x03 |
低電池電壓 |
| 0x04 |
無路由能力 |
| 0x05 |
無間接能力 |
| 0x06 |
間接傳送終止 |
| 0x07 |
目的設備沒有獲得 |
| 0x08 |
目的地址沒有獲得 |
| 0x09 |
父設備鏈路失敗 |
| 0x0a |
有效路由 |
| 0x0b |
源路由失敗 |
| 0x0c |
多對一路由失敗 |
| 0x0d |
地址沖突 |
| 0x0e |
校驗地址 |
| 0x0f |
PAN標識符更新 |
| 0x10-0xff |
保留 |
這些錯誤代碼是表示錯誤代碼命令幀的錯誤代碼域的值和NLME-ROUTEERROR.indication原語的狀態參數值。簡單的解釋如下:
(1) 無有效路由:路由發現和/或已經嘗試修復和到目的地址沒有發現路由。
(2) 樹狀態鏈路失敗:幀沿樹進行路由失敗時,路由失敗發生。
(3) 非樹狀態鏈路失敗:嘗試沿樹路由的結果沒有失敗。
(4) 低電池電壓:因為應答設備工作在低電壓狀態下,所以幀沒有應答。
(5) 無路由能力:因為應答設備沒有路由能力所以失敗發生。
(6) 無間接能力:休眠終端子設備緩存該幀和應答設備沒有足夠的緩沖能力,所以失敗發生。
(7) 間接傳送終止:該幀代表休眠子設備time-out的結果緩存。
(8) 目的設備沒有獲得:響應設備的終端子設備由於一些原因沒有獲得。
(9) 目的地址沒有獲得:該幀是響應設備的終端子設備不存在的地址。
(10) 父設備鏈路失敗:RF鏈路到設備的父設備失敗。
(11) 有效路由:在目的地址域中多播路由標識符有效。
(12) 源路由失敗:源路由失敗可能表明源路由鏈路中的一個鏈路失敗。
(13) 多對一路由失敗:多對一的路由請求失敗。
(14) 地址沖突:目的地址域的地址被兩個或者更多設備使用。
(15) 校驗地址:源地址在源IEEE地址域里有IEEE地址,且如果目的IEEE地址域存在,它包含的目的的期望的IEEE地址。
(16) PAN標識符更新:設備的操作網絡PAN標識符已經更新。
3.5.3.3.2目的地址
目的地址長度為2字節,包含出現傳送錯誤數據幀的目的地址。
3.5.4斷開命令
網絡層管理實體用斷開命令通知網絡中的其他設備設備正在離開網絡或者請求一個設備離開網絡。斷開命令幀的載荷格式如圖3.14所示。
| 字節:1 |
1 |
| 命令幀標識符(參見表3.39) |
命令選擇 |
圖3.14斷開命令幀格式
3.5.4.1MAC數據服務請求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,應提供下列信息。
(1)目的MAC層地址和PAN標識符應分別設置為該幀要發送到的鄰居設備的地址和PAN標識符。
(2)源MAC層地址和PAN標識符應設置為發送斷開命令的設備地址和PAN標識符。
(3)幀控制域應設為使MAC數據幀禁止使用MAC安全功能,因此任何來自於網絡層的可靠的幀都使用網絡層的安全協議。請求被應答。
(4)地址模式和內部PAN標記應設置為這里所描述的支持地址域。
3.5.4.3網絡層幀報頭域
為了發送網絡層斷開命令幀,如果請求子域設置成1,那么在網絡層幀頭中的目的地址子域設置成請求斷開子設備的網絡地址,幀控制域中的目的IEEE地址設置成請求離開的設備的IEEE地址。如果請求子域設置成0,那么網絡層幀報頭中的目的地址域設置成0xfffd以表明被帶有macRxOnWhenIdle的值等於TRUE的所有設備接收,幀控制域的源IEEE地址子域設置成1,且源IEEE地址應設置為斷開網絡設備的IEEE地址。網絡層幀頭的半徑域設置成1。
網絡層幀報頭中的發現路由子域應設置為抑制路由發現(參見表3.36)
3.5.4.3網絡層載荷域
斷開命令幀的網絡載荷域包含一個命令幀標識符和一個命令選擇域。命令幀標識符域與表3.39描述的斷開命令幀一樣。
3.5.4.3.1命令選擇域
8bit的命令選擇域的格式如圖3.15所示。
| 比特:0-4 |
5 |
6 |
7 |
| 保留 |
重新連接 |
請求 |
斷開子設備 |
圖3.15斷開命令幀選擇子域
3.5.4.3.1.1重新連接子域
重新連列子域是1bit在比特5的位置上。如果這個子域的值是1,同它目前父設備斷開的設備重現連接到網絡。如果該子域值是0,設備將不重新連接網絡。
3.5.4.3.1.2請求子域
請求子域長度是1bit在bit6位置上。如果該子域的值是1,那么斷開命令幀請求另一個設備離開網絡。如果該子域值是0,那么斷開命令幀表明發送設備准備斷開網絡。
3.5.4.3.1.3斷開子設備子域
斷開子設備子域是1bit長度在bit7的位置。如果該子域的值是1,那么斷開設備的子設備也斷開網絡。
3.5.5路由記錄命令
路由記錄命令允許穿梭於網絡中的單播數據包在命令載荷中記錄路由,且傳送到目的地址。路由記錄命令的載荷格式如圖3.16所示。
| 字節:1 |
1 |
可變長 |
| 命令幀標識符 |
應答計數器 |
應答列表 |
| 網絡層載荷 |
||
圖3.16路由記錄命令幀格式
3.5.5.1MAC層數據服務請求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,應提供下列信息。
(1)目的MAC層地址和PAN標識符應分別設置為該幀要發送到的鄰居設備的地址和PAN標識符。
(2)源MAC層地址和PAN標識符應設置為發送路由記錄命令的設備地址和PAN標識符。
(3)幀控制域應設為使MAC數據幀禁止使用MAC安全功能,因此任何來自於網絡層的可靠的幀都使用網絡層的安全協議。請求被應答。
(4)地址模式和內部PAN標記應設置為這里所描述的支持地址域。
3.5.5.2網絡層幀報頭域
網絡層幀控制域的幀類型子域應社這為表示該幀是網絡層命令幀。網絡層幀頭的源地址域和目的地址域分別設置成發起設備和目的設備的地址。幀控制域源路由子域應設置為0。
網絡層幀頭的發現路由子域應設置為抑制路由發現(參見表3.36)
3.5.5.3網絡層有效載荷
網絡層幀載荷包含命令標識符、應答計數器域和應答列表域。命令幀標識符域包含的值表明路由記錄命令幀。
3.5.5.3.1應答計數器域
這是個長度1字節的域,包含路由記錄命令的應答列表域的應答數。發起設備把它初始化為0,且每接收一個應答加1。
3.5.5.3.2應答列表域
應答列表域是應答數據包的節點的2字節的短地址的列表。地址是最少的有意義的格式。在發送一個數據包之前接收節點附加它們的短地址給列表。
3.5.6重新連接請求命令
重新連接請求命令允許設備重新連接它的網絡。通常是響應通信失敗才這么做,例如當終端設備不能同它的發起父設備通信。
| 字節:1 |
1 |
| 命令幀標識符(參見表3.39) |
能力信息 |
| 網絡層載荷 |
|
圖3.17重新請求命令幀格式
3.5.6.1MAC層數據服務請求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,應提供下列信息。
(1)目的MAC層地址和PAN標識符應分別設置為預期的父設備的地址和PAN標識符。
(2)源MAC層地址和PAN標識符應設置為先前的短地址和傳送重新請求命令幀的PAN標識符。
(3)傳送選擇應設置為請求確認。
(4)地址模式和內部PAN標記應設置為這里所描述的支持地址域。
3.5.6.2網絡層幀報頭域
當發送一個重新連接請求命令幀,網絡層管理實體將設置網絡層幀頭的源地址域是先前的傳送幀的設備的短地址,幀控制域的源IEEE地址子域將設置為1,且源IEEE地址域將設置為發送請求設備的IEEE地址。半徑域設置為1。
網絡層幀報頭中的發現路由子域應設置為抑制路由發現(參見表3.36)
3.5.6.3網絡層有效載荷域
網絡層載荷域包含一個命令標識符域和一個能力信息域。命令幀標識符包含表明重新連接請求命令幀的值。
3.5.6.3.1能力信息域
是一個1字節的域,這個域包含在連接請求命令中的能力信息域的格式,在表3.18中有描述。
3.5.7重新連接響應命令
設備發送重新連接響應命令來通知它的短地址的子設備和重新連接狀態。
| 字節:1 |
2 |
1 |
| 命令幀標識符(參見表3.39) |
短地址 |
重新連接狀態 |
| 網絡層載荷 |
|
|
圖3.18重新連接響應命令幀格式
3.5.7.1MAC層數據服務請求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,應提供下列信息。
(1)目的MAC層地址和PAN標識符應分別設置為請求重新連接網絡的設備的地址和PAN標識符。
(2)源MAC層地址和PAN標識符應設置為接收和處理重新請求命令幀的網絡地址和PAN標識符。
(3)請求確認。
(4)地址模式和內部PAN標記應設置為這里所描述的支持地址域。如果包含在重新請求命令的’Capability Information’字節的’Receiver on when idle’位的值等於0x00,那么TX操作將請求“間接傳送”。反之使用’directtransmission’。
3.5.7.2網絡層幀報頭域
當發送一個重新連接響應命令幀,網絡層管理實體將設置網絡層幀頭的目的地址域是先前的連接設備的短地址,幀控制域的源IEEE地址子域將設置為1,且網絡層幀頭的源IEEE地址域存在且包含發送響應的父設備的64位IEEE地址。幀控制域的目的IEEE地址這也是1,且網絡層幀頭的目的地址子域存在且包含響應重新連接請求命令幀的源的子設備的64位IEEE地址。
網絡層幀報頭中的發現路由子域應設置為抑制路由發現(參見表3.36)。
3.5.7.3網絡層載荷域
當發送一個重新連接響應命令幀,網絡層管理實體將設置網絡層幀頭的目的地址域是先前的重新連接設備的短地址。
3.5.7.3.1短地址域
如果重新連接成功,那么這個2字節域包含一個新的被指定的重新連接設備的短地址。如果重新連接沒成功,這個域包含廣播地址(0xffff)。
3.5.7.3.2重新連接狀態域
這是1字節的域,包含在【B1】中規定的非保留連接狀態值之一。
3.5.8連接狀態命令
連接狀態命令幀允許鄰居路由器之間通信,直到它們彼此的輸入鏈路成本如3.7.3.4描述。鏈路狀態命令載荷格式如圖3.19所示。
| 字節:1 |
1 |
可變長 |
| 命令幀標識符 |
命令選擇 |
鏈路狀態列表 |
| 網絡層載荷 |
||
圖3.19鏈路狀態命令幀格式
8bit的命令選擇域的格式如題3.20所示。
| 比特:0-4 |
5 |
6 |
7 |
| 入口計數器 |
第一幀 |
最后幀 |
保留 |
圖3.20鏈路狀態命令選擇域
在鏈路狀態列表中的一個入口的格式如圖3.21所示。
| 字節:2 |
1 |
| 鄰居設備網絡層地址 |
鏈路狀態 |
圖3.21鏈路狀態入口
鏈路狀態入口的鏈路狀態域的格式如下:
| 比特:0-2 |
3 |
4-6 |
7 |
| 輸入成本 |
保留 |
輸出成本 |
保留 |
3.5.8.1MAC層數據服務請求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,應提供下列信息。
(1)目的MAC層地址和PAN標識符應分別設置為發送鏈路狀態命令設備的地址和PAN標識符。
(2)目的地址必須設置成廣播地址0xffff。
(3)源MAC層地址和PAN標識符應設置為發送狀態命令設備的地址和PAN標識符。
(4)幀控制域應設為使MAC數據幀禁止使用MAC安全功能,因此任何來自於網絡層的可靠的幀都使用網絡層的安全協議。
(5)地址模式和內部PAN標記應設置為這里所描述的支持地址域。
3.5.8.2網絡層幀報頭域
為了發送一個鏈路狀態命令幀,網絡層幀頭的源地址域應設置為發送設備的地址。
網絡層幀報頭的目的地址設置成僅僅是路由器的廣播地址。(參見表3.51)
網絡層幀報頭中的發現路由子域應設置為抑制路由發現(參見表3.36)。
3.5.8.3網絡層有效載荷域
每一個鏈路狀態入口白含路由器鄰居設備的網絡地址,最沒有意義字節在鏈路狀態字節之后。輸入成本域包含設備為鄰居設備估計的鏈路成本,其值在1到7之間。輸出鏈路成本域包含鄰居表的輸出成本域的值。
鏈路狀態入口按網絡地址的上升順序存儲。如果所有的路由器鄰居設備不適合一個單幀,多針發送。當發送多幀時,對於幀N的鏈路狀態表中最后網絡地址等於幀N+1的鏈路狀態表的第一個網絡地址。
命令選擇域的入口計數器子域表明鏈路狀態表中的目前鏈路狀態入口的值。如果是發送者的鏈路狀態的第一幀那么第一幀子域值設置為1.。如果是發送者的鏈路狀態的最后幀那么最后幀子域值設置為1。如果發送這狀態適合單幀,第一幀和最后幀位都設置為1。
鏈路狀態幀作為一個沒有重發的單跳廣播傳輸。
3.5.9網絡層報告命令
網絡層報告命令允許設備報告網絡事件給協調器。可以報告的事件是無限電通信信道條件和PAN ID沖突。網絡層報告命令載荷格式如圖3.22所示。
| 字節:1 |
1 |
8 |
可變長 |
| 命令幀標識符(參見表3.39) |
命令選擇(參見圖3.23) |
EPID |
記錄信息 |
| 網絡層載荷 |
|||
圖3.23網絡層記錄命令幀載荷
3.5.9.1MAC層數據服務請求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,應提供下列信息。
(1)目的MAC層地址和PAN標識符應分別設置為發送網絡記錄命令設備的地址和PAN標識符。
(2)目的地址必須設置成NIB中的nwkManagerAddr
(3)源MAC層地址和PAN標識符應設置為發送網絡記錄命令設備的地址和PAN標識符,這個設備不一定是發出命令的設備
(4)幀控制域應設為使MAC數據幀禁止使用MAC安全功能,因此任何來自於網絡層的可靠的幀都使用網絡層的安全協議。傳送選擇需要設置請求確認。
3.5.9.2網絡層幀報頭域
為了是網絡記錄命令到達包含NIB中nwkManagerAddr參數的地址指定的設備,必須提供下列信息。
網絡層幀控制域的幀類型子域設置成表明這個幀是網絡層命令幀。
網絡層幀報頭域的目的地址域應設置成包含NIB中nwkManagerAddr參數的16位網絡地址。
網絡層幀報頭域的源地址域應設置成發送此幀的設備的16位網絡地址。
網絡層幀報頭中的發現路由子域應設置為抑制路由發現(參見表3.36)。
3.5.9.3網絡層有效載荷域
網絡層幀載荷包含一個命令標識符域、一個命令選擇域、一個EPID和一個記錄信息載荷。
命令標識符域包含表明一個網絡記錄命令幀的值。
3.5.9.3.1命令選擇域
8bit的命令選擇域的格式如圖3.23所示。
| 比特:0-4 |
5-7 |
| 記錄信息計數器 |
記錄命令標識符(參見圖3.24) |
圖3.23網絡層記錄命令選擇子域
3.5.9.3.1.1記錄信息計數器子域
記錄命令標識符子域包含一個目標表明記錄信息命令的類型。圖3.24包含能插入這個域的值。
| 命令標識符值 |
記錄類型 |
| 0x00 |
PAN標識符出土 |
| 0x01 |
本地沖突記錄 |
| 0x02-0x07 |
保留 |
圖3.24 記錄命令標識符子域
3.5.9.3.2EPID子域
EPID域包含64位EPID,定義一個網絡,記錄設備是這個網絡中的一個成員。
3.5.9.3.3記錄信息
記錄信息域根據記錄命令標識符子域的值提供正在記錄的信息,域的格式。
3.5.9.3.3.1PAN標識符沖突記錄
如果記錄命令標識符子域的值表示一個PAN標識符沖突記錄,那么記錄信息域由一個16位PAN標識符列表組成,這個標識符是在記錄設備的鄰居運行的。記錄信息計數器將設置等於包含在記錄信息域中的PAN標識符的數。
3.5.9.3.3.2本地信息記錄
如果記錄命令標識符子域的值表示一個本地信息記錄那么記錄信息域是有能量掃描值列表(每個信道1字節)和所有鄰居設備的Tx失敗總和(2字節)組成。記錄信息計數器包含正在記錄的信道的數。
3.5.10網絡更新命令
網絡更新命令允許由NIB中的nwkManagerAddr參數確定的設備廣播配置信息的改變到網絡中的所有設備。例如廣播網絡將改變短PAN標識符。
網絡更新命令幀的載荷格式如圖3.25所示。
| 字節:1 |
1 |
8 |
2 |
| 命令幀標識符 |
命令選擇(參見圖3.23) |
EPID |
更新信息 |
| 網絡層載荷 |
|||
圖3.23網絡更新命令幀格式
3.5.10.1MAC層數據服務請求
為了利用MAC層數據服務來傳輸該命令,根據802.15.4協議標准,MAC層幀報頭包含如下信息。
(1) 為了使命令幀能到達沒有接收到更新命令的網絡設備,目的PAN標識符將設置成ZigBee協調器的老PAN標識符。目的地址必須設置成廣播地址0xffff。
(2) 源MAC地址和PAN標識符設置成發送網絡記錄命令設備的網絡地址和老的PAN標識符,這個設備不一定是發送這個命令的設備。
(3) 幀控制域應設為使MAC數據幀禁止使用MAC安全功能,因此任何來自於網絡層的可靠的幀都使用網絡層的安全協議。傳送選擇需要設置請求確認。
3.5.10.2網絡層幀報頭域
為了發送一個網絡更新命令幀,網絡層幀頭的源地址域應設置為發送設備的地址。
網絡層幀報頭的目的地址設置成廣播地址0xFFFF。
網絡層幀報頭中的發現路由子域應設置為抑制路由發現(參見表3.36)。
3.5.10.3網絡層有效載荷域
網絡層幀載荷包含一個命令標識符域、一個命令選擇域、一個EPID和一個更新命令可變域。
命令標識符域包含表明一個網絡更新命令幀的值。
3.5.10.3.1命令選擇域
8bit的命令選擇域的格式如圖3.26所示。
| 比特:0-4 |
5-7 |
| 更新信息計數器 |
更新命令標識符(參見圖3.27) |
圖3.23網絡層更新命令選擇子域
3.5.10.3.11更新信息計數器域
更新信息計數器子域包含一個整數表明包含在更新信息域里的記錄數。記錄的大小根據更新命令標識符的值。
3.5.10.3.1.2更新命令標識符子域
更新命令標識符子域包含一個整數表明更新信息命令的類型。圖3.27包含能插入這個域的值。
| 命令標識符值 |
記錄類型 |
| 0x00 |
PAN標識符更新 |
| 0x01 |
網絡更新 |
| 0x02-0x07 |
保留 |
圖3.27更新命令標識符子域
3.5.10.3.2EPID域
EPID包含64位EPID確定網絡在更新。
3.5.10.3.3更新信息
更新信息域根據更新命令標識符子域的值提供正在更新的信息,域的格式。
3.5.10.3.3.1PAN標識符更新
如果更新命令標識符子域的值表示一個PAN標識符更新,那么更新信息域由一個單獨的16位PAN標識符組成,這個標識符是網絡正在使用的新的標識符。更新信息計數器將設置等於1,僅僅只有一個單獨的PAN標識符包含在更新信息域中的。
3.5.10.3.3.2網絡更新
如果更新命令標識符子域的值表示一個網絡更新,那么更新信息由潛在的網絡使用的有效信道的32位bitmask,使用的信道的32位bitmask和nwkManager Addr組成。
3.6常量和NIB屬性
3.6.1網絡層常量
網絡層所定義的特性常量如表3.41所示。
| 常量 |
描述 |
值 |
| nwkcCoordinatorCapable |
布爾標記,表明設備是否具有成為ZigBee協調器的能力。其中0x00表明設備不具備這樣的能力;0x01表明設備有成為ZigBee協調器能力 |
在初始化時設定 |
| nwkcDefaultSecurityLevel |
使用的缺省安全級別(參見第4章) |
ENC-MIC-64 |
| nwkcDiscoveryRetryLimit |
路由發現重試的最大次數 |
0x03 |
| nwkcMaxDepth |
一台設備擁有的最大深度(離ZigBee協調器的最小邏輯跳數) |
0x0f |
| nwkcMinHeaderOverhead |
由網絡層加到載荷中的最大字節數 |
0x08 |
| nwkcProtocolVersion |
設備中ZigBee網絡層協議的版本 |
0x02 |
| nwkcWaitBeforeValidation |
在接收路由應答和發送有效路由信息之間,多播路由請求發送者持續時間(單位:毫秒) |
0x500 |
| nwkcRepairThreshold |
鏈路失敗和網絡層啟動維修機制后,所能允許的最大通信錯誤數 |
0x03 |
| nwkcRouteDiscoveryTime |
直到路由發現終止,所需的持續事件(單位:毫秒) |
0x2710 |
| nwkcMaxBroadcastJitter |
最大廣播不穩定時間(單位:毫秒) |
0x40 |
| nwkcInitialRREQRetries |
路由請求命令幀的第一個廣播傳輸的重試次數 |
0x03 |
| nwkcRREQRetries |
中間ZigBee路由器或協調器請求命令幀廣播重傳次數 |
0x02 |
| nwkcRREQRetryInterval |
廣播路由請求命令幀重傳的間隔(單位:毫秒) |
0xFF |
| nwkcMinRREQJitter |
路由請求命令幀重傳的最小不穩定(2毫秒間隔) |
0xFE |
| nwkcMaxRREQJitter |
路由請求命令幀重傳的最大不穩定(2毫秒間隔) |
0x40 |
| nwkcMACFrameOverhead |
ZigBee網絡層使用的MAC層幀頭的大小。ZigBee協議棧Profile能增加這個常量值以保證與IEEE802.15.4 2003協議兼容 |
0x0b |
3.6.2網絡層信息庫
網絡層信息庫(NIB)由管理設備網絡層所需要的屬性組成。每一個屬性都可以分別使用NLME-GET.request和NLME-SET.request原語進行讀寫。NIB屬性如表3.42所示。
表3.42網絡層信息庫屬性
| 屬性 |
代碼 |
類型 |
有效值范圍 |
描述 |
缺省值 |
| nwkSequenceNumber |
0x81 |
整型 |
0x00-0xff |
加到輸出幀上的序列號 |
范圍內的隨機值 |
| nwkPassiveAck- Timeout |
0x82 |
整型 |
0x00-0x0a |
父設備與所有子設備重傳廣播信息的最長持續時間(單位:秒,被動確認超時) |
0x03 |
| nwkMaxBroadcast- Retries |
0x83 |
整型 |
0x00-0x05 |
廣播幀傳送失敗后最大重傳次數 |
0x03 |
| nwkMaxChildren |
0x84 |
整型 |
0x00-0xff |
現有網絡上所能擁有的最大子設備數 |
0x07 |
| nwkMaxDepth |
0x85 |
整型 |
0x01- nwkcMaxDepth |
設備擁有的蛇深度 |
0x05 |
| nwkMaxRouters |
0x86 |
整型 |
0x01-0xff |
設備能接入的路由器數。網絡中所有設備的此值都是由ZigBee協調器來決定 |
0x05 |
| nwkNeighborTable |
0x87 |
設置 |
可變 |
設備中現有的鄰居表 |
未設置 |
| nwkNetworkBroadcast- DeliveryTime |
0x88 |
整型 |
(nwkPassive AckTimeouT* nwkBroadcast Retries)-0xff |
廣播信息漫布整個網絡的持續時間(單位:秒) |
nwkPassiveAck Timeout * nwkBroadcastR etries |
| nwkReportConstantCost |
0x89 |
整型 |
0x00-0x01 |
如果設置為0,則網絡層將使用MAC層所報告的LQI值計算所有鄰居節點鏈路的成本。否這它將報告一個常量值 |
0x00 |
| nwkRouteDiscovery- RetriesPermitted |
0x8a |
整型 |
0x00-0x03 |
在失敗路由請求之后允許重試的最大次數 |
Nwkc Discovery RetryLimit |
| nwkRouteTable |
0x8b |
設置 |
可變 |
設備的現有路由表 |
未設置 |
| nwkSymLink |
0x8e |
布爾型 |
TRUE or FALSE |
現有的路由對稱設置TRUE,表示路由默認由對稱鏈路組成。路由發現期間建立了前向和后向路由,並且二者是相同的。FALSE表示路由不是由對稱鏈路組成。在路由發現期間只有前向路由被保留 |
FALSE |
| nwkCapabilityInformation |
0x8f
|
比特組 |
參見表3.18 |
包含網絡連接期間建立的設備能力信息 |
0x00 |
| nwkAddrAlloc |
0x90 |
整型 |
0x00 - 0x02 |
確定分配地址方法的值:0x00=使用分布式地址分配,0x01=保留,0x02=使用隨機地址分配 |
0x00 |
| nwkUseTreeRouting |
0x91 |
布爾型 |
TRUE orFALSE |
確定網絡層是否有使用分等級路由(樹形路由)能力的標志:TRUE=有使用分等級路由能力;FALSE=不使用分等級路由 |
TRUE |
| nwkManagerAddr |
0x92 |
整型 |
0x0000 -0xfff7 |
指定的網絡管理地址 |
0x0000 |
| Reserved |
0x93 |
|
|
|
|
| Reserved |
0x94 |
|
|
|
|
| nwkTransaction- PersistenceTime |
0x95 |
整型 |
0x0000 -0xffff |
協調器存儲處理的最大時間(在超幀周期)且表明在它的信標內。這個屬性反應了MAC PIB屬性中的Transaction- PersistenceTime的值且高層對此值的任何改變將反應在MAC PIB屬性值中 |
0x01f4 |
| nwkShortAddress |
0x96 |
整型 |
0x0000 -0xfff7 |
設備使用的PAN通信的16位地址。這個屬性反應了MAC PIB屬性中的macShortAddress的值且高層對此值的任何改變將反應在MAC PIB屬性值中 |
0xffff |
| nwkStackProfile |
0x97 |
整型 |
0x00-0x0f |
設備中使用的ZigBee協議棧的profile標識符 |
0 |
| Reserved |
0x98 |
|
|
|
|
| nwkGroupIDTable |
0x99 |
設置 |
可變 |
設備是這個網絡組的成員,標識符的設置范圍在0x00 -0xff |
未設置 |
| nwkExtendedPANID |
0x9A |
64位擴展地址 |
0x000000 0000000000- 0xffffffff fffffffe |
設備是這個網絡的成員的擴展PAN標識符。0x000000000- 0000000標識擴展的PAN標識未知 |
0x0000000 000000000
|
| nwkUseMulticast |
0x9B |
布
爾型 |
TRUE orFALSE |
確定多播信息在哪一層發生的標志。TRUE=多播發生在網絡層;FALSE=多播發生在應用子層且使用應用子層幀報頭 |
TRUE |
| nwkRouteRecordTable |
0x9C |
設置 |
可變 |
路由記錄表 |
未設置 |
| nwkSetConcentrator |
0x9D |
布爾型 |
TRUE or FALSE |
確定設備是否是集中器的標志。TRUE=是被是集中器;FALSE=設備不是集中器 |
FALSE |
| nwkConcentratorRadius |
0x9E |
整型 |
0x00 - 0xff |
協調器路由發現的跳計數器被半徑 |
0x0000 |
| nwkConcentrator- DiscoveryTime |
0x9F |
整型 |
0x00 - 0xff |
兩個協調器路由發現的間隔時間(單位:秒)如果設置成0x0000只有高層在啟動時發現路由 |
0x0000 |
| nwkLinkStatusPeriod |
0xA0 |
整型 |
0x00 - 0xff |
鏈路狀態命令幀之間的間隔(單位:秒) |
0x0F |
| nwkRouterAgeLimit |
0xA1 |
整型 |
0x00- 0xff |
在鏈路成本復位到0前,丟失的鏈路狀態命令幀個數 |
3 |
| nwkUniqueAddr |
0xA2 |
布爾型 |
TRUE or FALSE |
確認網絡層是否檢測和改正沖突地址的標志:TRUE=所用地址是唯一的;FALSE=所用地址不唯一 |
TRUE |
| nwkAddressMap |
0xA3 |
設置 |
可變 |
64位IEEE當前的設置到16位網絡地址地圖 |
未設置 |
| nwkTimeStamp |
0xA4 |
布爾型 |
TRUE or FALSE |
確定輸入輸出數據包是否提供一個時間表示的標志。TURE=提供了時間表示;FALSE=未提供了時間表示 |
FALSE |
表3.43路由記錄表入口幀格式
| 域名 |
域類型 |
有效值范圍 |
相關信息 |
| Network Address |
整型 |
0x0000-oxfff7 |
路由記錄的目的短地址 |
| Relay Count |
整型 |
0x0000 -0xffff |
從協調器到目的設備的應答節點的計數器 |
| Path |
網絡地址設置 |
|
短地址的設置表示從協調器到目的設備的路由順序 |
表3.44網絡地址地圖
| 64位IEEE地址 |
16位網絡地址 |
| 一個有效的64位IEEE地址或者如果未知就是NULL |
0x0000 - 0xfff7 |
3.7功能描述
3.7.1網絡和設備的維護
所有的ZigBee設備都具有以下功能:
1.連接網絡。
2.斷開網絡。
ZigBee協調器和路由器都具有以下附加功能:
- 允許設備用如下方式與網絡連接:
① MAC層的連接命令。
② 應用層的連接請求命令。
- 允許設備以如下方式斷開網絡:
①MAC層的斷開命令。
②應用層的斷開命令。
③對邏輯網絡地址進行分配。
④維護鄰居設備表。
ZigBee協調器應具有建立一個新網絡的功能。
ZigBee路由器和終端設備在一個網絡中應提供輕便支持。
3.7.1.1建立一個新的網絡
設備通過NLME-NETWORK-FORMATION.request原語來啟動一個新的網絡的建立過程。僅僅當具有ZigBee協調器能力,且當前還沒有與網絡連接的設備才可以嘗試着去建立一個新的網絡。如果該過程由其他設備開始,則網絡層管理實體將終止改過程,並向其上層發出非法請求的報告。該步驟通過發出狀態參數為INVALID_REQUEST的NLME-NETWORKFORMATION.confirm原語來完成。
當建網過程開始后,網絡層將首先請求MAC層對協議所規定的信道,或由物理層所默認的有效信道進行能量檢測掃描,以檢測可能的干擾。為實現能量檢測掃描,設備網絡層通過發送掃描類型(ScanType)參數設置為能量檢測掃描的MLME-SCAN.request原語到MAC層進行信道能量檢測掃描,掃描結果通過MLME-SCAN.confirm原語返回。
當網絡層管理實體收到成功的能量檢測掃描結果后,將以遞增的方式對所測量的能量值進行信道排序,並且拋棄那些能量值超出了可允許能量水平的信道,選擇可允許能量水平的信道有待進一步處理。此后,網絡層管理實體將通過發送MLME-SCAN.request原語執行主動掃描,其中該原語的ScanType參數設置為主動掃描,ChannelList參數設置為可允許信道的列表,搜索其他的ZigBee設備。為了決定用於建立一個新網絡的最佳通道,網絡層管理實體將檢查PAN描述符,並且所查找的第一個信道為網絡的最小編號。
如果網絡層管理實體找不到適合的信道,就將終止建網過程,並且向應用層發出啟動失敗信息,即通過發送參數狀態為STARTUP_FAILURE.的NLME-NETWORK-FORMATION.confirm原語向其上層通告。
如果網絡層管理實體找到了合適的信道,則將為這個新網絡選擇一個PAN標識符。為了選擇一個PAN標識符,設備將選擇一個隨機的PAN標識符值小於等於3ffff沒有在已選擇信道里使用的。一旦網絡層管理實體做出了選擇,則它通過發出MLME-SET.request原語將這個值寫為MAC層macPANId屬性。
如果選擇不出唯一的標識符,網絡層管理實體將終止程序,並且通過發送狀態參數為STARTUP_FAILURE的NLME-NETWORK-FORMATION.confirm原語向其上層通告。
網絡層管理實體一旦選擇了一個PAN標識符,將選擇一個等於0x0000的16位網絡地址,並且設置MAC層的macShortAddress PIB屬性,使其等於所選擇的網絡地址。
一旦選擇了網絡地址,網絡層管理實體核對PIB屬性的endedPANId的值。如果這個值是0x0000000000000000這個屬性以MAC常量aExtendedAddress初始化。
一旦nwkExtendedPANId的值核對,網絡層管理實體通過MLME-START.request原語給MAC層開始新的PAN操作。MLME-START.request原語的參數根據NLME-NETWORK-FORMATION.request原語來施舍,即根據信道掃描和所選擇的PAN標識符來設置。PAN的啟動狀態通過MLME-START.confirm原語返回到網絡層。
當網絡層管理實體收到PAN的啟動狀態后,將向啟動ZigBee協調器請求狀態的上層報告,即通過發出the NLME-NETWORK-FORMATION.confirm原語向其上層報告,其原語的狀態參數為從MAC層的MLMESTART.confirm原語所返回的值。
成功啟動一個新網絡的信息流程如圖3.28所示。
3.7.1.2允許設備與網絡連接
通過NLME-PERMIT-JOINING.request原語來允許設備與網絡連接。僅僅只有設備為ZigBee協調器或者路由器時,才能企圖允許設備與網絡連接。
當此過程開始時,若設置PermitDuration參數為0x00則啟動該過程,並且網絡層管理實體把在MAC層的macAssociationPermit PIB屬性設置為FALSE。MAC層的屬性設置通過MLME-SET. Request原語來完成。
當此過程開始時,若設置PermitDuration參數為一個0x01和0xFE之間的值時,則網絡層管理實體將把在MAC層中的macAssociationPermit PIB屬性設置為TRUE,並且網絡層管理實體將啟動一個定時器,用來對一個特定的時間進行計時,達到該時間時,定時器停止計時,在該定時器停止時,網絡層管理實體將把MAC層中的macAssociationPermit PIB屬性設置為FALSE。
當此過程開始時,若設置PermitDuration參數設置為0xFF,則網絡層管理實體將把在MAC層中的macAssociationPermit PIB屬性設置為TRUE,以表示無限定時間,除非發送另一個NLME-PERMITJOINING.request原語。
允許設備同網絡連接的過程如圖3.29所示。
3.7.1.3連接網絡
在一個網絡中具有從屬關系的設備允許一個新設備連接時,它就與新連接的設備形成了一個父子關系。新設備成為子設備,而第一個設備為父設備。一個子設備通過一下兩個方法加入到網絡中:
① 子設備用MAC連接程序來加入網絡;
② 在設備直接同一個預先所指定的父設備連接來加入網絡。
3.7.1.3.1通過聯合方式加入網絡
本小節詳細介紹了一個子設備同一個網絡連接的過程,以及一個ZigBee協調器或路由器(父設備)在接收到連接請求命令后所采取的措施。
3.7.1.3.1.1子設備流程
通過MAC層連接程序連接網絡的流程為:首先,應用層發送NLME-NETWORK-DISCOVERY.request原語,其中掃描參數(ScanChannels)設置為網絡將要掃描的信道,掃描持續時間參數(ScanDuration)設置為掃描每個信道所需要的時間。網絡層接收到該原語后,將發送MLME-SCAN.request原語請求MAC層執行一個主動掃描。
掃描設備的MAC層在掃描過程中一旦接收到有效長度不為零的信標幀時,將向其網絡層發送MLME-BEACON-NOTIFY.indication原語。該原語中包括的信息為信標設備地址、是否允許連接和信標載荷。(見【B1】參數完整列表)掃描設備的網絡層將檢查信標載荷中的協議標識符域的值,並驗證它是否與ZigBee協議識別符匹配。如果不匹配,則忽略該信標。反之,設備將從接收到的信標中,將相關的信息(見圖3.42信標載荷結構)復制到的的鄰居表中(見表3.45鄰居表條目內容)。
一旦MAC層完成對信道的掃描,在向網絡層管理實體發送MLME-SCAN.confirm原語后,網絡層將發送NLME-NETWORK-DISCOVERY.confirm原語,其參數包括掃描得到的網絡描述參數。這些描述參數為ZigBee版本號、堆棧結構、擴展個域網網標識符(PANId)、個域網網標識符(PANId)、邏輯信道和是否允許連接的信息(見表3.9).
其上層收到NLME-NETWORK-DISCOVERY.confirm原語,就可得到目前鄰居網絡的信息。以便發現更多的網絡或者其他原因,上層可以選擇重新執行網絡發現命令。如果不重新執行,它將從所發現的網絡中選擇一個網絡進行連接,即通過發送NLME-JOIN.request原語進行連接,其中RejoinNetwork參數設置為0x00,且JoinAsRoute參數設置為設備是否同網絡連接。
僅僅只有那些還沒有同網絡連接的設備才能執行該連接流程。如果任何其他設備執行這個流程,則網絡管理實體將終止這個流程,並且向上層發送狀態參數為INVALID_REQUEST的NLME-JOIN.confirm原語。
對於一個還沒有同網絡連接的設備,NLME-JOIN.request原語將使得網絡層在鄰居表中搜索一個合適的父設備。一個合適的父設備必須具備2個條件:允許連接;鏈路成本最大為3(見3.7.3.1鏈路成本的詳細計算)。如果在鄰居表中存在潛在的父設備子域,則該子域設置為1。
如果鄰居表中不包括合適的父設備,網絡層管理實體將發送參數狀態為NOT_PERMITTED的NLME-JOIN.confirm原語。如果鄰居表中包括不只一個合適的父設備,則選擇具有到ZIgBee協調器最小深度的設備。如果存在多個到ZigBee協調器最小深度的設備,則可在他們之間任意地選擇一個。
一旦選擇了一個合適的父設備,網絡層管理實體將向MAC層發送MLMEASSOCIATE.
Request原語,其原語的地址參數為在鄰居表中所選擇的設備地址,並通過MLMEASSOCIATE.confirm原語將連接的狀態返回到網絡層管理實體。
如果試圖連接網絡沒有成功,網絡層將收到從MAC層發送來的MLMEASSOCIATE.
Confirm原語,其狀態參數為錯誤代碼。如果狀態參數表明拒絕與鄰居設備連接(即PAN容量或者PAN接入拒絕),則嘗試連接的設備將把鄰居表中潛在的父設備子域設置為0,以表示嘗試連接失敗。潛在的父設備子域為0使得網絡層將不會發送另一個連接請求原語去嘗試連接該鄰居設備。每次發送MLMESCAN.request原語,將鄰居表中的潛在的父設備子域設置為1。
如果潛在的父設備不允許連接新的路由器(路由器的最大數,已經連接設備的最大路由器),並且要連接的設備將JoinAsRouter參數設置為TRUE,則連接請求也可能不成功。在這種情況下,NLMEJOIN.confirm原語將給出NOT_PERMITTED的狀態,子設備應用層將希望再次嘗試連接,但只能作為一個終端設備,將發送另一個NLME-JOIN.request原語,且原語的JoinAsRouter參數設置為FALSE。
如果嘗試連接網絡失敗,網絡層管理實體將試圖從鄰居表中找尋一個合適的父設備。如果不存在這樣的設備,網絡管理實體將發出NLME-JOIN.confirm原語,其狀態參數值為MLME-ASSOCIATE.confirm原語所返回的值。
如果嘗試連接失敗,並且存在第二個鄰居的設備,該設備可以作為合適的父設備,則網絡層啟動連接第二個設備的MAC層連接程序。網絡層將不斷重復這個過程,知道直到成功的與網絡連接或者已嘗試所有可能連接的網絡。
如果設備不能成功的連接由上層所指定的網絡,網絡管理實體將通過NLME-JOIN.confirm原語來終止該過程,其原語的狀態參數為最后接收到的MLME-ASSOCIATE.confirm原語所返回的值。在這種情況下,設備將不接收有效的邏輯地址,也不允許在網絡中通信。
如果嘗試連接網絡成功,網絡層收到MLME-ASSOCIATE.confirm原語,該原語中將包括16位的邏輯地址,該邏輯地址在網絡中是唯一的,並且該子設備在未來的通信中將使用這個邏輯地址。然后,網絡層將設置相對應的鄰居表的關系域,以表示鄰居設備為它的父設備。此時,父設備將把新連接的設備增加到它的鄰居表中。而且網絡層將更新NIB中nwkShortAddress的值。
如果設備試圖同一個安全網絡連接且它是路由器,則在發送信標前必須等待父設備對它進行驗證,驗證之后就可以進行連接。因而,該設備將等待上層發送來的NLME-START-ROUTER.request原語。如果設備為一個路由器,當它的網絡層管理實體接收到該原語,就發送MLME-START.request原語。如果NLME-STARTROUTER.request原語由一個終端設備發出,則網絡層將發出NLME-START-ROUTER.confirm原語,其原語狀態參數設置為INVALID_REQUEST。
當設備成功的同網絡連接,如果設備是路由器且上層將發出NLME-START-ROUTER.request原語,則網絡層將向MAC層MLME-START.request原語。PANId、LogicalChannel、BeaconOrder和SuperframeOrder參數設置將設置為它所對應的父設備在鄰居表中的所對應的參數值。而PANCoordinator和CoordRealignment參數都會設置為FALSE,網絡層接收到MLME-START.confirm原語后,將發送具有相同狀態的NLME-START-ROUTER.confirm原語。
圖3.30為通過聯合方式同網絡連接的流程。
3.7.1.3.1.2父設備流程
ZigBee協調器或者路由器使用MAC層將一個設備同它所在的網絡進行連接,其流程由來自於MAC層的MLMEASSOCIATE.indication原語來進行初始化。僅僅當這些設備為協調器或者路由器,並且允許同網絡連接的設備時,才能執行這個流程。如果設備為其他設備,網絡層管理實體將終止這個流程。
當這個流程開始后,潛在父設備的網絡層管理實體首先將要確定設備是否願意同已經存在的網絡連接。為了確定這一點,網絡層管理實體將會搜索的鄰居表以確定是否能找到一個匹配的64位擴展地址。如果搜索到相匹配的地址,則網絡層管理實體將檢查在鄰居表中給定的設備能力是否匹配設備類型。如果設備類型也匹配則網絡層管理實體將得到一個相應的16位網絡地址,並且向MAC層發送連接響應。如果設備類型不匹配,網絡管理實體將移除鄰居表中設備的所有記錄且重新啟動MLME-ASSOCIATION.indication。如果搜索不到相匹配的地址,如果可能,網絡管理實體將分配一個16位的網絡地址給這個新設備。見3.7.1.5節和3.7.1.6節地址分配解釋。
如果潛在的父設備沒有能力接受更多的子設備(用完了它的分配地址空間),則網絡管理實體將終止該流程,然后向MAC層發出MLME-ASSOCIATE.response原語對其響應。該原語的狀態參數將表明PAN的能力。
如果同意連接請求,則父設備的網絡管理實體將使用設備所提供的信息在它的鄰居表中為子設備創建一個新的入口。並且隨后向MAC層發送表明連接成功的MLME-ASSOCIATE.response原語。MLME-COMMSTATUS.indication原語將傳送給子設備的響應狀態回到網絡層。
如果傳送不成功(即MLME-COMM-STATUS.indication原語狀態參數不為SUCCESS),則網絡層管理實體將終止程序。如果傳送成功,網絡層管理實體將通過向上層發送NLME-JOIN.indication原語,表明子設備已經成功地同網絡連接。
成功的將設備同網絡連接的流程如圖3.31。
3.7.1.3.2重新連接網絡
已經同網絡失去所有聯系的設備,例如一個ZED同它的父設備失去聯系,能通過使用網絡層重新連接請求和網絡層重新連接響應命令來重新加入到網絡。重新加入過程同前面所說的聯合過程是一樣的,除了MAC層聯合過程被包括重新加入請求和重新加入響應命令的交流所代替。且因為網絡層命令使用網絡層安全,沒有認證步驟執行。使用這些命令代替MAC層程序允許設備重新連接網絡而不是一個新設備連接。
3.7.1.3.2.1子設備流程
重新連接一個網絡的流程是通過發出NLME-JOIN.request原語來啟動網絡層重新連接流程,如圖3.32所示,原語中RejoinNetwork參數設置為0x02且ExtendedPANId參數設置成網絡沖連接的ExtendedPANId。JoinAsRouter參數設置將表明設備是否願意作為路由設備連接網絡。
ScanChannels參數將設置成表示哪些信道被掃描來定位這個網絡且ScanDuration參數設置來表示掃描每一個信道的時間長度。
一旦接收到這條原語,網絡層發送MLMESCAN.request原語請求MAC層進行主動掃描。
掃描設備的MAC層在掃描過程中接收到有效長度不為零的信標幀時,將向其網絡管理實體發送MLME-BEACON-NOTIFY.indication原語。掃描設備的網絡管理實體檢查有效信標中包含的ExtendedPANId看它是否是正確的值。如果不正確,則忽視該信標。反之,設備將從所接收到的信標中,將相關信息復制到它的鄰居表中。
一旦MAC層完成對信道的掃描,在向網絡層管理實體發送MLME-SCAN.confirm原語,網絡層將為合適的父設備搜索鄰居表。一個合適的父設備將radvertise在JoinAsRoute參數的請求類型的設備能力且鏈路成本最大應是3.如果鄰居表沒有合適的父設備,網絡管理實體將用狀態參數是NOT_PERMITTED的NLME-JOIN.confirm原語來響應。如果有不止一個設備是合適的父設備且nwkAddrAlloc NIB屬性值是0x00,則選擇具有到ZigBee協調器最小深度的設備。一旦選擇了一個合適的父設備,網絡層管理實體將構造一個網絡層重新請求命令幀。在重新連接命令中的地址參數將設置成包含從鄰居中選擇的設備的地址信息。
在用數據服務網絡層重新連接請求命令成功傳送后,將加載一個倒計時的定時器,它的值是aResponseWaitTime(【B1】),如果RxOnWhenIdle參數值是FALSE,當定時器停止時,網絡層將產生MLME-POLL.request原語給潛在的父設備,來重新獲得重新連接響應命令。
一旦接收到重新響應命令幀,在以上步驟之后或者任何其他時間,設備將檢查有效命令幀的重新連接設備的IEEE地址域和父設備的IEEE地址域。如果重新連接設備的IEEE地址域不等於接收到設備的IEEE地址的值或者如果父設備的IEEE地址域不等於重新請求命令幀發送給的最新的潛在父設備的IEEE地址值,或者當前父設備是主動提供重新連接響應的情況,那么丟棄重新請求命令幀沒有進一步處理。
如果重新請求響應命令幀的重新連接狀態域表明拒絕允許重新連接鄰居設備(也就是,PAN在能力上或PAN訪問被拒絕),那么設備試圖重新連接應該在相應的鄰居表表入口設置潛在的父設備位為0來表明企圖連接失敗。設置潛在父設備位為0確保網絡層不發送其他的請求來重新連接一個相同的鄰居設備。如果試圖連接失敗,那么網絡層管理實體將試圖在鄰居表中尋找另一個合適的父設備。如果沒有找到這樣的設備,網絡管理實體將發出狀態參數設置是NOT_PERMITTED的NLME-JOIN.confirm的原語。如果試圖連接失敗且有第二個鄰居設備是合適的父設備,網絡層將發出網絡層重新連接程序與這第二個設備。網絡層將不斷重復這個過程直到它重新連接PAN成功或者是耗盡它重新連接PAN的選擇權。如果其高層說明這個設備重新連接PAN沒有成功,那么網絡層管理實體將使用狀態參數設置是NOT_PERMITTED的NLMEJOIN.confirm原語來終止這個過程。在這種情況下,設備不會收到一個有效的邏輯地址且不允許在這個網絡傳送。如果試圖重新連接成功,網絡層將收到包含一個在網絡中唯一的16位邏輯地址的網絡層重新連接響應命令,子設備在未來的傳送中要使用這個地址。網絡層設置相應的鄰居表入口的相關域來表明這個鄰居是它的父設備。此時,父設備增加這個新設備到它的鄰居表中。另外,網絡層將更新在NIB中nwkShortAddress的值。
3.7.1.3.2.2父設備流程
ZigBee協調器或者路由器重新連接一個設備到它的網絡的流程是使用通過MAC數據服務使網絡層重新請求命令幀的到達來執行網絡層重新連接流程。僅僅當這些設備為ZigBee協調器或者路由器時才可以執行這個流程。如果是其他設備執行該流程,那么網絡管理實體將終止該流程。當該流程開始時,潛在父設備的網絡層管理實體首先確定它是否已經知道請求設備。為了確定這一點,網絡層管理實體將搜索它的鄰居表來確定是否有一個匹配的64位擴展地址。如果搜索到匹配的擴展地址,網絡層管理實體將檢查提供的設備能力是否匹配鄰居表中記錄的設備類型。如果設備類型也匹配,網絡管理實體將考慮連接企圖成功且用這個在鄰居表中搜索到的16位網絡地址作為正在連接設備的網絡地址。如果設備類型不匹配,那么網絡管理實體將移除在它的鄰居表中的設備所有記錄,且重新開始網絡層重新連接命令流程。如果沒有搜索到匹配的擴展地址,如果可能,網絡管理實體給這個新設備分配一個16位的網絡地址。見3.7.1.5節和3.7.1.6節地址分配機制詳述。如果潛在的父設備沒有能力接受連接設備,網絡管理實體將終止這個流程,且表明這個事實在后來的重新響應命令。命令的狀態參數將表明PAN的能力。如果允許重新連接請求,父設備的網絡層管理實體將在鄰居表中為子設備創建一個新的入口,或者如果已經存在這個入口就用提供的設備信息修改這個現有的入口,且通過使用網絡層重新響應命令回答請求設備來表明重新連接成功。網絡層管理實體發送NLME-JOIN.indication原語通知其上層子設備已經重新連接這個網絡。設備成功重新連接網絡的流程如圖3.33。
3.7.1.3.3直接方式連接網絡
本小節將介紹子設備如何通過預先分配的父設備(ZigBee協調器或路由器)直接同網絡連接的過程。在這種情況下,父設備將為子設備預先分配一個64位地址。下面將描述如何使用這個優先地址來建立父子網絡關系。
ZigBee協調器或者路由器直接將一個設備加入它所在的網絡的流程是從發送NLME-DIRECT-JOIN.request原語開始的,其原語的DeviceAddress參數設置為要連接網絡的設備地址。僅僅只有設備為ZigBee協調器或者路由器時,才可以執行這個流程。如果其他設備執行這個流程,網絡層管理實體將終止該流程,並且將發送NLME-DIRECT-JOIN.confirm原語向其上層通告其非法請求,其原語的狀態參數設置為INVALID_REQUEST。
當該流程開始后,父設備的網絡層管理實體將首先確定所指定的設備是否存在於網絡中。為完成這個過程,網絡層管理實體將搜索它的鄰居表,以確定是否有一個相匹配的64位擴展地址。如果存在一個相匹配的64位地址,則網絡層管理實體將終止該流程,並發送NLME-DIRECT-JOIN.confirm原語向其上層通告該設備已經存在於網絡設備列表中,其原語的狀態參數設置為ALREADY_PRESENT。
如果不存在一個相匹配的64位地址,如果可能,網絡層管理實體將為這個新設備分配日一個16位網絡地和一個新的鄰居表入口。見3.7.1.5節和3.8.1.6節地址分配機制。如果父設備在鄰居表中沒有足夠的空間,那么網絡層管理實體將終止該流程,並且發送NLME-DIRECT-JOIN.confirm原語向其上層通告空間不夠,其原語狀態參數設置為NEIGHBOR_TABLE_FULL。如果存在足夠的空間,則網絡層管理實體將發送NLME-DIRECT-JOIN.confirm原語向其上層通告設備已經同網絡連接,其原語狀態參數設置為SUCCESS。
一旦父設備將子設備同網絡連接,子設備為了建立父子網絡關系必須與父設備進行通信。子設備將啟動孤點流程來完成這個請求,古典流程將在3.7.1.3.3.1描述。
父設備成功地將子設備直接同它的網絡連接流程如圖3.34。在這個流程中他們不在空中交換任何信息。
3.7.1.3.3.1通過孤點方式連接或重新連接網絡
本小節介紹了一個已經直接同網絡連接的設備(通過孤點方式)或者一個以前同網絡連接的設備,但目前沒有和它的父設備失去聯系,它將(通過孤點方式重新連接)如何執行孤點連接流程同網絡連接。
一個已經同網絡連接的設備為了完成建立它與其父設備的關系,應開始執行孤點流程,設備的應用層將決定是否開始該流程,如果開始,則應用層將通過網絡層打開電源。
如果一個以前已經同網絡連接的設備,其網絡層管理實體將不斷地接收到來自於MAC層發送的通信失敗通知,則它將開始執行孤點流程。
3.7.1.3.3.2子設備流程
子設備通過發送NLME-JOIN.request原語來開始執行孤點方式同網絡連接,其原語的RejoinNetwork參數設置為0x01.
當開始執行流程時,首先,網絡層管理實體請求MAC層對ScanChannels參數給定的信道進行孤點掃描。通過向MAC層發送MLMESCAN.request原語開始進行孤點掃描,其掃描的結果通過MLME-SCAN.confirm原語返回到網絡層管理實體。
如果孤點掃描成功(即子設備掃描到父設備),網絡層管理實體將通過發送NLME-JOIN.confirm原語向其上層通告請求連接或者重新連接網絡已成功執行,其原語狀態參數設置為SUCCESS。
注意如果子設備是第一次連接或者以前已經同網絡連接但是保持樹形深度信息失敗(樹形深度在3.4.6.1中規定),它有可能在網絡中不能正確操作,對於消息的恢復超出了規定的范圍。
如果孤點掃描不成功(即沒有掃描到父設備),網絡層管理實體將終止該流程,並通過發送NLME-JOIN.confirm原語向其上層通告沒有掃描到網絡,其原語的狀態參數設置為NO_NETWORKS。
子設備通過孤點方式連接網絡或者重新連接網絡的流程如圖3.35。
3.7.1.3.3.3父設備流程
一個父設備收到來自於MAC層發送來的MLME-ORPHAN.indication原語時,就可得知存在一個孤點設備。僅僅當設備為Zigee協調器或者路由器(也就是具有父設備能力)時,才能執行該連接流程;否這其他設備執行該流程時,網絡層管理實體將終止該流程的執行。
該流程開始執行時,網絡層管理實體首先判斷該孤點是否是它的子設備。為了對其進行判斷,需要將孤點設備的擴展地址和鄰居表中所記錄的子設備地址向比較,如果存在向匹配的地址(即古典設備是它的子設備),則網絡層管理實體將得到其相對應的16位網絡地址以及它隨后對MAC層的孤點響應狀態。網絡層管理實體通過向MAC層發送MLME-ORPHAN.response原語對其孤點進行響應,並且通過MLME-COMM-STATUS.indication原語得到其傳輸狀態。
如果不存在相匹配的地址(即孤點設備不是它的子設備),流程終止且不通知上層。
父設備連接或者重新連接孤點設備的流程如圖3.36。
3.7.1.4鄰居表
一個設備的的鄰居表中應包含在其傳輸范圍中每一個設備的信息。
鄰居表是很有用的。首先,它用在網絡發現或者重新連接來存儲路由相關的信息(在RF接收范圍內)能成為候選父設備。其次,在設備連接到網絡之后,它存儲在這個網絡中的鄰居設備的關系和鏈路狀態信息。一個設備從相應的鄰居表中接收到任何幀時表入口都要更新。
輸出成本域包含鄰居表中測試的鏈路成本。這個值是從鄰居表接收到的最新鏈路狀態命令幀處得到的。如果值是0表明接收到的設備沒有鏈路狀態命令表。
年齡域表明nwkLinkStatusPeriod間隔的數值是從已經收到的最后鏈路狀態命令幀直到nwkRouterAgeLimit的最大值。(p376)
在正常網絡操作中固定的和可選的數據如表3.45所示。
表3.45鄰居表入口格式
| 域名 |
域的類型 |
有效值范圍 |
描述 |
| Extended address |
整型 |
一個擴展的64位IEEE地址 |
每個設備的唯一的64位IEEE地址。如果鄰居設備是父設備或子設備,在存在該子域 |
| Network address |
網絡地址 |
0x0000-0xffff |
鄰居設備的16位網絡地址。在每一個鄰居表中都存在該子域 |
| Device type |
整型 |
0x00-0x02 |
鄰居設備的類型: 0x00為ZigBee協調器 0x01為ZigBee路由器 0x02為ZigBee終端設備 在每一個鄰居表中都存在該子域 |
| RxOnWhenIdle |
布爾型 |
TRUE or FALSE |
表示鄰居設備接收機在超幀活動期的空閑期是否工作。 TRUE為接收機關 FALSE為接收機開 |
| Relationship |
整型 |
0x00-0x04 |
鄰居設備和當前設備的關系: 0x00=鄰居設備為父設備 0x01=鄰居設備為子設備 0x02=鄰居設備為同屬設備 0x03=不為上述設備 0x04=先前的子設備 在每個鄰居表中都存在該子域 |
| Transmit Failure |
整型 |
0x00-0xff |
表明以前設備的傳送是否成功。值越大則表明越失敗。在每個鄰居表中都存在該子域 |
| LQI |
整型 |
0x00-0xff |
估計RF傳輸鏈路質量。在每個鄰居表中都存在該子域 |
| Outgoing Cost |
整型 |
0x00-0xff |
鄰居設備計算的輸出鏈路成本。值是0表示輸出成本有效。該項為選擇項 |
| Age |
整型 |
0x00-0xff |
接收到鏈路狀態命令后的nwkLinkStatusPeriod間隔的值。該項為選擇項 |
| Incoming beacon timestamp |
整型 |
0x000000-0xffffff |
從鄰居表中接收到的最后一個信標幀的時間標記。這個值等於當就收到信標幀時采用的timestamp。該項為選擇項 |
| Beacon transmission time offset |
整型 |
0x000000-0xffffff |
鄰居設備信標與它的父設備的信標之間的傳輸時間差。從響應的輸入信標時標減去該偏差就可得計算出鄰居父設備傳送信標時間。該項為選擇項 |
在網絡發現和重新連接用到的信息如上描述如表3.46所示。所有域都是可選的且在網絡層管理實體選擇連接網絡之后就不能保持。不是所選擇網絡的設備的鄰居表的入口被丟棄。
表3.46附加鄰居表域
| 域名 |
域類型 |
有效值范圍 |
描述 |
| Extended PAN ID |
整型 |
0x0000000000000001 - 0xfffffffffffffffe
|
設備屬於的網絡的64位唯一的標識符 |
| Logical channel |
整型 |
PHY支持的可用邏輯信道 |
網絡工作的邏輯信道 |
| Depth |
整型 |
0x00-nwkcMaxDepth |
鄰居設備的樹狀深度 |
| Beacon order |
整型 |
0x00-0x0f |
設備的IEEE802.15.4的信標順序 |
| Permit joining |
布爾型 |
TRUE or FALSE |
表示設備是否接受連接請求。 TRUE=設備正在接受連接請求 FALSE=設備沒有接受連接請求 |
| Potential parent |
整型 |
0x00-0x01 |
表示是否排除設備為潛在的父設備。 0x00表示設備不是潛在的父設備。 0x01表示設備是潛在的父設備。 |
3.7.1.5分布式地址分配機制
NIB屬性nwkAddrAlloc的缺省值是0x00,采用分布式地址分配方案來分配網絡地址,即該方案為每一個父設備分配一個有限的網絡地址段。這些地址在一個特殊的網絡中是唯一的,並且由它的父設備分配給它的子設備。ZigBee協調器決定在其網絡中允許連接的子設備的最大個數。對於這些子設備,參數nwkMaxRouters為路由器最大個數,而剩下的設備數為終端設備數。每一個設備具有一個連接深度,即連接深度表示僅僅采用父子關系的網絡中,一個傳送幀傳送到ZigBee協調器所傳遞的最小跳數。ZigBee協調器自身深度為0,而它的子設備深度為1.ZigBee協調器決定網絡的最大深度。
假定父設備擁有子設備數量的最大值為nwkMaxChildren (Cm),網絡的最大深度為nwkMaxDepth (Lm),父設備將路由器最為它的子設備的最大數為nwkMaxRouters (Rm),則可計算函數Cskip(d),該函數為在給定網絡深度d和路由器以及子設備個數的條件下,父設備所能分配子區段地址數為:
如果一個設備的Cskip(d)的值為0,則它沒有接收子設備的能力,並且將這樣的設備看作為一個ZigBee網絡的終端設備。該設備的網絡層管理實體將發送MLME-SET.request原語,將MAC層的個域網信息庫中的macAssociationPermit屬性設置為FALSE,且對將來所接收到參數PermitDuration的值等於或大於0x01的NLME-PERMIT-JOINING.request原語進行響應,其響應是狀態參數為INVALID_REQUEST的NLME-PERMIT-JOINING.confirm原語。然后終止這個允許連接的流程。
如果父設備的Cskip(d)的值大於0,則可以接受子設備,並且將根據子設備是否具有路由能力來向子設備分配不同的地址。
利用Cskip(d)作為偏移,向具有路由能力的子設備分配網絡地址。父設備為它的第一個路由子設備分配一個比自己大1的地址,隨后分配給路由子設備的地址將以Cskip(d)為間隔,以此類推為所有的路由器分配地址。nwkMaxRouters的最大值將分配這樣的地址。第n個終端設備的網絡地址將按照如下的公式進行分配:
其中1≤n≤(Cm-Rm),Aparent為父設備地址。
圖3.37給出了一個具有最大子設備數(nwkMaxChildren)為4,最大路由數(nwkMaxRouters)為4,網絡最大深度(nwkMaxDepth)為4的ZigBee網絡,則利用上述公式計算出的Cskip(d)值如表3.47表示。
表3.47深度與偏差
| 網絡深度d |
偏移Cskip(d) |
| 0 |
21 |
| 1 |
5 |
| 2 |
1 |
| 3 |
0 |
由於在設備之間不能共享一個地址段,因此,當第二層的父設備所具有的地址不用時,則第一層的父設備有可能用盡它的所有地址。一個不具備可用地址的父設備將不允許新設備加入該網絡。在這種情況下,新設備將尋找另一個父設備,如果在其傳輸范圍內設備找不到有效的父設備,則該設備將不能加入到該網絡,除非物理移動它或者網絡有一些其他的變化。
3.7.1.6隨機地址分配機制
當NIB屬性的nwkAddrAlloc是0x02時,隨機選擇地址。當設備連接到網絡它的父設備選擇一個隨機地址,這個隨機地址不是已經出現在父設備的NIB終端的任何入口。ZigBee協調器,它沒有任何父設備,但仍然有地址0x0000。
3.7.1.7安裝和尋址
可以清楚的看出nwkMaxDepth大致決定了從網絡樹根到最遠的終端設備之間的距離。從理論上來說,nwkMaxDepth也決定了整個網絡的直徑。在特殊情況下,對於一個以ZigBee協調器為網絡中心的理想網絡結構來說,如圖3.37所示,其網絡直徑為2 *nwkMaxDepth。在實際情況中,應用驅動布置方式與布置的順序可以減小網絡的直徑。在這種情況下,nwkMaxDepth為網絡直徑的下界,而2* nwkMaxDepth為網絡直徑的上界。
最后,由於樹形的事實,當nwkAddrAlloc值是0x00時,不能動態的平衡網絡樹,在一些實際的網絡分配中,如按照線性方式分布的網絡設備,可能在遠遠沒有到達真正的網絡容量時,其網絡地址已經全部分配。
在隨機地址分配中,沒有網絡樹的建立因此nwkMaxDepth和網絡跳數有關。在網絡中用隨機地址分配沒有限定的值。
3.7.1.8斷開網絡
本小節介紹兩種斷開網絡流程,即設備自己從網絡中離開和父設備請求子設備離開。這兩種情況,斷開網絡的設備的子設備也斷開網絡。
3.7.1.8.1設備自己從網絡中斷開的方法
本小節描述設備在響應從高層接收到NLME-LEAVE.request原語如何從網絡中斷開,如圖3.38
ZigBee協調器或者路由器的網絡層接收到NLME-LEAVE.request原語之后,其DeviceAddress參數等於NULL(表明設備自己斷開網絡),設備將使用MCPS-DATA.request原語發送斷開命令幀,其DstAddr參數設置0xffff表明是MAC廣播。斷開命令幀的命令選擇域的請求子域設置為0。斷開命令幀的命令選擇域的斷開子設備子域的值應反應NLMELEAVE.reques原語的RemoveChildren參數值,且斷開命令的重連接子域的值反應NLMELEAVE.request原語的Rejoin參數值。在傳送斷開命令幀之后,它將發送一個NLME-LEAVE.confirm原語給上層,其DeviceAddress參數設置是NULL。如果斷開命令幀傳送成功,那么狀態參數設置為SUCCESS。反之,NLME-LEAVE.confirm原語的狀態參數值與the MCPS-DATA.confirm原語返回的狀態參數值相同。
如果接收到NLME-LEAVE.request原語的設備是ZigBee終端設備,那么設備將使用MCPSDATA.request原語發送一個斷開命令幀,其原語DstAddr參數設置為它父設備的16位網絡地址,表明是MAC單播。斷開命令幀的命令選擇域的請求和斷開子設備子域應設置為0。斷開命令幀傳送之后,它將發送NWK-LEAVE.confirm原語給高層,其DeviceAddress參數設置等於NULL。如果斷開命令幀傳送成功,那么狀態參數設置SUCCESS。反之,NLME-LEAVE.confirm原語的狀態參數與MCPS-DATA.confirm原語返回的狀態參數相同。
3.7.1.8.2父設備將子設備斷開網絡的方法
本小節介紹父設備在從高層接收到NLME-LEAVE.reques原語后如何讓其一個子設備同網絡斷開。如圖3.39所示。
ZigBee協調器或者路由器的網絡層在接收到NLME-LEAVE.request原語之后,其原語參數設置等於子設備的64位IEEE地址,設備將使用MCPS-DATA.reques原語發送一個網絡斷開命令幀,其原語DstAddr參數設置為子設備的16位網絡地址。斷開命令幀的命令選擇域的請求子域設置為1,表明斷開網絡的請求。斷開命令幀的命令選擇域的斷開子設備子域的值反應NLME-LEAVE.request原語的RemoveChildren參數值,且斷開命令幀的Rejoin子域的值反應NLME-LEAVE.request的Rejoin參數值。
斷開命令幀傳送之后,如果斷開命令幀傳送成功,網絡層將發送NLME-LEAVE.confirm原語,其DeviceAddress參數設置為正在斷開網絡的子設備的64位IEEE地址和SUCCESS狀態。反之,NLME-LEAVE.confirm狀態參數與MCPS-DATA.indication返回的狀態參數一致。
在子設備已經斷開之后,父設備的網絡層將修改它的鄰居表,和其他任何和子設備相關的數據結構,來表明設備不再網絡中。設備已經斷開之后對於高層尋址和傳送幀是錯誤碼。
ZigBee終端設備沒有子設備來斷開且不應該收到帶有參數是non-NULL DeviceAddress的NLME-LEAVE.request原語。
3.7.1.8.3收到斷開命令幀之后
網絡層通過MCPSDATA.indication原語收到斷開命令幀之后,設備將檢查命令幀的命令選擇域的請求子域的值。如圖3.40所示。如果請求子域是0,那么網絡層將發送NLME-LEAVE.indication原語給高,其原語設備地址參數等於斷開命令幀的源IEEE地址子域的值。設備將修改它的鄰居表和與正在離開網絡設備相關的任何其他相關數據結構,來表明它不再在網絡中中。設備離開網絡之后對於高層尋址和傳送幀給這個設備是錯誤碼。
如果ZigBee協調器的網絡一旦收到如上描述的斷開命令幀,命令幀傳送的MCPS-DATA.indication原語的SrcAdd參數是接收者的父設備的16位網路地址,且命令選擇子域的請求子域的值為1或者命令選擇域的斷開子設備子域的值是1那么接收者將使用MCPS-DATA.request原語發送斷開命令幀,其原語的DstAddr的參數設置為0xffff,表明MAC廣播。斷開命令幀的命令選擇域的請求子域的值設置為0。
輸出斷開命令幀的命令選擇域的斷開子設備子域的值反應輸入斷開命令幀的相同域的值。傳送斷開命令幀之后它將發送一個NLME-LEAVE.indication原語給高層,其DeviceAddress參數設置為NULL。
如果請求子域的值是1,且離開命令幀的源是一個設備而不時接收者的父設備,幀被丟棄。
如果ZigBee終端設備接收一個如上所述的斷開命令幀,且傳送命令幀的MCPS-DATA.indication原語SrcAddr參數是接收者的父設備的16位網絡地址,接收者將發送一個NLME-LEAVE.indication原語給高層,其DeviceAddress參數等於NULL。
網絡層也許使用重發技術,如3.7.4描述,開加強斷開網絡過程的可靠性,但是除了這一點,這些機制是在協議范圍外的。
3.7.1.9設備復位
設備的網路層將在如下3中情況下對設備進行復位,即(1)在上電后;(2)在企圖連接網絡前;(3)在企圖同網絡斷開連接后。這個過程在其他任何時間都不執行。設備通過向上層網絡管理實體發送NLME-RESET.request原語來執行設備復位,並且通過NLME-RESET.confirm原語返回執行復位的結果信息。復位流程將清楚設備的路由表。
一些設備在ROM存儲單元中可能存儲了網絡層信息,在復位后將恢復這些存儲信息。但設備在復位后,將丟棄它的網絡地址。這些設備搜索網絡連接網絡並從它的父設備得到一個網絡地址。新網絡地址可能與舊的網絡地址不同。在這種情況下,任何設備想同復位后的設備進行通信的時候,都必須使用上層協議來重新發現該設備。
3.7.1.10管理PANID沖突
由於PANID不是唯一的數字所以PANID有可能沖突。下一節介紹如何通過網絡層Report和Update命令幀來更新一個網絡的PANID。
3.7.1.10.1檢測PANID沖突
網絡中任何一個操作的設備接收到MLME-BEACONNOTIFY.indication原語,這里超幀的標識符與他們自己的PAN標識符,但是EPID的值不等於nwkExtendedPANID的值將考慮檢測PAN標識符沖突。
檢測到PAN標識符沖突的節點將構造一個PAN標識符沖突的網絡Report命令幀。Report信息域將包含一個在本地鄰居表中使用的所有16位PAN標識符的列表。在協議范圍之外如何建立這個列表,然而從ACTIVE類型的MLME-SCAN.request原語結果構建時推薦使用。
3.7.1.10.2接收到網絡Report命令幀之后
被16位網絡地址標識的設備,這個地址包含有NIB的nwkManagerAddr參數,這個設備將是PAN標識符沖突的網絡Report命令幀的接收者。
一旦接收到指定的網絡管理將選擇為這個網絡選擇一個新的16位網絡標識符。這個新的網絡標識符是隨機選擇的,但是需要檢測確認這個選擇的網絡標識符在本地鄰居表中沒被使用,且不包含在網絡Report命令幀的Report信息域中。
一旦選擇了新的PAN標識符,指定的網絡管理將構造一個PAN標識符更新的網絡Update命令幀。Update信息域應設置為新的PAN標識符的值。
在它發送這個命令幀之后,指定的網絡管將啟動一個定時器,定時器的值等於nwkNetworkBroadcastDeliveryTime秒。當定時器終止,ZigBee協調器將改變它當前的PANID選擇一個新的。
傳送網絡Update命令幀之后,指定的網絡管理將建立NLME-ROUTE-ERROR.indication原語,其ShortAddr參數設置是0,且狀態參數設置是PAN標識符更新。
3.7.1.10.3接收到網絡Update命令幀之后
接收到PAN標識符更新的網絡Update命令幀之后,設備啟動一個定時器,定時器的值等於nwkNetworkBroadcastDeliveryTime秒。當定時器終止時,設備改變它當前的PAN標識符為包含在Update信息域的值。
在網絡Update命令幀傳送之后,設備將創建一個帶有ShortAddr參數設置為0,和PAN標識符Update的狀態參數的NLME-ROUTE-ERROR.indication原語。
3.7.2發送和接收
3.7.2.1發送
僅僅只有已經與網絡連接的設備可從網絡層發送數據幀。如果未連接設備收到傳輸幀的請求命令,將丟棄該幀,並向其上層發送狀態為INVALID_REQUEST的NLDE-DATA.confirm原語,通報其錯誤狀態。
在網絡層傳送或生成的所有幀,都將根據圖3.3的通用幀結構進行構造,並采用MAC層數據服務進行傳送。
另外源地址域和目的地址域,所有網絡層傳輸幀都包含一個半徑域和序列號域。對於高層數據幀的初始化,使用NLDE-DATA.request原語的Radius參數值提供的半徑域的值。如果沒有該值,那么網絡層頭的半徑域將設置成NIB中的nwkMaxDepth參數值的二倍。每個設備的網絡層都保持一個序列好,這個序列號是隨機值。每一次網絡層構建一個新的網絡層幀,和從高層傳輸一個新的網絡幀的求情結果,或者是當它需要一個新的網絡層命令幀時,序列號加1,增加完之后,序列號的值將插入到幀的頭的序列號域。
當構造好網絡協議數據單元后,如果對該幀需要進行安全處理,則將根據安全方案對它進行安全處理。如果NLDE-DATA.request的安全允許參數SecurityEnable等於FALSE,則不需要安全處理。如果網絡層安全級別參數nwkSecurityLevel等於0,或者如果在高層幀經過初始化且nwkSecureAllFrames NIB屬性設置為0x00,那么幀控制域的安全子域總是設置成0。
當安全處理成功后,將返回該幀,並由網絡層進行傳輸。經處理的幀將附加一個校驗幀頭。如果幀的安全處理失敗,並且此幀為數據幀,則將通過NLDEDATA.confirm原語的狀態向上層進行通報。如果幀的安全處理失敗,且此幀為網絡命令幀幀,則將丟棄該幀,不進行進一步處理。
當構造好一個幀,並且已准備好傳輸該幀時,通過向MAC層發送MCPSDATA.request原語請求發送網絡層協議數據單元,將該幀傳送到MAC數據服務單元,其傳送的結果將通過MCPS-DATA.confirm原語返回。
3.7.2.2接受和拒絕
為了接受數據,設備必須打開其接收機。上層使用NLME-SYNC.request原語初始化設備,打開其接收機。NLME-SYNC.reques原語將會引起網絡層使用MLME-POLL.request原語對其父設備進行輪詢。
ZigBee協調器或者路由器的網絡層必須在最大程度上保證無論什么時候接收機總是處於接受狀態。
一旦接收機處於接受狀態,網絡層將通過MAC數據服務來接受數據幀。每一幀在接收之后,網絡層頭的半徑域減1.如果值減到0,任何情況下,該幀都不能轉發。然而,它可能傳輸到高層或者作為協議的列出的其他地方的網絡層處理。使用NLDE-DATA.indication原語把如下敘述的的數據幀幀傳送到高層:
(1) 有廣播地址的幀,此廣播地址匹配一個廣播組,設備是這個廣播組的成員。
(2) 目的地址匹配網絡地址的單播數據幀和源地址數據幀。
(3) 多播數據幀,它的組ID是在nwkGroupIDTable列出來的。
如果接收機是ZigBee協調器或者是正在操作的路由器,也就是,路由器已經調用NLME-START-ROUTER.request原語,它將按如下步驟處理數據幀:
(1) 根據3.7.4和3.7.5節列出的過程來轉播廣播和多播數據幀。
(2) 有目的地址的單播數據幀,目的地址和設備的網絡地址不匹配,將根據3.7.3節列出的過程來轉發該幀。(在任何其他情況下,單播數據幀應立刻丟棄)
(3) 有目的地址的源路由數據幀,目的地址和設備的網絡地址不匹配,將根據3.7.3.3.2來轉發該幀。
(4) 處理路由請求命令幀的過程是根據3.7.3.5.2節。
處理目的地址與設備網絡地址匹配的路由轉發命令幀是根據3.7.3.5.3節。
(5) 目的地址與設備網絡地址不匹配的路由轉發命令幀被丟棄。路由錯誤命令幀和數據幀的處理方法相同。
網絡層將使用NLDE-DATA.indication原語向其高層表明所接收到的數據幀。
一旦接收到幀信息,網絡層數據實體將會姜茶幀控制域中的安全子域的值。如果該值不為0,則網絡層數據實體將把該幀傳送到安全服務提供單元,並根據所指定的安全標准對其進行安全處理。如果安全子域設置為0,那么NIB中的nwkSecurityLevel屬性不為0,且輸入幀是網絡層命令幀,則網絡層數據實體丟棄該幀。如果安全子域設置為0,那么NIB中的nwkSecurityLevel屬性不為0,且輸入幀是網絡層數據幀,網絡層數據實體將檢查nwkSecureAllFrames NIB屬性值。如果屬性值設置為0x01,網絡層數據實體將只接收幀如果它是發給自己也就是說它不需要轉發給其他設備。
3.7.3路由選擇
ZigBee協調器和路由器應提供如下的功能:
(1) 為上層中繼數據幀
(2) 為其他ZigBee路由器中繼數據幀
(3) 參與路由發現,為后續數據幀建立路由
(4) 為終端設備參與路由選擇
(5) 參與路由修復
(6) 在路由發現中,使用所規范的ZigBee路由成本進行度量
ZigBee協調器活路由器還可能提供如下功能:
(1) 為記錄下最佳的有效路由,維護路由表
(2) 為上層初始化路由選擇
(3) 為其他的ZigBee路由器,初始化路由選擇
(4) 初始化路由修復
3.7.3.1路由成本
在路由選擇和維護時,ZigBee的路由算法使用了路由成本的度量方法來比較路由的好壞。成本,即眾所周知的鏈路成本,與路由中的每一條鏈路相關,組成路由的鏈路成本之和為路由成本。
假定一個長度為L的路由P,由一系列設備[D1,D2,…DL]組成,每一個鏈路為長度為2的子路由[Di,Di+1]組成,則路由P的成本為
C{P}=
其中:C{[ Di,Di+1]}為鏈路成本。鏈路成本{[l]}為鏈路l的函數,且其值為集合[0,…,7],函數的表達式為
C{l}=
其中,pl為鏈路l中發送數據包的概率。
因而,鏈路成本為常數7,或者與鏈路接受概率pl相關的值,即為接受概率pl的倒數,該數為每次使用該鏈路預期從該鏈路得到數據包的請求次數。設備利用網絡層信息庫的nwkReportConstantCost屬性設置為TRUE的方法,強迫設備報告鏈路成本。
然而,主要問題是怎樣測量或估計pl。pl可通過實際計算收到的信標和數據幀來進行估計,即通過觀察幀的相應序列號來檢測丟失的幀,這就通常被認為最准確地測量接受概率的方法。但是,對於所有的方法來說,最直接和最有效的方法就是基於IEEE 802.15.4的MAC層和PHY層所提供的每一幀的LQI通過平均所計算的值。既使使用其他的方法,最初的成本估計值也是基於平均的LQI值。常常使用驅動函數表來映射平均LQI值於C{l}值的關系。在實際應用中,應注意實際的硬件對驅動函數表的影響,不准確的成本對ZigBee的路由算法將造成影響。
3.7.3.2路由表
ZigBee路由器和協調器可對路由表進行維護。存儲在路由表中的信息如表3.48所示。舊的和退休的路由表入口想要在命令操作中重新收回表空間入口的操作不在協議的規定范圍內。
表3.49枚舉了路由狀態所對應的值。
這部分描述了路由算法。“路由表能力”常用來描述一個設備使用自身的路由表來建立一條到達指定目的地址設備的路由能力。如果設備滿足以下條件,則設備具有路由表能力:
(1) 為ZigBee路由器或協調器
(2) 具有路由表維護能力
(3) 具有一個空閑的路由表入口,或者已經具有一個到目的地的路由表入口
如果ZigBee路由器或協調器維護一個路由表,則它同樣應維護一個路由選擇表,該表所包含的信息如表3.50所示。路由表入口是長期存在的和不變的,而路由選擇表的入口僅僅是在路由選擇的過程中存在,並且可重新生成。
如果設備滿足以下兩個條件,則設備具有路由選擇表能力:
(1) 具有維護路由選擇表能力
(2) 在它的路由選擇表中,具有一個空閑的入口
如果一個設備既具有路由表能力又具有路由選擇表能力,則稱該設備具有“路由能力。如果一個設備有發起多對一路由請求的能力,那么它還應該擁有一個源路由表。
3.7.3.3接收到數據幀
網絡層接收到數據后,不管是從MAC層或者是從高層接收到的,將按下列的流程發送該數據幀。
如果接收設備為ZigBee協調器或者路由器,並且幀的目的地址為該設備的終端子設備,則發送MSDE-DATA.request原語,如3.7.2.1所述。將該數據幀直接發送到目的地址設備,並且將下一跳的目的地址設置為最終目的地址。否則,為了后續的討論,如果他是一個路由器或協調器,則定義設備的路由地址為它的短地址,或者終端設備父節點的短地址。定義一個幀的路由地址為網絡層定義的幀的路由地址。注意,ZigBee地址的分配是得設備可以從自己的地址中得好路由地址。詳見3.7.1.5。
ZogBee路由器或協調器可以通過鄰居表檢測幀的路由目的地址的響應入口。如果有相對應的入口,設備就可以通過MCPS-DATA.request原語直接按照路由發送該幀,詳見3.7.2.1小節。
具有路由能力的設備首先檢查與目的地址相對應的路由表入口。如果存在該入口,並且如果該入口路由狀態域的值為ACTIVE或VALIDATION_UNDERWAY,設備將使用MCPS_DATA.request原語轉發該幀,如果路由狀態域仍沒有值則將其設為ACTIVE。
如果路由表入口的路由記錄請求域設置為真,或者目的地沒有被記錄,或者被中繼的幀是由本地生成的,或者是由終端子設備產生的,那么設備可以根據3.7.3.5.4小節的描述向目的地址初始化一個路由記錄命令幀。
當轉發一個數據幀時,MCPS-DATA.request原語的SrcAddrMode 和 DstAddrMode參數都要設置為0x02,表明使用16位地址。SrcPANId 和 DstPANId參數都應設置為轉發設備的MAC PIB中的macPANId屬性。參數SrcAddr設置為轉發設備MAC PIB 的 macShortAddress ,並且DstAddr參數應設置為路由表入口中相對於路由目的地址的下一跳地址。TxOptions參數應設置為與0x01按位與為非零的值,表明確認傳輸。如果設備有一個與幀的路由目的地址相對應的路由表入口,但是入口的路由狀態值為DISCOVERY_UNDERWAY,則應按照3.7.3.5.1小節所描述的,該幀應該按照路由發現進行初始化。那么,該幀應該放到路由未決緩沖器,如果NIB屬性中的nwkUseTreeRouting參數為真,則按照樹型分級路由。如果幀沿樹型路由,那么網絡層幀頭控制域中的路由發現域應設置為0x00.
如果設備對應於路由目的地址有一個相對應的路由表入口,但是入口的路由狀態域的值為DISCOVERY_FAILED 或 INACTIVE,如果NIB屬性的nwkUseTreeRouting值為真,那么設備將沿着樹使用等級路由,如果設備沒有與路由目的地址相對應的值為ACTIVE的路由表入口,並且幀是從上層接收到的,它將與路由目的地址相對應的源路由表入口,如果存在這樣的入口,設備將按照3.7.3.3.1小節所描述的使用源路由傳送該幀。如果設備沒有對應於路由目的地址的路由表入口,並且幀不是使用源路由產生,它將檢測網絡層幀頭的控制域的路由發現子域,如果路由發現子域的值為0x01,設備將初始路由發現,詳見3.7.3.5.1小節。如果路由發現子域的值為0,NIB屬性的nwkUseTreeRouting值為真,那么設備沿樹使用分級路由。如果路由發現子域的值為0,NIB屬性的nwkUseTreeRouting值為假,沒有與路由目的地址向對應的路由表入口,則幀將被丟棄,NLDE將發送狀態為ROUTE_ERROR的NLDE-DATA.confirm原語。
沒有路由能力的設備,如果它的NIB 屬性中的 nwkUseTreeRouting為真,那么人它將沿樹使用分級路由。
對應分級路由,如果目的地是該設備的子設備,設備直接將幀給適合的子設備。如果目的地是子設備,並且還是終端設備,那么可能由於子設備的macRxOnWhenIdle狀態使得傳送失敗。如果子設備的macRxOnWhenIdle值為假,則使用IEEE 802.15.4-2003[B1]中多描述的方法間接傳送。如果目的地址不是子節點,設備將按照父節點進行路由。
網絡中的其他設備都是ZigBee協調器的子設備,在網絡中不存在ZigBee終端設備的子設備。對於一個地址為A,深度為d的ZigBee路由器,如果下述表達式成立,則具有地址為D的目的地址設備為子設備。
A<D<A+Cskip(d-1)
其中Cskip的定義見3.7.1.5小節。
如果確定目的地址為接收設備的子設備,則下一跳設備的地址N為
N=D
對於ZigBee終端設備來說,D>A+Rm·Cskip(d),否則
N=A+1+·Cskip(d)
如果ZigBee路由器或ZigBee協調器的網絡層發送單播或多播數據幀因為某種原因失敗后,路由器或協調器要發送失敗信息。可以以兩種形式報告,如果轉發失敗是因為上層請求失敗,則網絡層向上層發送NLME-ROUTEERROR.indication原語。其中原語的16位短地址參數應為幀的目的地址。如果幀是利用另一個設備轉發,那么轉發設備應該發送NLME-ROUTE-ERROR.indication原語,並且發送路由錯誤幀給數據幀的源地址。路由錯誤命令幀的目的地址域應為發送失敗數據幀的目的地址。
在任何一種情況下,失敗的原因按照表3.40所列的情況。
3.7.3.3.1 產生源路由數據幀
從上一層接收到數據幀,在3.7.3.3小節中描述的情況下,設備將使用源路由機制發送數據幀。
可以通過源路由表得到源路由。
如果沒有中間的轉發節點,使用DstAddr 參數值標示路由目的地址的 MCPS-DATA.request 原語,不用源路由,直接發送到路由目的地址。
如果有至少一個轉發節點,應該設置網絡層頭幀控制域的源路由標志,並且要有網絡層源路由域。源路由中的轉發計數器的值英語轉發表中的值相等。轉發序號的值應該等於轉發數值減1。轉發表應該至少包含從最低位開始的轉發地址。最首先列出最靠近目的地址的地址。源地址列在最后。
設備使用MCPS-DATA.request原語轉發數據幀。DstAddr參數應設置為轉發表中的轉發最終地址。
3.7.3.3.2 轉發一個源路由數據幀
轉發一個從MAC層接收到的源路由數據幀,詳見3.7.3.3小節,設備尋找網絡層頭源路由中的轉發表作為它的短地址。如果沒找到短地址,或者如果轉發表中的索引與轉發索引值不一致,那么幀被丟棄,不再做任何處理。
如果轉發索引值為0,設備將使用MCPS-DATA.request原語將數據幀直接轉發給網絡層頭目的地址。
如果轉發索引的值不是0,則將轉發索引減1,並且立即將數據幀轉發到在轉發表中先於自己地址的地址。
3.7.3.4 鏈路狀態信息
無線的連接可以是不對稱的,也就是說,它們在一個方向可能工作良好,但向另一個方向卻不然。因此,在路由請求中的鏈路發現返回應答時會發生錯誤。
對於多對一路由和雙向的路由發現(nwkSymLink = TRUE),要求雙向的路由發現都是可靠的。為達到這個目的,路由器要周期性的和它們的鄰居進行單跳廣播傳輸用來傳輸鏈路狀態幀以交換計算的鏈路成本。然后在路由發現中用得到的鏈路成本來確保路由發現在雙向中都使用高的鏈路質量。
3.7.3.4.1 初始化鏈路狀態命令幀
當一個ZigBee路由器或協調器加入到網絡中后,它將周期性的每隔wkLinkStatusPeriod秒發送一個單跳的廣播幀,用來發送鏈路狀態。如果要求的話可以更頻繁的發送。可以加入隨機抖動值來避免與其它節點同步。鏈路狀態命令幀的格式見3.5.8小節。終端設備不發送鏈路狀態命令幀。
3.7.3.4.2 接收到鏈路狀態命令幀
ZigBee路由器或協調器接收到鏈路狀態命令幀后,對應於傳輸設備的鄰居表入口的age域將被置為0.幀所覆蓋的地址范圍由鏈路狀態表中的首地址和末地址和命令選項域的首幀和末幀決定。如果接收設備的網絡地址超出了幀覆蓋的范圍,那么該幀將被丟棄,該過程終止。如果接收設備的網絡地址在幀覆蓋的范圍內,那么收索鏈路狀態表。如果找到了接收設備的地址,鄰居表中對應於發送設備的輸出成本域設置為鏈路狀態入口的輸入成本值。如果沒有找到接收設備的地址,輸出成本域設為0.
終端設備不處理鏈路狀態命令幀。
3.7.3.4.3 完善鄰居表
鄰居表中的age域每隔時間nwkLinkStatusPeriod增加一次。如果該值超出了參數值nwkRouterAgeLimit,鄰居表入口的輸出成本域置為0。也就是說,如果設備從鄰居路由器連續接收nwkRouterAgeLimit鏈路狀態消息失敗,舊的輸出鏈路成本將被丟棄。在這種情況下,鄰居表入口將被認為時陳舊的,如果由新的鄰居,則該入口將被重新使用。
3.7.3.5路由發現
路由發現是在網絡中的設備互相合作條件下選擇,並建立路由的一個流程,該流程通常與特定的源地址和目的地址相對應。多點傳送路由是執行關於一個特殊的源設備和多點傳送組的路由。多對一路由發現是一個源設備與所有的ZigBee路由器和協調器在radius范圍內與自身建立路由的過程。根據3.7.3.5小節的描述,目的地址可以是16位的廣播地址,或是一個設備的16位網絡地址,或作為多點傳送組ID的16位多點傳送地址。如果一個路由請求命令的目的地址是一個特殊設備的路由地址,它的路由請求選項域沒有設置多點傳送域,則請求為一個單播路由請求。一個路由請求命令,它的路由請求選項域有多點傳送位,則設置為多點傳送路由請求。多點傳送路由請求的目的地址域應設置為多點傳送組的ID。一個目的地址域為廣播地址(見表)的路由請求命令的載荷應為多對一路由請求。多對一路由請求的路由請求選項的多點傳送位應置為0.
3.7.3.5.1路由發現的初始化
在網絡層收到其上層發送來的NLDE-ROUTEDISCOVERY.request原語,其中DstAddrMode參數值為0x00,在路由表中沒有與目的地址DstAddr相對應的入口,或在MAC層接收到的幀控制域中的路由搜索子域值為0x01,或在網絡層幀報頭中的目的地址不是當前設備地址或者為廣播地址,或沒有與網絡層幀報頭中的目的地址相對應的路由選擇表入口。在其他情況下,如果設備沒有路由選擇能力,並且NIB屬性中nwkUseTreeRouting的值為真,則有問題的數據幀將按照分級的路由方法,沿樹搜索路由。如果設備沒有路由能力,並且NIB屬性中nwkUseTreeRouting值為假,那么該幀將被丟棄,網絡層按照3.7.3.7小節中描述的產生NLME-ROUTEERROR.indication原語或路由錯誤命令幀。
多點傳送的路由發現過程可以通過網絡層初始化,或者通過從高層接收到NLME-ROUTEDISCOVERY.request原語,其中DesAddrMode參數值為0x01,或者通過下面3.7.5.2.2小節所描述的過程完成。
如果設備具有路由選擇能力,則建立一個路由選擇表入口和路由搜索表入口,並且該入口的狀態設置為DISCOVERY-UNDERWAY。如果已經存在一個與目的地址相對應的路由選擇表入口,並且狀態值為ACTIVE或VALIDATION_UNDERWAY,那么這個如果可以被使用,並且入口的狀態域保存為當前值。如果存在路由表入口,但狀態值不是ACTIVE,那么入口可以被使用,並且入口的狀態值設置為DISCOVERY_UNDERWAY。如果不存在入口,那么設備將建立一個相對應的路由發現表入口。
每一個發送路由請求命令幀的設備維護一個生成路由請求標識符的計數器。當生成一個新的路由請求命令幀時,該計數器加1,並且將該值保存在設備路由搜索表的路由請求標識符中。路由選擇表和路由搜索表中的其他域將根據3.7.3.2小節進行設置。
網絡層了緩存所接收到的待處理路由搜索幀,或者,如果為單播幀並且NIB樹型中的nwkUseTreeRouting值為真,將網絡層幀報頭中幀控制域的路由選擇子域設置為0,然后沿樹向前發送數據幀。
一旦設備創建了路由搜索表和路由選擇表入口,則將按照圖3.10所示的節后創建喲個載有有效載荷的路由請求命令幀,幀中的各子域的設置如下所述:
(1) 命令幀標識符域設置為路由請求幀,詳見表3.39
(2) 路由請求標識符設置為路由選擇表入口
(3) 多點傳送標志位和目的地址域應該設置為與要被發現的目的地址向一致
(4) 路由成本域設為0
在構造完成所廣播的路由搜索命令幀后,網絡層使用MCPS-DATA.request原語將其傳送到MAC層。
在路由搜索的開始階段,廣播一個路由命令請求幀時,網絡層在開始廣播后,將重播nwkclnitialRREQRetries次,因此,最大的廣播次數為nwkclnitialRREQRetries+1次,每次重播的時間間隔為nwkcRREQRetryInterval毫秒。
ZigBee路由器或協調器的網絡層管理實體在接收到上層發送的DstAddrMode 參數值為0x00的NLME-ROUTE-DISCOVERY.request原語后,初始化多對一路由發現。在這種情況下,設備不是必須建立路由表入口。如果路由請求命令幀的目的地址參數為0xfff9,那么就如該小節描述的建立並廣播。
設備不是必須建立發現表或路由表入口。一個路由請求命令幀可以如3.7.3.5.1小節所示建立並廣播。NLME-ROUTE-DISCOVERY.request原語的參數MemoryConstrained為真,那么路由請求命令載荷的目的地址域置為0xfff8.否則,置為0xfff9.
3.7.3.5.2接收到路由請求命令幀
在接收到路由請求命令幀后,如果設備是一個終端設備,那么丟棄該幀。否則,判斷是否有路由能力。
如果設備沒有路由能力,並且是多點傳送路由請求或多對一路由請求,那么路由請求將被丟棄並且路由請求處理被終止。
如果設備沒有路由選擇能力,並且路由請求時單播路由請求,則將判斷所接收的幀是否來自於有效的路由。所謂有效路由是指所接收的幀來自於設備的子設備,並且全設備為孩子設備的后裔設備;或者來自於設備的父設備,並且,源設備不是設備的子設備。如果路由請求命令幀不是來自於有效路由,則將丟棄該幀。否則,將檢查設備是否為預期的目的設備。同樣,通過路由請求命令幀有效載荷中的目的地址與它的每一個終端子設備地址比較,檢查命令幀的目的地址時都為設備的一個終端子設備。如果路由請求命令幀的目的地址為設備本身或者為設備的一個子設備,則它將用一個路由請求應答命令幀進行應答。當設備用一個路由請求應答命令幀應答路由請求時,將構造一個類型域為0x01的幀。路由請求應答的源地址應設置為創建請求應答設備的16位網絡地址,在考慮到路由請求的發起者為最終目的地址的情況下,將幀的目的地址域設置為所計算出來的下一跳的地址。計算下一跳設備到擋牆設備的鏈路成本,其計算方法詳見3.7.3.1小節,並將該成本附着在路由應答幀的路由成本域中。通過發送MCPS-DATA.request原語,將路由應答命令幀單播到下一跳設備。
如果設備不是路由請求命令幀的目的地址,則計算從前一個設備到本設備傳送該幀的鏈路成本,其方法如3.7.3.1節中所述。其成本數值將加到路由請求命令幀的路由成本值中,然后,使用MCPS-DATA.request服務原語,向目的地址單播該路由請求命令幀。同數據幀一樣,采用有效載荷中的目的地址域標識來判斷設備地址的方法,決定單播傳輸的下一跳地址。
如果設備沒有路由能力,接收的請求是一個單播的路由請求,設備將路由請求命令幀載荷的目的地址與自身的地址比較來判斷該設備是否時命令幀的目的地址。它還將路由請求命令幀載荷的目的地址與它的終端子設備地址進行比較。判斷命令幀的目的地址是否是自己的終端子設備。如果該設備或設備的終端子節點是路由請求命令幀的目的節點,設備將決定在路由發現表(見表3.50)入口中是否存在相同的路由請求標識符和源地址。如果沒有相對應的入口存在,將建立一個入口。
如果設備沒有路由能力,並且接收到的路由請求幀的路由請求命令選項域標示為多點傳送路由請求,設備將判斷在nwkGroupIDTable中是否已經存在其GroupID域與目的地址相配的入口。如果相配的入口存在,設備將判斷是否存在一個有相同路由請求標識符和源地址的路由發現表(見表3.50)入口。
對於多對一路由請求,和常規的路由請求,如果參數nwkSymLink的值為TRUE,接收到一個路由請求命令幀后,設備將在鄰居表中尋找對應於傳輸設備的入口。如果沒有對應的入口或該入口的輸出成本域的值為0,則丟棄該幀,路由請求過程終止。鄰居設備的最大輸出和輸入成本時是用來計算路徑成本而不是輸入成本。這包括增加重發前一個路由請求幀的路徑成本。
當建立了路由發現表入口,則其值設置為與路由請求命令幀相對應的值。唯一例外的是前向成本域,該域是利用前面的發送者的命令幀計算的鏈路成本,詳見3.7.3.1小節。將它加到路由請求命令幀的路徑成本中。上述計算的結果保存在新建立的路由發現表入口的前向成本域。
如果nwkSymLink屬性值為真,設備將建立一個路由表入口,其目的地址域為路由請求命令幀的源地址,下一跳設置為傳輸命令幀的前一個設備的地址。狀態域置為ACTIVE。然后設備向路由請求命令幀的源地址發送路由應答命令幀。如果設備對於源地址和路由請求標識符對已經有一個路由發現表入口,設備判斷在路由請求命令幀中的路徑成本是否小於存儲在路由發現表入口中的前向成本。該比較通過計算發送該幀的前向設備的鏈路成本,如3.7.3.1小節所述,加上路由請求命令幀的路徑成本。如果該值比路由發現表入口的值大,將丟棄該幀,沒有后續的處理。否則,路由發現表中的前向成本和發送地址域將被更新為路由請求命令幀的新的成本和前向設備地址。
如果屬性nwkSymLink的值為TRUE,接收到的路由請求命令幀是一個單播路由請求,設備仍將建立一個路由表入口,其目的地址設置為路由請求命令幀的源地址,下一跳域設置為傳輸命令幀的前一個設備的地址。狀態域設置為ACTIVE。然后設備將響應一個路由回復命令幀。在任何一種情況下,如果設備是代表它的一個終端子設備響應,那么路由回復命令幀載荷的響應地址應與終端子設備的地址一致,而不是響應設備的地址。
當一個具有路由選擇能力的設備不是接收到的路由請求命令幀的目的設備時,則判斷在路由選擇表(見表3.50)中是否存在一個有相同的路由請求標識符和源地址域入口。如果入口不存在,則創建一個入口。路由請求定時器終止時間設置為nwkcRouteDiscoveryTime毫秒。如果相對應與目的地址的路由地址的路由表入口存在,並且其狀態值不為ACTIVE,那么將其設置為DISCOVERY_UNDERWAY。如果不存在這樣的入口,並且該幀為單播路由請求,將建立一個入口,其狀態值為DISCOVERY_UNDERWAY。如果nwkSymLink屬性為TRUE或者是多對一路由請求幀,則設備也將建立一個路由表入口,並且它的目的地址設置為路由請求命令幀的源地址,下一跳的地址設置為上一個傳送該命令幀設備的網絡地址。如果是多對一的路由請求幀,則多對一域和路由表入口應設置為真,如果目的地址域是0xfff8則MemoryConstrained標志位設為真否則設為假;如果下一跳域改變了,路由記錄要求域則設為真。狀態域設置為ACTIVE。當路由請求定時器終止時,設備將從路由選擇表中刪除該路由請求入口。在這種情況下,如果它的狀態域的值為DISCOVERY_UNDERWAY並且為目的地址在路由發現表中沒有其他的入口,則與路由表入口對應的目的路由地址也要被刪除。如果在路由選擇表中存在一個入口,則路由請求命令幀中的路由成本將與路由選擇表入口的前向成本相比較,比較是通過計算先前設備的鏈路成本,詳見3.7.3.1,加上路由請求幀中的路由成本。如果路由成本更大,則丟棄該路由強求命令幀,不對其進行處理;否則,路由選擇表中的前向成本和發送者地址域將更新為路由請求命令幀中的新的成本和上一個發送該幀的設備地址。此外,路由請求命令幀中的路由成本域的值為新的計算結果。如果nwkSymLink屬性為TRUE,則設備也將更新它的路由表入口,目的地址將更新為路由請求命令幀的源地址,下一跳的地址將更新為上一個傳送該命令幀的設備網絡地址。狀態域設置為ACTIVE,然后,設備將使用MCPS_DATA.request原語,重新廣播該路由請求命令幀。
當重新廣播路由請求命令幀時,網絡層將使用下面的公式,用一個隨機不穩定值計算出重傳的時延。
2·R[nwkcMinRREQJitter,nwkcMaxRREqJitter]
其中R[a,b]是在[a,b]參數區間的隨機函數,不穩定值的單位為毫秒。設備可調整這個不穩定值,以使接收到的路由成本大的路由請求命令幀比路由成本小的延時更大。網絡層將在初始中繼后重試廣播nwkcRREQRetries次,以至於每次中繼為最大的nwkcRREQRetries+1次。當相當的源和路由請求標識符的幀比等候重傳幀所花費路由成本小時,設備可能丟棄等待重傳的路由選擇命令幀。
設備根據有效載荷中的目的地址,將相對應的路由表入口的狀態域設為DISCOVERY-UNDERWAY。如果不存在這樣的入口,則重新建立一個入口。
當對一個路由請求幀進行應答時,具有與路由請求的源地址、路由請求標識符相對應的路由選擇表的入口的設備將構建一個幀類型域為0x01的命令幀。網絡頭的源地址域設置為當前設備的16位網絡地址,目的地址域設置為對應路由選擇表入口中的發送者地址域。構造路由應答的設備將按照下述方法在組成載荷域。網絡命令標識符設置為路由應答,路由請求標識符域的值設置為與路由請求命令幀的路由請求標識符域中的值相同,起始者域設置為路由請求命令幀中的網絡頭中的源地址。利用路由請求命令幀中的網絡幀報頭中的源地址與它相對應的路由選擇表入口的起始者地址,並根據3.7.3.1小節中描述的來計算鏈路成本。該鏈路成本設置在路由成本域中,然后,利用MCPS-DATA.request原語,將路由請求應答幀單播到目的地址,從路由選擇表中所得到的發送地址作為下一跳地址。
3.7.3.5.3接收到路由應答命令幀
一旦設備接收到路由應答命令幀,將按照下述所描述的流程,對應答幀進行處理。
如果接收設備不具有路由選擇能力,它的NIB屬性中的nwkUseTreeRouting的值為真,則利用樹型路由轉發路由應答。如果接收設備不具有路由選擇能力,並且它的NIB屬性中的nwkUseTreeRouting的值為假,則丟棄該命令幀。在轉發路由應答命令幀之前,根據3.7.3.1小節中所介紹的方法,計算從下一跳設備到它本身的鏈路成本,將該鏈路成本與載荷中的路由成本域中的值相加,並將其結果更新載荷中的路由成本域,得到新的路由成本。
如果接受設備具有路由能力,則將設備地址同路由應答命令幀載荷的始發者地址域的內容比較,來判斷設備是否為路由應答命令幀的目的設備。如果是該應答命令幀的目的設備,則在路由搜索表中搜索與路由應答命令幀載荷中的路由請求標識符相對應的入口。如果不存在這樣的入口,將丟棄路由應答命令幀,並終止對路由應答幀的處理。如果存在有這樣的路由選擇表入口,則設備將在路由選擇表搜索一個與路由應答命令幀中響應地址相對應的入口。如果不存在這樣的路由選擇表入口,則丟棄路由應答命令幀,且即使對應於路由應答命令幀中的路由請求標識符的路由搜索表入口存在,也要刪除該應答幀,並且,終止對路由應答幀的處理流程。如果路由選擇表入口和路由搜索表入口都存在,且路由選擇表入口的狀態域為DISCOVERY-UNDEERWAY,如果路由表入口的GroupId標志位為真,則需要改為ACTIVE,並且路由選擇表中的下一跳域應設置為向前發送路由應答命令幀的前一個設備的地址。將路由搜索表入口中的剩余的成本域值設置到路由應答載荷的路由成本域中。
如果狀態域已經設置為ACTIVE,則設備對路由應答命令幀中的路由成本域路由搜索表入口中的剩余路由成本進行比較,並且如果路由應答命令幀中的成本更小,則更新在路由選擇表中的剩余路由成本域和下一跳域。如果路由應答命令幀中的成本更大或相同,則丟棄該路由應答幀,部隊該幀進行處理。
如果接收到路由應答的設備不是目的地址設備,則設備搜索與路由應答命令幀載荷中的始發者的地址和路由請求標識符相對應的路由搜索表入口。如果不存在這樣的路由搜索表入口,則將丟棄該路由應答命令幀。如果存在這樣的路由搜索表入口,則對路由應答命令幀中的路由成本與路由搜索表入口中的剩余路由成本進行比較。如果路由搜索選擇表入口的值更小,則將丟棄路由應答命令幀。否則,設備將搜索與路由應答命令幀中的發送者地址相對應的路由選擇表入口。如果路由搜索表入口存在,但沒有相對應的路由選擇表入口,此時就是產生一個錯誤,則應丟棄該路由應答命令幀。利用向前發送該路由應答幀設備地址替代下一跳地址的方法,對路由選擇表入口進行更新。同時,利用路由應答命令幀中的成本替代剩余成本的方法,更新路由搜索表入口。
當接收的路由應答使得響應路由表入口的下一跳地址更改,路由表入口的GroupId標志為TRUE,如果設備是路由應答幀的目的地址,那么設備將響應的路由發現表入口的expiration time域設置為nwkcWaitBeforeValidation毫秒,如果不是,則設置為nwkcRouteDiscoveryTime毫秒。
在更新本身的路由入口后,設備將向目的地址發送路由應答。在向前發送路由應答幀前,需要更新路由成本。發送者通過在路由搜索表中搜索與與路由請求標識符、源地址以及所提取的發送者地址相應入口的方法,找到下一跳到路由應答的目的地址。利用下一跳地址,根據3.7.3.1小節的計算方法,計算鏈路成本,並將該成本加到路由應答的路由成本域中。在命令幀網絡頭中的目的地址應設置為下一跳地址,並且通過MCPS-DATA.request原語向下一跳設備單播發送。
3.7.3.5.4 初始化和處理路由記錄命令幀
如3.7.3.3小節所述,如果設備正在處理一個單播數據信息,並且目的地址的路由表入口的路由記錄請求域為TRUE,它將首先檢測路由表入口的Memory Constrained域。如果目的地址沒有強制記憶,那么設備將向目的地址發送單播路由記錄命令,如果向下一跳傳輸成功,則路由表入口的路由記錄請求域置為FALSE。如果目的地址強制記錄,並且要轉發的消息由本地生成,或者接收於一個終端子設備,則向目的地址單播路由記錄命令,否則不發該命令。
每一個接收到路由記錄命令的轉發節點應將它的網絡地址、轉發計數器增量、前向消息附加到其命令載荷。如果路由記錄命令成功傳輸到下一跳,目的地址不是強制記憶,則目的地址路由表入口的路由記錄請求域為FALSE。如果沒有下一跳地址,或者若果向下一跳發送失敗,或者對於id載荷沒有足夠的空間,則命令幀將被丟棄,網絡層管理實體將通過NLME-ROUTE-ERROR.indication原語通知上層。
目的地址接收到路由記錄命令后,路由將被存儲在源路由表中。任何一個現有的消息路由的路線或中間節點都將被新的路由信息取代。
3.7.3.6 結束路由發現表入口
當建立一個路由發現表入口,它的終止時間應設置為nwkcRouteDiscoveryTime毫秒。對於GroupId標志為TRUE的入口,當接收到的路由回復引起下一跳改變,則響應的路由發現表入口的終止時間域也發生改變。如果設備是路由回復的目的地址,則將終止時間域設置為nwkcWaitBeforeValidation毫秒,否則設置為nwkcRouteDiscoveryTime毫秒。當時間終止了,設備將從路由發現表中刪除路由請求入口。如果設備是路由請求的始發設備,對應於目的地址的路由表入口的狀態域值為VALIDATION_UNDERWAY,那么設備將通過一個有效的路由傳輸消息。該消息或者為緩沖的未決路由發現,或者為路由錯誤命令,其錯誤代碼為0x0a(有效路由)。如果對應於目的地址的路由表入口的狀態值不是ACTIVE,並且在路由發現表中沒有相同目的地址的入口,則路由表入口也將被刪除。
3.7.3.7路由維護
每一個設備的網絡層為每一個鄰居設備維護一個失效計數器,該鄰居設備具有一條輸出鏈路,即要求發送一個數據幀。如果輸出鏈路失效計數器的值超過了nwkcRepaitThreshold,則設備根據如下所述方法,開始路由維護。可選擇一個簡單的失效計數方案來生成這個失效計數器值,或者使用一個更加准確的時間窗口方案。需要注意的是,由於修復操作涉及在整個網絡,可能導致其他通信中斷,因此,不可能經常對路由進行修復。退休的鏈路和終止查找失敗的程序超出了該協議的范圍。
3.7.3.7.1路由修復
當設備正在處理一個路由表入口的many-to-one域為TRUE的單播數據幀時,如果鏈路失敗,則生成一個錯誤碼為Many-to-one route failure的路由錯誤信息。路由錯誤命令幀網絡幀頭的目的地址域應與導致錯誤的幀的網絡層幀頭的目的地址域一致。路由錯誤命令的目的地址域應與導致錯誤的幀的網絡層幀頭的源地址一致。利用MCPS-DATA.request原語向它的隨機路由器鄰居單播路由錯誤信息。因為時多對一路由,所有的鄰居都被認為由對應於目的地址的路由表入口。接收到路偶錯誤幀后,如果沒有對應於目的地址的路由表入口,或者向路由表入口的下一跳傳輸路由錯誤信息失敗,那么將利用MCPS-DATA.request原語隨機的向它的路由器鄰居發送路由錯誤信息。網絡層幀頭的半徑將限制路由錯誤轉發的最大次數。目的地址接收到路由錯誤幀,它將利用NLME-ROUTE-ERROR.indication原語通知上層路由錯誤。網絡層不能自動的重新發現多對一路由。
如果設備在使用正常的單播路由處理單播數據幀時遇到鏈路失敗,設備將向源設備發送返回一個路由錯誤命令幀,其錯誤代碼標示失敗的原因(見表3.40),並向上層發送NLME-ROUTE-ERROR.indication原語。
如果指定終端目的地址的父節點接收到路由錯誤命令幀,其命令幀載荷的錯誤代碼值為0x01或0x02,表明鏈路失敗,如果存在命令幀載荷中的目的地址相對應的路由表入口,網絡層將移除該入口。然后向終端設備轉發該幀。
如果終端設備接收到路由錯誤命令幀,網絡層將向上層發送NLME-ROUT-EERROR.indication原語。
如果是終端設備並且簡化功能設備與父節點發生鏈路失敗,終端設備將向上層發送NLME-ROUT-EERROR.indication原語,其狀態參數值為0x09,表明父節點連接失敗(見表3.40).同樣,如果沒有路由能力的ZigBee路由器與其父節點鏈路失敗,其nwkUseTreeRouting值為TRUE,它將向上層發送狀態參數為0x09的NLME-ROUT-EERROR.indication原語,表明父節點鏈路失敗。
3.7.4廣播通信
本節將介紹在一個ZigBee網絡中如何實現廣播傳輸。這種機制用來廣播網絡層所有的數據幀。網絡中的任何設備都可以向同屬該網絡的其他設備進行廣播。本地的應用層實體通過NLDE-DATA.request原語來進行廣播傳輸,其中原語的DstAddr參數設置為廣播地址,如表3.51所示。
表3.51 廣播地址
| 廣播地址 |
目的地組 |
| 0xffff |
個域網的所有設備 |
| 0xfffe |
保留 |
| 0xfffd |
macRxOnWhenIdle=TRUE |
| 0xfffc |
所有的路由器和協調器 |
| 0xfff-0xfffb |
保留 |
為發送一個廣播MSDU,ZIgBee路由器或協調器的網絡層發送一個MCPS-DATA.request原語,其中DstAddrMode參數設置為0x02(16位網絡地址),DstAddr參數設置為廣播網絡地址0xffff。作為ZigBee的終端設備,一個廣播幀的MAC目的地址應該與終端設備的父節點的16位網絡地址一致。其PANId參數應該設置為該ZigBee網絡的PANID。這個協議不支持多個網絡廣播。廣播傳輸不采用MAC層確認方式,使用被動的確認方式。被動確認機制是指每一個ZIgBee路由器和協調器跟蹤它的鄰居設備以確認是否成功之間廣播傳輸。將TxOption參數的確認傳輸標志設置為FALSE,則禁止MAC層的確認機制。其他所有TxOption參數的標志應該按照網絡結構來設置。
ZigBee協調器、每一個路由器和終端設備,都要保存任何新的廣播事務記錄,不管該廣播事務是從本地開始,還是從鄰居設備接收來。該記錄稱為廣播事務處理記錄(BTR),它至少應該包含廣播序號和廣播數據幀的源地址。該廣播事務處理記錄存儲在廣播事務處理表(BTT)中。
當一個設備從鄰居設備收到一個廣播數據幀時,將數據幀中的廣播序號和源地址與該設備的BTT表中的記錄相比較。如果目的地址與如表3.52所示的接收者設備類型不一致,則丟棄該幀。如果目的地址與接收者的設備類型相同,設備將廣播幀中的序列號和源地址與BTT中的記錄相比較。如果該設備存在一個BTR域這個廣播數據幀相匹配,他就更新該BTR,標示鄰居設備中繼該廣播數據幀。然后,拋棄該數據幀。如果不存在這樣的記錄,則在BTR中創建一個新的BTR記錄,標示鄰居設備中繼該廣播數據幀,網絡層將向上層表明接收到一個新的廣播數據幀,並將網絡幀報頭中的radius域減1,如果該值大於0,或者設備不是終端設備,則該設備將中繼該數據幀,否則拋棄該數據幀。在轉發之前,該設備將隨機等候一段時間,該隨機時間成為廣播抖動,由nwkcMaxBroadcastJitter屬性值限定。如果ZigBee終端設備的macRxOnWhenIdle值為假時,那么該設備將不轉發廣播幀,並且不需要維護為廣播幀產生的廣播事務處理表。
如果接收到一個廣播幀,而網絡層發現它的廣播事務處理表已經滿了,並且沒有終止的入口,那么這個幀將被忽略。在這種情況下,該幀既不會被轉發,也不會被傳到上一層。
在轉發了nwkMaxBroadcastRetries次后,ZigBee協調器或路由器將重發先前的廣播幀。如果設備不支持被動確認機制,那么要轉發該幀nwkMaxBroadcastRetries次。如果設備支持被動確認機制,在nwkPassiveAckTimeout 秒內,沒有任何鄰居設備中繼廣播數據幀,一個設備最多轉發一個數據包nwkPassiveAckTimeout次。
當一個廣播事務處理記錄已經存在了nwkNetworkBroadcastDeliveryTime秒后,設備就可以更改這個廣播事務處理記錄入口的狀態,如果接收到新的廣播幀,那么這個入口將被更改。
當在MAC的PIB中的macRXOnWhenIdle屬性設置為FALSE的ZigBee路由器接收到一個廣播數據幀時,將使用與上述不相同的流程進行處理。它將使用MAC層單播法師,毫不延遲地向它的每一個鄰居設備轉發。利用MAC層的單播,將MCPS-DATA.request原語中的DstAddr參數設置為接收設備的地址,而不是廣播地址。同樣,一個擁有一個或者多個macRxOnWhenIdle MAC PIB 屬性設置為FALSE的鄰居路由器,而它自身的macRxOnWhenIdle MAC PIB 屬性設置為TRUE時,如果它的目的地址為0xffff,那么人它除了按照上段所描述的長隊程序外,還將利用MAC層單播一次向各個鄰居轉發該廣播數據幀。為了確保這些單播到達它們的目的設備,可采用802.15.4-2003[B1]所介紹的間接傳輸的方式。
為有利於廣播轉發,每個ZigBee路由器必須具有在網絡層中緩沖至少一個數據幀的能力。
圖3.41描述了一個設備與它的兩個鄰居設備間的廣播傳輸。
3.7.5多播通信
本小節描述在ZigBee網絡中如何完成多播通信。多播提供多對多路由。多播使用16位多播組代碼尋址。多播消息發送給一個特定的目的組且被注冊為這個組的成員的所有設備接收。僅僅數據幀是多播;沒有多播命令幀。多播幀有一個模式標志,表示它們是成員模式還是非成員模式。成員模式在目的組的成員減傳輸多播幀。只要它們是廣播成員模式多播就在BTT里被記錄。使用非成員模式傳送多播幀從不是多播組成員的設備到是多播組成員的設備。在目的多播組中的成員之間進行的多播傳送都是成員模式。如果它們先前已經被一個組成員傳送那么在非成員之間進行的多播傳送是成員模式,否則是非成員模式。多播消息被終端設備初始化但沒有被參數RxOnWhenIdle等於FALSE的設備發送。
3.7.5.1GROUP ID表
設備的網絡層也許維持一個組代碼表,nwkGroupIDTable,NIB中的一個屬性,參見表3.4.2。如果nwkGroupIDTable的NIB屬性存在,那么設備將包含一個16位組代碼的設置,這個組是設備所在的組。
注意可選的nwkGroupIDTable的NIB屬性與托管的APS組表有一個功能的交疊,參見表2.18。如果設備包含兩個表,且因此期望使用網絡層多播作為一種接收組地址幀的方法,它必須確保每一個16位組代碼出現在APS組表中和網絡層組表中。
還要注意,從執行的方面講,在每一層間復制該表是很浪費的,且假設執行將發現合並應用支持子層和網絡層組表的一個方法來避免浪費。
3.7.5.2從高層接收到多播幀之后
如果網絡層從高層接收到的數據幀,且多播控制域是0x01,那么網絡層將確定該幀的組代碼域和目的組代碼域匹配的the nwkGroupIDTable的入口是否存在。如果匹配入口存在,網絡層將根據3.7.5.2.1節的流程多播該幀。如果匹配入口不存在,該幀將作為一個非成員模式多播使用3.7.5.2.2節的流程來初始化。
3.7.5.2.1初始化一個成員模式多播
網絡層將設置多播控制域的多播模式子域的值是0x01(成員模式)。如果BTT表是滿的且包含沒有終止的入口,消息將不發送,且網絡層數據實體將發送NLDEDATA.confirm原語,其狀態參數值是BT_TABLE_FULL。如果BTT沒滿或者包含一個終止的BTR,一個新的BTR被建立,這個新的BTR帶有作為源的本地節點和多播幀的序列號。消息將格局3.7.5.3節描述的流程來傳送。
3.7.5.2.2初始化一個非成員模式多播
網絡層將設置多播控制域的多播模式子域的值是0x00(非成員模式)。那么網絡層將為該幀相應的組代碼目的地的入口檢測它的路由表。如果有這樣一個入口,網絡層將檢查入口狀態域。如果狀態值是ACTIVE,那么設備將(重)傳送該幀。如果狀態值是VALIDATION_UNDERWAY,那么狀態將改變成ACTIVE,,設備將根據3.7.5.4節描述的流程傳送該幀,且網絡層數據實體將發送NLDEDATA.confirm原語,其狀態參數值為MCPSDATA.confirm原語返回的值。如果沒有相應該幀組代碼目的的路由表入口,且DiscoverRoute參數值是0x00(抑制路由發現),該幀丟棄,且網絡層數據實體將發送NLDE-DATA.confirm,其狀態參數值是ROUTE_DISCOVERY_FAILED。如果DiscoverRoute參數值是0x01(使能路由發現),且有相應該幀組代碼目的的路由表入口,那么設備將立即初始化路由發現如3.7.3.5.1節描述。該幀將隨意的緩沖未決路由發現。如果沒有緩存,該幀丟棄,且網絡層數據實體將發送NLDEDATA.confirm原語,其狀態參數值為FRAME_NOT_BUFFERED。
3.7.5.3在接收到成員模式多播幀之后
當設備從鄰居設備接收到一個成員模式多播幀時,將數據幀中的序列號值和源地址與該設備的BTT表中的記錄相比較。如果該設備存在在BTT中的這個多播幀的一個BTR,設備丟棄該幀。如果沒有記錄且BTT是滿的和沒有包含終止入口,那么設備丟棄該幀。如果沒有記錄且BTT不是滿的或者包含終止BTR,設備建立一個新的BTR,且按照下一節的流程處理消息。當從鄰居設備接收到一個成員模式多播幀且加到BTT中,網絡層將確定是否在nwkGroupIDTable中存在入口,表的組代碼域與該幀的目的組代碼域想匹配。如果匹配入口存在,消息將傳送到高層,多播控制域將設置成0x01(成員模式),NonmemberRadius域的值設置為maximum NonmemberRadius域的值,且消息將按下一節流程傳送。如果匹配入口不存在,網絡層將檢測幀的多播NonmemberRadius域。如果多播NonmemberRadius域的值是0,丟棄消息,連同新增加的BTR。否則,如果值小於0x07,NonmemberRadius將消耗,且幀按照下一節流程傳送。每一個成員模式多播消息能傳送nwkMaxBroadcastRetries次。成員模式多播幀不在本地設備開始,最開始的傳送將延遲一個隨機時間,這個隨機時間由nwkcMaxBroadcastJitter屬性值限定。設備在兩個特殊成員模式幀轉發之間將延遲一個周期nwkPassiveAckTimeout秒。不像廣播,對於多點傳送沒有被動確認。ZigBee終端設備將不參與多播幀的轉發。為了傳送一個成員模式多播協議數據單元(MSDU),網絡層發送MCPS-DATA.request原語到MAC層,其DstAddrMode參數設置為0x02(16位網絡地址),和DstAddr參數設置為0xffff——廣播網絡地址。PANId參數將設置為ZigBee網絡的PANId。成員模式多播傳送不使用MAC層確認或者廣播使用的被動確認。MAC層確認通過設置TxOptions參數的確認傳送標志為FALSE來不使能。TxOptions參數的所有其他標志以網絡配置為基礎。
3.7.5.4在接收到非成員模式多播幀之后
當設備從鄰居設備接收到一個非成員模式多播幀時,網絡層將確定是否在nwkGroupIDTable中存在入口,表的組代碼域與該幀的目的組代碼域想匹配。如果匹配入口存在,多播控制域將設置成0x01(成員模式),且多播幀就按接收到的是成員模式多播處理。如果沒有匹配的nwkGroupIDTable入口存在,設備將為該幀相應的組代碼目的地的入口檢測它的路由表。如果沒有這樣一個路由表入口,將丟棄消息。如果沒有這樣一個入口,網絡層將檢查入口狀態域。如果狀態值是ACTIVE,那么設備將(重)傳送該幀。如果狀態值是VALIDATION_UNDERWAY,那么狀態將改變成ACTIVE,,且設備將(重)傳送該幀。為了傳送一個非成員模式多播協議數據單元(MSDU),網絡層發送MCPS-DATA.request原語到MAC層,其DstAddrMode參數設置為0x02(16位網絡地址),和DstAddr參數設置為從匹配路由表中確定的下一跳。PANId參數將設置為ZigBee網絡的PANId。MAC層確認通過設置TxOptions參數的確認傳送標志為TRUE來使能。TxOptions參數的所有其他標志以網絡配置為基礎。
3.7.6MAC層信標中網絡層的信息
本小節介紹了網絡層怎樣利用MAC層信標幀中的信標載荷將它的信息傳送到鄰居設備。
當設備的信標幀中的超幀規范域中的鏈接允許子域,如IEEE 802.15.4-2003[B1]所定義,設置為1時,標示設備允許連接。次年表在和所包含的信息如表3.52所示。這樣,使網絡層向新設備提供附加的信息來執行網絡搜索任務,使這些新設備更有效地選擇網絡和特定的鄰居設備,有關於網絡搜索流程的詳細信息,參見3.7.1.3.1.1.當設備信標的超幀域中的連接允許子域設置為0時,即禁止連接時,在信標載荷中不再需要這些信息。
ZigBee協調器的網絡層在網絡形成后,將立即更新信標載荷。其他的所有ZigBee設備在連接完成時,或者網絡配置(表3.11中的參數)發生任何編號時立即更新信標載荷。利用NLME-SET.request原語將信標載荷寫入到MAC層個域網信息數據庫中,其中MacBeaconPayloadLength屬性設置為信標載荷的長度,代表信標載荷的字節序列寫入到macBeaconPayload屬性中。信標載荷的字節序列如圖3.38所示。
3.7.6.1 穩定數據
設備的操作可以通過手動或者編程人員通過程序進行重新設置。或者可以通過局部或網絡范圍內的能量短缺,或者在正常工作中的的電池更換,或者碰撞等原因進行更改。至少以下信息在重新設置的過程中為了網絡操作需要進行保留:
(1) 設備的PANId和擴展的PANId
(2) 設備的16位網絡地址
(3) 每一個連接的終端子設備的64位IEEE地址和16位的網絡地址,如果nwkAddrAlloc的值為0,則還包含每一個連接的路由器子設備。
(4) 對於終端設備,還要記錄它的父設備的16位網絡地址
(5) 被使用的堆棧結構
(6) 設備深度
這些數據被保存的方法不再本協議的范圍。
3.7.7地址沖突
當同一個網絡的兩個設備有相同的nwkShortAddress值時地址沖突發生。預防所有這樣的沖突,例如使用樹形地址分配和禁止已經分配的地址重復使用,是不實際的。本小節描述如何檢測和修改地址沖突。如果NIB屬性nwkUniqueAddr的值是FALSE地址沖突檢測激活。
注意在路由消息中使用的網絡地址在路由發現處理中是被校驗。在發現的時候校驗僅僅應用在設備、鏈路和目前信息。校驗能在其他時間到達,如發送直接單播給鄰居設備以前,是通過發送帶有verify addresses錯誤碼的路由錯誤命令。
3.7..7.1獲得地址信息
網絡層從輸入消息獲得地址信息,輸入信息包括網絡層命令和ZDO數據消息。從ZDO數據消息處獲得的地址信息通過加到NIB中的地址表通過網絡層。
檢測地址沖突的能力是通過增加一個或兩個消息的網絡層幀的目的IEEE地址和源IEEE地址域來加強的。當nwkUniqueAddr是FALSE是,所有的網絡層命令消息將包含源IEEE地址和目的IEEE地址,如果它被源設備直到。其他設備不必包含任一IEEE地址域。
當nwkUniqueAddr是FALSE,路由請求命令將包含發送者的源地址域在發送IEEE地址域。這確保設備知道它們的鄰居設備的IEEE地址。
3.7.7.2檢測地址沖突
網絡層將把輸入地址信息和本地設備本身的IEEE和網絡地址、NIB中的地址和鄰居表做比較,輸入信息由特定的設備IEEE地址和網絡地址組成的。
如果輸入網絡地址與nwkShortAddress匹配,但輸入IEEE地址不等於aExtendedAddress,網絡層已經檢測到一個帶有nwkShortAddress的沖突。
如果輸入網絡地址與鄰居表或者地址表的入口的網絡地址相匹配,輸入IEEE地址域表入口的IEEE地址不匹配,且表入口的IEEE不是空IEEE地址(0x00…00),那么設備已經檢測到一個在網絡其他地方的沖突。
如果輸入網絡地址與鄰居表入口的網絡地址匹配,且表入口的IEEE地址是空IEEE地址(0x00…00),輸入IEEEE地址將代替表入口IEEE地址。沒有沖突被檢測到。
3.7.7.3解決地址沖突
如果設備確定有一個或者多個設備使用它自己的網絡地址,或者如果設備接收到帶有address conflict錯誤代碼和在目的域它自己的地址的路由錯誤命令,那么設備將獲得一個新的地址。如果使用樹形連接,請求一個新地址的設備將斷開或重新連接網絡。如果使用隨機地址分配,請求一個新地址的設備將隨機的選取一個新的地址,這個新的隨機地址避免已經在NIB入口出現的所有地址。選擇一個新的地址的終端設備將斷開網絡且那么使用新地址重新連接。
如果一個設備確定有多個設備使用一個地址,這個地址不是它自己的,它將使用帶有address conflict錯誤碼和在目的地址域厭惡的地址的廣播路由錯誤命令通知網絡。
如果一個父設備檢測或被帶有RxOnWhenIdle=FALSE子設備地址的沖突通知,父設備將為子設備選取一個新地址,且發送一個主動重新連接響應命令幀來通知這個有新地址的子設備。
