LoRa是 由法国公司Cycleo(于2009年作为IP和设计解决方案提供商成立)开发的专利技术,用于扩
频无线调制
• 2012年, Cycleo被Semtech(美国)以约500万美元的价格收购。
• 2015年Semtech建立了LoRa联盟。 包括意法半导体,瑞萨电子,微芯,软银,阿里巴巴,亚马逊,思科,RisingHF,CLAATEK等。
LoRa(Long Range)是Semtech公司的调制技术,用于低功耗,广域网(LPWAN)。
• LoRa是物理层。
• LoRa 基于线性调频扩频(CSS)通信和工作在免许可证的SubGHz 频段。
LoRa是物理层,LoRa定义了调制技术和频段,LoRaWAN是上层的一种开关协议,定义了mac层。
LoRaWAN网络架构分成如下五个部分:
• LoRaWAN节点
• LoRaWAN网关
• LoRaWAN网络服务器
• LoRaWAN应用服务器
• APP
工作过程是总端节点采集数据,将数据通过LoRa无线通信,传输到网关,网关再将数据传输到网络服务器,网络服务器再将数据转化到对应的应用服务器进行处理,最后在网页或者APP内进行显示。STM32WL系列的产品适合做节点这样的一个角色。
在数据传输种,节点和网络服务器之间会使用128bit的网络会话密钥进行加密,检点和应用服务器之间则会用128bit的应用绘画密钥加密, 这样可以确保节点传输到应用服务器的数据不会被网关和网络服务器进行读取到。
节点的类别主要是有Class A, Class B, Class C。
基于LoRaWAN的终端设备可能会根据其设备类别以三种模式之一运行。
• 所有此类设备必须支持Class A操作。
• Class B设备必须同时支持Class A和Class B模式。
• Class C设备必须支持Class A。这些操作模式与设备与网络的通信方式有关。
由下图也可以得知,Class A, Class B, Class C的功耗种Class A最小,Class C功耗最大。
Class A:所有LoRaWAN终端设备必须实现A类功能。 降低功耗。
双向传输终端(Class A):ClassA 终端设备允许双向通信,Class A 的终端在每次上行后都会紧跟两个短暂的下行接收窗口,以此实现双向传输。
终端基于自身通信需求来安排传输时隙,在随机时间的基础上具有较小的变化(即 ALOHA 协议)。Class A 操作为应用提供了最低功耗的终端系统,只要求应用在终端上行传输后的很短时间内进行服务器的下行传输,服务器在其他任何时间进行的下行传输都需要等终端的下一次上行。
Class B:Class B设备必须同时支持Class A和Class B模式。
划定接收时隙的双向传输终端(Class B):Class B 的终端有更多的接收时隙。除了 Class A 的随机接收窗口,Class B 设备还会在指定时间打开其他的接收窗口。为了让终端可以在指定时间打开接收窗口,终端需要从网关接收时间同步的信标(Beacon),使服务器知晓终端何时处于监听状态。
Class C:Class C始终处于“打开”状态; 也就是说,它们不依赖电池电量。 低延迟,多功耗。
最大化接收时隙的双向传输终端(Class C):Class C 的终端基本处于一直打开接收窗口的状态,只在发送时短暂关闭。Class C 的终端会比 Class A 和 Class B 更加耗电,但同时从服务器下发给终端的时延也是最短的。
LoRaWAN 网关在LoRaWAN 网络结构中主要是做数据转换工作,节点接收到的数据转换到网络服务器,或者将网络服务器的数据传输到节点。
LoRaWAN 网络架构主要包含节点、网关、网络服务器、应用服务器以及应用APP。
LoRaWAN 节点入网或者激活主要又两种方式,分别是Over-the-Air Activation(OTAA)和Activation By Personalization (ABP)。
空中激活 OTAA 是目前推荐的连接方式,安全性更高,通过网络执行入网的过程,动态地生产会话密钥及 DevAddr。
• 基于全局唯一标识符
• 空中消息握手
• 设备制造商自动生成基本的配置参数
• 可以定期更新安全密钥(会话密钥和派生密钥)
• 设备可以存储多个“身份”,以在其生命周期内动态安全地切换网络和运营商
• 提供高级的防篡改安全选项
本地激活 ABP 接入网络的方式更为简单直接,无需入网流程,通过本地预存的会话密钥进行加解密,但存在一些安全性的问题如重放攻击,因此不推荐使用。
• 生产时存储共享密钥
• 锁定到特定网络
• 简化的(不太安全)的激活过程
• 在制造时对ID和密钥进行了个性化设置
• 上电后,设备立即开始工作; 跳过加入程序
• 设备绑定到特定的网络/服务; NetID是设备网络地址的一部分
标识符 | 说明 |
---|---|
DevEUI | 64位全局唯一ID(IEEE EUI64地址)唯一标识终端设备。 |
AppEUI | 64位应用ID用于唯一标识应用提供者的节点(IEEE EUI64地址) |
AppKey | 由AES分配的AES-128应用密钥,专用于终端设备应用程序提供者,用于派生特定于该终端设备的会话密钥NwkSKey和AppSKey,以加密和验证网络通信和应用程序数据 |
标识符 | 说明 |
---|---|
NwkSKey | 网络会话密钥,用于特定的终端设备。 网络服务器和终端设备将其用于计算和验证MIC(消息完整性代码),或加密和解密仅MAC数据消息的有效载荷字段 |
AppSKey | 应用会话密钥,用于特定的终端设备。被用于应用服务器和终端设备加解密应用数据。 |
DevAddr | 标识当前网络中的终端设备的32位地址。 |
在软件上配置好节点参数后,在网络服务器上注册节点时,需要把对应节点的OTAA的入网参数填入到网络服务器中,然后节点就会发送入网请求 ,通过网关请求包发送给网络服务器,入网请求数据包内就包含了AppEUI和DevEUI等阐述的信息
当网络服务器接收到网关转化的入网请求数据包之后,网络服务器会根据数据包的参数来判断是否是已经注册的节点,如果是则会接受申请,并且会返回数据包给节点,数据包会包含后面用于派生数据通讯密钥的信息。
在完成入网通讯后,节点和服务器会根据入网申请和入网接收的数据包交换参数,派生出网络会话密钥(Networks Session Keys)和应用会话密钥(Application Session Keys)用于后续的数据传输加密。
节点和网络服务器之间的通信是用安全的网络连接使用派生的网络会话密钥 (Secure network connection using derived Network Session Keys)进行加密,而节点和应用服务器之间的通信是用应用程序会话密钥 (Application lever end-to end encryptionusing derived Application Session Keys)进行加密。
所以网关网络服务器没有办法读取到节点到应用服务器上的数据,因为他们使用的是不同的密钥,这也可以保证网关或者网络服务器受到攻击时,节点传输给应用服务器的数据不会被破解。
下图列出了LoRaWAN 安全密钥派过程,可以看到AppKey或者NwkSKey在结合不同的AES算法之后,可用于不同数据包的加密,比如入网申请和接受的数据加密和数据传输的密钥是不一样的。
最开始是入网,然后是节点的网络连接,这个步骤会产生加密数据的密钥,接着是数据的传输,可能是节点数据的更新或者是系统时间的同步。
对于LoRaWAN网络管理,可以在网络服务器和终端设备上的MAC层之间专门交换一组MAC命令。 MAC层命令对于应用程序或应用程序服务器或在终端设备上运行的应用程序永远是不可见的。
• 单个数据帧可以包含任何MAC命令序列,它们可以commands带在FOpts字段中,或者作为单独的数据帧发送时,可以在FRMPayload字段中将FPort字段设置为0。
• MAC命令始终以加密方式发送,并且不得超过15个八位位组.
• 作为FRMPayload发送的MAC命令始终被加密,并且不得超过最大FRMPayload长度.
发送MAC指令的两种方法:
• 在FOpts字段中附带的MAC命令
• MAC命令作为单独的数据帧发送,在FRMPayload字段
中将FPort字段设置为0
下面是lorawan的mac指令。主要分为两类,一类是节点发给服务器的,另一类是网络服务器发给节点的,一般而言总端节点只会应答一次接收到了mac指令,如果网络服务器没有接收到回应,只能再发一次。
以上的代码会在Q群里分享。QQ群:615061293。
或者关注微信公众号『记帖』,持续更新文章和学习资料,可加作者的微信交流学习!