水蜜桃视频黄色_欧美亚洲国产激情在线_亚洲国模私拍一级无码_日韩特黄无码免费视频_亚洲综合欧美日韩在线_精品日韩人妻一区二区欧美_AV免费黄色录像_天堂网www天堂在线_国产极品AV嫩模_色欲人妻综合yy成人网站

?
?

LoRaWANOTAA入網(wǎng)方式詳述

內(nèi)蒙古德明電子科技有限公司產(chǎn)品解決方案 聯(lián)系電話:15384841043張工

發(fā)布日期:2022-09-18

OTAA(Over-The-Air Activation),是LoRaWAN的一種空中入網(wǎng)方式。當node在上電的時候處于非入網(wǎng)狀態(tài)時,需要先入網(wǎng)才能和服務(wù)器進行通信。其操作就是node發(fā)送join_request message,請求入網(wǎng),然后服務(wù)器同意入網(wǎng),并且返回Join-accept message,node再對信息進行解析,獲取通信參數(shù),之后就可以和服務(wù)器通信了。

準備工作

node端在做OTAA入網(wǎng)之前,需要先具備三個參數(shù):

  • APPEUI node自定義的8字節(jié)長地址
  • APPKEY 服務(wù)器和node端都事先存好,用于對Join_acept message 做加解密處理
  • DevNonce 2字節(jié)的隨機數(shù),用于生成隨機的AppSKey和NwkSKey

這些參數(shù)可以通過程序固話在里面,或者通過串口或其他方式在入網(wǎng)操作前告訴node。

當這些準備工作都做好了之后,node設(shè)備就能夠入網(wǎng)了。

第一步

1.node發(fā)起入網(wǎng)請求,也就是發(fā)送join_request message,

根據(jù)LoRaWAN specification 可知,join_request message的格式如下:

MHDR APPEUI DevEUI DevNonce MIC
1字節(jié) 8字節(jié) 8字節(jié) 2字節(jié) 4字節(jié)

其中

字段 描述
MHDR 數(shù)據(jù)包頭,其中包含了數(shù)據(jù)包的類型,也就是說從這個包頭可以知道,這是一個join_request message
APPEUI 應(yīng)用EUI
DevEUI node的長地址,由node自己定義
DevNonce 一個隨機數(shù),用來生成密碼
MIC 4字節(jié)的校驗

需要注意的是Join_request message是未加密的

第二步

2.GW將此數(shù)據(jù)上傳至NS

GW對MAC層的數(shù)據(jù)不進行解析,而是直接將其進行base64編碼之后,封裝成JSON包上傳至NS,MAC層的數(shù)據(jù)位于rxpk.data

樣例數(shù)據(jù):

{
    "rxpk": [
        {
            "tmst": 532505620,
            "chan": 6,
            "rfch": 0,
            "freq": 471.9,
            "stat": 1,
            "modu": "LORA",
            "datr": "SF12BW125",
            "codr": "4/5",
            "lsnr": -17,
            "rssi": -81,
            "size": 23,
            "data": "AAEAACAAxSYsFhAWIAB3SgBUe0At4Zo="
        }
    ]
}

此處,將data進行base64解碼,我們就可以看到MAC層數(shù)據(jù)了,因為join_request message數(shù)據(jù)是未加密的

data部分的內(nèi)容如下:

/x00 /x01 /x00 /x00 /x20 /x00 /xc5 /x26 
/x2c /x16 /x10 /x16 /x20 /x00 /x77 /x4a 
/x00 /x54 /x7b /x40 /x2d /xe1 /x9a 

各部分的內(nèi)容分別為:

字段 內(nèi)容
MHDR /x00
AppEUI /x01 /x00 /x00 /x20 /x00 /xc5 /x26 /x2c
DevEUI /x16 /x10 /x16 /x20 /x00 /x77 /x4a /x00
DevNonce /x54 /x7b
MIC /x40 /x2d /xe1 /x9a

第三步

3.NS向AS發(fā)送設(shè)備入網(wǎng)包

樣例數(shù)據(jù):

{
    "join": {
        "request": {
            "frame": "AAEAACAAxSYsFhAWIAB3SgBUe0At4Zo"
        }
    }
}

將join.frame進行base64 解碼,得到的內(nèi)容為:

/x00 /x01 /x00 /x00 /x20 /x00 /xc5 /x26 
/x2c /x16 /x10 /x16 /x20 /x00 /x77 /x4a 
/x00 /x54 /x7b /x40 /x2d /xe1 /x9a 

可以看到,原先的MAC 層的data數(shù)據(jù)沒有變化

第四步

4.AS同意入網(wǎng)并且向NS回復(fù)同意入網(wǎng)

樣例數(shù)據(jù):

{
    "join": {
        "moteeui": "4a770020161016",
        "accept": true
    }
}

