LoRaWAN1.0.x规范详解之空口帧结构
文章目錄
- 1 前言
- 2 LoRaWAN空口幀結(jié)構(gòu)
- 2.1 入網(wǎng)(JOIN)
- 2.1.1 入網(wǎng)請(qǐng)求(Join Request)
- 2.1.2 入網(wǎng)接受(Join Accept)
- 2.1.3 Join小結(jié)
- 2.2 數(shù)據(jù)通信(Data Message)
- 2.2.1 數(shù)據(jù)消息類型
- 2.2.2 MAC命令
- 3 Wireshark分析LoRaWAN空口包
- 3.1 Join Request
- 3.2 Join Accept
- 3.3 Confirmed Data Up
- 3.4 Unconfirmed Data Down(ACK)
- 3.5 Unconfirmed Data Down(Application Data)
1 前言
幀結(jié)構(gòu)是通信協(xié)議的核心設(shè)計(jì)內(nèi)容。設(shè)計(jì)MAC層的主要工作之一就是幀(數(shù)據(jù))結(jié)構(gòu)的設(shè)計(jì)。
LoRaWAN規(guī)范(LoRaWAN Speicification)雖然只定義到了數(shù)據(jù)鏈路層(無(wú)上層LLC層,只有下層MAC層),但是LoRaWAN空口幀結(jié)構(gòu)作為L(zhǎng)oRaWAN規(guī)范的核心知識(shí)要點(diǎn),設(shè)計(jì)精簡(jiǎn),是學(xué)習(xí)無(wú)線通信協(xié)議的很好參考。
2 LoRaWAN空口幀結(jié)構(gòu)
LoRaWAN規(guī)范自下而上設(shè)計(jì),充分發(fā)揮了LoRa的硬件優(yōu)勢(shì),LoRaWAN空口幀結(jié)構(gòu)非常精簡(jiǎn),如圖2.1所示。這樣最大化優(yōu)化了物聯(lián)網(wǎng)終端的功耗,降低整體系統(tǒng)的復(fù)雜度、系統(tǒng)成本等。
下圖2.1基本涵蓋了LoRaWAN1.0.x空口傳輸?shù)乃行畔ⅰ?br />
圖2.1 LoRaWAN 空口幀結(jié)構(gòu)
LoRaWAN物理層主要是LoRa物理層(部分Region有采用FSK,作為高速應(yīng)用的補(bǔ)充),LoRa物理層采用LoRa有頭模式(Explicit Header Mode)(PS:除了Class B Beacon,其采用了Implicit Header),上行帶硬件CRC,下行不帶硬件CRC。同時(shí)采用的同步字是0x34(有別于現(xiàn)有市場(chǎng)的私有LoRa應(yīng)用的同步字0x12)。
LoRaWAN空口幀的MAC層按照消息類型(MTypes)來(lái)看,有6個(gè)消息類型:
- 入網(wǎng) 2個(gè)
- 數(shù)據(jù)通信 4個(gè)
- MAC命令
- MAC命令
2.1 入網(wǎng)(JOIN)
入網(wǎng)是LoRaWAN通信的開始,只有正確加入LoRaWAN網(wǎng)絡(luò)的設(shè)備,才能進(jìn)行數(shù)據(jù)通信。入網(wǎng)包含了兩個(gè)消息:
- Join Request
- Join Accept
2.1.1 入網(wǎng)請(qǐng)求(Join Request)
設(shè)備通過(guò)發(fā)送加入請(qǐng)求(Join Request)來(lái)申請(qǐng)加入目標(biāo)LoRaWAN網(wǎng)絡(luò)。
入網(wǎng)請(qǐng)求(Join Request)包含了兩個(gè)EUI號(hào),數(shù)據(jù)長(zhǎng)度都是8 Byte,分別是DevEUI與AppEUI。DevEUI遵循EUI-64命名規(guī)范,是設(shè)備的全球唯一標(biāo)識(shí)。AppEUI命名規(guī)則根據(jù)實(shí)際運(yùn)營(yíng)網(wǎng)絡(luò)而定。
DevNonce為2 Byte的隨機(jī)數(shù),用來(lái)防止JOIN的重播攻擊,NS服務(wù)器會(huì)跟蹤記錄每次JOIN Request中的DevNonce,只有在接收到第一條上行后,在刪除該DevNonce,因此NS服務(wù)器能夠通過(guò)DevNonce值來(lái)識(shí)別出重播攻擊,拒絕響應(yīng)Join Accept。
MIC(4 Byte)是對(duì)Join Request的完整性檢查,只有擁有根秘鑰AppKey,才能計(jì)算得到有效mic值,否則將被NS服務(wù)器拒絕,因此可以防止偽造節(jié)點(diǎn)。
圖2.2 Join Request的MIC生成方法
2.1.2 入網(wǎng)接受(Join Accept)
入網(wǎng)接受包(Join Accept)是NS服務(wù)器對(duì)設(shè)備的入網(wǎng)許可回復(fù)。
入網(wǎng)接受包通過(guò)Appkey來(lái)加密。
圖2.3 Join Accept解密方式
AppNonce若為3 Byte的隨機(jī)數(shù),可(與DevNonce)每次派生出不同兩個(gè)會(huì)話秘鑰AppSKey、NwkSKey
圖2.4 會(huì)話秘鑰AppSKey、NwkSKey派生方式
NetID(3 Btye)標(biāo)識(shí)網(wǎng)絡(luò)ID,用于區(qū)別同一地理區(qū)域內(nèi)可能存在的多個(gè)不同運(yùn)營(yíng)商的LoRaWAN網(wǎng)絡(luò),全球性的NetID,LoRa Alliance已執(zhí)行了新的管理辦法。
DevAddr(4 Byte)標(biāo)識(shí)設(shè)備在網(wǎng)絡(luò)內(nèi)的短地址。
DLSettings(1 Byte)用于NS服務(wù)器側(cè)調(diào)整RX1,RX2的速率。可以根據(jù)不同地區(qū),網(wǎng)關(guān)可支持的最大功率來(lái)調(diào)整,以實(shí)現(xiàn)上行與下行無(wú)線鏈路預(yù)算的平衡。
RxDelay(1 Byte)用于NS服務(wù)器側(cè)調(diào)整RX1窗口開啟延時(shí)
CFList(16 Byte)是可選的頻率表字段,NS服務(wù)器可根據(jù)Reginal Parameters與實(shí)際部署需要,決定是否攜帶頻率表信息。
MIC是對(duì)Join Accept的完整性檢查。
圖2.5 Join Accept的MIC生成方式
2.1.3 Join小結(jié)
2.2 數(shù)據(jù)通信(Data Message)
數(shù)據(jù)通信用來(lái)傳輸MAC命令與應(yīng)用數(shù)據(jù)。
MAC層網(wǎng)絡(luò)開銷是13字節(jié),如圖2.1藍(lán)色區(qū)塊(在沒有FRMPayload的情況下,實(shí)際網(wǎng)絡(luò)開銷是12字節(jié),缺省情況下,未發(fā)送Fport.)
DevAddr是入網(wǎng)后,獲取的網(wǎng)內(nèi)短地址標(biāo)識(shí)。
Fctl(1 Byte)是網(wǎng)絡(luò)控制字節(jié),按位來(lái)標(biāo)識(shí)ADR、ACK、Fpending、Class B、Foptslen等網(wǎng)絡(luò)控制信息
Fcnt(2 Byte)是幀計(jì)數(shù)器,由發(fā)送端維護(hù),即終端側(cè)FCntUp與服務(wù)器側(cè)FCntDown,LoRaWAN支持2 Byte與4 Byte的Fcnt。4 Byte的Fcnt具有更大線性計(jì)數(shù)空間,相應(yīng)的也具備更好安全性,但是需要發(fā)送端進(jìn)行相應(yīng)的計(jì)數(shù)器向上溢出、掉電\上電保護(hù)等。2 Byte的Fcnt則可以直接拿來(lái)就用,無(wú)需特殊保護(hù)。
Fport(1 Byte)是應(yīng)用端口號(hào),用于指示FRMPayload的數(shù)據(jù)屬性。Fport=0,FRMPayload用于傳輸MAC命令。Fport=224,FRMPayload用于傳輸LoRaWAN聯(lián)盟定義認(rèn)證測(cè)試應(yīng)用。1~233 可根據(jù)實(shí)際情況,自定義使用。
FRMPayload為應(yīng)用數(shù)據(jù)。最大數(shù)據(jù)包長(zhǎng)度受限于通信速率。
2.2.1 數(shù)據(jù)消息類型
根據(jù)數(shù)據(jù)消息是否有顯性應(yīng)答,分為確認(rèn)幀(Confirmed-data message)與非確認(rèn)幀(Unconfirmed-data message)
- 確認(rèn)幀 :接收端必須應(yīng)答
- 非確認(rèn)幀 :接收端不要求應(yīng)答
2.2.2 MAC命令
MAC命令屬于LoRaWAN協(xié)議層數(shù)據(jù),主要用于實(shí)現(xiàn)網(wǎng)絡(luò)的運(yùn)維與管理、網(wǎng)絡(luò)動(dòng)態(tài)優(yōu)化等。
橙色由設(shè)備端發(fā)起,藍(lán)色由NS服務(wù)器發(fā)起。
| 0x02 | LinkCheck | 可用于設(shè)備端進(jìn)行LoRaWAN鏈路的可達(dá)性測(cè)試 |
| 0x03 | LinkADR | 用于NS服務(wù)器進(jìn)行ADR提速與調(diào)整功率 |
| 0x04 | DutyCycle | 用于NS服務(wù)器進(jìn)行占空比配置 |
| 0x05 | RxParamSetup | 用于NS服務(wù)器進(jìn)行Rx速率參數(shù)(RX1\RX2)調(diào)整 |
| 0x06 | DevStatus | 用于NS服務(wù)器獲取設(shè)備電池信息與無(wú)線鏈路余量Margin |
| 0x07 | NewChannel | 用于NS服務(wù)器新增\刪除\修改信道 |
| 0x08 | RxTimingSetup | 用于NS服務(wù)器進(jìn)行RX1窗口時(shí)間(RX1Delay)的調(diào)整 |
| 0x09 | TxParamSetup | 用于NS服務(wù)器進(jìn)行TX功率、駐留時(shí)間的調(diào)整 |
| 0x0A | DIChannel | 用于NS服務(wù)器對(duì)RX1窗口頻率的特殊設(shè)定 |
| 0x0D | DeviceTime | 可用于設(shè)備端獲取全網(wǎng)時(shí)間,輔助Class B Beacon 同步等 |
3 Wireshark分析LoRaWAN空口包
接下來(lái)透過(guò)最流行的開源協(xié)議分析工具Wireshark(PS:Wireshark2.6.0版本開始增加了LoRaWAN協(xié)議的解析器),來(lái)實(shí)際看看LoRaWAN空口數(shù)據(jù)包。
3.1 Join Request
圖3.1 Join Request
- “Join Request”為明文傳輸,但受MIC保護(hù)
3.2 Join Accept
圖3.2 Join Accept
- “Join Accept”為密文傳輸,沒有根秘鑰Appkey,則無(wú)法獲取原始信息內(nèi)容
3.3 Confirmed Data Up
圖3.3 確認(rèn)幀上行
- 上行用戶數(shù)據(jù)“Frame Payload”采用AES128加密,沒有會(huì)話秘鑰AppSkey,則無(wú)法獲取原始信息內(nèi)容
3.4 Unconfirmed Data Down(ACK)
圖3.4 上行確認(rèn)幀的回復(fù)(下行非確認(rèn)幀)
- 在沒有用戶數(shù)據(jù)的情況,實(shí)際下行空口是12個(gè)字節(jié)(純MAC層開銷)
3.5 Unconfirmed Data Down(Application Data)
圖3.5 上行確認(rèn)幀的回復(fù)(下行非確認(rèn)幀,并攜帶用戶數(shù)據(jù))
- 下行用戶數(shù)據(jù)“Frame Payload”采用AES128加密,沒有會(huì)話秘鑰AppSkey,則無(wú)法獲取原始信息內(nèi)容
總結(jié)
以上是生活随笔為你收集整理的LoRaWAN1.0.x规范详解之空口帧结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OpenCore黑苹果引导配置说明-基于
- 下一篇: 重定位表详解