LoRaWAN 的server包括 NS(Network server)、AS(application server)、CS(Custom server)....
其中NS和AS是必不可少的,是完成LoRaWAN協議的重要組成部分
NS 職責
NS是直接與GW通信的服務器,也是AS和GW之間的橋梁
我所知道的工作有如下幾點:
驗證數據的合法性(校驗MIC)
從GW的信息中提取數據,整理成NS 的JSON數據包
將校驗合法的數據打包成新的JSON包上傳至AS
OTAA入網時向AS發送請求入網消息,然后再將入網信息告訴AS,當獲取AS傳來的入網的信息,告訴GW
GW 和 AS之間的數據通道
有幾點需要注意的是NS端的數據不進行AES解密工作。
AS 職責
AS是server端的數據處理中心
它的工作有如下幾點:
上行數據的解密
下行數據的加密
OTAA入網請求的處理(同意入網/生成APPSKEY/NWKSKEY)
CS 職責
CS負責將AS給的數據處理成用戶自定義的數據協議格式,也就是說,CS端必須是用戶來完成的,因為上面運行的是用戶的協議。這里也就不再多說了。
抓包分析
以下是我在本地服務器端通過抓到得來的數據,我們通過分析數據包來理解數據的走向已及現有的server端處理流程。抓包使用的是tcpdump。
1.NS->AS數據
這是一幀從NS->AS的數據,使用的是TCP方式,AS的數據端口為4000。從data部分我們可以看出來,這是一個未解密的數據。
提取其中的數據部分為:
再把app.userdata.payload 做base64解碼之后,得到的payload內容是這個:
此時看到的payload因為是加密的,所以完全看不出來數據內容是什么。
不過在這里,我們可以看到,NS已經將GW上傳的數據做了一定的解析,封裝成了另外一種JSON格式,由此,我們不難得出,NS做的工作包括--base64解碼/MIC校驗/GW數據包的重新組包
2.AS->CS數據
這是一幀從AS->CS的數據,使用的是TCP方式,CS的數據端口為5000。從data部分我們可以看出來,這是一個已經解密完成的數據了。
提取其中的數據部分為:
再把app.userdata.payload 做base64解碼之后,得到的payload內容是這個:
而此時,數據已經完全解密了,可以看到數據就是在AS解密的,解密完再發送給CS,CS再做進一步用戶協議的處理。
在這里,我們可以看到,AS已經將NS傳輸過來的JSON包的payload部分做了解密,然后再傳給了CS。所以解密工作是在AS完成的。