物联网是个交叉学科,涉及通信技术、传感技术、网络技术以及RFID技术、嵌入式系统技术等多项知识,但想在本科阶段深入学习这些知识的难度很大,而且部分物联网研究院从事核心技术工作的职位都要求硕士学历,“LPWAN实验室”计划从收集、整理、翻译实用的物联网有关的知识着手,帮助各高校物联网专业学生利用这个实验室学习平台找准专业方向、夯实基础,同时增强实践与应用能力。虽然现在面临大学生毕业就业难的情况,但实际各行各业却急需物联网领域相关专业的人才,从目前情况来看,环保、安防、智能交通、农业、医疗推广的可能性最大,这也是成为高校热门专业的一个重要原因。从工信部以及各级政府所颁布的规划来看,物联网在未来十年之内必然会迎来其发展的高峰期。而物联网技术人才也势必将会“迎娶”属于它的一个美好时代。

LoRaWAN介绍16 Server分类
“软件构建的核心就是管理复杂度”–SteveMcConnell《代码大全》   在《LoRaWAN介绍2 架构》中提到:LoRaWAN的重点和难点–LoRaWAN Server!http://blog.csdn.net/jiangjunjie_2005/article/details/54134636 “分而治之”是人们降低复杂度的有效方法,LoRaWAN Server很娴熟地运用了该技巧,它将Server分成4种角色。 1 服务器框架 阅读《InterconnectingSmart Objects with IP》会发现,该书籍的作者极力推荐使用IPv6将智能设备互联,构建一个物联网。 目前,更可行的物联网方案是:将智能设备连接到Internet。这样,基于已有的互联网,无论是经济上,还是技术上,都性价比更高。另外,大部分智能设备的计算能力和电能都不适合IPv6的协议栈运行。 看到下面LoRaWAN的架构,它是基于Internet建设物联网,Gateway是IP设备(运行IP协议栈),而End Node运行的是LoRaMac-node(没有运行IP协议栈)。 LoRaWAN Server共有4种角色,包括:NS(Network Server,网络服务器)、AS(Application Server,应用服务器)、NC(Network Controller,网络控制服务器)和CS(Customer Server,客户服务器)。 2 各角色功能 4种Server的功能如下表所示。 Server 功能 下游设备 上游设备 NS 连接网关,收发RF数据包 Gateway AS和NC AS 加密和解密应用数据 NS CS NC 控制网关和终端的RF参数 NS Console CS 存储终端上传和用户下发数据 AS /   2.1 NS(Network Server,网络服务器) 1个NS可以连接1个或多个Gateway,它们之间的接口协议为JSON / GWMP / UDP / IP。同样,NS可以连接1个或多个AS和NC,它们之间的接口协议为JSON […] Read more.
如何使用Microchip的LORA模块,以加快物联网设计
LoRaWAN提供了很好的匹配,以物联网的需求,性能特点。除了它的扩展工作范围和低功耗的要求,LoRaWAN提供安全,灵活的通信选项。然而,为了实现一个LoRaWAN溶液所需的硬件和软件可以证明一个主要障碍集中在物联网应用程序本身的开发团队。 本文将详细阐述了Microchip Technology的第1部分介绍RN2903 LORA模块,并展示如何使用一些额外的硬件和软件,用它来实现远距离,低功耗设计,物联网。 快速入门套件 Microchip Technology的RN2903 LORA模块是一个物联网设计近投递LoRaWAN硬件解决方案。即便如此,它仍然只是一个完整的LoRaWAN网络的基石,开发者仍然必须考虑支持硬件和软件系统。Microchip的满足这一需求提供全面的评估套件,提供了实现LoRaWAN对物联网所需要的其他元素。 正如第1部分所提到的,Microchip Technology的RN2903支持LoRaWAN兼容的通信频率为915MHz,旨在简化物联网应用的开发。全面认证,Microchip的模块包括了实现LoRaWAN连接(图1)所需的所有组件。该模块的命令处理器采用板载LoRaWAN固件完全支持LoRaWAN类的协议。板载EEPROM提供存储用于LoRaWAN配置参数,从而提高性能和减少主机和模块之间的数据传输增加的安全性。 图1:Microchip的LORA模块提供了LoRaWAN连接,其板载命令处理器,LoRaWAN协议栈,射频收发器和串行连接一个简易的解决方案。(图片来源:微芯片科技) Microchip的RN2903模块提供与外部MCU主机通信的专用UART接口。此外,该模块包括14 GPIO引脚,开发者可以使用模块固件监视或控制外部设备,如开关和LED编程。最后,该模块提供了方便的连接到一个简单的套偶极天线的射频信号引脚。 模块的命令处理器根据通过其UART接口从外部主机MCU接收的命令执行LoRaWAN交易。正如任何网络通信的方法,LoRaWAN消息被发送,并在特定的格式接收。对于LoRaWAN的LORA联盟标准规定了在字节级苛求细节这些格式。该RN2903模块提供了一个直观的基于文本的方法,抽象LoRaWAN标准字节级别的格式为一组关键字的使用可选参数命令。 Microchip的定义了三种类型的关键字: MAC的LoRaWAN MAC配置和控制命令 无线电指令针对PHY无线电层 SYS额外的模块功能,如提供模块固件版本的信息或访问模块的EEPROM存储器命令 例如: mac tx uncnf 30 23A5 发送端口30的数据值“2,3,4,5-”的消息。的“uncnf”选项表示设备没有请求从网络服务器确认。或者,使用“CNF”选项表示该设备预计网络服务器确认收到。的洛拉模块负责将其发送到它的网关以便传递到网络服务器之前加密该消息。 radio tx 6d657****765 发送含有值[0x6d]一揽子[0x65] [0x73] [0x73] [0x61] [0x67] [0x65(十六进制示例文本字符串“消息”) sys set nvm 100 FF 存储该值为0xFF在EEPROM中的用户分区的地址为0x100 物联网设备设计 凭借其串行接口,RN2903需要一些额外的组件来实现兼容LoRaWAN,物联网的硬件设计。Microchip的进一步发展速度与RN2903 LORA莫特。为了证明其LORA模块功能,Microchip的LORA莫特提供实现LoRaWAN兼容的无线传感器需要一套完整的硬件和软件。 Microchip的RN2903 LORA莫特和RN2483 LORA莫特各结合各自的LORA模块与Microchip PIC18LF45K50 8位MCU,作为传感器的操作和LoRaWAN协议执行主处理器。此外,莫特包括用于采集样品的数据,以及用于用户反馈的液晶显示光传感器和温度传感器。该莫特通过一个标准的USB接口,它提供了访问LORA模块的UART接口连接到主机。 在开发过程中工程师们可以通过发送执行LoRaWAN操作MAC,无线电和SYS命令字符串使用莫特的USB连接的模块。在运行期间,物联网设备主机上运行的代码会发出需要的物联网应用的命令和处理响应。对于LoRaWAN应用,Microchip提供的硬件莫特丰富的C软件库。例如,一个应用程序级例程,MOTEapp.c,收集的传感器数据,并通过LoRaWAN连接发送数据,处理由RN2903预期低级MAC命令(清单1)。             . . .             moteApp_clearBuffers();             […] Read more.
LoRa / LoRaWAN解密教程
在本视频中,我向您介绍了LoRa和LoRaWAN的基本原理及细节,向您展示了我自己的LoRa网关和LoRa客户端,并向网络发送了第一条消息。介绍链路预算和带宽,该技术可用于Arduinos和其他微控制器。 【如果您的浏览器不支持直接播放下列视频,可以点击此处下载播放】 相关资料: TTN主页:https://www.thethingsnetwork.org/ 技术说明:https://www.youtube.com/watch?v=T3dGLqZrjIQ&t=395s 学习小组招募: 喜欢动手的程序猿们喜大普奔时刻来临了!来临了!来临了! 来自安爵士亲手制作的有关LoRa网关、终端等硬件开发系列学习视频登陆LoRa学习站,英文好的同学们可以先睹为快了,如果你英文足够好,又有兴趣参与LoRa学习资料翻译组,欢迎注册我们的网站会员并留言“加入学习视频翻译”。 Read more.
LoRaWAN介绍15 终端设计
“大自然和智慧在任何事物上都不存在分岐”–玉外纳   因为应用在广阔的行业内,在传感器、执行器、供电、通信延时等不同的要求,让LoRaWAN的End Node呈现种类繁多的形态。同时,80%的共性还是存在的,包括:整体架构、LoRaWAN协议栈、软件开发模式等。 1 整体架构 一般说来,一个End Node硬件包括以下四部分: MCU:实现LoRaWAN协议栈、控制LoRa射频、驱动外设和实现应用程序; LoRa radio:实现LoRa信号接收与发送; 外设:驱动传感器、控制I/O端口等; 供电:通过电池或市电给整个系统提供电源。 一个End Node的软件包括: 驱动层:主要是驱动总线,从而与LoRa射频、传感器和执行器通信; 中间件:包括LoRaWAN协议栈和能耗管理; 应用层:满足用户的业务需求,如采集数据并初步加工,定时上传等。 2 产品方案 设计一个End Node至少有3种方案:chipset、module和modem。 2.1  Chipset 硬件:选购一款低功耗的MCU,采购SX127x射频芯片,设计RF电路,实现PCB,调试天线和射频匹配,连接传感器或执行器。 软件:MCU实现LoRaWAN协议栈,控制SX127x射频电路,驱动外设,实现用户应用。 优点:取得最大灵活性,硬件成本可控。 缺点:难度大,周期长,研发和测试成本高。 2.2  Module 硬件:连接传感器或执行器。 软件:MCU实现LoRaWAN协议栈,驱动外设,实现用户应用。 优点:省去硬件设计,有成熟的开发与测试平台。 缺点:自行实现LoRaWAN,软件方面有挑战。 2.3  Modem 硬件:选购一款低功耗MCU,通过UART(或SPI等)连接LoRa Modem,连接传感器或执行器。 软件:MCU控制LoRa Modem,驱动外设,实现用户应用。 优点:难度小,时间短,研发和测试成本低。 缺点:硬件成本高,LoRaWAN协议栈升级依赖厂商。 针对上面三种方案,一个EndNode该如何选择呢?这依赖下表的因素。 3 软件开发 一个End Node的软件开发依赖上述三种方案的选择: Chipset:根据MCU选择合适的IDE(如:IAR或Keil等),是否需要移植OS,移植官方的LoRaWAN协议栈,可以从以下链接获取官方源代码:https://github.com/LoRa-net/LoRaMac-node Module:一般而言,供应商提供IDE、OS等平台,用户需要实现或管理LoRaWAN。 Modem:这是难度最小的方案,根据Modem提供的命令集,初始化LoRaWAN协议栈,读取和发送数据包。 4 选择天线 工作在470MHz(中国地区)的End Node,1/4波长的天线约16.0cm。有3种可选的天线方案。 专用OEM天线:设计专用的天线可以达到最佳的发射功率和接收灵敏度,然而,这需要一个高品质的天线厂商,成本较高。 […] Read more.
LoRaWAN介绍14 终端类别
“蚂蚁是无力之类,却在夏天豫备粮食。沙番是软弱之类,却在磐石中造房。”–《旧·箴》 不同的应用场景需要不同的技术条件,LoRaWAN一开始就将End Nodes分成3类,它们在电池寿命和唤醒延时上各有千秋。这是明智的,可以根据应用选择最佳的类别。 1 三类终端的特点 Class 属性 供电 节能 下行通信延时 A sensors 电池-有限 最佳 大,仅当终端上报时 B actuators 电池-有限 较好 小,延时可调节 C actuators 电源-充足 不考虑 无,随时下行通信 2  Class A Class A是LoRaWAN的主流,它的通信时序如下图所示。End Node根据自己的需要上传数据包,这可以被1个或多个Gateway接收;1秒钟后,信号最强的Gateway按上行相同的频率和速率,下发数据包;如果End Node在Rx slot1接收成功,它不再打开Rx slot2窗口,否则它将按505.3MHz SF12/125kHz(中国地区)条件打开Rx slot2窗口。 Class A节能效果最好,因为仅当发送和2个接收窗口外,其他时间都是休眠。当然,LoRaWAN Server仅当该End Node上行通信后,才能下行通信。 3  Class B Class B的End Node每128秒接收Gateway广播的Beacon,用于校准自身的时钟。在2个Beacon之间,End Node会开启一些接收窗口(ping slot),如果在窗口期接收到Gateway的preamble,那么它将接收完整的下午数据包。 End Node根据自身电量和应用的需要,选择ping slot的数量;以达到节能和下午通信的折中。 4  Class C Class […] Read more.
LoRaWAN介绍13 SX1301
“要以坦克为核心组织部队,而不是以步兵为核心。”–古德里安   如果说LoRaWAN是闪电战,那么SX1301就是坦克,前者是建立在后者的基础上。SX1301是基于LoRa调制的基带芯片,它的目标是为广域范围的众多无线节点提供健壮的星型基站。 SX1301有一些关键的技术特征:高达-142.5dBm的接收灵敏度、49个LoRa“虚拟”通道和ADR技术。 1 整体结构 如下图所示,SX1301一般外接2片SX1257(或SX1255)。SX125x是射频前端芯片,它负责将I/Q(In-phase / Quadrature,同相正交数字信号)转换成无线电模拟信号。 仔细查看SX1301的结构图,它是由2个MCU和ASIC(ApplicationSpecific Integrated Circuit,专用集成电路)的综合体。主要部件包括: 射频MCU:该MCU通过SPI总线连接2片SX125x,主要负责实时自动增益控制、射频校准和收发切换。 数据包MCU:该MCU负责分配8个LoRa调制解调器给多个通道,它仲裁数据包的机制包括速率、通道、射频和信号强度。 IF0~IF7的LoRa通道:它们的带宽固定为125kHz,每个通道可以设置中心频率,每个通道可以接收SF7~SF12共6种速率的LoRa信号。 IF8通道:带宽支持125 / 250 / 500kHz,希望用于网关之间的高速通信。 IF9通道:收发(G)FSK信号,LoRaWAN在欧洲地区使用了该通道。 2 实现ADR技术 ADR(Adaptive Data Rate,速率自适应)是LoRaWAN核心优势,它的原理是:依赖End Nodes和Gateway的距离,越近,End Nodes将采用高速率;越远,End Nodes将采用低速率。 其实,ADR是SX1301的“贡献”。 如下图所示,SX1301的IF0~IF7的8通道,它们设置了8个中心频率,但每一个通道都能接收SF7~SF12共6种速率的LoRa信号。这样一来,一个End Node可以根据信号强度,自由选择SF(即速率)来发送数据。 它至少具备3个优势: End Node可以切换到8个频率中任意一种,有效降低同频干扰; End Node可以使用6种速率中任意一种,Gateway不用记录它的速率,简单化; Gateway可以实现天线分集,有效改善移动End Node的多径衰退; 特别注意:8个通道最多同时解调8个LoRa数据包,因为“前导码搜索引擎”和“解调引擎”是分离的,同时解调引擎为8个单元。 3 多通道频谱   2片SX125x和共10个通道,都可以灵活配置频率。一起看上图的实例: 射频前端A配置中心频率=867.0MHz 射频前端B配置中心频率=868.4MHz 10通道频率配置如下表所示 通道 频率 射频前端 频偏 属性 IF1 866.875MHz A […] Read more.
LoRaWAN介绍12 唤醒误差
“我若数点,比海沙更多; 我睡醒的时候,仍和你同在。”— (诗篇139:17-18)   理想情况下,Gateway和End Nodes在精确的时间点完成唤醒通信,然而,晶振的误差,使End Nodes会在该“理想时刻”点徘徊。为保证唤醒通信的成功率,End Nodes需要根据晶振误差,打开一个时间窗口与Gateway“幽会”。 1 唤醒窗口 LoRaWAN的Class B规定,Gateway发送的数据帧包含8个symbols的preamble(前导码),End Nodes至少需要5个symbols的preamble来同步接收。换一句话说,Gateway和End Nodes需要5个symbols的时间窗口是重叠的,才能保证本次唤醒通信成功。 如下图所示,一次成功的唤醒通信有3个重要的参数: RxOffset:Gateway开始发送与End Nodes最佳启动接收的时间差; RxWindow:End Nodes开启接收的时间窗口长度; RxError:End Nodes因晶振误差带来的时钟漂移。 2 最早与最迟时刻点 以Gateway开始发送时刻为基准,End Nodes有2个边界时间值:T_RX_early和T_RX_late,至少需要5个symbols的重叠,因此有如下公式: T_RX_late = 3 x Tsymb                                                   […] Read more.
LoRaWAN介绍11 唤醒通信
“矛盾是一切运动和生命的根源。”–〔德〕黑格尔:《大逻辑》   在无线通信设计中有一个矛盾的地方:一方面,为了节能,要求节点尽可能长时间地休眠;另一方面,为了快速通信,要求服务器尽可能快地唤醒节点。 缓解该矛盾的办法是:约定唤醒、时钟同步和避免冲突。本文通过对LoRaWAN的Class B唤醒通信的分析,您将会看到设计一个物联网不得不在诸多因素中作出折中,即“两害相权取其轻”。 1 切换Class B 一个End Node从Class A(Class C不能)能切换到Class B,这取决于该Node的应用需要,切换过程如下: (1) Node的应用请求LoRaWAN协议栈切换到Class B; (2) 协议栈开始搜索网关发送的Beacon(信标帧),如果搜到Beacon,则返回BEACON_LOCKED原语,否则返回BEACON_NOT_FOUND原语; (3) 如果希望加速发现Beacon,协议栈可以使用“BeaconTimingReq”的MAC命令,为保证网络高效运行,该命令1小时内仅能发送一次; (4) Node根据自身电量和应用需求,选择唤醒通信的时隙间隔和通信速率; (5) 如果Node成功切换到Class B模式,它每次UPLINK的帧中FCTRL=1; (6) 一个移动的Node,必须定时告诉Server自己的方位,这往往通过发送一个UPLINK帧来完成,用于Server选择信号最强的Gateway唤醒通信; (7) 如果一个节点在2小时内,没有接收到Beacon帧,那么它将失去与网络的同步,协议栈会通知应用层切换回Class A模式。 2  Beacon时间值 Class B中Beacon每隔128秒发送一次,End Node定期打开一个接收窗口,称之为“ping slot”,Server在该接收窗口发送的下行通信称之为“ping”。 如下图所示,Gateway每隔128秒发送Beacon,End Node每32秒打开一个“ping slot”,如果Server发送“ping”,End Node将回应数据帧。   为保证Beacon帧的正确发送,设置了BEACON_RESERVED时间值; 为防止一次ping和response通信,与Beacon的发送相冲突,设置了BEACON_GUARD时间值; 因此,留给Server和Node唤醒通信的时间值BEACON_WINDOW= BEACON_PERIOD – BEACON_RESERVED –BEACON_GUARD; 这4个时间值如下: BEACON_PERIOD    = 128s BEACON_RESERVED = 2.120s […] Read more.
LoRaWAN介绍10 定位
“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”–《青玉案·元夕》   无论是追踪老人、小孩和宠物,还是查找资产和贵重物品,节点定位是物联网中高附加值的应用。LoRa宣称,使用3个或多个Gateway而产生TDOA(Time Difference of Arrival,到达时间差)能实现“不依赖其他设备”定位。 本文一起来分析下定位的原理和基于LoRa可能的方案。 1 一个TDOA的故事 在大街上行走的人们,很容易探测警笛(119火警、120救护)声音的来源,会下意识地给该车辆让道。为什么呢?人类的身体很奇妙,该声音有较高的带宽(长音和短音结合),当它们传入2只耳朵后有时间差,我们“精密尖端”的大脑能根据该时间差,准确计算出声音的来源。 然而,当一种低带宽的声音,比如:刀在玻璃上刻划的尖锐声,我们很难定位该声音(更准确地说是听起来很难受)。 该故事说明一个道理:TDOA定位与带宽有紧密的关系。 2  LoRa目前定位精度 下图是Semtech发布的定位测试报告,使用了11个Gateway和42个测试点,可以看到在城市环境中,达到90%概率的正确定位(错误率为10%)误差达到500米。换一句话说,90%的情况下LoRa的定位范围是一个半径为500米的圆。 3 直线距离定位 很明显,测量2点之间的距离是指直线距离。无线电测量直线距离基于如下因素:空中时间×带宽×功率。 LoRa信号有较长的空中时间(传输速率较低),125kHz的带宽还过得去,但是它功率太低了。因为扩频调制带来的高接收灵敏度,使它能接收低于-142dBm的信号,然而,如此微弱的能量不足以计算直线距离。 经常测试LoRa信号会发现,它的RSSI值在远距离下,偏差很大,主要是因为接收功率太小,很难精准计算。 4 区分多径传播 因为障碍物的存在,无线电信号是往往是多径传播,要准确地定位,就必须区分直线信号和反射信号。如下图所示,发射与接收者之间的距离是1号路径,因为有墙壁的阻隔,无线信号是按2号路径反射传播。这就要求接收者能有效区分多径信号,才能准确定位。 区分多径信号的因素是带宽,接收者能计算路径差异=光速/带宽。 例如,LoRaWAN中,信号标准带宽是125kHz,路径差异=(3×108)/(125×103),即2400米。 如果LoRa Gateway接收一个信号,仅当直线传播和非直线传播(反射、折射和散射等)的路径差异达到2400米,它才能区分这些信号。 带宽与定位精度的实例,如下图所示。 左图,带宽为125kHz,路径差异=2400米。设路径1(直射)和路径2(反射)之间的差异小于2400米,由直射和反射传播组合的信号,接收者无法区分,因此计算距离出现较大的误差。 右图,带宽为10MHz,路径差异=30米。设路径1(直射)和路径2(反射)之间的差异大于30米,由直射和反射传播组合的信号,接收者可以区分,因此计算距离出现极小的误差。 小结: LoRa因为超低功耗,难以计算直射距离; LoRa因为较低带宽,难以区分多径传播。   5 可能的突破点 5.1 平均功率 如果长时间的统计发射与接收方之间的功率,那么可以较精确地取得平均功率,这对于计算距离很有帮助。然而,LoRa为了取得低功耗,节点往往短暂发射,尽可能长地休眠,并且低精度的晶振(LoRa推荐使用低成本XTAL,高品质的可能使用TCXO),让平均功率统计变得不容易。 5.2 多网关 确实,在多网关的应用场景中,隔节点近的网关,它能接收非常强的直射传播信号,那么微弱的多径传播信号就变得微不足道了,这就可能较精确地计算定位。 然而,这种方案是建立在布置大量网关的基础上,它的弊端是高成本。即使网关再便宜(其实不便宜),这种定位方案的整体成本会高出其他“替代方案”。 6 目前可行方案 鉴于定位在物联网中的重要性,LoRa能结合以下方法。 6.1  GPS 在节点上安装GPS模块,这是传统的定位方法,优点是简单;缺点是:耗电,高成本,仅能工作在室外。 6.2  RSSI 在这种方案中,有一个信号发射器(如:蓝牙、红外、RFID等),带有接收器的LoRa节点会发送RSSI和时间值给服务器,服务器计算出该LoRa 节点的位置。 6.3 热点地标 […] Read more.
LoRaWAN介绍9 安全
“引到永生,那门是窄的,路是小的,找著的人也少。”–《马太福音》   安全对于物联网设备来说很重要,因为他们经常部署在重要的基础设施中。同时,节点在物理上是分布式系统,无线信道很容易被攻击者监听,这些给安全带来更多的挑战。 LoRaWAN使用了双重128AES加密机制,以提供安全的通信机制,达到安全的3个要素:保密性、完整性和可用性。 1 双密钥的来源 在《LoRaWAN介绍7 入网》中提到,LoRaWAN使用2 个密钥:NwkSKey和AppSKey,它们分别对应用层数据和MAC协议帧加密。 那么,这2个密钥是怎么来的呢? 如果是ABP模式,这2个密钥是在Server和End Nodes双方同步配置。 如果是OTAA模式,这2个密钥是按如下公式计算出来的: NwkSKey=aes128_encrypt(AppKey,0x01|AppNonce|NetID|DevNonce|pad16) AppSKey=aes128_encrypt(AppKey,0x02|AppNonce|NetID|DevNonce|pad16) 现在,一起检查下这2个密钥的安全性。 首先,AppKey是Server和End Nodes的根密钥(至关重要),双方共同拥有,并且不曾参与通信交换,因此攻击者无法通过窃听无线电而破解。 Server回复AppNonce和NetID给End Nodes时,使用了基于AppKey的128AES加密,攻击者可以窃听无线电,但很难破解该密文。 剩下DevNonce,我们在后续分析它的安全,以及如果防范攻击。 2 双重加密逻辑 首先,FRMPayload(可以是应用数据,也可以是MAC命令)的明文,通过128AES加密,生成密文。细心的人会发现,为什么Key依赖于FPort的值呢?因为,FPort=0,代表MAC命令,使用NwkSKey密钥;FPort=1~255,代表应用数据,使用AppSKey密钥。这是为了取得信息“保密性”。 然后,基于NwkSKey,生成CMAC(Cipher-based MessageAuthentication Code,基于密文消息认证码),取最后4字节做为MIC(Message Integrity Code,消息完整码)。这是为了取得信息“完整性”。 因为双方都具备相同的2个Key,而128AES是对称加密机制,Server和End Nodes都可以有效使用该机制。即达到信息的“可用性”。 加密过程如下图所示: 对密码学熟悉的人们会发现,FRMPayload的加密不具备“完整性”,换一句话说,网络层虽然无法破解应用密文,但可以篡改应用密文,而接收方无法查觉。在LoRaWAN的Server架构中,NS(Network Server)负责网络层,一般情况下认为它是可信设备;如果对安全要求非常高的系统,那么需要在FRMPayload中内嵌MAC(消息认证码),来确保完整性。 3 防止重播攻击 我们回到OTAA的入网申请Join Request数据帧,此时,因为End Nodes没有办法生成2个Key,所以Join Request是以明文发送的,这可以被攻击者窃取。 想象这样一个场景,某Nod#A发送Join Request帧,Server回复Join Accept帧,双方都生成2个Key,准备进行正常的网络通信。此时,攻击者重播窃取的Join Request帧,Server回复Join Accept并生成新的Key。错误出现了:该Node#A(持旧Key)和Server(持新Key),会因为Key不一致导致通信失败。 为防止上述重播攻击,LoRaWAN要求Server保存上一次通信的DevNonce,仅当Node完成第一次UPLINK后,才能删除上一次DevNonce。这样,攻击者一旦重播Join Request帧,Server发现DevNonce是相同的,拒绝回复。 有一个疑问,攻击者为什么不“伪造”Join Request帧呢?不是明文吗? 我们看Join Request帧是受“完整性”保护的,如下: camc=aes128_cmac(AppKey,MHDR | AppEUI | […] Read more.
LoRaWAN介绍8 服务质量(QoS)
“美好的东西在质不在量。”–伊索   QoS(Quality of Service,服务质量)是一个网络的重要指标。 SX1301基带芯片的多通道和多速率特性,提供了较高带宽;LoRa扩频调制,提供了长距离和较佳的抗干扰特性,这些是硬件提供的基础。 QoS的其他方面:网络管理、自适应速率、可靠通信、快速下发和丢帧检测等,由LoRaWAN协议实现。 1 网络管理 实现一个网络的QoS,必须提供管理功能。LoRaWAN制定了一组MAC命令,专门为Server和End Nodes提供管理元数据的交换。 如下表所示,大部分的MAC命令用于控制LoRa无线通信的参数:通信速率、发射功率、通信信道、信号强度、duty-cycle和dwell-time等。 也提供了用于了解Server和End Node双方状态的命令:Server提供End Node当前信号强度;End Node提供自身电池电量和链路余地。 LinkADRReq命令有一个参数:NbTrans,它能提供“非确认信息”的有效通信质量。“非确认信息”,即End Nodes发送的信息,不需要Server回复ACK,以简化实现和节省电能。然而,在一些特殊的环境(如:干扰较严重或信号微弱)下,希望End Nodes将同一个信息,重复发送给Server,以提高成功率,NbTrans就用于设置重复发送的次数。 Orage公司推荐,End Nodes设置NbTrans=3。 2 自适应速率 在文章《LoRaWAN介绍3 优点》中谈到,ADR(自适应速率)是一个优点: LoRaWAN协议推荐,End Nodes应该尽可能地实现ADR算法,以便于增加电池寿命和最大化网络容量。 站在End Nodes的角度,它比较担心:实现ADR算法后,通信速率是提高了,那通信距离还能保证吗?换句话说,Server能否接收到UPLINK数据帧。 为了消除上述疑虑,End Nodes需要定期检测,即通过接收DOWNLINK数据帧,来测试网络正常。 检测算法如下逻辑所示,看上去比较复杂,核心原理就一条:如果收到DOWNLINK数据帧,一切OK;否则,请求Server下发DOWNLINK,一旦超时,降低速率重试;直到速率等于MIN值或接收DOWNLINK为止。 3 可靠通信 通信协议提供的可靠性是基于ACK机制,LoRaWAN也不例外。如果通信的数据帧要求可靠地交付给对方,那就需要对方回复ACK。 UPLINK的Confirmed帧 如下图所示,End Node发送Confirmed帧Data0,没有收到ACK;它重复发送了Data0帧,直到接收到ACK,它再继续发送Data1帧。 DOWNLINK的Confirmed帧 如下图所示,Gateway发送Confirmed帧,End Node回复ACK帧。 为了简化设计,End Node既可以立即回复ACK帧,也可以将ACK携带在下一次UPLINK帧中。 4 快速下发 LoRaWAN的主体是Class A,它的缺点是延时大,即Server要下发DOWNLINK数据帧,必须等待End Node下一次UPLINK。为了实现快速下发,协议中有一个标志位:FPending,它用于告诉End Node,请尽快通信。 Confirmed+FPending 如下所示,这是一种高效的通信,End Node不但回复了Data0的ACK帧,还能快速接收下一帧Data1。 Unconfirmed+FPending 在这种通信中,End Node通过发送void帧(应用层数据为空),来接收Server下发的DOWNLINK数据帧;如果接收失败,End […] Read more.
LoRaWAN介绍7 入网
“生命在他里头,这生命就是人的光。光照在黑暗里,黑暗却不接受光。”–《新约·约翰福音》   End Node要加入LoRaWAN网络,首先需要赋值和激活。一般说来,有2种方法完成入网:ABP(Activation by Personalization,个性化激活)和OTAA(Over-the-Air Activation,空中激活)。 1  ABP ABP是一种简单的入网机制,同时,它也不太安全,适合于建设私网。 它的核心原理是,LoRaWANServer和End Nodes双方都保存相同的3个参数:DevAddr、NwkSKey和AppSKey。 我们一起看一个实例,Loriot的Server是如何提供ABP入网机制的。 首先,每一个EndNode都会有一个DevEUI(Device Extended Unique Identifier,设备扩展唯一标识),最常见的做法是,取MCU的SN(Serial Number,序列号),经过某种算法得到64位的DevEUI。在本例中,设一Node有 DevEUI=BE-7A-00-00-00-00-0A-8E 然后,在Loriot的Server端,提供DevEUI,将得到如下图的三个值(大端): DevAddr=01-33-51-A4 NwkSKey=5A-DA-30-AA-3E-D6-98-4A-A3-FD-04-0D-3C-A6-86-B9 AppSKey=7F-34-F6-20-41-37-EE-4C-97-B0-B2-82-2B-E1-7B-80 最后,将这三个值,分别保存到End Node中。这样,该Node就完成了入网,可以与Server通信。 2  OTAA OTAA是一种安全系统很高的入网机制,当然,它的代价是较复杂。 借用大师Eric(经典书籍《The Art of Unix Programming》的作者)的一句话:数据结构压倒一切,它是编程的核心。我们列出了OTAA的数据流,如果有耐心看懂下图,您也就掌握了OTAA的入网原理。 一个重要的数据,AppKey,它是root key,被Server和End Node共享使用。 首先,一个End Node需要配置:AppEUI和DevEUI;并且取LoRa芯片的RSSI随机值,得到DevNonce。将这3个参数,组织成Join Request数据帧,发送给LoRaWAN Server。 Server接收到Join Request后,分配DevAddr,连同AppNonce和NetID,组织成JoinAccept数据帧,回应给EndNode。 End Node接收Join Accept后,提取DevAddr;结合4个参数:AppKey、AppNonce、NetID和DevNonce,使用aes128_encrypt(),生成2个密钥:NekSKey和AppSKey。 您会发现,无论是ABP,还是OTAA,最终,End Node都会得到3个参数:DevAdd、NwkSKey和AppSKey。 3 重传的限制 一些外部事件的发生,如:断电、信号拥塞、网络断供…,一旦恢复,很可能会有大量(>100)的End Node同时申请入网。为了防止这些广播的Join Request拥塞整个网络,End Node需要实现“伪随机”离散入网,并且限制发送时间。 “伪随机”,可以将DevAddr代入随机函数,生成入网时间,这样有效降低End Node同时入网的概率。 […] Read more.