咱们接着上一篇文章的话题,继续来聊 LoRaWAN 协议,今天的主题是 LoRaWAN Server,它既是重点,也是难点。
————————— 我叫隔离带宽 —————————
1 LoRaWAN 服务器
在前面的文章中,我们提到过,LoRaWAN 的重点和难点其实是 LoRaWAN Server!
“分而治之”是人们降低复杂度的有效方法,LoRaWAN Server 很娴熟地运用了该技巧,它将 Server 分成 4 种角色。接下来,我们就来详细聊聊这部分
1.1 服务器框架
虽然很多人都推荐使用 IPv6 将智能设备互联,构建一个物联网。
但是目前,更可行的物联网方案是:将智能设备连接到 Internet。这样,基于已有的互联网,无论是经济上,还是技术上,都性价比更高。更何况,大部分智能设备的计算能力和电能都不适合 IPv6 的协议栈运行。
我们来看一下 LoRaWAN 的架构,它是基于 Internet 建设物联网,Gateway 是 IP 设备(运行 IP 协议栈),而 End Node 运行的是 LoRaMac-node(没有运行IP协议栈)。
1.2 不同服务器角色及其功能
LoRaWAN Server 共有 4 种角色,包括:NS(NetworkServer,网络服务器)、AS(ApplicationServer,应用服务器)、NC(NetworkController,网络控制服务器)和CS(Customer Server,客户服务器)。
不同服务器及其功能简述如下:
(1)NS(Network Server,网络服务器)
1 个 NS 可以连接 1 个或多个 Gateway,它们之间的接口协议为 JSON / GWMP / UDP / IP。同样,NS 可以连接 1 个或多个 AS 和 NC,它们之间的接口协议为 JSON / TCP / IP。
NS负责 RF 数据包的完整性校验:
上行:End Node >>>> Gateway >>>> NS,它将检验 RF 数据包的 MIC 是否正确;
下行:NS >>>> Gateway >>>> End Node,它将给 RF 数据包计算并封装 MIC。
为此,NS 需要记录每一个 End Node 的如下信息:
(2)AS(Application Server,应用服务器)
1 个 AS 可以连接 1 个或多个 NS 和 CS,它们之间的协议为 JSON / TCP / IP。
AS 负责 RF 数据包的应用数据加密和解密:
上行:End Node >>>> Gateway >>>> NS >>>> AS,它将解密应用数据并提交给 CS;
下行:AS >>>> NS >>>> Gateway >>>> End Node,它将 CS 转交的应用数据加密。
为此,AS 需要记录每一个 End Node 的如下信息:
(3)NC(Network Controller,网络控制服务器)
1 个 NC 可以连接 1 个或多个 NS,它们之间的协议为 JSON/ TCP / IP。
NC 负责控制 RF 参数,目前,End Node 的通信速率(ADR)由它控制。(后续扩展可能包括:End Node 的发射功率、移动 Node 的漫游和选择最佳 Gateway 通信等)。
(4)CS(Customer Server,客户服务器)
1 个 CS 可以连接 1 个或多个 AS,它们之间的协议为 JSON / TCP / IP。
CS 是用户自定义的服务器,除了接口协议外,它具备高度的灵活性:灵活的数据存储(如:使用关系性数据库或简单文件),灵活的数据加工(如:基于数据挖掘或简单显示)。
1.3 通信接口
4 种服务器角色和 Gateway,以及 Command console 的层次关系如下图所示。
如下图所示,它们之间的通信协议规律如下:
NS 和 Gateways 通过 JSON / GWMP / UDP / IP;
Command console 和 4 种服务器通过 JSON / UDP / IP;
4 种服务器之间通过 JSON / TCP / IP。
————————— 我叫隔离带宽 —————————
2 LoRaWAN 服务器接口
如下图所示,LoRaWAN 规定 Server 和 Gateway 的协议为 JSON / GWMP / UDP / IP,底下的 2 层协议属于 IP 协议栈,而 GWMP 和 JSON 融入 LoRaWAN 的特点。
2.1 NS 和 GW 协议栈
GWMP(LoRa GatewayMessage Protocol)如下表所示,
其中包括 3 个交互协议:
PUSH_DATA PUSH_ACK:GW 向 NS 提交上行 RF 数据包;
PULL_RESP TX_ACK:NS 向 GW 提交下行 RF 数据包;
PULL_DATA PULL_ACK:GW 向 NS 发送“心跳”以打开防火墙;
2.3 JSON协议
LoRaWAN 使用 JSON 作为通用数据交换格式,并且 JSON 仅包含 ASCII字符。目前,JSON 协议包括 3 部分定义:GW 状态,上行数据,下行数据。
————————— 我叫隔离带宽 —————————
3 LoRaWAN 服务器架构
由于LoRaWAN 本身没有公开其服务器源码,这里介绍的 LoRa Server 是一个开源的 LoRaWAN Server,我们就拿这个架构来加深一下理解。它能完成 Server 最主要的任务:处理来自 1 个或多个 GW 的上行 RF 数据包,调度最优的 GW 回复下行 RF 数据包。
3.1 整体架构
很明显,LoRa Server 基本遵循 LoRaWAN 对 Server 的 4 层架构,它们的对应关系如下。
loraserver NS (Network Server)
lora-app-server AS (ApplicationServer)
lora-controller NC (NetworkController)
application CS (Customer Server)
LoRaWAN 规定 GW 和 NS 的接口协议是 JSON,而本项目使用的是 MQTT 格式,因此它设计了一个 lora-gateway-bridge 层,它负责 JSON 和 MQTT 的转换。如下图所示:
————————— 我叫隔离带宽 —————————
4 关于 LoRaWAN 服务器和网关的一些问题
在 LoRaWAN 主流体系之外,有一些应用的经验和技巧,它包括 Server 和 Gateway 的设计和实现。接下来我们就以问答的方式大概来聊一下。
4.1 Server 和 GW可以集成吗?
目前,至少有 2 种产品是 LoRa GW 和 Server 集成在一个设备上:Semtech Starter Kit 和MultiTech Conduit,它们都是基于 Linux 平台,综合 AS、NS 和 GW 以及 DataBase(数据库)。
如果只使用一个 GW(满足演示或实验的需要),上述方法是可行的。
如果是部署一个 LoRaWAN 物联网,是需要将 Server 和 GW 分离,更常见的是,一个 Server 连接多个 GW,组建一个较大区域的无线网络。
4.2 NS 和 AS 可以分离吗?
LoRAWAN Server 主要包括:NS 和 AS,NS 负责收发 RF 数据包,AS 负责数据加密和解密,那么这 2 者可以分离吗,比如,使用 A 公司的 NS,结合 B 公司 AS?
站在技术角度,这是完全可行的。只要 NS 和 AS 对同一 End Node 保持一致的 Key 和 ID。像 Loriot 公司的 NS,预留了 API 接口,可以连接第三方的 AS,用于:同步 Key 和 ID、NS AS 数据流等。
4.3 NS 和 GW 断连该怎么办?
使用 3G/GPRS 链路的 GW 和 NS,如果 3G 通信失败(没有信号等),那么 GW 如何缓存 End Nodes 上报的 RF 数据包呢?
LoRaWAN 没有指出如何处理该异常,这需要 GW 执行一些策略:缓存没有应答的报文,持续重连 NS,一旦连接 NS,马上提交所有缓存报文。
如果 3G/GPRS 链路长时间不可使用,GW 不可能,也没有必要,缓存所有 RF 数据包;可见,处理该异常,需要一个满足客户需要的动态策略。
4.4 GW 接收“不需要”的报文吗?
设想,2 家不同公司的 End Nodes 都在一家 GW 的有效通信范围内,那么 GW 能否“拒绝”不属于本公司的 End Nodes 的报文吗?
答案是该 GW 会接收,只是当它提交给 NS 时,会发现该报文的 DevAddr 和 MIC 错误,因为别的公司的 End Nodes 没有在 NS 中注册。
由此可见,GW 只是一个“桥接器”,它不对报文做加工处理。
4.5 使用 3G/GPRS 有延迟吗?
有用户使用 3G/GPRS 连接 GW 和 Server,发现 End Node 在上报后的 1 秒内(即 RX1 窗口)接收 ACK 失败。深入实验发现,原因在于 Server 通过 3G/GPRS 发送“下行 RF 数据包”超时(大于1秒)。
测试经验表明,当 3G/GPRS 链路处于空闲时,第一个数据包的发送时间会达到300~900ms,因为 3G/GPRS 调制解调器与距离最近的蜂窝基站重建连接,这需要一些时间。后续的数据包发送时间小于 100ms。
为此,使用 3G/GPRS 的 GW,Server 和 End Node 需要约定 RX2 窗口接收下行 RF 数据包,该窗口有 2 秒的周期,可以有效应对蜂窝链路重建的延迟。
4.6 Server 如何实现 ADR?
ADR(Adaptive DataRate,速率自适应)是 LoRaWAN 的核心技术之一,End Nodes 的空中速率都是由 Server 自动控制的。那么,Server 如何计算 ADR 呢?
LoRaWAN Server 一般将 ADR 算法设计成一个模块,通过提供目标需求(如:吞吐率、稳定性或二者折中…),该算法模块结合 End Node 的历史经验数据(RSSI / SNR / demodulation margin/…)计算最佳空中速率。
4.7 8 个 SX127x 能否代替 SX1301?
能否使用 8 个 SX127x(如:使用 DVB-T 设备连接)来取代SX1301,实现一个便宜的 LoRaWAN Gateway 呢?
遗憾的是,这看上去很美好,实际上会深陷泥淖。
因为多个 LoRa 收发器 ≠ LoRaWAN 多通道网关
LoRaWAN 的无线电通信依赖 SX1301 基带芯片,它可以看作是:DSP + 2x MCU 的 ASIC。正因为它强大的调制和解调能力,才能实现多通道,多速率,同时解析;还能实现天线分集。
————————— 我叫隔离带宽 —————————
今天就聊到这里,这仅仅是关于 LoRaWAN 服务器的一些简单介绍,这一个话题值得深入研究,各位小伙伴可以根据自身情况进行深入学习!下一篇将是 LoRaWAN 系列的最后一篇文章,请大家继续关注!
图片授权基于:CC0协议
领取专属 10元无门槛券
私享最新 技术干货