mind-water

LoRaWAN协议 -- 简要(from LoRaWAN Specification)

速率自适应

伪随机方式来改变信道

 

LoRaWAN设备至少实现 Class A 功能:

双向传输终端(Class A): Class A 的终端在每次上行后都会紧跟两个短暂的下行接收窗口,以此实现双向传输。服务器在其他任何时间进行的下行传输都得等终端的下一次上行。

 

 

划定接收时隙的双向传输终端(Class B): Class B 的终端会有更多的接收时隙。除了Class A 的随机接收窗口,Class B 设备还会在指定时间打开别的接收窗口。需要和服务器时间同步

 

最大化接收时隙的双向传输终端(Class C): Class C 的终端基本是一直打开着接收窗口,只在发送时短暂关闭。

 

 =============== Class A =================

ClassA 协议:

 PHY:   前导码 | PHY头 | PHY校验 | PHY载荷 | CRC   //下行没有CRC

PHY载荷中:8bit MAC头 |  <MAC载荷|Join Request | Join Response> | MIC   // MIC:message integrity code, 4字节 。 MAC头的8bit有3bit Mtype(消息类型) 3bit FRU 2bit LoRaWAN主版本号

针对MAC载荷中: 帧头 | 帧端口 | 帧载荷    //后两个是可选的, FRMPayload非空的时候,FPort必须有。FPort == 0时,FRMPayload是纯MAC命令。FPort的数值从1到223(0x01..0xDF)都是由应用层使用

其中帧头(FHDR) :  DevAddr | FCtrl | FCnt | FOpts    //Frame header structure。MAC命令在帧选项(FOpts)中

FCtrl:定义参考手册。其中有ADR位置位,则配合MAC命令来控制速率。ADR位尽量使用,以使能耗降低,网络容量增大。

 

MAC命令要么存在于FRMPayload(FPort == 0),要么在FOpts中

 

终端激活分:OTAA和ABP

 激活后,终端会存储如下信息:设备地址(DevAddr),应用ID(AppEUI),网络会话密钥(NwkSKey),应用会话密钥(AppSKey)。

DevAddr: 高7位是NwkID。低25位是NwkAddr,可由网络管理员分配

APPEUI: 类似EUI-64, 标识应用提供者,激活开始前就存储于终端中 

DevEUI :  类似APPEUI,只是标识终端的

NwkSKey:  用于MIC校验,也用于MAC载荷加解密

AppSKey: 应用层消息进行加解密。也用于计算和校验应用层MIC

AppKey 是由应用程序拥有者分配给终端。终端通过OTAA方式加入网络时,AppKey用来产生会话秘钥(NwkSKEY和AppSKey)

 

OTAA加入网络时,终端需要具备:DevEUI,AppEUI,AppKey。

 

空中激活时,终端不会初始化任何网络秘钥。加入网络成功后,才会分配网络会话秘钥( 思考:会话与网间漫游?)

 

加网流程总是由终端发送 join-request 来发起消息: AppEUI(8Bytes) | DevEUI(8Bytes) | DevNonce(2Bytes)   //DevNonce 是一个随机值, 服务端会记录该终端的历史DevNonce,如果同一个终端重复发送DevNonce,就会忽略Join Req的MIC。join-request 消息不用加密。

join-accept的帧格式:

 长度(Byte):  3                 3            4                1                     1                   (16)Optional
                      AppNonce    NetID    DevAddr     DLSettings     RXDelay        CFList

 

AppNonce是由网络服务器所提供的一个随机值或者某些形式的唯一ID。 用于终端得到两个会话密钥NwkSKey和AppSKey

 

----

ABP 需要DevAddr 和两个会话密钥 (NwkSKey / AppSKey)。 两个会话秘钥是每个终端不一样的,破解一个终端不影响其他终端安全。

===================================

分类:

技术点:

相关文章: