韋福鶴,朱 珠,曾艷文,劉守印
(華中師范大學 物理科學與技術學院,湖北 武漢 430079)
物聯網正在改變我們的生活和工作方式,并已滲透到各個領域,如環境監測、能源開發、交通管理、健康監護等。到2025年,預計我國物聯網連接數將達到80.1億。物聯網的迅速發展離不開低功耗廣域網(Low Power Wide Area Network, LPWAN)技術的進步。LPWAN以其通信距離長、傳輸功耗低等特點,已經成為實現物聯網海量連接的重要推力。而LoRaWAN(Long Range Wide Area Network,LoRaWAN)作為LPWAN的一員,憑借低成本、高靈敏度、自適應數據速率等特性,在多種產業(智慧農業、智慧消防、智慧家居等)中發揮出獨特優勢。
雖然現有的工作已經對LoRaWAN物理層調制技術和媒體接入控制(Media Access Control, MAC)層進行了大量研究,但對于LoRaWAN協議棧的設計與實現較少有人關注。由于目前比較成熟的開源協議棧—ChirpStack無法適應復雜多樣的應用場景,在實際部署中,往往需要開發人員依照LoRaWAN協議自主設計并實現協議棧,而了解其核心結構與各部分功能對構建高效、穩定、兼容的協議棧至關重要。
本文詳細分析了LoRaWAN協議族(LoRaWAN協議標準、LoRaWAN后端接口標準、LoRaWAN區域參數標準)以及實際應用中的開源協議棧,希望能為LoRaWAN及其協議棧的后續研究、開發提供參考。
LoRa作為物理層實現方式,屬于擴頻調制技術的一種,由Semtech公司在Chirp擴頻調制的基礎上研發并申請專利。該技術運行在非授權頻段,可通過降低數據速率提高接收靈敏度,使接收端信號功率在低于噪聲功率的情況下仍可成功解調,由此在傳輸距離、傳輸功耗和傳輸效率之間作出取舍。除此之外,LoRa技術使用正交擴頻因子實現了可變的數據速率,以適應不同的應用環境。
LoRaWAN是建立在物理層LoRa調制之上的一種網絡協議標準,該協議定義了媒體接入、幀格式、消息供應和管理、安全機制、設備管理等標準。LoRaWAN協議標準的軟件實現稱為LoRaWAN協議棧,目前比較成熟的開源協議棧有ChirpStack。
LoRaWAN網絡的基本結構由終端設備、網關、網絡服務器和應用服務器組成,如圖1所示。終端設備和網關形成了單跳星形拓撲結構,網關作為終端設備和網絡服務器之間的透明中繼。網絡服務器負責MAC層數據處理,并充當在終端設備和應用服務器上運行的應用程序之間的門戶。

圖1 LoRaWAN網絡結構
LoRaWAN標準定義了A類、B類和C類三種支持雙向通信的終端設備,以適應不同的應用場景:
A類:該類設備上行傳輸后會開啟2個短暫的下行接收窗口。終端設備的上行傳輸時隙由其自身需要決定,使用隨機方式接入信道(ALOHA式協議)。A類設備的功耗最低,但只支持在上行傳輸后的下行接收。每次網絡服務器的下行傳輸必須等待終端設備上行傳輸后才能發起。
B類:該類設備提供了更多的接收時隙。除A類設備在上行傳輸后開啟的2個接收窗口,B類終端設備還周期性地開啟接收窗口,為保持時間周期準確,設備需要持續從網關處接收時間同步信標。
C類:該類設備除在上行傳輸時關閉接收機外,其余時間始終處于接收狀態。C類設備功耗最高,但下行傳輸時延最低,適合實時性較高的應用。
LoRaWAN協議標準規定實際部署中協議棧應至少支持A類設備,因B、C兩類設備除接收時隙不同外,其余配置均與A類設備類似,所以本文僅分析LoRaWAN協議棧ChirpStack的A類設備。
考慮到協議棧的設計與實現,LoRaWAN協議增加了后端接口標準。網絡結構相應增加了入網服務器,如圖2所示。入網服務器的功能為管理終端設備的入網過程。LoRaWAN協議定義了2種設備激活方式,分別為個性化激活(Activation by Personalization, ABP)和空中激活(Overthe-Air Activation, OTAA)。ABP方式無需入網,設備啟動后可直接與網絡通信,安全性較低。與之相反,OTAA設備啟動后需要通過網絡服務器與入網服務器通信,交換設備標識與密鑰,實現激活。隨后入網服務器將生成的對應密鑰(后續通信中使用)分別發送至網絡服務器與應用服務器。LoRaWAN協議推薦使用安全性較高的OTAA方式,防止惡意攻擊,因此入網服務器是協議棧中不可或缺的部分。

