1、LoRaWAN 介紹 LoRaWAN是由LoRa聯盟推出的一個低功耗廣域網規范,這一技術可以為電池供電的無線設備提供區域、國家或全球的網絡。LoRaWAN瞄準了物聯網中的一些核心需求,如安全地雙向通訊、移動化和本地服務。該技術無需本地復雜配置,即可以讓智能設備實現無縫互操作性,給物聯網領域的用戶、開發者和企業自由操作權限。 LoRaWAN網絡架構是一個典型的星形拓撲結構,由終端、網關和服務器組成。在這個網絡架構中,LoRa網關是一個透明的中繼,連接前端終端設備和后端中央服務器。網關與服務器通過標準IP連接,而終端設備采用單跳與一個或多個網關通信,所有的節點均是雙向通信。 終端與網關之間的通信是在不同頻率和數據傳輸速率基礎上完成的,數據速率選擇需要在傳輸距離和消息時延之間權衡。由于采用了擴頻技術,不同數據傳輸速率通信不會互相干擾,且會創建一組“虛擬化”的頻段來增加網關容量。LoRaWAN網絡數據傳輸速率范圍為0.3 kbps至50 kbps,為了最大化終端設備電池壽命和整個網絡容量,LoRaWAN網絡服務器通過一種速率自適應(ADR)方案來控制數據傳輸速率和每一終端設備的射頻輸出。 適用于物聯網的覆蓋全國的網絡需要解決諸如關鍵性基礎設施、機密的個人數據或社會公共服務等安全通信的問題,這方面一般采用多層加密的方式來解決: · 唯一網絡密鑰(EU164)并保證網絡層安全 · 唯一應用密鑰(EU164)并保證應用層端到端的安全 · 設備特別密鑰(EUI128) LoRaWAN網絡各節點具有多層級安全方案,保證各類應用的不同需求: · 雙向通信終端設備(A等級):處于A等級的終端設備允許雙向通信,每一終端設備上行傳輸會伴隨著兩個下行接收窗口。終端設備的傳輸槽是基于其自身通信需求,其微調是基于一個隨機的時間基準(ALOHA協議)。A等級的終端設備應用中功耗最低,在終端發送一個上行傳輸信號后才能與服務器進行下行通信,與服務器任何時候的下行通信都只能是在上行通信之后。 · 具有預設接收槽的雙向通信終端設備(B等級):B等級的終端設備會在預設時間中開放多余的接收窗口,為了達到這一目的,終端設備會同步從網關接收到一個Beacon,這一方式會讓服務器了解終端設備正在“傾聽”。 · 具有最大接收槽的雙向通信終端設備(C等級):C等級的終端設備幾乎持續為接收窗口開放,只在傳輸時關閉。 2、CLASS A 在上一節中提到LoRaWAN有A、B、C三種類型的終端,它們都具有CLASS A設備的特性。處于A等級的終端設備允許雙向通信,每一終端設備上行傳輸會伴隨著兩個下行接收窗口。終端設備的傳輸槽是基于其自身通信需求,其微調是基于一個隨機的時間基準(ALOHA協議)。A等級的終端設備應用中功耗最低,在終端發送一個上行傳輸信號后才能與服務器進行下行通信,與服務器任何時候的下行通信都只能是在上行通信之后。 3.1上行消息 LoRaWAN中將消息分成上行和下行兩種類型。上行消息指的是終端節點通過一個或多個網關轉發給服務器的消息。消息格式如下: 
上行消息物理層上采用的是lora radio的顯示格式,其中Preamble、PHDR、PHDR_CRC和CRC部分都是由lora radio硬件填充,PHYPayload是用戶數據段。消息的完整性有CRC保證。 3.2下行消息 下行消息是指服務器通過唯一一個網關轉發給終端的消息,消息格式如下: 
下行消息物理層上采用的是lora radio的顯示格式,其中Preamble、PHDR、PHDR_CRC由lora radio硬件填充,PHYPayload是用戶數據段。為了使消息盡量短小提高帶寬利用率,下行消息物理層中沒有使用CRC。 3.3 接收窗口終端在每次上行報文最后一個字節傳輸完成之后都會打開兩個短暫的接收窗口。如下圖所示,在上行消息傳輸完成之后,等待了RECEIVE_DELAY1時間后打開第一個接收窗口RX1,在等待RECEIVE_DELAY2之后打開第二個接收窗口RX2。第一個接收窗口RX1中使用的是和剛才傳輸的上行報文相同的頻點和速率,第二個窗口RX2采用的是之前設置好的頻點和速率,窗口的頻點和速率可以通關mac命令來設置。 
接收窗口時間長度至少滿足讓終端lora radio能夠檢測到下行消息的有效前導碼。如果服務器端有下行報文要發送給終端,服務器會在終端兩個窗口開始時發送。如果終端在兩個接收窗口期間檢測到前導碼,接收狀態會一直保持到收完整個下行消息為止。同時,如果終端在第一個窗口內收到給自己的報文,同時MIC(消息完成碼)驗證正確,那么終端將不會打開第二個接收窗口。 注意:所有的終端設備在上一次發送上行消息后在兩個窗口內沒有收到服務器下行消息之前或者第二個接收窗口失效之前,不能發起下一次上行消息。 3、LoRaWAN幀格式本章節主要介紹LoRaWAN中的幀格式。如下圖所示LoRaWAN中的消息分成3層,從外到內一次是物理層、MAC層、和數據層。  3.1 MAC 層(PHYPayload)
LoRaWAN中所有上下行消息都有PHYPayload,包括了一個字節的MHDR(mac幀頭)、MACPayload(mac消息)以及4字節的MIC(校驗)信息。
13.1.1 MHDR 
Mac幀頭長度為1字節,低兩位表示LoRaWAN的版本號,中間3位保留做后續使用,最高3位是消息類型。 LoRaWAN中一共有一下8種MAC消息類型。 
其中Join Request和Join Accept消息在端點空中激活時使用。 Unconfirmed Data Up、Unconfirmed Data Down、Confirmed Data Up、Confirmed Data Down這四種類型用作數據消息傳輸使用,其中Confirmed 類型消息需要對端回復ACK。數據消息中可以同時包括mac命令和應用數據。Proprietary消息為用戶自定義類型消息,此類消息不能被標準協議棧解析。
3.1.2 MAC Payload 數據消息的MAC Payload段又叫做“data frame”,包括了FHDR幀頭、端口號FPort和幀的數據段。 3.1.2.1 FHDR 
幀頭由4字節的終端設備短地址Devaddr,1字節的幀控制域字段FCtrl,2字節長度的幀計數器以及最多15個字節長度的幀選項字段(用作傳輸MAC命令)組成。 下行數據幀頭中FCtrl域內容如下: 
上行數據幀頭中FCtrl域內容如下: 
ADR:LoRaWAN中網關上lora radio可以監聽多種速率,這使得終端設備的組網靈活性大大加強,終端設備可以自適應調整自身速率ADR來連接網關,當終端設備啟用ADR后會自動選擇最高的傳輸速率來和網關通信。 移動的終端設備最好使用一種固定的速率和網關通信,因為在移動的環境下終端設備的無線電磁環境不穩定,這會使得ADR很難管理。 當幀頭中ADR位置1的時候,服務器會根據當前收到的節點信號質量通過下行消息中的MAC命令來控制終端的速率。ADR功能可以通過終端或者服務器來配置,為了增加終端的電池供電時間和擴大網絡的容量,ADR最好使能。 如果服務器給終端設備優化的傳輸速率高于了終端默認的傳輸速率,那么終端就必須定期確認服務器還能收到上行報文。每次上行報文傳輸后,終端都會增加ADR_ACK_CNT計數器,當該計數器達到ADR_ACK_LIMIT而沒有收到服務器的下行消息時,終端就會在幀頭將ADRACKReq置1來先服務器請求。服務器收到該請求后就會在ADR_ACK_DELAY時間內發送一個下行消息給終端設備,同時終端設備收到該下行消息后就會將ADR_ACK_CNT計數器清零。在該下行消息中ACK位不必置1,因為終端設備在上行消息后的接收窗口內能收到下行消息同時也表網關依然能收到終端設備的消息。另外一種情況就是如果終端發送了帶ADRACKReq的上行消息后再ADR_ACK_DELAY時間內仍然沒有收到網關的下行消息就說明網關和終端設備間的連接已經斷開了,這種情況下終端設備就要嘗試用一種更低的速率(傳輸速率和傳輸距離成反比)來嘗試與網關建立連接。如果上行報文次數達到了ADR_ACK_LIMIT后還是沒能連接成功,那么繼續使用更低的速率。
ACK:當收到一個confirmed消息時,接收端應該在幀頭中間ACK置1。如果消息是有終端發出來的,那么服務器就要在終端設備的兩個接收窗口期間發生ACK消息給終端設備。如果消息是由服務器發送的,終端設備可以自行選擇什么時候回復ACK消息給服務器。ACK消息只是給上一條接收消息,而且不會重發。
消息重傳過程:當一個confirmed消息發出后在一定時間內沒有收到ACK確認,那么就要對消息重傳,重傳次數可以本地設置或者通過服務器來配置。如果終端設備重傳次數達到了最大次數都還沒收到ACK確認,那么終端設備就需要降低速度來重新和服務器連接。
FPending:該位只會出現在下行消息中,表示網關中有很多條消息要發送給終端,終端設備在要馬上進行下一次上行消息的傳輸來接收網關消息。
FCnt:每個終端設備中都有兩個16位或者32位計數器,FCntUP用來計數發送給服務器的上行消息個數,FCntDown用來計數收到的下行消息。同時在服務器上對應給每個終端設備也有上下行計數器。當終端設備完成加入網絡之后終端和服務器上的計數器就會先清零。發送報文中Fcnt是發送報文計數。 FOptsLen:表示數據幀中FOpts段的長度。FOpts用來傳輸MAC命令。如果該長度為0,一味著消息中不帶FOpts,如果FOpts中帶有mac命令,那么FPort不能端口0。 mac命令不能同時出現在FOpts和paylaoda中。 3.1.2.2 FPort 如果數據幀中payload部分不為空,那么Fport必須存在。如果FPort的值為0表明了FRMPaload中只能包含有mac命令。FPort為1-223為應用使用,224-255保留后續使用。 
上圖中N表示payload最大字節數,N <= M - 1 - (FHDR長度),其中M標志最大MAC payload長度。 3.1.2.3 FRMPayload與加密 如果消息中包括了FRMPayload,那么FRMPayload必須在計算MIC之前進行加密。加密使用128bit密匙的標準AES算法。 
默認情況下對應所有的FPort的FRMPayload的加密解密過程都是由軟件中LoRaWAN層來完成的,FPort為0時傳輸的是MAC命令,加密時用NwkSkey,FPort為其他值時用AppSkey加密。 加密時,首先將pld = FRMPayload按照每16字節分成一段進行加密,假如分成了k段。 然后會生成k個Ai段,Ai表示如下,Dir表示方向上行為0,下行為1.FCntUp和FCntDown表示上下行消息計數,i表示對應的k段序列號。 
接著將Ai進行加密,加密后得到16字節長度的Si,組成S。加密公式如下,其中的K表示加密密匙。 
最后在將FRMPayload的每個字節與S的每個字節進行異或操作來加密。對應的解密過程也是一樣的對已經加密的FRMPayload再進行一次加密就相當于對起進行解密。 
除了0之外的所有FPort也可以選擇通過應用層用戶自己給數據加密解密。具體加密算法見協議4.4章節。 3.1.3 MIC Mic是消息完整碼,用來對傳輸數據做校驗,通過AES加密,MIC的計算公式如下: 
其中, 。
B0定義如下,Dir表示方向上行為0,下行為1.FCntUp和FCntDown表示上下行消息計數。Len為msg的字節數。  4、MAC Command MAC命令用于服務器和節點MAC層之間的通信管理。單個數據幀中可以包括多個MAC命令,命令既可以放在數據幀的FOpts部分也可以單獨作為一幀數據進行傳輸。放在FOpts中時MAC命令不會被加密而且不能超過15個字節,數據幀單獨傳輸MAC命令時將命令放在FRMPayload中,數據幀的Fport端口號為0,最大長度不能超過規定的數據長度,由于FRMPayload部分會被加密,因此傳輸的MAC命令也是加密的。為了防止MAC命令被竊取最好采用單獨的數據幀傳輸。
MAC命令包含了1個字節命令標識CID,同時不同的命令后面還有不同長度的后續字段。MAC命令列表如下: 
上表中只給出了MAC命令的類型和介紹并沒有給出命令后數據的具體長度,下面將詳細介紹每條命令的用途。 4.1 連接狀態檢測命令 當終端想要驗證與網絡的連接情況時,終端會發送LinkCheckReq命令給服務器,該命令無后續數據。 服務器收到由一個或者多個網關轉發過來的LinkCheckReq后,返回一個LinkCheckAns命令給終端并帶有兩個字節長度的數據。 
margin是8位無符號整數,取值0-254代表服務器收到最近的LinkCheckReq的無線信號強度。GwCnt表示有多少個網關成功收到了終端發出的LinkCheckReq命令。
4.2 ADR命令 服務器通過LinkADRReq 命令來實現終端的速率自適應ADR功能。 
針對不同頻段的無線信號,DataTate和TXPower都有相應的規范,例如下表對應的是433M帶寬對應的幾種速率和發射功率。詳情見協議文檔第7章節。
ChMask長度為16位,每一位代表一個頻段對應的可用通道(比如,433M頻段可以用的有433.175、433.375、433.575三個無線頻段的通道),對應為0的一位代表通道不可用,為1代表可用。 
Redundancy中4位長度的NbRep表示上行消息的重復發送次數,該設置只對unconfirmed上行消息有效,有效范圍是1-15,默認值為1,如果該值為0,那么使用默認值。NbRep用于當服務器想獲取節點的信號Qos使用,終端每重復一次上行發送就會進行調頻到下一個可用頻段。ChMaskCntl用于對Chmask的控制,當可用頻段超過16個時該值不為0. 當終端收到LinkADRReq后回復LinkADRReq命令給服務器。對應位設置成功是為1,失敗為0,失敗后終端按照原來的配置運行。  4.3 終端上報周期設置命令服務器用DutyCycleReq 命令來設置終端節點的上報周期,設定的周期對于所有的通道都一致。 
終端最大的上報周期為: 
MaxDutyCycle取值范圍為0-15,如果該值為255表示終端保持無線電靜默模式,相當于關閉該終端。如果該值為0代表使用默認的上報周期。 終端收到DutyCycleReq 命令后回復DutyCycleAns命令給服務器,該命令不帶數據。 4.4 接收窗口設置命令RXParamSetupReq命令用來設置上行消息后的第二個窗口,命令的格式如下: 
RX1DRoffset定義的是第一個接收窗口上下行速率之差,默認值為0;RX2DataRate定義的是第二個接收窗口的下行數據速率。Frenquency定義第二個接收窗口的無線通道頻段。 終端設備收到RXParamSetupReq后回復RXParamSetupAns給服務器。如果回復的3個ack有一個為0,那么設置不成功,終端設備參數保持不變。  4.5 終端狀態查詢命令服務器使用DevStatusReq命令來查詢終端節點的狀態。該命令沒有帶數據,如果終端收到該命令,那么終端回復DevStatusAns給服務器,命令格式如下: 
其中Battery代表終端的電池電量,0表示采用非電池供電,1-244表示電池的電量1為最小255最大,255表示電池電量測量失敗。Margin的低6位表示接受到DevStatusReq的無線信號強度,范圍-32-31. 4.6 增加或者修改無線通道命令NewChannelReq可以用于添加新的無線通道或者修改目前存在的無線通道。 
其中ChIndex 表示新增或修改通道的序列號,對于協議中已經制定好的通道修改是無效的,可以對規定好的通道外的通道進行設置,最多不超過16個通道。Freq對應的是設置的通道中心頻率,Freq X 100為真實頻率,當Freq為0時相當于禁用該通道。DrRange的低4位和高4位分別表示該通道上最小和最大速率。 終端收到NewChannelReq命令后回復NewChannelAns給服務器,如果status中低2兩位任意1位為0代表添加通道不成功。  4.7 TX與RX時間間隔設置命令RXTimingSetupReq命令用來設置終端上行數據發送完成后打開第一個接收窗口的時延,第二個窗口在第一個接收窗口打開后1s開始。 
 其中Del為4位整數,取值范圍為0-15,單位為s,其中0和1都表示時延1s,最大為15s。終端收到RXTimingSetupReq后回復RXTimingSetupAns給服務器,不帶數據。
