LoRaWAN协议-设备入网流程详解(OTAA和ABP)

目录

1 前言

2 相关数据

2.1 DevAddr

2.2 NwkSKey

2.3 AppSKey

3 OTAA

3.1 入网准备

1)DevEUI

2)AppEUI(JoinEUI)

3)AppKey

3.2 Join-Request

3.3 Join-Accept

1) 什么是DR

2) 命令解析

3)加密

3.4 NwkSKey/AppSKey计算 

4 ABP


1 前言

        在LoRaWAN协议中,设备都需要入网激活。入网成功后,终端设备会被分配一个唯一地址(DevAddr)。同时会生成加密密钥NwkSKey和AppSKey,用于双方后续通信命令的加密和校验。

        入网方式有2种:

  • 空中激活OTAA

        通过入网命令流程来激活设备,并获取DevAddr,NwkSKey以及AppSKey

  • 本地激活ABP

        DevAddr,NwkSKey以及AppSKey终端设备和服务器提前约定好,保存在各自的本地中。无需在通过入网命令来激活

2 相关数据

        终端设备激活后,需在本地保存好如下数据:DevAddr,NwkSKey以及AppSKey,用于入网后的上下链路通信。

2.1 DevAddr

        32bit组成,用于标识当前网络中的终端设备。是在入网过程中由网络服务器分配。

2.2 NwkSKey

        网络会话密钥,用于加密FRMPayload以及MIC校验。

        PS:加密和MIC校验过程参考《LoRaWAN协议-MAC帧格式详解》一文

2.3 AppSKey

        应用会话密钥,用于加密FRMPayload

        PS:加密过程参考《LoRaWAN协议-MAC帧格式详解》一文

3 OTAA

  • 入网前,双方需提前约定好AppEUI(JoinEUI),DevEUI和APPKey
  • 终端设备和服务器通过命令Join-Request和Join-Accept来进行入网流程,最终节点设备会获取到DevAddr,NwkSKey和AppSKey完成激活
  • 终端设备收到命令Join-Accept后,通过该命令中携带的数据,以AppKey作为密钥,通过AES128加密计算出NwkSKey和AppSKey
  • Join-Request命令帧未加密,而Join-Accept命令帧有加密。

3.1 入网准备

        入网前终端设备和服务器端需提前约定好AppEUI(JoinEUI),DevEUI,APPKey。

1)DevEUI

        作为EUI64地址空间中的一个全局终端设备ID,唯一的设备标识。建议设备出厂前就固定化到存储器中。

2)AppEUI(JoinEUI)

        在不同版本名字不一样,AppEUI或者JoinEUI。作为应用标识,对设备来说并不是唯一的。同一设备入网不同的后台使用不同的应用服务器,就可以使用AppEUI来区分了。

3)AppKey

        作为AES-128加密的密钥,在入网过程中主要有三个作用:

  • 用于入网命令MIC校验码计算。在《LoRaWAN协议-MAC帧格式详解》一文中有提到,LoRaWAN帧结构中MIC校验是由NwkSkey作为密钥计算出来的。但入网还未结束,设备终端和服务器都还未获取到NwkSkey,此时入网命令Join-request和Join-accept的MIC校验码暂时通过AppKey来计算。
  • 用于加密衍生出NwkSkey和AppSKey
  • 用于加密命令Join-Accept。(命令Join-Request未加密)

3.2 Join-Request

        由终端设备主动发送命令Join-Request开始入网请求

  • AppEUI & DevEUI:入网请求命令中会携带这两个数据,服务器收到命令后,会通过该数据决定是否允许设备入网。
  • DevNoce:每次请求时,该值设定为随机值。服务端会持续记录近段时间的DevNoce,如果同一个AppEUI的DeviNoce之前有重复,服务端会自动过滤Join-request命令。
  • MIC校验码:唯一需要注意的是,其值是通过AppKey作为密钥计算的,MIC取AES运算后的前4字节。

  • 入网请求命令只做了数据校验,并未加密

3.3 Join-Accept

        服务器接收到命令后,匹配后台的AppEUI/DevEUI,如果允许入网则会回复Join-Accept

1) 什么是DR

《LoRaWAN协议-物理层(PHY)详解》一文中已经分析过了,LoRaWAN协议采用LoRa调制作为PHY层,其调制配置参数除了扩频因子SF和带宽BW,其他参数在协议中都是固定不变的。协议规定DR0~DR15,在不同区域使用不同的SF,BW组合,即表示不同的调制配置,比如:

        对用户来说,最直观的理解就是终端设备和网关需要配置相同的DR才能正常通信,不同的DR意味着不同的速率以及传播距离。

2) 命令解析

  • MHDR/MIC和Join-Request原理一样,这里就不做分析了
  • JoinNoce:由服务端提供的随机值,该值唯一的作用就是计算NwkSKey和AppSKey
  • NetID:网络ID,同时也用于计算NwkSKey和AppSKey
  • DevAddr:分配给终端设备的地址
  • DLSettings

        a. RX1DROffset:服务端告知节点,下行RX1窗口的DR和上行的DR偏差,一般默认0.

        b. RX2DataRate:服务端告知节点,下行RX2窗口的DR(0~15)

  • RXDealy:下行RX1窗口开启的延时时间,按标准是默认1s
  • CFLIST: 可选字段,用于信道分配,后续单独文章说明

3)加密

        Join-Accept命令帧使用AppKey做为密钥,AES128加密算法,ECB模式进行加密。加密作用域如下:

3.4 NwkSKey/AppSKey计算 

  • 使用AppKey做为密钥
  • 使用到JoinNonce,NetID,DevNoce字段数据进行AES128计算得出NwkSKey和AppSKey

4 ABP

        本地激活方式是直接连入网络,终端设备和服务器约定好DevAddr,NwkSKey和AppSKey,这样就省去了Join-Request和Join-Accept命令过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值