圖2 LoRaWAN協議棧系統結構
網絡服務器在協議棧中還負責多項關鍵任務:設備地址檢查、幀計數器檢查、回復確認(Acknowledgment, ACK)、數據速率自適應、推送應用層數據到應用服務器、調度應用層下行數據、推送入網與重入網請求到入網服務器等,這些功能使得網絡服務器成為協議棧的核心。
為介紹方便,此處將OSI七層協議體系結構簡化為五層模型,后者的應用層對應于前者的應用層、會話層、表示層。相對于五層模型,LoRaWAN協議定義了網絡的物理層(LoRa調制)、鏈路層(LoRaWAN MAC)以及應用層,但未定義傳輸層與網絡層。LoRaWAN分層模型如圖3所示。

圖3 LoRaWAN分層模型
在實際應用中,終端設備(End Device, ED)上的應用層并非直接與應用服務器(Application Server, AS)的應用層通信,而是經過網關(Gateway, GW)中繼、網絡服務器(Network Server, NS)的校驗與轉發,最后到達AS。期間要經歷若干接口,比如ED到GW的空中接口,以及GW到NS、NS到AS的傳輸層接口。ED與NS之間的LoRaWAN MAC接口如圖4所示。因此,合理設計各接口與其功能有利于協議棧的穩定運行。由于物理層的LoRa調制由Semtech公司開發并申請專利,在此不做討論,僅分析LoRaWAN MAC/鏈路層及以上層間接口的功能。

圖4 LoRaWAN分層通信
(1)ED-NS:在LoRaWAN網絡中,GW起透明中繼的作用,因此其上未部署LoRaWAN MAC,即ED的MAC與NS直接交互。此接口用來完成ED與NS之間MAC命令和數據負載的解析。
(2)GW-NS:GW使用LoRa物理層與ED通信,其與NS之間的通信通過傳輸層協議完成,比如用戶數據報協議(User Datagram Protocol, UDP)、傳輸控制協議(Transmission Control Protocol, TCP)等,此接口的作用為GW與NS之間消息透傳,同時還要考慮NS對不同傳輸層協議的支持。
(3)NS-AS:此接口支持NS與AS間應用層消息和NS元數據(終端設備地址、端口號、時間戳等)的傳遞。
(4)AS-JS:此接口用來支持JS向AS傳輸應用層會話密鑰。
(5)NS-JS:此接口用來完成OTAA設備的入網過程,期間JS需要與NS交換終端設備標識、入網編號等信息。
(6)AS-ED:此接口支持ED上的應用層與AS交互,包括對應用層數據的解析以及應用層指令下發等。
由于LoRaWAN的開源特性,其協議棧中的構件有多種實現方式,并由多方組織開發和維護。因此,合理設計協議棧的層間接口與構件的工作流程對屏蔽不同實現方式之間的差異起到重要作用。本文在分析LoRaWAN協議族以及開源LoRaWAN協議棧的基礎上,給出了層間接口的實現方式以及構件的工作流程。LoRaWAN網絡接口實現方式如圖5所示。

圖5 LoRaWAN網絡接口實現方式
NS兼具LoRaWAN MAC層解析與傳輸層轉發的功能,后者依賴前者的處理結果,為協議棧設計與NS的性能優化造成了困難。為了使兩部分功能分離,提高NS效率,增加網橋(Gateway Bridge, GB)作為GW與NS間的中間件。GB同樣部署于NS之上,屬于NS的一部分,其作用為將來自GW的MAC負載進行預處理,并分類上傳至NS。
(1)GW-NS:此接口在增加GB作為中間件后,分為GW-GB和GB-NS兩部分,前者可以使用UDP協議,后者可以使用消息隊列遙測傳輸(Message Queuing Telemetry Transport, MQTT)協議。實際應用中往往有多個GW連接至同一GB,如果每次通信都需要建立連接則耗費GB較多資源,使用無連接的UDP協議可以避免這一問題,快速完成數據上傳。MQTT協議是一種輕量級,基于發布/訂閱模式的通信協議,可以實現應用程序解耦,允許一個NS訂閱多個GW的消息發布,無需與某一GW綁定,從而提高NS的資源利用率,同時提高協議棧的實時性。
(2)NS-JS、AS-JS:這2個接口涉及網絡傳輸,主要傳輸內容為LoRaWAN會話密鑰,需要較高的安全性,又因數據量較小,可以使用HTTPS協議。
(3)NS-AS:此接口消息多為應用層數據,傳輸量較大,可以使用谷歌遠程過程調用(Google Remote Procedure Call,gRPC)協議,該協議傳輸延遲小,支持身份驗證,適用于單一NS連接多個AS的情景,既可以提高安全性,又能滿足高并發、低延時的傳輸要求。
(4)其他接口:其他接口不涉及網絡傳輸,只需實現對應功能即可。需要注意的是,LoRaWAN MAC接口在設計時應兼容較低版本協議。
3.2.1 網橋工作流程
網橋作為網關和網絡服務器間的中轉站,將UDP包與MQTT消息相互轉換,其工作流程也圍繞此功能展開。網橋在功能上分為三部分,分別為UDP后端模塊、推送模塊與MQTT訂閱/發布模塊,如圖6所示。對于上行數據,若UDP后端模塊中不同類型的LoRaWAN MAC幀回復ACK,表示終端設備接收到下行數據,通過進程間通信方式(此處為管道)送入推送模塊對應的進程中,該進程隨后將MAC幀通過MQTT模塊發布;與之相反,對于下行數據,MQTT模塊從網絡服務器訂閱對應主題,隨后通過管道送入推送模塊的進程中,交由UDP后端發送至網關。每種類型的MAC幀分別使用不同進程處理,可以避免堵塞;而同類型的MAC幀使用管道與推送進程通信,可以防止因前一幀數據尚未推送完成而導致當前幀丟失的情況。

