【备忘】LoRaWAN(Long Range Wide Area Network)物联网通信协议
LoRaWAN 核心技术体系详解
LoRaWAN(Long Range Wide Area Network)是基于LoRa扩频调制技术的低功耗广域网(LPWAN) 协议标准,由LoRa联盟制定,专为物联网设备的远距离、低功耗、低成本通信需求设计,广泛应用于智能抄表、环境监测、资产追踪等场景。
一、 核心定位与设计目标
- 技术基础:LoRa是物理层(PHY)的扩频调制技术,LoRaWAN是基于LoRa的媒体访问控制层(MAC) 协议,定义了终端、网关、服务器的交互规则。
- 核心目标
- 远距离:单网关覆盖半径可达1-10km(城市环境)、10-30km(郊区/农村环境);
- 低功耗:终端电池寿命可达数年(Class A设备,占空比<1%);
- 大容量:单网关可接入数千台终端设备;
- 低成本:终端与网关硬件成本低,无需布线,支持免授权ISM频段。
二、 网络架构
LoRaWAN采用星型拓扑,核心由4类实体组成(1.1版本架构,1.0版本无独立Join Server):
| 实体 | 核心功能 | 关键特性 |
|---|---|---|
| 终端设备(End Device, ED) | 数据采集、指令执行、入网请求 | 分Class A/B/C三类,支持OTAA/ABP入网,低功耗设计 |
| 网关(Gateway, GW) | 透明转发射频帧(上行→服务器,下行→终端) | 多信道接收,无终端密钥,仅做数据中继,不解析内容 |
| 网络服务器(Network Server, NS) | 终端鉴权、帧过滤、速率适配(ADR)、下行调度 | 管理终端会话,存储网络层密钥,支持多网关协同 |
| Join Server(JS,1.1版本新增) | 密钥管理、入网鉴权、会话密钥推导 | 存储根密钥AppKey,负责跨网漫游鉴权,隔离安全风险 |
| 应用服务器(Application Server, AS) | 应用层数据解密、业务逻辑处理、指令下发 | 存储应用层密钥AppSKey,对接用户业务系统 |
三、 核心技术特性
1. 终端设备类别(Class A/B/C)
LoRaWAN定义三类终端,平衡功耗与实时性,是协议的核心差异化设计:
| 类别 | 接收窗口机制 | 功耗水平 | 典型应用 |
|---|---|---|---|
| Class A | 上行发送后,开启两个短接收窗口(RX1/RX2),其余时间休眠 | 最低(电池寿命数年) | 智能抄表、土壤传感器、温湿度监测 |
| Class B | 在Class A基础上,增加周期性接收时隙(由网关信标同步) | 中等 | 智能停车、资产追踪(需定时下行指令) |
| Class C | 持续监听下行信道,仅在发送上行数据时短暂关闭接收 | 最高 | 工业控制、实时告警(需超低延迟下行) |
2. 自适应数据速率(ADR)
网络服务器根据终端上行数据的RSSI(接收信号强度) 和SNR(信噪比),动态调整终端的扩频因子(SF) 和带宽(BW):
- 信号好时:降低SF、增大BW → 提升传输速率、降低功耗;
- 信号差时:提高SF、减小BW → 提升通信可靠性、延长传输距离。
核心价值:在覆盖范围内,最大化终端电池寿命与网络容量。
3. 频段与调制
- 频段:使用全球免授权ISM频段,区域适配性强:
- 欧洲:868MHz;北美:915MHz;中国:470-510MHz;东南亚:923MHz。
- 调制技术:采用CSS(啁啾扩频调制),抗干扰能力强,支持非视距(NLOS)通信。
- 传输速率:0.3kbps ~ 50kbps(由SF和BW决定)。
四、 入网方式
LoRaWAN支持两种入网方式,OTAA为推荐方式,安全性更高:
1. 空中激活(OTAA)
- 核心特点:动态协商会话密钥,无人工预置,安全性高,支持漫游(1.1版本);
- 关键参数:1.0版本用DevEUI/AppEUI/AppKey;1.1版本用DevEUI/JoinEUI/AppKey;
- 流程简述:终端发送Join Request → 服务器鉴权 → 下发加密Join Accept → 终端推导会话密钥 → 完成入网。
2. 预置激活(ABP)
- 核心特点:人工预置会话密钥(NwkSKey/AppSKey)和终端地址(DevAddr),入网速度快;
- 局限性:密钥静态存储,易泄露;不支持漫游;终端更换网络需重新配置参数;
- 适用场景:对入网速度要求极高、无漫游需求的封闭场景。
五、 版本演进与核心差异
LoRaWAN的两大主流版本为1.0.x和1.1,核心差异聚焦于安全、漫游与架构:
| 对比维度 | LoRaWAN 1.0.x | LoRaWAN 1.1 |
|---|---|---|
| 核心架构 | NS/AS合设,无独立JS | 新增Join Server,JS/NS/AS三层分离 |
| 标识体系 | AppEUI(64bit) | JoinEUI(替代AppEUI),支持漫游路由 |
| 密钥体系 | 两层密钥(NwkSKey/AppSKey) | 四层密钥(AppKey/NwkKey/SNwkSKey/AppSKey),分层隔离 |
| Join Accept加密 | AES-128-ECB(安全性低) | AES-128-CTR(抗重放攻击,安全性高) |
| 漫游能力 | 不支持 | 原生支持跨运营商/跨区域漫游 |
| 重入网机制 | 无,需重新走完整OTAA | 支持Type 0/1/2三种Rejoin,快速恢复会话 |
| 安全风险 | 单密钥泄露影响网络+应用层 | 密钥分层存储,风险隔离 |
六、 典型应用场景
LoRaWAN的低功耗、广覆盖特性,适配物联网“最后一公里” 的海量场景:
- 智慧城市:智能路灯、垃圾桶监测、井盖监测、智慧停车;
- 智慧能源:水电燃气抄表、充电桩监测、光伏电站运维;
- 智慧农业:土壤墒情监测、灌溉控制、牲畜定位、温室环境监测;
- 工业物联网:设备状态监测、资产追踪、厂区环境监测;
- 环境监测:空气质量监测、水质监测、噪声监测、地质灾害预警。
七、 部署与开发关键注意事项
- 频段合规:严格遵循目标区域的频段、发射功率、占空比限制(如中国470MHz频段占空比≤1%);
- 设备选型:根据业务场景选择终端类别(优先Class A),确认支持OTAA和ADR;
- 密钥管理:AppKey需严格保密,禁止终端代码明文存储;1.1版本需确保JS与终端的AppKey一致;
- 网关部署:选择高处部署(如楼顶),避免遮挡,确保覆盖范围与信号质量;
- 兼容性:1.1版本终端可向下兼容1.0网络(关闭漫游功能),1.0终端无法接入1.1网络。
八、OTAA详解
LoRaWAN的OTAA(Over-The-Air Activation)空中激活是终端设备安全入网的标准方式,核心优势是动态协商会话密钥,无需人工预置参数,安全性远高于ABP(预置激活)。其流程在 1.0.x版本 和 1.1版本 存在关键差异(1.1新增独立Join Server和漫游能力),以下分版本详细拆解完整流程。
(一)、 核心前提:终端与服务器预置参数
OTAA的核心是终端和服务器共享根密钥与唯一标识,参数需严格一一对应,且AppKey必须保密存储(禁止终端代码明文写死)。
| 版本 | 终端预置参数 | 服务器预置参数 | 参数作用 |
|---|---|---|---|
| 1.0.x | DevEUI(64bit,设备唯一ID) AppEUI(64bit,应用标识) AppKey(128bit,根密钥) | 同终端参数(存储在NS/AS合设的服务器) | DevEUI识别设备 AppEUI绑定应用 AppKey推导会话密钥 |
| 1.1 | DevEUI(64bit) JoinEUI(64bit,替代AppEUI,绑定Join Server) AppKey(128bit) | DevEUI+JoinEUI+AppKey(存储在独立Join Server) NS存储网络标识NetID | JoinEUI路由至对应JS JS负责鉴权和密钥推导 |
(二)、 OTAA 完整流程(4步核心交互)
1.0.x无独立Join Server,鉴权和密钥推导由网络服务器(NS)+ 应用服务器(AS) 合设的节点完成。以下是LoRaWAN 1.0.4版本中OTAA入网的详细流程:分为 Join Request(入网请求)→ Join Accept(入网接受)→ 会话密钥推导 → 首次上行通信 四个阶段,采用非对称加密 + 对称加密结合的方式保障安全。
1. 阶段1:终端发送 Join Request 消息(上行)
终端设备上电后,首先在指定的入网信道(LoRaWAN 1.0定义了固定的Join信道,如中国470MHz频段为信道0-7)发送Join Request帧,帧结构与传输规则如下:
- 帧结构(共23字节,固定长度):
字段 长度 内容说明 MHDR 1字节 消息头: MType=000(标识为Join Request) +RFU=00+Major=00(LoRaWAN R1版本)AppEUI 8字节 终端预置的应用标识,小端序传输(低字节在前) DevEUI 8字节 终端唯一标识,小端序传输 DevNonce 2字节 终端生成的随机数,不可重复使用(防止重放攻击,需本地记录已使用的DevNonce) MIC 4字节 消息完整性校验码,由AppKey加密(AES-128-CMAC算法)生成,覆盖MHDR+AppEUI+DevEUI+DevNonce - 传输规则:
- 采用固定扩频因子(SF)和带宽(BW)(如SF12、125kHz),确保网关高概率接收;
- 可重复发送(间隔随机,避免冲突),直到收到Join Accept或达到最大重试次数。
2. 阶段2:网关转发 Join Request 至网络服务器(NS)
网关收到Join Request后,不解析帧内容(透明转发),通过IP链路将消息封装为JSON格式发送至网络服务器,同时携带以下辅助信息:
- 网关标识(Gateway EUI);
- 接收信号强度(RSSI)、信噪比(SNR);
- 接收信道与频率。
3. 阶段3:网络服务器验证并回复 Join Accept 消息(下行)
这是OTAA流程的核心阶段,服务器需完成身份验证 + 生成会话参数 + 加密下发三个动作。
(1) 服务器身份验证
网络服务器收到Join Request后,执行以下校验步骤:
- 提取
AppEUI和DevEUI,在设备注册表中查询对应的AppKey; - 用查询到的
AppKey,通过AES-128-CMAC算法重新计算MIC,与消息中的MIC对比:- 若不一致 → 丢弃消息,拒绝入网;
- 若一致 → 验证通过,继续下一步。
- 校验
DevNonce的唯一性:检查该DevEUI是否曾使用过相同的DevNonce,若重复 → 判定为重放攻击,拒绝入网。
(2) 服务器生成会话参数
验证通过后,服务器生成3个关键会话参数:
- NetID(24bit):网络服务器的唯一标识,用于区分不同LoRaWAN网络;
- DevAddr(32bit):分配给终端的临时网络地址,用于后续数据通信的地址标识(非唯一,可复用);
- AppNonce(32bit):服务器生成的随机数,与终端的
DevNonce配合推导会话密钥。
(3) 服务器加密并发送 Join Accept 消息
Join Accept是加密的下行消息,核心是防止会话参数被窃听,具体流程:
- 构建明文Join Accept帧(共12字节):
字段 长度 内容说明 MHDR 1字节 MType=010(Join Accept) +RFU=00+Major=00AppNonce 3字节 服务器生成的随机数 NetID 3字节 网络标识 DevAddr 4字节 分配给终端的网络地址 DLSettings 1字节 下行接收窗口参数(如RX1偏移、RX2频率/速率) RxDelay 1字节 接收窗口延迟(默认1s,即RxDelay=1) - 加密处理:
- 用
AppKey对明文Join Accept帧进行AES-128-ECB模式加密(ECB是LoRaWAN 1.0的规定,1.1版本优化为CTR模式); - 加密后的密文作为下行发送内容,无需额外MIC(加密本身已保障完整性)。
- 用
- 下行发送规则:
- 服务器通过网关,在终端
Join Request发送后的RX1窗口(默认1s后)或RX2窗口(默认2s后)下发Join Accept; - 下行速率由终端上行速率决定(RX1速率与上行速率对应,RX2为固定速率,如SF12、125kHz)。
- 服务器通过网关,在终端
4. 阶段4:终端解密 Join Accept 并推导会话密钥
终端在RX1/RX2窗口接收到Join Accept密文后,执行以下操作完成入网:
(1) 解密 Join Accept 帧
终端使用本地预置的AppKey,通过AES-128-ECB解密,还原出明文帧,提取关键参数:AppNonce、NetID、DevAddr、DLSettings、RxDelay。
(2) 推导会话密钥(核心步骤)
基于AppKey、AppNonce、NetID、DevNonce四个参数,终端和服务器独立推导出两个128bit的会话密钥(双方推导结果完全一致),用于后续数据通信加密:
| 会话密钥 | 推导算法(AES-128-ECB) | 作用 |
|---|---|---|
| NwkSKey(网络会话密钥) | 输入参数:AppKey + 固定字符串 0x01 + AppNonce + NetID + DevNonce | 加密网络层数据(如MAC命令)、计算消息MIC |
| AppSKey(应用会话密钥) | 输入参数:AppKey + 固定字符串 0x02 + AppNonce + NetID + DevNonce | 加密应用层数据(如传感器采集的业务数据) |
推导规则遵循LoRaWAN 1.0规范:密钥推导的输入字节流需按
[0x01/0x02] + AppNonce(3B) + NetID(3B) + DevNonce(2B) + 填充0x00至16B的格式拼接,再用AppKey进行AES-ECB加密,输出即为128bit会话密钥。
(3) 完成入网,进入数据通信阶段
终端存储DevAddr、NwkSKey、AppSKey后,即完成OTAA入网流程。后续终端可使用这些参数发送上行数据帧(如Unconfirmed Data Up或Confirmed Data Up),服务器也可使用会话密钥向终端下发数据。
(三)、 LoRaWAN 1.1 版本 OTAA 流程(新增Join Server,支持漫游)
1.1版本重构架构,引入独立Join Server(JS),实现“密钥管理与网络解耦”,支持跨运营商漫游,流程分为5个阶段。
OTAA是LoRaWAN 1.1终端无预配置接入网络的核心方式,通过“前置准备→Join请求→Join响应→密钥派生→会话建立→Rejoin维护”的完整流程,实现动态密钥协商与安全接入,全程加密且支持漫游,核心依赖DevEUI/JoinEUI身份标识与Nonce计数器防重放。
1. OTAA前置核心条件(规范6.1.1)
终端与网络侧需提前完成以下配置,否则无法启动激活流程:
- 终端侧预存信息(均为出厂/预配置,非易失性存储):
- JoinEUI(8字节):关联终端所属的Join Server,用于路由激活请求;
- DevEUI(8字节):终端全球唯一标识,全网不可重复;
- NwkKey(128位AES密钥):网络层根密钥,用于身份校验与网络会话密钥派生;
- AppKey(128位AES密钥):应用层根密钥,仅用于应用会话密钥派生,网络侧无法解密应用数据。
- 网络侧配置:
- Join Server/Network Server已注册终端的JoinEUI、DevEUI、NwkKey、AppKey;
- 终端与网关工作在同一频段(支持频段自动识别的终端可跳过频段预配置)。
2. OTAA完整激活流程(规范6.2.1-6.2.3)
2.1 第一步:终端发起Join-request(规范6.2.2)
终端上电后或会话丢失时,主动发送Join-request消息,触发激活流程:
- 消息结构(共18字节):
字段 长度(字节) 说明 JoinEUI 8 目标Join Server标识,路由激活请求 DevEUI 8 终端唯一身份标识 DevNonce 2 终端计数器,上电初始为0,每次发送递增,永不重复 - 传输规则:
- 信道与数据率:在指定Join信道(区域专属)随机跳频发送,建议多数据率尝试(提升成功率);
- 加密与校验:消息本身不加密,但需通过NwkKey计算4字节MIC(公式:cmac = aes128_cmac(NwkKey, MHDR | JoinEUI | DevEUI | DevNonce)),防止重放攻击;
- 占空比限制:首小时累计发送时间≤36秒,后续按区域规范执行(如EU868频段≤0.1%)。
2.2 第二步:网络侧响应Join-accept(规范6.2.3)
网关将Join-request透传至Network Server(NS),经校验后由Join Server生成Join-accept响应:
- 校验流程(NS/JS协同):
- NS提取Join-request中的DevEUI,查询对应Join Server;
- JS验证DevNonce(需大于终端历史最大值)与MIC合法性,通过则生成Join-accept参数;
- NS将Join-accept通过网关下发至终端。
- 消息结构(基础12字节,含可选CFList时为28字节):
字段 长度(字节) 说明 JoinNonce 3 JS计数器,终端唯一,永不重复 Home_NetID 3 终端归属网络标识,用于漫游识别 DevAddr 4 动态分配的终端短地址(32位) DLSettings 1 下行参数(含OptNeg位、RX1DRoffset等) RxDelay 1 收发延迟(默认1秒,范围0-15秒) CFList(可选) 16 区域信道列表,覆盖终端默认信道配置 - 传输规则:
- 加密方式:用NwkKey(普通Join)或JSEncKey(Rejoin触发)AES-128加密,终端需解密后获取参数;
- 下发时机:在终端RX1/RX2窗口发送,延迟为JOIN_ACCEPT_DELAY1(默认1秒)或JOIN_ACCEPT_DELAY2(默认2秒);
- 终端校验:接收后验证MIC与JoinNonce(需大于历史值),通过则进入密钥派生阶段。
2.3 第三步:会话密钥派生(规范6.2.5)
终端与网络侧基于相同参数独立派生会话密钥,无需直接传输,是OTAA安全性核心:
- 派生触发条件:终端成功解密Join-accept并校验通过。
- 派生参数:NwkKey/AppKey + JoinNonce + DevNonce + JoinEUI(1.1版本)/NetID(1.0兼容)。
- 密钥派生结果(1.1版本分离设计,规范图49):
- 网络层会话密钥(由NwkKey派生):
- FNwkSIntKey:上行网络层消息MIC校验密钥;
- SNwkSIntKey:下行网络层消息MIC校验密钥(支持漫游场景);
- NwkSEncKey:网络层数据加密密钥(加密FOpts/MAC命令);
- 应用层会话密钥(由AppKey派生):
- AppSKey:应用层业务数据(FRMPayload)加密/解密密钥。
- 网络层会话密钥(由NwkKey派生):
- 兼容1.0网络:若Join-accept中OptNeg位为0(1.0网络),则AppSKey由NwkKey派生,SNwkSIntKey/NwkSEncKey与FNwkSIntKey相同。
2.4 第四步:会话建立与初始化(规范6.1.2.6)
密钥派生完成后,终端与网络侧同步初始化会话状态,激活完成:
- 终端侧:
- 存储DevAddr、所有会话密钥;
- 重置帧计数器(FCntUp=0、AFCntDown=0、NFCntDown=0);
- 启用默认信道或CFList配置的信道,进入数据传输状态。
- 网络侧(NS/AS):
- 记录终端会话上下文(DevAddr、密钥、计数器初始值);
- 准备接收终端上行数据,或发起下行通信。
注意:终端不会发送专门的“激活成功确认消息”,而是通过后续首条上行数据(携带RekeyInd命令)间接向网络侧确认激活成功,网络侧接收后完成会话同步。
具体确认机制(规范5.10 + 6.2.3):
a. 终端侧触发:终端完成密钥派生和会话初始化后,会在首次发送的上行数据(可能是业务数据或空帧)的FOpts字段中,携带RekeyInd命令(CID=0x0B)。
- RekeyInd包含终端支持的LoRaWAN版本(Minor=1),用于告知网络侧“新会话密钥已生效”;
- 终端会在所有上行帧中重复携带RekeyInd,直到收到网络侧的RekeyConf响应。
b. 网络侧确认:
- Network Server收到含RekeyInd的上行数据后,验证MIC(基于新派生的会话密钥)和帧计数器(FCntUp=0),确认终端已成功激活并同步新会话上下文;
- 网络侧回复RekeyConf命令(CID=0x0B),告知终端“网络侧已同步新会话”,终端收到后停止发送RekeyInd,激活确认流程结束。
3. OTAA关键维护机制:Rejoin-request(规范6.2.4)
终端激活后,若会话丢失、漫游或密钥需更新,通过Rejoin-request维持连接,共3种类型:
3.1 Rejoin-request类型与用途
| 类型 | 核心字段 | 用途 | 传输规则 |
|---|---|---|---|
| 0 | NetID + DevEUI | 重置终端上下文(信道、密钥、计数器),支持漫游切换网络 | 占空比≤0.1%,RJcount0计数器递增 |
| 1 | JoinEUI + DevEUI | 恢复网络侧丢失的会话状态 | 占空比≤0.01%,RJcount1计数器递增 |
| 2 | NetID + DevEUI | 仅更新密钥/DevAddr,保留信道参数 | 仅响应ForceRejoinReq命令触发 |
3.2 Rejoin流程
- 终端发送Rejoin-request(含对应类型字段与RJcount计数器);
- 网络侧验证MIC与RJcount(需递增),通过则下发Join-accept;
- 终端重复“密钥派生→会话初始化”流程,维持或恢复连接。
(四)、 OTAA 关键机制与安全保障
-
重放攻击防护
- 终端的
DevNonce不可重复:终端需本地存储已使用的DevNonce,断电后需保留,避免重复使用导致入网被拒; - 服务器校验
DevNonce唯一性:同一DevEUI的DevNonce不能重复,防止攻击者重放旧的Join Request。
- 终端的
-
密钥隔离性
AppKey仅用于入网阶段的密钥推导,不直接参与数据加密;- 会话密钥(
NwkSKey/AppSKey)为临时密钥,终端可通过重新发起OTAA流程更新密钥,进一步提升安全性。 - 1.1版本的四层密钥体系,实现网络层与应用层密钥分离,单密钥泄露不影响整体安全;
-
接收窗口机制
- 终端发送
Join Request后,会开启两个接收窗口:RX1(1s后)和RX2(2s后),确保高概率接收Join Accept; - 若未收到
Join Accept,终端会随机延迟一段时间后重发Join Request,避免信道冲突。
- 终端发送
-
加密传输
Join Accept全程加密,会话参数不会明文传输;
-
会话密钥临时化
- 终端可通过重新发起OTAA或Rejoin流程更新会话密钥,降低长期使用风险。
(五)、 LoRaWAN 1.0 OTAA 与 1.1 版本的差异
| 对比项 | LoRaWAN 1.0.x | LoRaWAN 1.1 |
|---|---|---|
| 核心标识 | AppEUI(64bit) | 替换为JoinEUI(64bit),适配漫游场景 |
| 加密模式 | Join Accept采用AES-ECB加密 | 采用AES-CTR加密,安全性更高 |
| 密钥体系 | 两层密钥(NwkSKey/AppSKey) | 四层密钥(AppKey/NwkKey/SNwkSKey/AppSKey) |
| 服务器架构 | NS/AS合设,无独立JS | 新增Join Server,JS/NS/AS三层分离 |
| 路由逻辑 | 无,直接由NS鉴权 | 由JoinEUI路由至对应JS |
| 漫游支持 | 不支持 | 原生支持跨运营商/跨区域漫游 |
| 重入网机制 | 无,需重新走完整OTAA | 支持Type 0/1/2 Rejoin,快速恢复会话 |
(六)、 部署与调试注意事项
- 信道匹配:终端需使用网络侧定义的Join信道发送
Join Request,否则网关无法接收; - 速率适配:RX1的下行速率需与上行速率对应(如上行SF10 → 下行SF11),RX2为固定速率,需与服务器配置一致;
- DevNonce管理:终端需实现
DevNonce的非易失性存储(如写入Flash),避免掉电后重复; - 加密算法合规:严格遵循AES-128-ECB加密规则,禁止自定义加密方式,否则会导致解密失败。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)