摘自:LoRaWAN介绍 - LoRa从业者读这篇就够了 https://blog.csdn.net/iotisan/article/details/69939241
LoRa网络结构 https://blog.csdn.net/DreamBitByBit/article/details/79889561
LoRa基础知识 https://blog.csdn.net/m0_38134493/article/details/72724600
1.什么是LoRaWAN?
LoRaWAN是LoRa Wide Area Network(LoRa广域网)的简称,是基于LoRa技术的一种通信协议。它主要包括三个层次的通信实体:LoRa终端、LoRa网关和LoRa服务器。
2.LoRa协议层次
LoRa整个网络协议层如图所示:
Application为应用层,常见的LoRaWAN协议即为LoRaMAC协议,协议定义的终端类型有ClassA、ClassB、ClassC三种类型,其主要差别ClassA上行触发下行接收窗口,只有在上行发送了数据的情形下才能打开下行接收窗口;ClassB定义ping周期,周期性进行下行数据监测;ClassC尽可能多地监测下行接收,基本只有在上行发送时刻停止下行接收;协议要求每个终端必须支持ClassA,而B、C为可选功能,同时在支持ClassC功能的终端上无需支持classB类型。
Class A B C介绍
-
-
Class A
双向通信终端设备。这一类的终端设备允许双向通信,每一个终端设备上行传输会伴随着两个下行接收窗口。终端设备的传输槽是基于其自身通信需求,其微调是基于一个随机的时间基准(ALOHA协议)。A所属的终端设备在应用时功耗最低,终端发送一个上行传输信号后,服务器能很迅速地进行下行通信,任何时候,服务器的下行通信都只能在上行通信之后。 -
Class B
具有预设接收槽的双向通信终端设备。这一类的终端设备会在预设时间中开放多余的接收窗口,为了达到这一目的,终端设备会同步从网关接收一个Beacon,通过Beacon将基站与模块的时间进行同步。这种方式能使服务器知晓终端设备正在接收数据。 -
Class C
具有最大接收槽的双向通信终端设备。这一类的终端设备持续开放接收窗口,只在传输时关闭。
-
3.LoRa网络结构
LoRa整体网络结构分为终端、网关、网络服务、应用服务几个功能。终端节点可以同时发给多个基站,一般LoRa终端和网关之间可以同过LoRa无线技术进行数据传输,而网关和核心网或广域网之间的交互可以通过TCP/IP协议,当然可以是有线连接的以太网,亦可以为3G/4G类的无线连接。为了保证数据的安全性、可靠性,LoRaWAN采用了长度为128比特的对称加密算法AES进行完整性保护和数据加密。
星型拓扑结构
LoRaWAN中Server模块按照功能可以细分为Join server、Application server和Network Server,实际中可以是一个物理整体。Join Server用于终端设备的请求网络服务能力时的激活流程,Netwrok Server负责和网关及终端的MAC数据交互,Application Server为应用层服务端。
4.终端节点的加网
终端节点有两种加网方式:Over-the-Air Activation(空中激活方式OTAA),Activation by Personalization(独立激活方式ABP)。
OTAA激活流程需要准备三个参数:DevEUI,AppEUI,AppKey
DevEUI:类似于设备的MAC地址,标识唯一终端设备。
AppEUI:标识唯一的应用提供者,比如垃圾桶监测应用、烟雾报警器应用等,都具有自己的唯一ID。
AppKey:是一个AES-128的应用密钥,由该应用程序所有者分配给终端设备,从每一个应用独立的根密钥中推演出来。每当一个终端设备通过加入过程加入网络时,AppKey用于推演出为终端设备定义的会话密钥NwkSKey和AppSKey,用于网络通信的安全。而应用密钥用于保障应用的端到端安全。
终端在发起加网join流程后,发出加网命令,NS(网络服务器)确认无误后会给终端做加网回复,分配网络地址 DevAddr(32位ID),双方利用加网回复中的相关信息以及AppKey,产生会话密钥NwkSKey和AppSKey,用来对数据进行加密和校验。
如果是ABP激活,则比较简单粗暴,直接配置 DevAddr,NwkSKey,AppSKey 这三个LoRaWAN最终通讯的参数,不再需要join流程。在这种情况下,这个设备是可以直接发应用数据的。
5.数据收发
LoRaWAN规定的数据帧类型有Comfirmed(需要应答)和Unconfirmed(不需要应答)两种。另外,为支持应用多样性,除了用AppEUI来划分应用类型外,在数据传输时也可以利用FPort应用端口来对数据分别处理。FPort的取值范围是(1-223),由应用层指定。