本节摘要:在 TCP/UDP 之上,应用层协议决定了"设备之间怎么对话"。本节对比 HTTP、MQTT、CoAP 三套主流的语义偏好、重量与适用对象,给出一个快速定位口诀,为第 3、4 章深挖 MQTT 与 CoAP 做铺垫。
传输层定了运输方式,应用层则管"话怎么说"。物联网应用层有老中青三代代表:传统老将 HTTP、消息派 MQTT、道场新锐 CoAP。三者都跑在 IP 之上,却说着完全不同的三种话。
| 维度 | HTTP | MQTT | CoAP |
|---|---|---|---|
| 传输承载 | TCP | TCP | UDP |
| 语义 | 请求响应(GET/POST/PUT/DELETE) | 发布订阅以主题路由 | 请求响应 + 可观察(Observe) |
| 报文风格 | 文本头重 | 二进制头小 | 二进制头极小 |
| 心跳/保活 | 无内建 | 有 KeepAlive | 有(CON 收发即保活) |
| 解耦 | 点对点 | 发布者与订阅者解耦 | 订阅者观察资源 |
| 设备友好度 | 低(头部开销) | 中 | 高(最省) |
| 典型场景 | 云看板、管理接口 | 遥测控制、工业、车联网 | 受限传感、楼宇、低功耗 |
不是说 HTTP 不能用于 IoT——至少数据上云、管理面接口它仍是主力。麻烦在于给受限设备端用时,报文头部几百字节的文本开销、每次请求都要断开重建连接的癖性,会放大功耗与带宽。所以真正贴着传感器的设备,多半转向 MQTT 或 CoAP,只在"上云那一段"交给 HTTP 网关去转。
三者里最常在设备端被比较的是 MQTT 与 CoAP。用一个直观例子收束三者的站位:
有人以为 CoAP"既然最省电就处处优先",但 CoAP 的省电建立在"平时不保持连接、被 OF(Observe)时服务器主动推"这套设计上,它并不擅长海量双向实时控制。反过来 MQTT 虽可靠,但强依赖 Broker 长连接,对"连 IP 都费劲"的野外终端(比如地下管道)并不合适——那是第 5 章 LoRaWAN 的领域。认清三者的射程边界,远比记住口号重要。
💡 关键直觉:选应用层协议别只比"省不省",要比"设备能不能常驻线、要不要双向、REST 还是主题"——这三点几乎决定 MQTT 与 CoAP 的归宿。
说 CoAP 省电,光看口号没用,最直观的是比较"发一条最小状态请求"到底带多少个字节。估一下三种报文最小头的量级:
| 协议 | 最小请求头量级 | 开销来源 | 对受限节点的含义 |
|---|---|---|---|
| HTTP/1.1 | 动不动上百字节文本 | 状态行 + 大量 Header 字段 | 一帧遥测被头部淹没 |
| MQTT | 头很小(固定头几字节 + 主题) | 主题名与 QoS 标志 | 足以把遥测说清楚 |
| CoAP | 极小(4 字节固定头 + 方法) | 紧凑二进制选项 | 最省带宽与能量 |
记住这个量级差,就能解释 2.3 的一个常见现象:同样上传一条气温,HTTP 要为一个有效十几位的 JSON 再搭几百字节的车票,CoAP 则几乎贴着有效载荷走。头部开销在"发得越勤、包越小"的遥测场景里会被反复放大,这也是为什么"贴身传感器几乎清一色避开 HTTP"。
既然 MQTT 走 TCP、CoAP 走 UDP,两者背后的成本差异也在 2.2 基础上深化:MQTT 把可靠性外包给 TCP,换回应用层的简单(QoS 语义与序号由传输层兜底);CoAP 必须自己在报文里扛 CON/Ack、超时重发与去重。于是 CoAP 的字段要比 MQTT 多做不少"可靠账"——这既是它叫"受限应用协议"的原因,也是它与 MQTT 在整个设计哲学上分道扬镳的起点。看懂这层,第 3 章走后 MQTT 理所当然"重而不慌",第 4 章看完 CoAP 才会明白它"省而不简"。
三个协议往往不是互相取代,而是在同一套系统里各占一段。用一个楼宇能耗系统把三国排位看明白:楼里的温湿度传感大多用 CoAP,按需读写、省电躺着;楼控网关把采集的结果整理后,用 MQTT 推到云端的订阅主题,报表、工单、大屏都能订阅同一份数据;最终运维人员在浏览器上打开 HTTP 页面,看的就是云端渲染好的看板与告警。三个协议从设备端一路排到人机界面,各管一棒、彼此接力——这比"把整家楼都塞进一种协议"现实得多,也正面回答了许多人"是不是只能二选一"的困惑。
协议能并存,关键在于"谁和谁说话用什么语言"。工程上常用两条线来划界,避免混乱:设备到网关这一段,多半贴传感器,优先 CoAP 或 MQTT 的轻量侧;网关到云端这一段,往往已经是对外、要曝光接口,常用 MQTT(对外订阅)或 HTTP(对外 API)。至于"网关上要不要做协议翻译",就是第 6 章桥接的专研内容——本节只把"边界画在哪"的意识先立起来:多个协议并存不是缺陷,而是物联系统天然的分层现实,划清边界比强求统一更重要。
把本节浓缩成一句话供你在遇到"三选一"时默念:问它"能不能常驻线"→ 能,看是不是"要双向可靠订阅"(MQTT);不能,看是不是"要 REST 按需读写"(CoAP);既不是设备而是人看,那就 HTTP。 需要双向可靠控制且能常驻 → MQTT;受限省电按需 → CoAP;人读的页面/管理接口 → HTTP。
💡 收束直觉:MQTT 偏向"连接型、双向、订阅";CoAP 偏向"消息型、按需、REST";HTTP 留给"人机接口"。三者边界一旦画清,第 3、4 章的细读就有了明确坐标。
从下一章起,我们正式进入协议内部:第 3 章把 MQTT 的报文、QoS、握手拆到字节级。