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