1、连接基础:物联网连接模型与核心协议

做物联网排查,第一件事不是拿抓包工具,而是先搞清楚——你的设备到底是怎么连上云的?

我见过太多工程师,一上来就查网络、改代码、换模块,折腾半天发现是架构理解错了。说白了,连模型都没搞对,排查就是瞎忙活。

1.1 物联网连接模型:设备 → 网关 → 云

典型的物联网系统,分三层:

  • 设备层:传感器、执行器、嵌入式终端。资源受限,跑不了完整 TCP/IP 栈是常事。
  • 网关层:协议转换、数据汇聚、本地决策。我习惯叫它「二传手」。
  • 云平台层:数据存储、分析、远程控制。真正的业务大脑。

你想想看,设备断连,可能断在哪一层?

核心观点:排查断连,先定位断在哪一层。设备到网关?网关到云?还是设备直接上云?模型不同,排查手段完全不同。

我在项目中遇到过一种情况:设备上报数据偶尔丢失,查了三天,最后发现是网关的 NAT 会话超时。设备端以为还连着,网关早把映射丢了。嗯,这就是没搞懂模型吃的亏。

物联网三层连接模型 设备层 传感器 / 执行器 / 终端 网关层 协议转换 / 汇聚 / 本地决策 云平台层 存储 / 分析 / 远程控制 排查要点 • 设备断连:检查物理层、信号强度、供电 • 网关断连:检查 NAT 会话、路由、防火墙 • 云平台断连:检查证书、心跳、负载均衡 • 设备直连云:跳过网关,排查点更少但更依赖公网质量

1.2 TCP/IP 协议栈回顾

物联网断连,90% 的问题出在传输层和网络层。我建议你把 TCP/IP 栈的每一层都刻在脑子里。

层级 核心协议 常见断连原因
应用层 MQTT, CoAP, HTTP 心跳超时、Topic 权限、Payload 格式错误
传输层 TCP, UDP 端口不通、半开连接、窗口满、RST 包
网络层 IP, ICMP 路由不可达、TTL 超时、IP 冲突
链路层 以太网, Wi-Fi, LoRa 信号弱、重传率高、信道干扰

我记得有一次排查一个 NB-IoT 设备,设备上报总超时。抓包一看,TCP 三次握手都完成了,但服务器端一直没发数据。最后发现是运营商核心网侧把设备的 APN 配错了。网络层通了,应用层却卡在路由策略上。

我的习惯:排查断连时,先看传输层。如果 TCP 连接都建不起来,别急着查 MQTT 配置。从下往上查,效率最高。

1.3 MQTT 协议核心概念

MQTT 是物联网的事实标准。说白了,它就是为「低带宽、高延迟、不可靠网络」设计的。

发布/订阅模型

传统 HTTP 是「请求-响应」,客户端主动问,服务器被动答。MQTT 反过来——设备把数据扔到 Broker 上,谁订阅谁拿。设备不用关心谁在消费数据。

我在项目中遇到过一个问题:设备端频繁重连,每次重连都重新订阅 Topic,导致 Broker 端订阅表爆炸。嗯,后来加了持久化订阅才解决。

主题(Topic)

Topic 是 MQTT 的路由标签。它不像 IP 地址,更像文件路径:

设备上报:  sensor/temperature/room1
设备控制:  actuator/switch/room1/light
设备状态:  device/status/gateway01

Topic 支持通配符:

  • + 匹配单级:sensor/+/room1 匹配所有 room1 的传感器
  • # 匹配多级:sensor/# 匹配所有传感器数据

避坑指南:我曾经见过一个项目,Topic 层级用了 10 级,结果 Broker 路由性能直接崩了。Topic 层级建议不超过 4 级,通配符订阅更要谨慎。

QoS(服务质量)

QoS 是 MQTT 最容易被误解的概念。很多人以为 QoS 越高越安全,其实不是。

QoS 等级 含义 发送次数 适用场景
0 最多发一次,不确认 1 次 传感器高频上报,丢几个无所谓
1 至少发一次,有确认 ≥1 次 控制指令,允许重复但不能丢
2 恰好发一次,四次握手 2 次(严格) 计费、告警,不能重复也不能丢

你想想看,如果所有 Topic 都用 QoS 2,Broker 压力会翻好几倍。我建议:上报数据用 QoS 0,控制指令用 QoS 1,只有关键业务才用 QoS 2。

核心观点:QoS 不是越高越好,是「够用就好」。排查断连时,先确认当前 Topic 的 QoS 等级,再分析丢包是否在预期范围内。