系列阅读:本文是 ManThink 「LoRaWAN 技术解读」系列的第 9 篇,建议按顺序阅读前 8 篇构建知识体系。
引子:网关到服务器的那"最后一跳"
LoRaWAN 网络里最容易被忽视的一段,是网关到 LoRaWAN Network Server(LNS / NS)之间的"最后一跳"。
射频那一段很"硬核"——我们花了好几篇文章讲 SX1302 的 16 路并发、讲 TDOA 的时间同步、讲 Class A 的 RX 窗口;而网关把收到的 LoRa 帧传给服务器的那一段,往往只用一句"用 Packet Forwarder"带过。但只要部署规模上到几百台、跨过公网、或者开始谈安全合规,这段"最后一跳"就变成了最该被审视的地方。
这篇文章把 LoRaWAN 网关上常见的三类回传协议摊到桌面上:
- Semtech UDP Packet Forwarder —— 第一代事实标准,UDP 无连接、JSON 明文
- ThinkLink MQTT Bridge —— 物联网时代的 MQTT 桥接,消息总线模式
- LoRa Basics Station —— LoRa Alliance 推出的现代化方案,WebSocket + TLS + CUPS/LNS 双通道
然后告诉你:GD6 这类开源网关默认支持哪种、为什么 ThinkLink / ChirpStack / TTN 三个平台给出的"协议菜单"长得不一样,以及工程上怎么选才不掉坑。
一、三类协议的来龙去脉
1. Semtech UDP Packet Forwarder(2014–至今)
这是 Semtech 在 SX1301 时代发布的参考实现,用一台 Linux 主机跑 poly_pkt_fwd / lora_pkt_fwd 这类进程,把 SX130x 收到的上行 JSON 帧(rxpk)推到 LNS,再把 LNS 给的下行 JSON 帧(dnmsg)写到集中器队列。
- 传输层:UDP,无连接
- 应用层:JSON,手写协议
- 端口约定:上行 1700,下行 1700(默认)
- 认证:没有。Semtech 官方实现里既不做 TLS 也不做 gateway 身份校验
它的优点是极简——几十 KB 内存就能跑、几小时就能改成"非官方平台"对接。在内网、私有测试环境里,二十年了还是最直接的方案。
但缺点同样致命:
- 公网裸跑,udp 报文里的 DevAddr、NwkSKey 衍生材料可被嗅探、篡改和回放;
- 服务器不知道网关"是不是真的",伪造一份同样的 JSON 报文就能冒名顶替;
- 没有"链路状态"语义,对端的网关是否在线、
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 不加密、不认证、不监测链路状态。
2. ThinkLink MQTT Bridge —— 消息总线模式
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 的几大特性:
- 天然 Pub/Sub:上行是某个 topic 上的消息,下行是另一些 topic 上的消息,回传和业务数据走同一根管道;
- TLS 可选:靠 Broker 的 TLS 配置决定是否加密;
- 认证可配置:靠 Broker 的用户名/密码机制;
- 生命周期事件进总线:Device Provisioning、Status / Statistics 等都打成 MQTT 消息,业务侧订阅即可。
需要注意:MQTT Bridge 和"远程配置"通道是两套独立的连接。gwTool6 把"远程配置"放在单独一节,要求使用独立的 Broker、Client ID、Topic 和 TLS 凭据,不要把 LoRaWAN 通道的 MQTT 凭据误填到远程配置——这是个容易在运维现场出错的点。
关键事实:MQTT Bridge 是对接模式而非 LoRa 联盟规范,由 ThinkLink 这种平台侧推动,主要服务于"所有设备都吃 MQTT"的工程团队。
3. LoRa Basics Station(2019–至今)
LoRa Basics Station 由 Semtech 和 LoRa Alliance 联合推出,是 UDP Packet Forwarder 的官方"替代品"。名称里带 "Basics" 是因为它既规定了连接协议,也定义了参考实现的开源基线。
它的架构是两个拆开的 REST/WebSocket 接口:
- LNS(LoRaWAN Network Server)接口:负责业务数据传输。URI 一般是
wss://<server-address>:8887。所有上行的 LoRaWAN 帧、下行的下行队列都走这里。 - CUPS(Configuration and Update Server)接口:负责配置和固件升级。URI 一般是
https://<server-address>:443。CUPS 会给网关下发LNS URI、信任链和 LNS 凭据——也就是让"网关连哪个 NS、用什么证书、用什么 API Key"这件事,可以被服务器远程控制。
这种"把数据通道和管理通道分开"的设计带来三个工程上的好处:
- 配置可以远程轮换:不用人到现场改网关;
- 零接触部署(zero-touch):从工厂出货到接上电自动连上 CUPS 自动拿到 LNS 凭据;
- 统一管理大规模网关机群:千台网关共用同一组凭据和信道计划。
协议栈要点:
- 传输层:基于 WebSocket 的长连接,链路心跳、断连自动重连都是协议内置;
- 加密:TLS 1.2 / 1.3(按 server 端实际配置),支持双向证书认证(mTLS);
- 认证方式:服务器根证书(trust)+ API Key 令牌 + 可选客户端证书;
- 应用层消息:JSON(与 UDP PF 有一定相似度,但是双向、带时间戳、可以主动 push 配置)。
它对应的两个权威文档:
- LoRa Basics Station LNS(TTN 官方)
- LoRa Basics Station CUPS(TTN 官方)
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 实操指引
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 |
这张矩阵的几个潜规则:
- 驱动互斥:Semtech UDP 由 Packet Forwarder 驱动;Basic Station LNS/CUPS 由 Basic Station 驱动。两种驱动保存在同一份配置里,保存并应用后切换会冷重启 LoRa 转发约 30–60 秒。所以保存要避开 OTA、配置写入和关键下行业务时段。
- ChirpStack 不支持 CUPS:MCP 文档明文写着 ChirpStack 的 basicstation gateway bridge 只支持
basicstation-lns,不支持basicstation-cups——选 Basic Station 协议时只能选 LNS。 - CUPS 覆盖本地配置:CUPS 返回的 LNS URI 和凭据优先于你在本地填的。从 CUPS 切回直接 LNS 时,必须清除旧的 CUPS URI,否则网关会偷偷继续走 CUPS。
- CUPS API Key 和 LNS API Key 权限不同:在 TTN Console 上不能混用。
- 驱动和频点:在 Basic Station 模式下,"无线参数"页面的本地信道设置实际上不生效——信道由 LNS / CUPS 下发;只有切回 Packet Forwarder 后本地信道页面才恢复作用。
- mTLS 仅在部署明确要求时才用:绝大多数 TTN 云部署用服务器 TLS + API Key 即可,无需网关客户端证书。
关键事实:GD6 在三个平台下的协议菜单和默认行为不统一——这是每个对接文档都会重新强调一遍的现场陷阱。
四、选型决策树
把决策做成一张可以照着走的"三步走"流程:
第一步:判断部署规模与暴露面
- 公网暴露 → 排除 UDP PF;优先 Basic Station(TLS);MQTT Broker 也行(取决于 TLS 配置);
- 完全内网 / 现场设备稀少 → UDP PF 也能跑,成本最低;
- 上千台网关的统一管理 → 强烈倾向 Basic Station + CUPS。
第二步:看平台是否支持
- TTN / The Things Stack → 推荐 Basic Station(CUPS 优先,LNS 兜底);
- ChirpStack → 推荐 Basic Station LNS(CUPS 不可用,新老版本都注意);
- ThinkLink 平台 / 私有集群 + MQTT → MQTT Bridge 是更"合身"的方案;
- 多平台并存 / 异构 NS → 留意驱动互斥——GD6 同一时间只能跑一个驱动,切换需要 30–60 秒冷重启窗口。
第三步:考虑运维与合规
- 有合规审计要求 → 必须 Basic Station 或带 mTLS 的 MQTT;
- 需要零接触批量开通 → Basic Station + CUPS 几乎是唯一选项;
- 运维人员熟悉 MQTT 生态 → MQTT Bridge 顺手;
- 想保留"老"调试体验(最小依赖最透明) → UDP PF 仍然能用,但不要暴露到公网。
快速口诀:
内网测试 UDP,生产部署 Basic Station,平台吃 MQTT 就走 Bridge。
五、Basic Station 的工程细节:上手必须知道的 5 件事
如果你最终选了 Basic Station,下面这 5 件事几乎是必踩的坑。
1. wss 不是 ws
LNS 的 URI 必须以 wss:// 开头(生产);CUPS 的 URI 必须以 https:// 开头。这意味着:
- 服务器根证书(trust)必须与域名匹配——Let's Encrypt 等公共证书可省略 self-trust;
- 网关系统时间必须可信——TLS 握手校验证书有效期,差几小时就挂;
- DNS 必须能解析 Server Address。
2. API Key + CRLF 是必填项
gwTool6 的 trust 字段与 Token Key 字段是分开存的。Token Key 需要拼成一个完整的 HTTP Authorization 行,以 CRLF(\r\n)结尾——少一个回车,TLS 过得去但 401 会持续。
CUPS 与 LNS 两把 Key 权限不同、不能互换:
- LNS Key:只授予
Link as Gateway to a Gateway Server for traffic exchange; - CUPS Key:需要查看网关信息、编辑基础网关设置、读取 Secret 等权限。
3. CUPS 会"反过来"覆盖本地配置
CUPS 一旦连接成功,它给网关下发的 LNS URI + 凭据 + 信道计划会覆盖你本地保存的值。从 CUPS 切回 LNS 时,必须主动清空旧的 CUPS URI——这是 gwTool6 文档明文警告的"切换直接 LNS 后仍走 CUPS"陷阱的根因。
4. mTLS 仅在确实需要时才用
mTLS(双向 TLS)意味着每台网关都要:
- 给它签一份客户端证书;
- 把客户端私钥导入网关(CN 设为网关 EUI 十六进制);
- 服务器信任相同 CA 并校验客户端证书 ID。
正确用法:在高度受控的工业网络或 AWS IoT Core for LoRaWAN 一类强制 mTLS 的平台。绝大多数 TTN ChirpStack 公共部署用单 TLS + Token 即可,不要为了"看起来更安全"去开 mTLS——它只增加运维成本,不会让数据本身更保密。
5. 驱动切换是冷重启
保存协议选择之后,gwTool6 会冷重启 LoRa 转发约 30–60 秒。这意味着:
- 不要在 OTA / 关键下行时段切换;
- 切换后重新读取配置确认生效(截图/日志都行),而不是只在页面上看一个"保存成功";
- 如果你看到的是"配置生效但 0 上行",先等 60 秒再排错。
六、MQTT Bridge 的现场经验
MQTT Bridge 不像 Basic Station 那么"标准",但只要你部署 ThinkLink 平台,绕不过它。几条经验:
- Topic 是契约。每个网关/每个应用有约定的 Topic 前缀,私自改 Topic 路径只会让消息发到空气里;
- TLS 材料成套。CA、客户端证书、私钥三件必须成套;缺少一个,Broker 拒连;
- 远程配置是另一根线。"远程配置"和"LoRaWAN 数据"用两套 Broker、Client ID、Topic、TLS 凭据;别图省事共用凭据,否则远程配置错误推送会影响 LoRa 业务;
- Client ID 全局唯一。重复的 Client ID 触发 Broker 的踢出机制,会偶发"心跳掉线-重连-再踢出"的循环;
- QoS 选型。Uplink / Downlink 用 QoS 1 或 2,Status 用 QoS 0 即可——全 QoS 2 会显著抬高 Broker 负担。
七、UDP Packet Forwarder 的"前世今生"还能用吗
能,但限定场景:
- 受控网络/测试床:实验室、产线内、研发环境;
- 已有平台只接 UDP:某些老旧 NS / 自研平台的历史包袱;
- 资源极度受限:例如电池网关、传感器上加 Wi-Fi/4G 转发的小型化场景。
不建议再用于:
- 任何经过公网、NAT、或者多租户网络环境的部署;
- 涉及真实业务负载(特别是有付费/合规/审计需求的)部署;
- 缺少 Gateway 身份校验机制的部署。
GD6 仍保留 UDP PF 选项,主要服务于:对接老平台、对接私有自研 NS、对接教学/演示场景。
关键事实:UDP PF 现在已经沦为"内网兜底协议"——生产部署默认推荐 Basic Station(公网)或 MQTT Bridge(ThinkLink 生态)。
八、迁移路径:从 UDP PF 到 Basic Station
如果你的存量网络还在用 UDP PF,建议的迁移路径:
- 共存期:先在 GD6 上关掉所有下行,仅启用上行测试。Basic Station 与 UDP PF 在 GD6 是驱动互斥的,所以只能"先切换再回切";
- 双协议并行:ChirpStack 的方案典型——UDP PF 走老链路,Basic Station LNS 走新链路,两套 Bridge 并存;
- CUPS 接管批量配置:上了 Basic Station 后,别让运维一台一台手动填 LNS URI——把 CUPS 搭起来,让服务器自动下发;
- 凭据轮换计划:LNS API Key / 客户端证书设好有效期,定期轮换;
- 回退预案:保留 1–2 台 UDP PF 兜底网关,应对 Basic Station 故障。
整个迁移一般 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 秒冷重启窗口,需维护时间窗 |
十、常见误区
最后点几个在工程现场反复出现的"想当然":
- "Basic Station 不加密"——错。Basic Station 默认走 TLS,是否加密取决于 URI 用
wss://还是ws://,并在 LNS 端强制; - "UDP Packet Forwarder 在 2026 年没人用了"——也不对。教学、研发、内网部署仍在大规模使用;
- "MQTT Bridge 就是 MQTT 调调 Topic 那么简单"——那只是冰山一角。MQTT Bridge 在 ThinkLink 中带 TLS、带凭据、带多 Topic 路由,是工程意义上完整的对接模式;
- "CUPS 看起来复杂,所以小规模不用"——CUPS 在 5 台以下的网络也确实没必要;但当运维团队开始抱怨"为什么每加一台网关都要手动配"时,CUPS 就该上了;
- "Basic Station 等同于免费版"——错。Basic Station 是 LoRa Alliance 推出的协议规范,Semtech 提供开源参考实现;TTN、ChirpStack、AWS IoT Core for LoRaWAN 等平台按统一规范实现各家服务端;
- "协议切换只是改一个下拉框"——错。在 GD6 上切协议会冷重启 LoRa 转发 30–60 秒,关键业务时段千万别切。
结语
把网关到 LNS 之间这段"最后一跳"的协议设计清楚,决定整个 LoRaWAN 网络的可运维性和扩展性。Semtech UDP PF 是"最低成本",MQTT Bridge 是"平台契合",Basic Station 是"长期主义"——三条路在不同场景下都是合理答案。
GD6 这类开源网关对三种协议都有原生支持,gwTool6 的协议菜单也按平台自动给出推荐组合。新项目从一开始就按 Basic Station + LNS(生产)+ UDP PF(实验)的方法搭;存量项目按"共存 → 切换 → 收尾"的节奏稳步迁移。
参考文档
- ManThink · gwTool6 配置说明书
- ManThink · 通过 Basic Station 将 gwTool6 网关接入 TTN
- ManThink · 通过 Basic Station 将 gwTool6 网关接入 ChirpStack
- LoRa Alliance · LoRa Basics Station 规范(引用自 TTN 官方)
- The Things Stack · LNS 参考
- The Things Stack · CUPS 参考
- 亿佰特 · LoRaWAN 网关公网接入选 UDP 还是 Basic Station 技术解析
- Kerlink · Basic Station Packet Forwarder 文档
系列阅读
- LoRaWAN 设备入网流程详解:OTAA vs ABP,怎么选?
- LoRaWAN ADR 机制解读:谁在控制数据速率
- LoRaWAN Regional Parameters:为什么 CN470 和 EU868 的频点数不同
- LoRa 物理层参数:SF、BW、CR 如何影响传输距离和速率
- LoRaWAN 设备类别(Class A/B/C)对比与适用场景
- Semtech SX1301 vs SX1302 vs SX1303:集中器芯片演进
- ESP32-S3 在 IoT 网关中的应用:为什么选它而不是 STM32
- LoRa 定位技术原理:TDOA 与 RSSI 方案对比
- 本文:LoRaWAN 网关回传协议详解:Semtech UDP / MQTT Bridge / Basic Station 三大方案对比与选型
本系列由 ManThink 团队基于 gwTool6 v1.0.3 + LoRa Alliance + Semtech 官方资料整理。