5、終端設備激活終端設備需要經過激活才能加入到LoRaWAN網絡中,終端設備在部署或者重啟后有兩種激活方式,一種是無線激活OTAA以及本地激活ABP。 5.1 終端參數 在終端設備出場時設備內保存了終端設備標識DevEUI、應用標識AppEUI以及AES-128密匙AppKey。在終端設備激活后,會保存設備地址DevAddr、網絡會話密匙NwkSKey、應用會話密匙AppSKey。 5.1.1 DevEUI DevEUI是終端設備的全球唯一標識,相當于mac地址。 5.1.2 AppKey AppKey是終端設備的應用提供商提供的密匙,用來生成AppSKey和NwkSKey。 5.1.3 DevAddrDevAddr是32位的終端設備網絡地址,在網絡中每個設備的網絡地址是唯一的。高7位是網絡號NwkId標識不同的網絡,低25位是分配給終端的網絡地址。  5.1.4 AppEUI AppEUI全球唯一地標識了終端設備的應用提供商,長度為64位,在終端設備激活之前就已經保存在終端中。
5.1.5 NwkSKey 網絡會話密匙NwkSKey在服務器與終端設備的消息中用來計算消息完整碼MIC,來驗證消息的正確性,同時在只傳輸MAC命令的消息中用來加密和解密數據段。 5.1.6 AppSKey 應用會話密匙AppSKey在服務器與終端設備的消息中用來計算消息完整碼MIC,來驗證消息的正確性,同時在傳輸應用數據的消息中用來加密和解密數據段。 5.2 無線激活終端設備在部署或者與服務器之間連接斷開后都要通過無線激活步驟來與服務器建立連接。從終端的角度來看加入網絡的過程包括兩個MAC消息與服務器的交換,分別是join request和join accept。 5.2.1 Join-request終端發送Join-request消息給服務器(hex): 00 01 02 03 04 05 06 07 08 39 7d 39 84 30 34 51 04 7f a2 c0 fd 1d e5 MHDR類型: 
MIC的計算公式如下: 
其中AppKey定義為128位: #define LoRaWAN_APPLICATION_KEY { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00 } 組網請求后第一個接收窗口時延5s #define JOIN_ACCEPT_DELAY1 5000000 第二個接收窗口6s #define JOIN_ACCEPT_DELAY2 6000000
終端設備發送join request消息來向服務器發起入網請求,請求消息中包含了AppEUI、DevEUI以及2字節長度的DevNone。 
DevNone是一個隨機值,服務器保存了每個終端設備過去使用過的DevNone值,如果查詢到該值已經出現過,那么服務器就忽虐該入網請求。 該入網請求是沒有加密的,消息的完整碼MIC的計算公式如下:  5.2.2 Join-accept服務器發送Join-accept消息給終端(hex): 01 13 4f bc 00 00 01 01 00 00 01 06 01 ff ff ff ff 消息中DlSetting為6,表示接收窗口速率為6,RxDelay為1,表示上行消息發送完成后1s后打開第一個接收窗口。 在服務器收到入網請求后,如果當前終端被允許加入到網絡中服務器會返回Join-accept給終端設備。如果終端不允許加入到網絡中,服務器是不會發送任何消息的。Join-accept消息發送時就和普通的下行消息一樣,但是時延用的是JOIN_ACCEPT_DELAY1或者JOIN_ACCEPT_DELAY2而不是RECIEVE_DELAY1或者RECIEVE_DELAY2,同時發送通道的速率和頻點和終端上行消息的兩個窗口RX1和RX2一樣。 
Join-accept消息由3字節的AppNonce、3字節的網絡號NetID、和4字節的終端網絡地址DevAddr、1字節的接收窗口設置、1字節的窗口時延以及可選的最長為16字節的通道頻率設置組成。 AppNonce是由服務器生成的實際值,終端設備用其來生成NwkSkey和AppSKey,算法如下: 
Join-accept消息的MIC計算如下: 
Join-accept消息通過AppKey來加密,加密方法如下: 
NetID總共長度為24位,其中低7位和DevAddr中的高7位一樣表示網絡ID,剩余的高17位由網絡操作者使用。在這里網絡ID唯一的標識一個網絡,相鄰或者重疊的網絡各自的網絡ID不一樣。 DLsetting是對下行消息進行控制,格式如下,內容見4.4節中給出的詳細描述。  5.3 本地激活在有些情況下,終端設備可以直接本地激活,本地激活直接將終端設備綁定在特定的網絡上而不經過無線激活的兩個步驟。 本地激活意味著終端的網絡地址DevAddr以及兩個會話密匙NwkAskey、AppSKey都保存在終端設備中。且終端設備在啟動前就要保存有網絡相關的參數。同時還要保證NwkAskey、AppSKey兩個值是唯一的,這樣才能保證網絡的安全。 6、CLASS B在LoRaWAN的CLASS A類設備中,必須首先由終端設備發起上行消息后,服務器才能發送下行消息給終端設備。這種就不使用與服務器上應用程序需要主動發送數據給終端的應用場景。CLASS B類設備中,終端節點可以在設定的時間打開接收窗口,而同時也具有A類設備的特性。 B類設備這種特性是通過網關有規律地發送BEACON,讓終端設備和網關之間保持時間同步,這樣網關就可以控制終端在預定的時間打開額外的接收窗口(稱之為ping slot)。 終端由A類設備轉換為B類設備是由終端設備上的應用層來決定的。如果服務器的應用層要讓終端設備從A類轉換為B類設備,就要在終端設備發送了上行消息后將命令發送給終端,同時終端設備需要在應用層去解析這個命令,在LoRaWAN層是不能處理的。 6.1 網關與終端同步機制為了讓網絡能支持B類設備,所有的網關必須同步地發送帶有時間基準的beacon消息給終端。只有基于相同的時間基準,終端設備才能周期的打開接收窗口(ping slot)。服務器通過最近一次從網關獲得的終端設備上行消息信號質量來決定由哪個網關來發起beacon。因此,如果終端設備是移動的同時檢測到beacon發送者身份發生了變化,終端設備就必須發送上行消息給服務器來更新下行的路由數據庫(通過那個網關發送給終端設備)。 終端設備在啟動后首先以A類設備來加入到網絡中,如果終端的應用層要將設備轉換為B類,整個過程如下: - 終端設備將LoRaWAN層調整到B類,LoRaWAN層會開始搜索beacon,如果搜索到beacon就返回BEACON_LOCK服務原語給應用層,沒有搜索到就發回BEACON_NOT_FOUND給應用層。為了加快搜尋beacon的過程LoRaWAN層會主動發送BeaconTimingReq消息給服務器。
- 根據接收到的beacon信號強度和終端電池使用情況,終端設備應用層會選擇ping slot的速度的周期,這些都是要給設備的LoRaWAN層使用的。
- 當設備變成B類后,在每個上行消息的mac層都要將FCTRL的Class B位置為1.這樣服務器就能知道設備變成了B類。Mac層會自動打開接收窗口來接收beacon和pingslot。當終端設備成功接收到beacon后會將beacon內容和信號強度發送給應用層。在pingslot中收到下行消息時就如同A類設備接收下行消息一樣。
- 移動終端要周期發送包含當前位置信息的上行消息給服務器來更新路由。另外終端設備的應用層也可以通過判斷收到的beacon內容來判斷終端是否在移動。
- 如果終端設備在一段時間內沒有收到beacon,表明了與網絡間的同步已經斷了。mac層就必須通知應用層已經變為了A類設備,上行消息將不再將FCTRL的Class B置位,這樣服務器就知道終端不再是B類設備。應用程序后面也可以繼續周期地搜索beacon來重新變為B類設備。

