网络在建立之初,终端设备启动后需要向服务端发起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

  1. 假如终端被允许接入网络,网络服务器将用join-accept响应终端的join-request请求。Join-accept信息将像普通的下行一样的发送,只不过会使用JOIN_ACCEPT_DELAY1 或JOIN_ACCEPT_DELAY2(而不是分别用RECEIVE_DELAY1和RECEIVE_DELAY2) 这样的延时。

    假如join-request请求没有被接受,将不会给终端响应。

  2. 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的更多相关文章

  1. (3)LoraWAN:链路控制、SF BW CR

    三.Introduction on LoRaWAN options 本文件描述了一种用于可为移动的或固定在一个固定位置的电池供电的终端设备而优化的LoRaWAN™网络协议.LORA™是一个由Semte ...

  2. Django(九)下:Ajax操作、图片验证码、KindEditor使用

    三.Ajax操作 ajax操作基于浏览器的xmlHttpRequest对象,IE低版本是另外一个对象,jQuery 1 版本对那两个对象做了封装,兼容性最好,2 .3版本不再支持IE低版本了. Aja ...

  3. MySql从一窍不通到入门(五)Sharding:分表、分库、分片和分区

    转载:用sharding技术来扩展你的数据库(一)sharding 介绍 转载:MySQL架构方案 - Scale Out & Scale Up. 转载: 数据表分区策略及实现(一) 转载:M ...

  4. (4)LoraWAN:Physical Message Formats

    四.Physical Message Formats LoRa数据包结构 LoRaTM调制解调器采用隐式和显式两种数据包格式.其中,显式数据包的报头较短,主要 包含字节数.编码率及是否在数据包中使用循 ...

  5. (2)LoraWAN:Lora LMIC library 编程模型及API

    二.LMIC library 编程模型及API LMiC库可以通过一组API函数(API functions),运行时函数(run-time functions),回调函数(callback func ...

  6. Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库

    一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...

  7. Django(二) 模板:基本使用、模板语法、模板继承

    一.模板的使用实战 接:https://blog.csdn.net/u010132177/article/details/103788677 参考:https://docs.djangoproject ...

  8. 线性判别分析(LDA)准则:FIsher准则、感知机准则、最小二乘(最小均方误差)准则

    准则 采用一种分类形式后,就要采用准则来衡量分类的效果,最好的结果一般出现在准则函数的极值点上,因此将分类器的设计问题转化为求准则函数极值问题,即求准则函数的参数,如线性分类器中的权值向量. 分类器设 ...

  9. 机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

    本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有 ...

随机推荐

  1. java面试(二)

    1.java常见的容器 几乎所有的容器都继承了Collecton接口,包括List.Set.Queue.Map List包括Vector.ArrayList.LinkedList,      Set包 ...

  2. 构造数列Huffman树总耗费_蓝桥杯

    快排! /** 问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的 ...

  3. encypt dataset

    import getoptimport sysimport uuidimport hashlibimport csvdef getIds(totals,encrypt): seed=set() for ...

  4. The Last Puzzle ZOJ - 3541

    题目链接 本题也是区间dp,贪心可证,每一次出发必定是从端点,否则必然有重复,不会是最小值,那我们可以设dpi,j,0/1,0代表从左端点出发,1代表从右端点,因为每次都是从端点出发,状态方程为 dp ...

  5. Python 爬取 热词并进行分类数据分析-[拓扑数据]

    日期:2020.01.29 博客期:137 星期三 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[拓扑 ...

  6. sqllab less-1

    1.访问sqllab 的less-1 按提示加入http://10.9.2.81/Less-1/?id=1 2. 后面加入单引号,发生报错http://10.9.2.81/Less-1/?id=1‘ ...

  7. element-ui的el-table的表头与列不对齐

    最好加到全局样式中: body .el-table th.gutter{ display: table-cell!important; }

  8. 重新理解《务实创业》---HHR计划--以太一堂第三课

    第一节:开始学习 1,面对创业和融资,我们应该如何从底层,理解他们的本质呢?(实事求是) 2,假设你现在要出来融资,通常你需要告诉投资人三件事:我的市场空间很大,我的用户需求很疼,我的商业模式能跑通. ...

  9. 机器学习之SVM多分类

    实验要求数据说明 :数据集data4train.mat是一个2*150的矩阵,代表了150个样本,每个样本具有两维特征,其类标在truelabel.mat文件中,trainning sample 图展 ...

  10. selenium 参数设置-window.navigator.webdriver

    selenium 参数设置 selenium启动chrome基本上与真实环境类似,但有一些变量还是不一样,需要注意. 有些网站通过这些参数识别爬虫. window.navigator.webdrive ...