当前位置: 首页 > news >正文

[杂谈]-快速了解LoRaWAN网络以及工作原理

快速了解LoRaWAN网络以及工作原理

文章目录

  • 快速了解LoRaWAN网络以及工作原理
    • 1、LoRaWAN网络元素
      • 1.1 终端设备(End Devices)
      • 1.2 网关(Gateways)
      • 1.3 网络服务器(Net Server)
      • 1.4 应用服务器(Application Server)
      • 1.5 连接服务器(Join Server)
    • 2、LoRaWAN 设备类型
      • 2.1 A类设备
      • 2.2 B类设备
      • 2.3 C类设备
      • 2.4 终端设备激活
    • 3、消息类型
    • 4、MAC消息类型
    • 5、LoRaWAN的安全性

LoRa 在 OSI 模型的物理层运行,并在芯片级实现——不包括网络管理协议。 这已成为一项优势,因为系统工程师可以根据特定应用的要求,通过 LoRa 调制实现数据链路和网络层协议。

在欧洲,大多数 LoRa 网络都是自行构建配置。 除了定制网络之外,LoRa 网络的理想网络解决方案是 LoRaWAN。

LoRaWAN 是一种开放的 LPWAN 协议,旨在在 LoRa 调制上运行,添加数据链路和网络层协议。 该协议负责终端设备的配置和点对点数据通信的管理。

本文将讨论如何在 LoRa 网络中配置设备以及 LoRaWAN 如何将它们连接到互联网。 有关这些技术的介绍,请阅读前面的文章:

  • [杂谈]-快速了解LoRa和LoRaWAN

在这里插入图片描述

1、LoRaWAN网络元素

LoRaWAN 网络有五个构建块,它们以星形拓扑连接:

1.1 终端设备(End Devices)

终端设备是传感器、执行器或两者。 它们包含用于 LoRa RF 调制的芯片,并使用 LoRa 技术进行无线通信。 大多数都是电池供电的,作为物联网网络的一部分,通过网关与 LoRaWAN 网络连接。 终端设备遵循随机访问协议 ALOHA,并且可以通过范围内的一个或多个附近网关访问网络。

1.2 网关(Gateways)

网关是负责将消息转发到终端设备和网络服务器的设备。 网关具有连接到服务器的蜂窝 (3G/4G/5G)、光纤、以太网、Wi-Fi 或 2.4GHz 无线电链路的 IP 主干网。 每个网关都注册到一台 LoRaWAN 网络服务器。

当终端设备传输上行链路消息时,其范围内的所有附近网关都会接收该消息。 该消息被转发到网络服务器,并在其中通过重复数据删除来挑选出来。 这种终端设备和网关的网络架构保证了上行数据包的准确性,并起到低成本定位的作用。 当网关接收到要传送到终端设备的下行链路数据包时,负载会不间断地传递。

网关在 OSI 模型的物理层运行,充当 LoRa RF 消息转发器。 网关大致分为室内网关和室外网关。 8 或 16 通道室内网关没有天线,因此接收灵敏度和范围比室外网关低。 室内网关非常适合多层建筑和室内深处位置。

64路室外网关接收灵敏度高,覆盖范围大。 它们通常通过同轴电缆连接到天线,因此非常适合室外蜂窝塔或高层建筑。

1.3 网络服务器(Net Server)

网络服务器是LoRa网络管理的服务器端软件,管理终端设备(通过网关连接到网络服务器)和应用服务器之间的数据通信。 该服务器对终端设备进行身份验证,删除重复的上行链路消息,对终端设备和应用服务器之间的上行链路和下行链路消息进行加密,并对上行链路消息进行确认。

此外,它还负责通过 ADR 命令对 LoRa 网络内的设备进行寻址,通过适当的网关将下行链路消息路由到终端设备。 网络服务器是在终端设备和加入服务器之间转发加入请求和加入接受消息的唯一服务器。

1.4 应用服务器(Application Server)

应用服务器是负责运行主要应用程序并提供基于云的业务解决方案的服务器端软件。 可以有多个应用程序服务器连接到网络服务器,每个应用程序服务器运行特定的服务器端应用程序。 应用服务器通过网络服务器从终端设备接收特定于应用的上行链路数据消息,处理应用数据,并将结果作为应用层下行链路有效负载返回。

1.5 连接服务器(Join Server)

