(5)LoraWAN:Join procedure、Receive Windows
网络在建立之初,终端设备启动后需要向服务端发起Jion请求(接入请求),只有在接入请求得到成功答复,并根据答复配置相关参数后,终端才算成功加入网络。Jion成功后才能进行数据的上行、下行通信。
Jion过程、CLASS A等模式下,服务器、终端之间约定了两个下行接收窗口(时间窗口)来实现数据的交互。一般通信方式为:终端上行数据包后进入低功耗模式,等到约定的时间窗口后开始进入接收模式,接收服务器下行来的数据。
在Jion之前要了解一下Receive Windows概念。
接收窗口Receive Windows
在每次上行传输的终端设备打开两个短的接收窗口。接收窗口开始时间是一个配置周期的传输结束的最后一个上行比特。 终端在上行结束后考虑到功耗等问题不会立即进入接收模式,低功耗到合适时机再打开接收,接收下行数据。此协议约定了两个窗口,数据只会在其中一个窗口中接收到。

First receive window channel, data rate, and start
第一接收窗RX1使用相同的频率信道作为上行链路和一个数据速率是用于上行链路数据速率的函数。上行链路调制结束后RX1打开RECEIVE_DELAY1秒(+/- 20微秒)。上行链路和RX1时隙下行链路数据速率之间的关系,特定区域和详见的第7节;默认情况下,第一接收窗口数据速率是相同的,即最后的上行链路的数据速率。
Second receive window channel, data rate, and start
第二接收窗RX2采用固定配置的频率和数据率;上行链路调制结束后RX2打开RECEIVE_DELAY2秒(+/- 20微秒)。可通过MAC命令修改的频率和数据速率。
接收窗口持续时间Receive window duration
接收窗口的长度必须至少为有效地检测的下行链路前同步码所要求的终端设备的无线电收发机的时间。
Receiver activity during the receive windows
如果在接收窗口中的一个被检测到前置码,无线接收机将一直处于活动状态直到下行链路帧被解调。如果一个帧被检测到并且随后在第一接收窗口期间解调出来了,且在地址和MIC(消息完整性代码)校验通过后,该帧该是终端的目的帧,终端将不会打开第二接收窗口。
Network sending a message to an end-device
如果网络打算发送的下行链路到一个终端设备,它总是恰恰在接收窗口(两个之一)开始之前发起传输。
接收窗口重要提示Important notice on receive windows
一个终端不得发送另一个上行链路消息,除非它已经接收在上次发送的第一或第二接收窗的下行链路消息,或者前一次传输的第二接收窗口已过期。
接收或发送其他协议Receiving or transmitting other protocols
节点可以在LoRaWAN发送和接收窗口之间侦听、发送其他协议或做任何业务,只要终端仍符合当地法规,和LoRaWAN规范兼容。
Join procedure
从终端角度来看,Join过程包含两个MAC层数据信息与server服务器交换,即join request 和 join accept。