第五步

5.NS生成MoteAddr,并將node端的信息發(fā)送給AS

樣例數(shù)據(jù):

{
    "join": {
        "appeui": "2c26c50020000001",
        "moteeui": "4a770020161016",
        "details": {
            "moteaddr": "48000002",
            "devicenonce": 31572
        }
    }
}

第六步

6.AS生成密鑰,并將相關(guān)信息告訴NS

樣例數(shù)據(jù):

{
    "join": {
        "moteeui": "4a770020161016",
        "complete": {
            "frame": "IPqAKXQ7LS/CmYVCDy8K3k4",
            "networkkey": "de03331aeb4254e9727b6fafbf13db3d"
        }
    }
}

可以看到,networkkey直接發(fā)送給NS了,這也就是NwkSKey,之所以明文告訴NS,是因為:
1.NS不做解密的工作,所以不能通過APPKEY解密負載得到
2.networkkey在NS對上下行數(shù)據(jù)進行校驗的時候會使用到

第七步

7.NS將數(shù)據(jù)告訴GW,GW再轉(zhuǎn)換成MAC包,發(fā)送給node

樣例數(shù)據(jù):

{
    "txpk": {
        "tmst": 537505620,
        "freq": 471.9,
        "rfch": 0,
        "powe": 14,
        "modu": "LORA",
        "datr": "SF12BW125",
        "codr": "4/5",
        "ipol": true,
        "size": 17,
        "data": "IPqAKXQ7LS/CmYVCDy8K3k4"
    }
}

需要注意的是,此時的data部分是經(jīng)過base64編碼以及AES加密的,直接解碼,看到的數(shù)據(jù)是無效的,需要再進行解密,解密需要使用APPKEY,也就是之前介紹的APPKEY.

txpk.data部分就是LoRaWAN MAC的join_accept message.

第八步

8.node解析join_accept message 部分

根據(jù)LoRaWAN specification 可知,join_accept message的格式如下:

MHDR AppNonce NetID DevAddr DLSettings RxDelay CFList(pad16) MIC
1字節(jié) 3字節(jié) 3字節(jié) 4字節(jié) 4字節(jié) 1字節(jié) 0/16字節(jié) 4字節(jié)

其中

字段 描述
MHDR 數(shù)據(jù)包頭,其中包含了數(shù)據(jù)包的類型,也就是說從這個包頭可以知道,這是一個join_accept message
AppNonce 3字節(jié)的unique ID,服務(wù)器生成的,產(chǎn)生AppSKey/NwkSKey 會用到
NetID 網(wǎng)絡(luò)ID,產(chǎn)生AppSKey/NwkSKey 會用到
DevAddr 設(shè)備的短地址
DLSettings 設(shè)置RX1和RX2的下行接受串口的速率
RxDelay 從發(fā)送完成到打開RX1接受串口的事件
CFList(pad16) 我也不知道是什么,目前看到的都是0個字節(jié)
MIC 4字節(jié)的校驗

需要注意的是Join_accept message是加密的,需要使用APPKEY解密

txpk.data:
"data": "IPqAKXQ7LS/CmYVCDy8K3k4"

base64解碼:
/x20 /xfa /x80 /x29 /x74 /x3b /x2d /x2f
/xc2 /x99 /x85 /x42 /x0f /x2f /x0a /xde
/x4e

這個數(shù)據(jù)是未解密的,我們還需要解密

解密后為
/x20 /x43 /x75 /xcb /x24 /x00 /x00 /x02
/x00 /x00 /x48 /x03 /x00 /x82 /xc9 /xd0
/xf9

具體的情況如下:

字段 解密前 解密后
MHDR /x20 /x20
AppNonce /xfa /x80 /x29 /x43 /x75 /xcb
NetID /x74 /x3b /x2d /x24 /x0 /x0
DevAddr /x2f /xc2 /x99 /x85 /x2 /x0 /x0 /x48
DLSettings /x42 /x3
RxDelay /x0f /x0
CFList    
MIC /x2f /x0a /xde /x4e /x82 /xc9 /xd0 /xf9

可以看到,DevAddr為0x48000002,而AppSKey和NwkSKey無法直接看出來,需要再計算

計算公式如下:

  • NwkSKey = aes128_encrypt(AppKey, 0x01 | AppNonce | NetID | DevNonce | pad16)
  • AppSKey = aes128_encrypt(AppKey, 0x02 | AppNonce | NetID | DevNonce | pad16)
no form by the id.

聲明:本文內(nèi)容及配圖由作者撰寫及網(wǎng)上轉(zhuǎn)載。文章觀點僅代表作者本人,文章及其配圖僅供學(xué)習(xí)之用,如有內(nèi)容圖片侵權(quán)或者其他問題,請聯(lián)系本站作侵刪。