加入服务器是服务器端软件,负责处理终端设备和应用服务器之间的加入请求和加入接受消息。 LoRaWAN v.1.1 中引入了加入服务器,用于 LoRa 架构以启用 OTAA。 终端设备需要通过网络和应用程序会话密钥来激活。 加入服务器处理加入请求消息,生成应用会话密钥,将网络和应用密钥传输到网络服务器和应用服务器,并启用终端设备激活。

连接到 LoRa 网络的终端设备有两种激活方式:个性化激活 (ABP) 和无线激活 (OTAA)。 ABP 为硬编码终端设备提供配置和加入 LoRa 网络的密钥。 然而,它存在安全问题,并且缺乏在线更新的功能。

2、LoRaWAN 设备类型

终端设备具有三种类型的 LoRaWAN 实现(A 类、B 类和 C 类),称为设备类。 所有 LoRaWAN 终端设备均具有 A 类实施。 它们可能也可能没有 B 类或 C 类实现。

三种 LoRaWAN 实现的不同之处在于设备接收下行链路有效负载的方式及其保持活动状态的时间。

2.1 A类设备

A 类设备在所有 LoRaWAN 终端设备中实施。 专有的 A 类设备主要处于睡眠模式,仅间歇性地与应用服务器通信。

设备可以随时向应用服务器发送上行数据报文。 每次上行链路传输后,设备都会为来自应用服务器的下行链路有效负载打开两个短接收窗口。 应用服务器可以在终端设备的第一个接收窗口或第二个接收窗口中传输下行链路有效负载,但不能同时传输两者。

如果设备在上行链路传输后无法接收下行链路有效负载,则在下一个上行链路之后发起另一个下行链路。 A 类 LoRaWAN 终端设备通常是用于警报、环境监控或位置跟踪的传感器。

2.2 B类设备

B 类设备有一个预定的接收窗口,用于接收来自应用服务器的定期下行链路有效负载。 这些设备被配置为响应来自网络服务器的时间同步信标而打开接收窗口。 它们还具有 A 类实现,并在每次上行链路传输后打开两个短接收窗口。
B 类设备是间歇性活动的,因此与 A 类设备相比,它们的电池寿命更短,延迟更低。 它们通常用于传感器数据记录或报告。

2.3 C类设备

C 类设备具有持续活动的接收窗口,使它们能够无任何延迟地获取下行链路有效负载。 LoRaWAN设备具有半双工双向数据通信,因此它们在传输上行链路消息时无法接收下行链路有效负载。 它们由主电源供电并保持活动模式。 操作截止阀的公用事业仪表是设备使用的示例之一。

2.4 终端设备激活

LoRaWAN 网络中有两种终端设备激活:个性化激活 (ABP) 和无线激活 (OTAA)。 对于 LoRaWAN v1.1,OTAA 是设备激活的首选方法。 设备激活是一个分步过程,完全由 LoRa 网络中的加入服务器管理。

3、消息类型

LoRa 网络中终端设备和应用服务器之间通信的消息包含应用数据和/或 MAC 命令。 LoraWAN 在网络服务器和终端设备之间具有半双工双向数据通信。 消息根据数据方向进行分类。

从方向上看,可分为以下几类:

  • **上行链路消息(Uplink messages)**由终端设备传输给加入服务器或应用程序服务器。 发送到加入服务器的消息通常包含 MAC 命令。 与应用服务器通信的那些通常包含MAC命令和/或应用数据。 网络服务器通过多个网关接收消息,并根据 MAC 消息类型路由到加入服务器或应用程序服务器。
  • **下行链路消息(Downlink messages)**由网络服务器发送到终端设备。 该消息由网络服务器通过单个网关中继,以将其呈现给终端设备。

4、MAC消息类型

LoRa网络中的消息由网络服务器根据MAC消息类型进行路由。 LoRaWAN 1.1 和 LoRaWAN 1.0 规范中提供以下 MAC 消息类型。

  • 加入请求(Join-request):终端设备发出的用于 OTAA 激活的上行链路消息。
  • 加入接受(Join-accept):来自加入服务器的下行链路消息,用于终端设备的 OTAA 激活。
  • 重新加入请求(Rejoin-request):从终端设备重新加入 LoRA 网络的上行链路消息。 该消息类型在 LoRaWAN v1.0 中保留,但在 LoRaWAN v1.1 中可用。
  • 未确认数据上行(Unconfirmed data up):不需要确认的上行数据帧。
  • 未确认数据下行(Unconfirmed data down):不需要确认的下行数据帧。
  • 确认数据上行(Confirmed data up):来自终端设备的上行链路数据帧,请求确认(即来自网络服务器的确认)。
  • 确认数据下行(Confirmed data down):来自网络服务器的下行数据帧,请求确认。
  • 专有(Proprietary):非标准专有消息。