圖6 網橋工作流程
3.2.2 網絡服務器工作流程
網絡服務器的主要模塊包括MQTT網關后端模塊、LoRaWAN服務器及網關狀態服務器。后端模塊處理與網橋相關的事務,LoRaWAN服務器實現MAC層管理,網關狀態服務器記錄該網絡服務器上注冊的網關信息,包括網關狀態信息、網關信號質量等。兩組服務器均需與應用服務器交互,如圖7所示。

圖7 網絡服務器工作流程
MQTT網關后端將來自網關的3種不同類型的MAC幀分別交付至對應進程中,同樣使用管道作為進程間通信方式。上行數據處理進程又將接收到的MAC幀按照LoRaWAN協議規定的流程進行處理。首先,提取此次會話的上下文并校驗,包括秘鑰、幀計數器、消息完整碼等。隨后,對于入網與重入網請求,對應進程通過HTTPS協議將其傳輸至入網服務器,并將入網接受請求發布到網關,如果此次入網請求未通過,則網絡服務器不作任何處理;對于應用層數據,除需上傳至應用服務器外,還需要向終端設備回復ACK;對于專有類型數據,則直接將其上傳至應用服務器,由其決定是否回復ACK。回復ACK進程需要校驗此次傳輸是否有效,并將結果發送至應用服務器,如果出錯則重傳前一幀下行數據。網關狀態處理進程在更新對應網關狀態后,根據具體命令配置網關參數,并將網關狀態告知應用服務器。
由于終端設備的消息以廣播的形式發出,因此可能出現多個網關上傳同一消息的情況,此時網絡服務器需要根據信號質量選擇最優網關與終端設備通信。所以,除完成基本的LoRaWAN MAC處理之外,網絡服務器還應具有選擇合適網關的功能。
3.2.3 應用服務器工作流程
應用服務器在LoRaWAN協議中未給出標準定義,本文根據網絡服務器的對應接口,結合應用層的基本功能將其分為3個基礎模塊:上行數據處理模塊、下行數據處理模塊與應用程序接口(Application Programming Interface, API)服務器,如圖8所示。

圖8 應用服務器工作流程
上行數據處理模塊包括應用數據、網關狀態、ACK Error處理進程;下行數據處理模塊負責將應用層的下行數據推送給網絡服務器,經由其調度后下發至終端設備。兩種數據處理模塊均通過API服務器與用戶交互,由于應用服務器的功能因應用類型不同差異較大,在此不給出各模塊的具體處理過程。
3.2.4 入網服務器工作流程
除以上3個構件外,入網服務器也是LoRaWAN協議棧中的重要部分,但其工作流程較為單一,主要負責管理OTAA設備的入網過程,如圖9所示。

圖9 入網服務器工作流程
入網服務器在接收到來自網絡服務器的設備入網請求后,首先校驗設備標識與DevNonce(在同一設備標識下單調遞增,防止入網請求重復)。
校驗成功后,入網服務器根據預先存儲的設備密鑰生成網絡會話秘鑰、應用會話密鑰以及JoinNonce(功能與DevNonce類似,在同一入網服務器標識下單調遞增,防止入網接受重復),隨后回復入網接受,交付對應秘鑰至網絡服務器和應用服務器;校驗失敗則丟棄該入網請求,不作任何處理。
本文對低功耗廣域網中廣泛使用的LoRaWAN協議族進行了詳細分析,總結了LoRaWAN協議棧的核心結構與各層接口,并討論了層間接口的實現方式;增加了網橋作為LoRaWAN協議棧中網關和網絡服務器的中間件,以此來提高網絡服務器的性能,減小不同實現方式的網關對后者的影響;最后,根據LoRaWAN協議族給出了網橋、網絡服務器、應用服務器、入網服務器的工作流程。
本文工作已在作者設計的基于物聯網的獨居老人監護系統中應用,并于阿里云服務器上部署運行,為用戶提供緊急求助、健康監測等服務。本文彌補了LoRaWAN協議棧系統架構方面研究的不足,有利于LoRaWAN協議的部署和推廣,同時也為后續類似工作提供了參考。