enum {
// Join Request frame format
OFF_JR_HDR = 0,
OFF_JR_ARTEUI = 1,
OFF_JR_DEVEUI = 9,
OFF_JR_DEVNONCE = 17,
OFF_JR_MIC = 19,
LEN_JR = 23
};
enum {
// Join Accept frame format
OFF_JA_HDR = 0,
OFF_JA_ARTNONCE = 1,
OFF_JA_NETID = 4,
OFF_JA_DEVADDR = 7,
OFF_JA_DLSET = 11,
OFF_JA_RXDELAY = 12,
OFF_CFLIST = 13,
LEN_JA = 17,
LEN_JAEXT = 17+16
};
[x] Join-request message
Join-request信息包含终端的AppEUI、DevEUI及随机的DevNonce(2字节)。
DevNonce是一个随机值。网络服务器server将保持对每个终端的过去一定数量的DevNonce值进行跟踪,如果join request请求过程中的DevNonce值与跟踪的DevNonce值相同则将忽略该终端的join请求。DevNonce主要用于网络的重放攻击。[x] Join-accept message
假如终端被允许接入网络,网络服务器将用join-accept响应终端的join-request请求。Join-accept信息将像普通的下行一样的发送,只不过会使用JOIN_ACCEPT_DELAY1 或JOIN_ACCEPT_DELAY2(而不是分别用RECEIVE_DELAY1和RECEIVE_DELAY2) 这样的延时。
假如join-request请求没有被接受,将不会给终端响应。Join-accept信息中包含3字节的App应用随机数(AppNonce),一个网络标示(NetID),一个设备地址(DevAddr),一个TX和RX之间延时(RxDelay)以及一个终端正在加入的网络的频率信道列表选项(CFList)。
AppNonce是一个随机值或者基于某些形式的由网络服务器提供的唯一ID值,AppNonce用于终端导出NwkSKey和AppSKey两个会话密钥。
NetID格式如下:低7位(LSB)命名为NwkID与前面章节所述的的7位MSB短地址相匹配。相邻或者重叠的网络必须具有不同的NwkIDs。剩下的17个高位可以由网络运营商任意选择。
DLsettings字段的下行链路配置:Bits | 7 | 6:4 | 3:0 |
-------------|---|--------| -------|
DLsettings |RFU|RX1DRoffset|RX2 Data rate
RX1DRoffset 字段设置在第一接收窗口(RX1)上行数据速率与下行数据速率通信之间的偏移,默认情况下该偏移量为0;改偏移量主要考虑到在某些区域基站的最大功率约束密度以平衡上行及下行的链路余量。
终端激活后的数据存储
终端激活后,以下信息将保存:设备地址(DevAddr),APP应用标示(AppEUI),网络会话密钥,APP应用密钥 (AppSKey)。
终端地址End-device address (DevAddr)
所述DevAddr由当前网络内终端32位标示组成,其格式如下:
Bit# | [31..25] | [24..0] |
-------------|----------|---------|
DevAddr bits | NwkID | NwkAddr |
高7位用作网络标识符(NwkID)以分离不同的网络运营商的地域重叠网络的地址,并以补救漫游的问题。所述低25位为终端的网络地址(NwkAddr),可以任意地由网络管理器分配。
u4_t addr = os_rlsbf4(LMIC.frame+OFF_JA_DEVADDR);
...
LMIC.devaddr = addr;
APP应用标示 Application identifier (AppEUI)
AppEUI是IEEE标准的全球APP应用ID,EUI地址空间是终端APP应用供应商的唯一标示。
所述AppEUI在执行激活过程之前就被存储在终端中。
网络会话密钥Network session key (NwkSKey)
所述NwkSKey终端特定的网络会话密钥。网络服务器和终端通过NwkSKey来计算和确认的所有数据信息的MIC验证(消息完整码),以确保数据的完整性。NwkSKey进一步用于加密和解密Payload字段仅MAC相关层的数据信息。
终端Join请求过程中在其开始执行Join之前如下的信息需要个性化设置:全球唯一终端标示(DevEUI)、APP应用标示(AppEUI)、AES-128加密/解密密钥(AppKey)。
APP应用会话密钥Application session key (AppSKey)
AppSKey是终端特定的APP应用会话密钥。网络服务器和终端通过AppSKey加密和解密Payload字段中APP应用程序特定数据信息。它也可以用来计算和验证包含在Payload字段中应用程序特定数据消息的应用程序级的MIC。
End-device identifier (DevEUI)
DevEUI是IEEE标准中的全球终端ID;EUI64地址空间是终端的全球唯一标示。
Application key (AppKey)
AppKey是针对该终端特有的AES-128应用密钥,该密钥由应用程序所有者分配给该终端设备。APPKey仅能从已知的特定App应用根密钥中获取和App应用提供者控制下得到。每当一个终端经过空中激活过程,所述的AppKey将用于导出NwkSKey会话密钥及AppSKey会话密钥,特定于该终端的会话密钥以便该终端加密和验证网络通信和App应用数据。
static void MsgProcess(void)
(5)LoraWAN:Join procedure、Receive Windows的更多相关文章
- (3)LoraWAN:链路控制、SF BW CR
三.Introduction on LoRaWAN options 本文件描述了一种用于可为移动的或固定在一个固定位置的电池供电的终端设备而优化的LoRaWAN™网络协议.LORA™是一个由Semte ...
- Django(九)下:Ajax操作、图片验证码、KindEditor使用
三.Ajax操作 ajax操作基于浏览器的xmlHttpRequest对象,IE低版本是另外一个对象,jQuery 1 版本对那两个对象做了封装,兼容性最好,2 .3版本不再支持IE低版本了. Aja ...
- MySql从一窍不通到入门(五)Sharding:分表、分库、分片和分区
转载:用sharding技术来扩展你的数据库(一)sharding 介绍 转载:MySQL架构方案 - Scale Out & Scale Up. 转载: 数据表分区策略及实现(一) 转载:M ...
- (4)LoraWAN:Physical Message Formats
四.Physical Message Formats LoRa数据包结构 LoRaTM调制解调器采用隐式和显式两种数据包格式.其中,显式数据包的报头较短,主要 包含字节数.编码率及是否在数据包中使用循 ...
- (2)LoraWAN:Lora LMIC library 编程模型及API
二.LMIC library 编程模型及API LMiC库可以通过一组API函数(API functions),运行时函数(run-time functions),回调函数(callback func ...
- Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库
一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...
- Django(二) 模板:基本使用、模板语法、模板继承
一.模板的使用实战 接:https://blog.csdn.net/u010132177/article/details/103788677 参考:https://docs.djangoproject ...
- 线性判别分析(LDA)准则:FIsher准则、感知机准则、最小二乘(最小均方误差)准则
准则 采用一种分类形式后,就要采用准则来衡量分类的效果,最好的结果一般出现在准则函数的极值点上,因此将分类器的设计问题转化为求准则函数极值问题,即求准则函数的参数,如线性分类器中的权值向量. 分类器设 ...
- 机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)
本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有 ...
随机推荐
- 16 Z变换
Z变换 由于\(DTFT\)变换是有收敛条件的,并且其收敛条件比较严格,很多信号不能够满足条件,为了有效的分析信号,需要放宽收敛的条件,引入\(Z\)变换. 定义 已知序列的\(DTFT\)为 \[ ...
- map或者对象转换
map或者对象转换为具有相同字段的对象 List<Example> errorCodeExcelBeanList = JSONObject.parseArray(((JSONObject) ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 广播(Broadcast)
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足 a.shape == ...
- 关于雷达(Radar)信道
有些时候,我们在实际的无线网络中,会遇到无线信道一致flapping的情况,即便我们自定义了信道的,发现也会出现flapping.如果这种情况,可能需要确认是否你使用的信道上检测到了雷达. 这里记录一 ...
- k sum 问题系列
转自:http://tech-wonderland.net/blog/summary-of-ksum-problems.html (中文旧版)前言: 做过leetcode的人都知道, 里面有2sum, ...
- 【转载】Linux截图工具
如果linux安装了gnome,那么系统自带了一款截屏软件 gnome-screenshot,使用起来很方便,功能齐备,支持命令行.简单介绍如下. 功能 对屏幕,窗口,或自定义的区域进行截图. 选项 ...
- LeetCode简单题(四)
题目一: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你 ...
- redis requires Ruby version >= 2.2.2 系统默认 ruby 版本过低,导致 Redis 接口安装失败
安装 Redis 接口时异常 ,系统 ruby 版本过低 ! 输入命令 " gem install redis " 出现 " ERROR: Error installi ...
- DVWA靶机的命令执行漏洞
之前在打攻防世界的时候出现过类似的题目,这里再重温一下 (靶机一共低中高三个安全等级,这里只演示低中等级) (1)Security:low 根据提示让我们输入地址ping一下,之后返回以下内容,可以判 ...
- Spring boot 2.x 中使用redis
一.添加Maven 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...