5、LoRaWAN的安全性

由于线性调频调制,LoraWAN 无线电链路非常可靠。 除了类似 FSK 的调制之外,LoRaWAN 架构还旨在确保以最高的准确性传递消息。

上行链路消息被传送到多个网关并在网络服务器上进行重复数据删除,从而不会造成数据损坏。 网络通信通过 128 位安全密钥进行保护,包括 NwkSKey、AppSKey 和 AppKey。 算法 AES-128 用于加密消息,类似于 WiFi 标准 IEEE 802.15.4 中的加密。 通过 OTAA 激活,基本上不可能发生设备黑客攻击或中间人攻击。

为了应用服务器对终端设备进行唯一标识,应用密钥AppKey仅在应用服务器和终端设备之间共享。 还可能存在用于激活多个设备的默认应用程序密钥或每个终端设备生成的自定义应用程序密钥。 该密钥用于生成网络和应用程序会话密钥。

一旦终端设备加入 LoRa 网络,网络服务器就会生成两个安全密钥:网络会话密钥 (NwkSKey) 和应用程序会话密钥 (AppSKey)。 这些会话密钥仅在单个会话期间适用。
网络会话密钥是共享的并用于验证网络服务器内的终端设备。 该密钥将非唯一设备地址映射到 64 位扩展唯一标识符 DevEUI 和 AppEUI。 由于网络会话密钥,只有授权的终端设备才能加入 LoRa 网络。 消息完整性代码 (MIC) 使用相同的密钥,用作验证消息完整性的校验和。

应用程序会话密钥对终端设备和应用程序服务器之间的下行链路有效负载进行加密和解密。 该密钥是私有的,永远不会在网络内共享,因此只有授权的终端设备才能与应用程序服务器传输或接收消息。

在 OTAA 激活中,两个会话密钥都会生成唯一的每设备会话。 在 ABP 激活中,仅当显式更改时才会重新生成密钥。

通过使用帧计数器,数据安全性进一步多样化。 上行链路和下行链路消息都有帧计数器。 当终端设备被激活时,两个帧计数器都设置为 0。当传输上行链路消息时,相应的帧计数器会更新。

类似地,当终端设备接收到下行链路有效负载时,下行链路帧计数器立即更新。 终端设备和应用服务器忽略包含低于更新的帧计数器的帧计数器值的任何消息。

相关文章:

[杂谈]-快速了解LoRaWAN网络以及工作原理

