1、课程导论:为什么物联网需要专用协议?MQTT、CoAP、HTTP的诞生背景与核心定位

1.1 一个老工程师的困惑:HTTP 不够用吗?

我记得十年前刚接触物联网项目时,客户问我:“为什么不能用 HTTP?网页都能跑,传感器数据为什么不行?”

这个问题,其实问到了点子上。HTTP 确实强大,它撑起了整个互联网。但物联网场景,说白了,和“人上网”完全是两码事。

你想想看,一个温度传感器,每隔 10 秒上报一次 25.3℃。用 HTTP 的话,每次都要建立 TCP 连接、发送请求头、等待响应、再断开连接。光握手开销就占了数据包的 80% 以上。这在 PC 端无所谓,但在物联网设备上——嗯,这里要注意——电池电量、带宽、内存,样样都是命根子。

我在项目中遇到过最典型的例子:一批智能水表,用 HTTP 上报数据,结果电池寿命从设计的 5 年直接掉到 8 个月。后来换成 MQTT,同样的硬件,电池撑了 4 年半。这就是专用协议的价值。

1.2 物联网的“三座大山”:为什么通用协议扛不住

物联网设备面临的挑战,我总结为三个核心矛盾:

  • 资源受限:很多设备只有几十 KB 内存、几 MHz 主频。跑个完整的 HTTP 服务器?想都别想。
  • 网络不稳定:设备可能在地下室、在移动的车辆上、在信号盲区。断线重连是常态,不是异常。
  • 海量连接:一个平台可能要同时管理几十万甚至上百万个设备。每个设备都维持长连接?传统架构直接崩溃。

HTTP 是为“人机交互”设计的。人发一个请求,服务器返回一个页面,然后连接就结束了。但物联网是“机机交互”——设备要持续上报数据,服务器要随时下发指令。这种模式,HTTP 从根上就不匹配。

核心观点:物联网需要的不是“更强的协议”,而是“更轻、更省、更适应机器对话”的协议。

3.3 三剑客的诞生背景:各怀绝技

那么,MQTT、CoAP、HTTP 这三兄弟,到底是怎么来的?

MQTT:为“带宽饥渴”而生

MQTT 诞生于 1999 年,最初是 IBM 用来监控石油管道的。你想,沙漠里的管道,卫星通信,带宽按比特算钱。所以 MQTT 的设计哲学就是:能省则省

它的最小报文只有 2 个字节。对,你没看错,2 个字节就能完成一次数据发布。而且它采用“发布/订阅”模式,设备只管发数据,不用关心谁在收。这种解耦,在海量设备场景下简直是救命稻草。

我个人习惯把 MQTT 比作“物联网的微信群”——你发一条消息,所有订阅的人都能收到,而且你不需要知道他们是谁。

CoAP:UDP 世界的“轻量级 HTTP”

CoAP 是 IETF 在 2010 年左右推出的。它的定位很明确:在 UDP 上实现类似 HTTP 的 RESTful 交互

为什么不用 TCP?因为很多物联网设备(比如基于 6LoWPAN 的传感器网络)根本跑不动 TCP 的拥塞控制和重传机制。UDP 虽然不可靠,但轻啊。CoAP 在应用层自己实现了可靠传输——通过“确认报文”和“重传”机制,既保留了 UDP 的轻量,又保证了可靠性。

我曾经在一个智能照明项目里用过 CoAP。每个灯泡就是一个 CoAP 服务器,手机 App 直接通过 CoAP 的 GET/PUT 方法控制灯泡开关。整个过程没有中间代理,延迟在 10 毫秒以内。如果用 HTTP,光 TLS 握手就要几百毫秒。

避坑指南:我曾经在 CoAP 项目里踩过一个坑——NAT 穿透。CoAP 默认用 UDP,很多企业防火墙会拦截 UDP 流量。后来我们加了 DTLS 和 NAT 穿透方案才解决。所以选 CoAP 前,一定要确认网络环境对 UDP 的支持情况。

HTTP:老大哥的“降维打击”

HTTP 诞生于 1991 年,最初是为了传输超文本文档。它太成功了,以至于后来什么都要往上靠。物联网早期,很多开发者直接用 HTTP RESTful API 来对接设备。

HTTP 的优势很明显:生态成熟、工具丰富、调试方便。你用 Postman 就能测试设备接口,用 curl 就能模拟请求。对于原型验证阶段,HTTP 绝对是效率最高的选择。

但它的劣势同样致命:报文臃肿、连接开销大、不支持推送。HTTP 1.1 虽然支持长连接,但本质上还是“请求-响应”模式。服务器想主动给设备发消息?要么设备轮询,要么用 WebSocket——但 WebSocket 又增加了复杂度。

所以我的建议是:原型阶段用 HTTP,量产阶段换 MQTT 或 CoAP。别在原型上花太多时间优化协议,先把业务跑通再说。

1.4 核心定位对比:一张表说清楚

维度 MQTT CoAP HTTP
传输层 TCP UDP TCP
通信模式 发布/订阅 请求/响应 + 观察 请求/响应
报文开销 极小(2字节起) 小(4字节头) 大(数百字节)
适用场景 传感器数据上报、远程控制 资源受限设备、局域网控制 原型验证、管理接口
典型设备 智能电表、车联网终端 智能灯泡、传感器节点 网关、服务器
QoS 支持 3 级(0/1/2) 1 级(确认/非确认) 无原生 QoS

1.5 我的选型建议:别迷信,看场景

经常有年轻工程师问我:“哪个协议最好?”

我的回答永远是:没有最好的协议,只有最合适的协议

如果你做的是智能家居,设备在同一个局域网内,控制延迟要求高——CoAP 是首选。

如果你做的是工业物联网,设备分布在全国各地,需要稳定可靠的数据上报——MQTT 是标配。

如果你只是做个 Demo,或者设备本身是 Linux 网关,资源充裕——HTTP 完全够用。

我见过最离谱的项目,是在一个 8 位单片机上跑 HTTP 服务器。结果呢?内存溢出,三天两头死机。后来换成 CoAP,稳如老狗。所以,选协议之前,先搞清楚你的硬件是什么水平

重要提醒:不要为了“技术时髦”而选协议。MQTT 很火,但如果你只有几十个设备,而且都在内网,用 HTTP 反而更简单。技术选型的第一原则是:用最少的成本解决问题

1.6 本章小结

这一章,我们聊了三个核心问题:

  • 为什么 HTTP 在物联网场景下“水土不服”?——因为资源开销大、模式不匹配。
  • MQTT、CoAP、HTTP 各自是怎么诞生的?——MQTT 为低带宽而生,CoAP 为 UDP 而生,HTTP 为互联网而生。
  • 它们的核心定位是什么?——MQTT 适合海量设备数据上报,CoAP 适合资源受限设备控制,HTTP 适合原型和管理。

下一章,我们会深入 MQTT 的协议细节,看看那个 2 字节的报文到底是怎么设计的。到时候我会分享一个我在车联网项目里用 MQTT 踩过的坑——嗯,那个坑让我加了一周的班。

我们下章见。