在上面這個B類設備例子中,Beacon的周期是128s,同時終端設備每30ms打開一個ping slot接收上行數據。大部分的ping slot里服務器都沒有數據發送下來,因此終端設置在ping slot開始后只要沒檢測到有radio的前導碼就馬上關閉接收信道。如果檢測到前導碼就會將無線數據接收下來,然后mac層開始檢測目的地址是否正確,然后校驗完整碼是否正確,最后將正確的數據交給應用層處理。 6.2 上行消息格式
B類設備的上行消息格式和A類設備基本一致,在A類設備中Fctrl的RFU在B類設備中變成了Class B,表示該終端是B類設備。而下行消息A\B類設備是一樣的。 6.3 下行ping消息格式6.3.1 物理層格式 在B類設備中下行的ping格式和A類設備下行格式一樣,但是使用的通道頻率可能不同。 6.3.2 單播和組播在B類設備中下行消息分為單播和組播,單播消息只發送給當個終端,組播消息可以同時發送給多個終端。組播內的終端設備必須要具備相同的組播地址和相關的加密密匙。在LoRaWAN的協議規定中沒有制定遠程組建組播組的方法,組播只能通過出場或者終端應用層來配置。 6.3.2.1 單播消息格式 B類設備ping中下行消息格式和處理方法和A類設備一樣。每收到一個下行消息都要計數。 6.3.2.2 組播消息格式組播消息格式和單播消息基本一致除了有以下一些不同之處: - 組播消息不允許包含MAC命令,無論是在FOpt中還是端口號為0的消息中。因為組播消息沒有單播消息類似的認證。
- 幀頭中ACK和ADRACKReq必須為0.消息類型MType必須為無需回復的下行消息Unconfirmed Data Down。
- 下行消息中FPending位為1表示還有組播消息沒發送,在下一個組播接收時隙繼續接收,如果為0,表示下一個組播接收時隙不一定會有數據。終端設備可以根據該位來評估接收時隙的沖突優先級。
6.4 Beacon獲取和追蹤終端設備在由A類轉換到B類之前,必須要先獲取網絡Beacon的時間來同步終端內部時間。 終端設備一旦轉換為B類就要周期的搜尋網絡Beacon來同步自己的內部時間。如果有時候沒有收到beacon,那么設備就要逐漸的延長beacon和ping slot的接收窗口時間來消除時鐘漂移。 6.4.1 最小Beacon-less運行時間在終端設備沒收到Beacon后,要求設備至少能保持B類狀態運行120分鐘(從上一次接收到Beacon開始計算)。這種沒有Beacon的臨時B類運行狀態叫做Beacon-less狀態,改狀態下就要靠設備內部時鐘來工作。 在Beacon-less狀態下所有的單播、組播和Beacon接收時隙都要逐漸的延長來消除終端設備內部的時間漂移與網絡產生的時間差。  6.4.2 Beacon-less下接收窗口調整在這120分鐘內如果終端設備收到了beacon消息,那么Beacon-less狀態就要繼續持續120分鐘來讓終端設備消除時間漂移和重置接收時隙長度。 6.4.3 減少時間漂移 終端設備可以通過接收Beacon來同步校準設備內部的時間。同時終端內部的晶振偏移是與溫度直接相關的,因此終端內部還可以通過采集溫度來校準時間漂移。 6.5 下行時隙 6.5.1 定義B類終端設備在運行時必須精確的打開接收時隙來接收beacon,這一節就主要講接收的時間要求。 兩次Beacon開始之間的時間間隔叫做Beacon period,Beacon的傳輸是從BEACON_RESERVED開始的時候。在每個Beacon開始傳輸之前都有一段保護時間,防止其他時隙沖突。保護時間的長度至少為信道內最長的幀傳輸的時間。因此ping slot可用的時間是BEACON_RESERVED結束到下一個beacon前的保護時間開始。 
Beacon實際的傳輸時間比BEACON_RESERVED要短的多,這段時間還可以以后留給網絡管理傳輸報文使用。上圖中的BEACON_WINDOW這段時間又被分成0-4095共4096個ping slots,每個ping slot時間為30ms。 在終端設備中通過時隙號N來計算在Beacon開始后Ton秒來打開接收窗口。最后一個ping slot開始的時間為beacon開始后的beacon_reserved + 4095*30ms = 129470ms.  6.5.1 時隙隨機化 為了減少系統性的碰撞和防止竊聽,終端設備獲取的時隙編號是隨機的,而且每個beacon_period都會改變。用于計算隨機時隙值得參數如下: 
在每個 beacon_period開始時終端設備和服務器都要計算新的隨機值來確定接收時隙,計算時采用key值為0的AES加密算法: 
終端打開接收時隙的時間為: 
如果終端既有單播也有組播,那么上面的計算公式就要算兩次,一次使用單播地址,一次使用組播地址。如果單播和組播的接收時隙碰撞了,優先接收組播。在服務器上如果單播和組播時隙重疊了,那么在上個多播報文上標記上FPending可以避免。 時隙的隨機分配可以防止單播和組播報文在系統時隙碰撞,如果在當前beacon_period出現了碰撞,那么下個beacon_period就應該可以避免。 6.6 CLASS B MAC命令 在A類設備中所有的MAC命令對于B類設備同樣適用,除此之外還有一下B類設備特有的MAC命令。  6.6.1 PingSlotInfoReq命令終端設備使用PingSlotInfoReq命令來告知服務器自己的pingslot周期和速率,該命令只適用于單播,組播的pingslot周期和速率上報由應用層自己定義。命令格式如下: 
命令數據長度為1字節,其中周期Periodicity長度為3位,周期計算公式如下,當Periodicity為0時,表示設備每1S打開一個接收pingslot,當Periodicity為7時,表示每128打開一個pingslot,這也是LoRaWAN B類支持的最大周期。 
Data rate代表了終端每個pingslot的接收速率,Data rate的值和A類設備中LinkAdrReq命令中定義的值一樣。 服務器在發送B類設備的下行消息前必須先知道終端的pingslot速率和周期,所以設備在從A類轉換為B類之前必須先發送PingSlotInfoReq命令來告知服務器,然后服務器發送PingSlotInfoAns命令給設備。如果終端設備要改變ping'slot的設備,那么設備先必須先變A類設備,然后再發送PingSlotInfoReq給服務器,在收到服務器響應后在使用新參數工作為B類設備。 6.6.2 BeaconFreqReq 命令 服務器發送BeaconFreqReq 命令給終端設備來修改beacon接收的信道中心頻點。 
頻率Frequency是24位長度的無符號整形,表示方式和A類設備中NewChannelReq表示方式一樣。范圍是100HZ-1.67GHZ,終端設備收到命令后檢查無線硬件是否支持該頻段,如果不支持返回錯誤給服務器。 如果Frequency值為0,終端設備使用默認的beacon頻段進行接收,同時還保留跳頻搜尋beacon的機制。一個非0Frequency使終端設備使用該固定的頻段進行beacon接收。 6.6.3 PingSlotChannelReq命令 服務器發送PingSlotChannelReq命令給終端設備來設置pingslot的信道。 
頻率Frequency是24位長度的無符號整形,表示方式和A類設備中NewChannelReq表示方式一樣。范圍是100HZ-1.67GHZ,終端設備收到命令后檢查無線硬件是否支持該頻段,如果不支持返回錯誤給服務器。如果Frequency值為0,終端設備使用默認的beacon頻段進行接收。 DrRange的低4位和高4位分別表示該通道上最小和最大速率。 終端設備收到PingSlotChannelReq命令后回復PingSlotChannelAns給服務器,消息合適如下,對應位為1表示這種成功,否則失敗。  6.6.4 BeaconTimingReq命令 終端發送該命令給服務器來獲取下一次beacon時間和通道,該命令后面沒有數據。 BeaconTimingReq & BeaconTimingAns 機制用來加速終端設備的beacon搜尋過程。如果服務器在一段時間內收到多個BeaconTimingReq 請求,他可能只會回復其中一部分請求。因此終端設備不一定在發送請求后馬上就能收到響應。終端設備最好一個小時內不要發送超過一次的BeaconTimingReq請求。 6.6.5 BeaconTimingAns命令服務器發送該命令來相應BeaconTimingReq,格式如下: 
Delay是16位無符號整數,從該下行命令結束到下一次beacon開始的時間RTime: 
在多個beacon發送通道的網絡中,channel代表下一次beacon發送的通道。對于beacon通道固定的網絡,該值為0. 7、BEACON7.1 BEACON 物理層結構網關設備除了轉發終端設備與服務器間的數據外,還要周期性的(BEACON_INTERVAL)發送Beacon來給終端設備和網關提供終端同步機制。所有的Beacon在無線芯片的物理層都是采用的隱式模式,發送出去的報文不包括頭和CRC只有前導碼和數據段。格式如下: 
前導碼長度為10,beacon的長度與無線芯片的物理層有關,采用不同頻段對應的beacon長度可能會有所不同。 7.2 Beacon格式 Beacon的BCNPayload部分由網絡部分和網關相關部分組成,如下表所示: 
網絡相關部分由NetID、Time和CRC組成,其中NetID唯一的標識了發送Beacon的網絡,時間戳Time是以秒為單位的標準格林威治時間(1970-1-1 00:00:00開始),8位或者16位的CRC校驗取決于物理層的設置。CRC-16計算NETID和Time的校驗,CRC-8取CRC-16的低8位。 終端可能會收到多個網關發出的Beacon,網關相關部分就是為了讓終端來區分不同的網關。當包括RFU時應該填0,同樣網關相關部分GwSpecific和RFU還有CRC-16來保護。 如下是一個US900的beacon: 
空中傳播的順序如下: 
移動的B類終端還要解析Beacon中網關相關部分,當檢測到不同網關的Beacon時還要通知服務器自己位置移動了。 當網絡中有多個網關時,多個網關都會同時發送beacon,如果終端設備在多個網關的覆蓋重疊區內,終端節點會收到多個beacon,而信號最強的網關發出的Beacon更容易被接受到。 7.3 GwSpecific格式 GwSpecific的格式如下: 
其中InfoDesc表示了Info數據段應該怎么解讀。 
對于只有一個全向GPS天線的網關,InfoDesc的值為0廣播的是該GPS坐標。對于有3向天線的網關,InfoDesc等于0、1、2分別代表三個天線的GPS坐標值。Info定義如下: 
Info長度為6字節,分別表示網關地理位置的GPS經度和緯度。南北緯度Lat由24位的有符號數表示,-223 代表南緯90度,223 代表北緯90度,赤道對應的值為0。東西經度Lng由24位的有符號數表示,-223 代表西經180度,223 代表東經180度,格林威治對應的值為0。 7.4 Beacon時間Beacon每128s發送一次,每一次發送的時間為BT = k * 128 +NWKID + TBeaconDelay,BT為世界標準時間UTC 1970-1-1起經過的秒數。這里加上NWKID也為了讓不同網絡的Beacon不會再時間上沖突。 這里的TBeaconDelay是網絡中協定好的時延,范圍在0-50ms,在網絡中所有的網關都要按照TBeaconDelay時延后再發送beacon。所有的終端設備ping slot用的參考時間都是beacon的發送時間,因此服務器的下行報文時間也要把TBeaconDelay算進去。 7.5 服務器下行路由更新當服務器要通過CLASS B的下行slot給終端設備發送消息時,首先發給離終端設備最近的路由器(通過終端設備最近一次的上行消息確認),再由路由器轉發給終端設備。因此服務器上必須保存有終端設備的大致位置。 當B類設備位置發生了變化,就需要定期發送上行消息給服務器來讓服務器更新新的路由。這個消息可以是confirmed或者unconfirmed消息,消息中app數據段可以為空。終端設備有一下兩種更新路由方案。 - 周期發送上行消息,這是最簡單地方法,終端設備不用解析Beacon中網關相關部分。適用于低速移動或者靜止的終端設備,對上行報文的周期也沒有特殊要求。
- 當檢測到Beacon中網關發送改變時發送上行報文。當檢測到網關發生變化時隨機時延一個時間(0-120)發送上行消息給服務器。
如果服務器沒有及時收到終端設備的路由更新,會造成服務器的下行slot終端設備收不到下行消息。這種情況就只有等終端設備下一次發送上行消息才能重新更新路由。 8、CLASS C當終端設備有充足的電源提供,不用擔心耗電問題時,設備可以不用減少接收時間來省電。這時設備就可以工作在C類。 C類設備不具備B類設備的特性,更類似于A類設備。C類設備中會盡可能地打開RX2接收窗口,當終端設備沒有在發送或者打開RX1窗口接收時就一直打開RX2接收。并沒有特殊的消息告訴服務器終端設備為C類,在節點加入網絡時服務器的appserver中就要知道該終端設備為C類。(通過appeui確定或者deveui確定) 8.1 C類設備的第二個接收窗口
在C類設備中與A類設備一樣在發送上行消息后都會有兩個接收窗口,但是在c類設備中在有需要發送上行消息之前都不會關閉第二個接收窗口,同時在發送完成后,第一個接收窗口打開前也會打開RX2,這樣在任何時間都有可能在RX2上接收到下行消息。 8.2 C類設備的組播下行消息與B類設備類似,C類設備也有可能會接收到組播下行消息。組播地址和APPSKEY和NWKSKEY都由應用層來實現。同樣還有一下對組播消息的限制。 - 不允許攜帶MAC命令,不論是在Fopt中或者在端口號為0的數據報文中。
- ACK和ADRACKReq位必須為0,MType必須為Unconfirmed Data Down。
- Fpending位為1表示還有組播消息要發送,由于C類設備中接收是一直打開的,因此FPending不會產生其他影響。
以上圖文的Word pdf格式文檔下載(內容和本網頁上的一模一樣,方便保存):
LoRaWAN協議格式.docx
(1.49 MB, 下載次數: 55)
2018-8-16 10:31 上傳
點擊文件名下載附件
LoRaWAN協議格式.pdf
(2.51 MB, 下載次數: 87)
2018-8-16 10:29 上傳
點擊文件名下載附件
|