快速了解LoRaWAN网络以及工作原理 文章目录 快速了解LoRaWAN网络以及工作原理1、LoRaWAN网络元素1.1 终端设备(End Devices)1.2 网关(Gateways)1.3 网络服务器(Net Server)1.4 应用服务器(Appli…...

MySQL--MySQL表的增删改查(基础)

排序:ORDER BY 语法: – ASC 为升序(从小到大) – DESC 为降序(从大到小) – 默认为 ASC SELECT … FROM table_name [WHERE …] ORDER BY column [ASC|DESC], […]; *** update...

Vue中启动提示polyfill缺少-webpack v5版本导致

安装 npm i node-polyfill-webpack-plugin 因为我们的项目使用webpack v5,其中polyfill Node核心模块被删除。所以,我们安装它是为了在项目中访问这些模块 vue.config.js文件 const { defineConfig } require("vue/cli-service"); const No…...

Hugging Face实战-系列教程3:AutoModelForSequenceClassification文本2分类

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在notebook中进行 本篇文章配套的代码资源已经上传 下篇内容: Hugging Face实战-系列教程4:padding与attention_mask ​输出我…...

《TCP/IP网络编程》阅读笔记--Socket类型及协议设置

目录 1--协议的定义 2--Socket的创建 2-1--协议族(Protocol Family) 2-2--Socket类型(Type) 3--Linux下实现TCP Socket 3-1--服务器端 3-2--客户端 3-3--编译运行 4--Windows下实现 TCP Socket 4-1--TCP服务端 4-2--TC…...

GitHub使用教程

GitHub使用教程 视频教程一:Github 新手够用指南 | 全程演示&个人找项目技巧放送_哔哩哔哩_bilibili 笔记: README.md编写教程:Typora官方免费版与入门教程__阿伟_的博客-CSDN博客 找开源项目的一些途径 • https://github.com/trendin…...

sql server 分区表

分区表 分区表是在SQL Server 2005之后的版本引入的特性,这个特性允许把逻辑上的一个表在物理上分为很多部分。换句话说,分区表从物理上看是将一个大表分成几个小表,但是从逻辑上看,还是一个大表。 步骤 创建分表区的步骤分为…...

开源许可证概述:GNU, BSD, Apache, MPL, 和 MIT

前言 开源许可证是开源软件分发的基础。它们定义了使用者如何使用,修改,分发开源软件。在这篇文章中,我们将探讨五种常见的开源许可证:GNU通用公共许可证 (GNU GPL),BSD许可证,Apache许可证,Mo…...

java中log使用总结

目录 一、概述1.1. 核心日志框架1.2 门面日志框架 二、最佳实践2.1 核心日志框架API包2.2 门面日志框架依赖2.3 集成使用2.3.1 集成jcl2.3.2 集成slf4j2.3.2.1 slf4j集成单一框架2.3.2.2 slf4j整合混合框架 三、总结3.1 所有相关包3.1.1 核心日志框架包3.1.2 门面日志框架3.1.3…...

【Java】传输层协议TCP

传输层协议TCP TCP报文格式首部长度保留位32位序列号和32位确认应答号标记ACKSYNFINRSTURGPSH 16位窗口大小16位校验和16位紧急指针选项 TCP特点可靠传输实现机制-确认应答超时重传连接管理机制三次握手四次挥手特殊情况 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘…...

计算机网络基础知识(非常详细)

1. 网络模型 1.1 OSI 七层参考模型 七层模型,亦称 OSI(Open System Interconnection)参考模型,即开放式系统互联,是网络通信的标准模型。一般称为 OSI 参考模型或七层模型。 它是一个七层的、抽象的模型体&#xff…...

如何进行SEO优化数据分析?(掌握正确的数据分析方法,让您的网站更上一层楼!)

在互联网时代,SEO优化已经成为了每一个网站运营者必备的技能。而在SEO优化中,数据分析更是至关重要的一环。在本文中,我们将会详细介绍如何正确的进行SEO优化数据分析,让您的网站更上一层楼! 数据分析的重要性 数据分…...

Golang不同平台编译的思考

GOOS和GOARCH $GOOS可选值如下: darwin dragonfly freebsd linux netbsd openbsd plan9 solaris windows $GOARCH可选值如下 386 amd64 arm 在编译的时候我们可以根据实际需要对这两个参数进行组合。更详细的说明可以进官网看看 ## http://golang.org/cmd/go http…...

SpringSecurity学习

1.认证 密码校验用户 密码加密存储 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {Beanpublic PasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}} 我们没有这个配置,默认明文存储, {id}password;实现…...

时序预测 | MATLAB实现ICEEMDAN-iMPA-BiLSTM时间序列预测

时序预测 | MATLAB实现ICEEMDAN-iMPA-BiLSTM时间序列预测 目录 时序预测 | MATLAB实现ICEEMDAN-iMPA-BiLSTM时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 ICEEMDAN-iMPA-BiLSTM功率/风速预测 基于改进的自适应经验模态分解改进海洋捕食者算法双向长短期记忆…...

二叉树(上)

“路虽远,行则将至” ❤️主页:小赛毛 目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示(树的存储) 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树 2.3 特殊的二叉树: 2.4 二叉树的性质 3.二叉树的顺…...

Excel怎么批量生成文件夹

Excel怎么批量生成文件夹的链接: https://jingyan.baidu.com/article/ea24bc398d9dcb9b63b3312f.html...

c++ 学习之 静态成员变量和静态成员函数

文章目录 前言正文静态成员变量初始化操作如何理解共享一份数据访问权限 静态成员函数访问方式静态成员函数只能访问静态成员变量访问权限 前言 静态成员分为 1)静态成员变量 所有对象共享一份数据在编译阶段分配空间类内声明,类外初始化 2&#xff09…...

C程序需要按下回车键才能读取字符

当编写涉及从终端输入字符的C程序时,有时会遇到需要按下回车键才能读取字符的问题。这是因为默认情况下,终端通常处于行缓冲模式,需要等待用户按下回车键才会将输入的字符发送给正在运行的程序。这可能会导致一些不便,尤其是当程序…...

x86体系结构(WinDbg学习笔记)

寄存器 eaxAccumulator累加器ebxBase register基寄存器ecxCounter register计数器寄存器edxData register - can be used for I/O port access and arithmetic functions数据寄存器-可用于I/O端口访问和算术函数esiSource index register源索引寄存器ediDestination index reg…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

安卓基础(aar)

重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...