系列阅读:本文是 ManThink 「LoRaWAN 技术解读」系列的第 9 篇,建议按顺序阅读前 8 篇构建知识体系。
LoRaWAN 网络里最容易被忽视的一段,是网关到 LoRaWAN Network Server(LNS / NS)之间的"最后一跳"。
射频那一段很"硬核"——我们花了好几篇文章讲 SX1302 的 16 路并发、讲 TDOA 的时间同步、讲 Class A 的 RX 窗口;而网关把收到的 LoRa 帧传给服务器的那一段,往往只用一句"用 Packet Forwarder"带过。但只要部署规模上到几百台、跨过公网、或者开始谈安全合规,这段"最后一跳"就变成了最该被审视的地方。
这篇文章把 LoRaWAN 网关上常见的三类回传协议摊到桌面上:
然后告诉你:GD6 这类开源网关默认支持哪种、为什么 ThinkLink / ChirpStack / TTN 三个平台给出的"协议菜单"长得不一样,以及工程上怎么选才不掉坑。
这是 Semtech 在 SX1301 时代发布的参考实现,用一台 Linux 主机跑 poly_pkt_fwd / lora_pkt_fwd 这类进程,把 SX130x 收到的上行 JSON 帧(rxpk)推到 LNS,再把 LNS 给的下行 JSON 帧(dnmsg)写到集中器队列。
它的优点是极简——几十 KB 内存就能跑、几小时就能改成"非官方平台"对接。在内网、私有测试环境里,二十年了还是最直接的方案。
但缺点同样致命:
poly_pkt_fwd 是否挂了,全靠应用层时间戳盲猜。Semtech 官方 lora_gateway 仓库在 SX1301 阶段一度是事实标准;但到了 SX1302/SX1303 时代,这套 Packet Forwarder 已经被标记为 NRND(Not Recommended for New Designs),新一代网关普遍转向 Basic Station。ThinkLink 在 gwTool6 配置说明书 中也将 UDP Packet Forwarder 标为"应在受控网络中或额外网络保护下使用"。
关键事实:UDP Packet Forwarder 不加密、不认证、不监测链路状态。
MQTT Bridge 不是 LoRa Alliance 规定的标准协议,而是一种网关—服务器之间用 MQTT 主题(Topic)来传递 LoRaWAN 上下行帧的对接模式。LoRaWAN 报文被映射成 MQTT 消息,由 Broker 做路由。
在 ManThink 的产品线里,这套协议主要服务 ThinkLink 平台。gd6-configuration-guide 第 5.2 节明确:ThinkLink MQTT 仅在 ThinkLink 供应商组合中提供,由以下要素组成:
| 字段 | 说明 |
|---|---|
| Broker URI | ssl://... 或 tcp://...,指向 ThinkLink 平台 |
| Client ID | 网关在 Broker 上的唯一标识 |
| 账号 / 密码 | Broker 凭据 |
| Topic | 上行(uplink)、下行(downlink)、状态(status)等消息的 MQTT 主题 |
| QoS | QoS 0/1/2,按消息等级选 |
| TLS 材料 | 单向 / 双向 TLS 凭据;启用双向 TLS 时,CA、客户端证书、私钥必须成套匹配 |
它为什么会出现?因为在 LoRa 之外的物联网世界,MQTT 几乎是默认的"设备协议网关"——设备 → MQTT Broker → 业务系统,整条链都用同一套消息总线。把这套模式平移到 LoRaWAN 网关上,工程团队就能用熟悉的 Broker 集群既管 LoRa 终端又管 Wi-Fi/4G 设备,架构上更整齐。
MQTT Bridge 的几大特性:
需要注意:MQTT Bridge 和"远程配置"通道是两套独立的连接。gwTool6 把"远程配置"放在单独一节,要求使用独立的 Broker、Client ID、Topic 和 TLS 凭据,不要把 LoRaWAN 通道的 MQTT 凭据误填到远程配置——这是个容易在运维现场出错的点。
关键事实:MQTT Bridge 是对接模式而非 LoRa 联盟规范,由 ThinkLink 这种平台侧推动,主要服务于"所有设备都吃 MQTT"的工程团队。
LoRa Basics Station 由 Semtech 和 LoRa Alliance 联合推出,是 UDP Packet Forwarder 的官方"替代品"。名称里带 "Basics" 是因为它既规定了连接协议,也定义了参考实现的开源基线。
它的架构是两个拆开的 REST/WebSocket 接口:
wss://<server-address>:8887。所有上行的 LoRaWAN 帧、下行的下行队列都走这里。https://<server-address>:443。CUPS 会给网关下发LNS URI、信任链和 LNS 凭据——也就是让"网关连哪个 NS、用什么证书、用什么 API Key"这件事,可以被服务器远程控制。这种"把数据通道和管理通道分开"的设计带来三个工程上的好处:
协议栈要点:
它对应的两个权威文档:
GW-AN08 实操文档总结得很到位:Basic Station 相比传统 UDP Packet Forwarder 有四个核心优势——更高效的 WebSocket 通信、支持动态频率更新(CUPS)、内建加密传输(TLS)、更好的网络管理与远程配置能力。
关键事实:Basic Station 是 LoRa Alliance 推荐的"现代"回传协议,核心是 WebSocket + TLS + 双向通道(LNS 数据 + CUPS 管理)。
把上面三类协议摆在一起,逐项过一遍工程要素(参考亿佰特、Kerlink、LoRa Alliance 官方资料综合整理):
| 维度 | Semtech UDP PF | ThinkLink MQTT Bridge | LoRa Basics Station |
|---|---|---|---|
| 传输层 | UDP 无连接 | TCP / TLS 之上的 MQTT 长连接 | WebSocket 长连接 |
| 加密 | 无标准化(通常明文) | 可配 TLS / mTLS(取决于 Broker) | TLS 1.2/1.3,可 mTLS |
| 平台身份校验 | 无 | 靠 Broker 账号 / TLS | 服务器根证书 + Token / mTLS |
| 链路监测 | 无原生,靠应用心跳 | MQTT keepalive | 原生协议心跳 + 自动重连 |
| 远程配置 / 升级 | 无原生 | 无原生(CUPS 类能力靠平台自实现) | CUPS 接口原生支持 |
| NAT / 防火墙友好 | 差(需端口映射) | 好 | 好(基于 WebSocket) |
| 网关资源占用 | 极低(几十 KB 内存即可) | 中(取决于 Broker 配置) | 中(实现 + TLS + WebSocket) |
| 实现复杂度 | 低 | 中(要接 Broker) | 中高(证书、时间同步) |
| 跨厂商互操作性 | 最好(老标准) | 依赖平台 | 好(LoRa Alliance 规范) |
| 适用场景 | 内网测试、小规模、成本敏感 | 平台即 Broker、想统一设备消息总线 | 公网部署、大规模商用、高安全需求 |
注:GD6(gwTool6 v1.0.3)在 TTN 供应商下默认协议是 BasicStation CUPS;在 ChirpStack 供应商下默认协议是 Semtech UDP,可用 BasicStation LNS 替代;在 ThinkLink 供应商下默认是 ThinkLink MQTT 或由交付配置决定。
GD6 的 LoRaWAN NS 配置页(gwTool6 v1.0.3),把"供应商 × 协议"组合直接摆好。这张表是工程选型的第一现场,必须背下来:
| 平台供应商 | 可选协议 | 默认协议 |
|---|---|---|
| ThinkLink | ThinkLink MQTT、Semtech UDP | 由交付配置决定 |
| ChirpStack | Semtech UDP、BasicStation LNS | Semtech UDP |
| TTN / The Things Stack | BasicStation CUPS、BasicStation LNS、Semtech UDP | BasicStation CUPS |
这张矩阵的几个潜规则:
basicstation-lns,不支持 basicstation-cups——选 Basic Station 协议时只能选 LNS。关键事实:GD6 在三个平台下的协议菜单和默认行为不统一——这是每个对接文档都会重新强调一遍的现场陷阱。
把决策做成一张可以照着走的"三步走"流程:
快速口诀:
内网测试 UDP,生产部署 Basic Station,平台吃 MQTT 就走 Bridge。
如果你最终选了 Basic Station,下面这 5 件事几乎是必踩的坑。
LNS 的 URI 必须以 wss:// 开头(生产);CUPS 的 URI 必须以 https:// 开头。这意味着:
gwTool6 的 trust 字段与 Token Key 字段是分开存的。Token Key 需要拼成一个完整的 HTTP Authorization 行,以 CRLF(\r\n)结尾——少一个回车,TLS 过得去但 401 会持续。
CUPS 与 LNS 两把 Key 权限不同、不能互换:
Link as Gateway to a Gateway Server for traffic exchange;CUPS 一旦连接成功,它给网关下发的 LNS URI + 凭据 + 信道计划会覆盖你本地保存的值。从 CUPS 切回 LNS 时,必须主动清空旧的 CUPS URI——这是 gwTool6 文档明文警告的"切换直接 LNS 后仍走 CUPS"陷阱的根因。
mTLS(双向 TLS)意味着每台网关都要:
正确用法:在高度受控的工业网络或 AWS IoT Core for LoRaWAN 一类强制 mTLS 的平台。绝大多数 TTN ChirpStack 公共部署用单 TLS + Token 即可,不要为了"看起来更安全"去开 mTLS——它只增加运维成本,不会让数据本身更保密。
保存协议选择之后,gwTool6 会冷重启 LoRa 转发约 30–60 秒。这意味着:
MQTT Bridge 不像 Basic Station 那么"标准",但只要你部署 ThinkLink 平台,绕不过它。几条经验:
能,但限定场景:
不建议再用于:
GD6 仍保留 UDP PF 选项,主要服务于:对接老平台、对接私有自研 NS、对接教学/演示场景。
关键事实:UDP PF 现在已经沦为"内网兜底协议"——生产部署默认推荐 Basic Station(公网)或 MQTT Bridge(ThinkLink 生态)。
如果你的存量网络还在用 UDP PF,建议的迁移路径:
整个迁移一般 1–2 周可完成——前提是你已经在做"维护窗口"和"凭据管理"两件准备工作。
| 场景 | 推荐协议 | 关键理由 |
|---|---|---|
| 内网测试 / 教学 | UDP Packet Forwarder | 最简、最快、依赖最少 |
| TTN 公网生产 | Basic Station (CUPS + LNS) | LoRa Alliance 现代标准、远程批量托管 |
| ChirpStack 自建 NS | Basic Station LNS | 兼容老部署、强烈推荐从 UDP 迁移 |
| ThinkLink 平台自部署 | ThinkLink MQTT Bridge | 与平台其它设备的 MQTT 消息总线统一 |
| 大规模异构网络(≥100 台) | Basic Station + CUPS | 零接触开通、远程凭据轮换、规模化运维 |
| 极度资源受限设备 | UDP PF | 资源占用最低、可剪裁 |
| 严格审计/合规要求 | Basic Station + mTLS 或 MQTT + mTLS | 双向证书 + 平台身份校验 |
| 多协议并存需求(异构 NS) | 看具体平台,GD6 同一时刻只能跑一种驱动 | 切换有 30–60 秒冷重启窗口,需维护时间窗 |
最后点几个在工程现场反复出现的"想当然":
wss:// 还是 ws://,并在 LNS 端强制;把网关到 LNS 之间这段"最后一跳"的协议设计清楚,决定整个 LoRaWAN 网络的可运维性和扩展性。Semtech UDP PF 是"最低成本",MQTT Bridge 是"平台契合",Basic Station 是"长期主义"——三条路在不同场景下都是合理答案。
GD6 这类开源网关对三种协议都有原生支持,gwTool6 的协议菜单也按平台自动给出推荐组合。新项目从一开始就按 Basic Station + LNS(生产)+ UDP PF(实验)的方法搭;存量项目按"共存 → 切换 → 收尾"的节奏稳步迁移。
参考文档
本系列由 ManThink 团队基于 gwTool6 v1.0.3 + LoRa Alliance + Semtech 官方资料整理。