MQTT(Message Queuing Telemetry Transport,消息队列遥测传输) 是 OASIS 发布的轻量级、基于发布 / 订阅模式的物联网通信标准,专为低带宽、高延迟、资源受限的嵌入式设备设计OASIS Docs。当前主流为 MQTT 3.1.1(2014)MQTT 5.0(2019) 两个版本

核心架构与角色

采用 客户端 - 服务器(Broker) 发布 / 订阅模型:

  • 发布者(Publisher):发送消息到主题(Topic),不关心接收者
  • 代理(Broker):服务器,负责接收、存储、路由消息
  • 订阅者(Subscriber):订阅主题,接收匹配的消息
  • 主题(Topic):消息的路由标签(如 sensor/temp/livingroom),支持通配符 +(单层)、#(多层)

核心特性(OASIS 标准定义)

  1. 轻量、低开销

    • 最小固定头部仅 2 字节
    • 协议简单,嵌入式实现容易
  2. 三种消息 QoS 等级OASIS Docs

    • QoS 0 (At most once):最多一次,发完即忘(传感器数据)
    • QoS 1 (At least once):至少一次,确认重发(普通控制)
    • QoS 2 (Exactly once):严格一次,防重复(计费 / 关键指令)
  3. 遗嘱(Will)与保留消息(Retain)

    • 遗嘱:异常断开时 Broker 自动发布遗言
    • 保留:Broker 保存最新一条消息,新订阅者立即收到
  4. 心跳(Keep-Alive)

    • 客户端定时发 PINGREQ,维持长连接,检测离线

报文结构(所有消息通用)

固定头(必选) + 可变头(可选) + 负载(Payload,可选)

  • 固定头(1–5 字节)

    • 第 1 字节:高 4 位 =报文类型(CONNECT/PUBLISH 等),低 4 位 = 标志(DUP/QoS/RETAIN)
    • 后续字节:剩余长度(可变长编码)
  • 可变头:消息 ID、主题名、属性等

  • Payload:应用数据(二进制、JSON、文本等)OASIS Docs

14 种控制报文(OASIS 定义)

  • 连接类:CONNECT、CONNACK、DISCONNECT
  • 消息类:PUBLISH、PUBACK、PUBREC、PUBREL、PUBCOMP
  • 订阅类:SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK
  • 心跳类:PINGREQ、PINGRESP

典型通信流程

  1. 连接:客户端 → CONNECT → Broker → CONNACK
  2. 订阅:客户端 → SUBSCRIBE → Broker → SUBACK
  3. 发布:发布者 → PUBLISH → Broker → 推送给所有订阅者
  4. 断开:客户端 → DISCONNECT → 关闭连接

MQTT 3.1.1 vs 5.0(OASIS 标准演进)

特性 3.1.1 5.0
错误反馈 仅连接成功 / 失败 Reason Code 细化错误原因
会话管理 Clean Session 布尔 会话超时、消息过期
主题别名 不支持 缩短主题名,减少带宽
共享订阅 不支持 多客户端负载均衡
用户属性 不支持 自定义键值对元数据
请求 / 响应 不支持 支持双向 RPC 模式
安全 基础认证 SCRAM、增强认证、权限控制

应用场景

  • 智能家居、工业物联网(IIoT)
  • 车联网、智能表计(水电气)
  • 医疗设备、环境监测、智慧城市
  • 低带宽 / 卫星 / 移动网络通信

安全要点(OASIS 建议)

  • 传输层:MQTT over TLS/SSL(端口 8883)
  • 认证:用户名 / 密码、Token、X.509 证书
  • 授权:Broker 级 ACL 控制主题读写权限
  • ** payload 加密 **:敏感数据应用层加密

总结

MQTT 是物联网事实标准:轻量、可靠、支持分级 QoS、发布 / 订阅解耦、易嵌入式实现OASIS Docs。3.1.1 稳定通用,5.0 功能更强、更适合大规模 IoT

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