本页目录
MQTT
为低带宽、高延迟、不可靠的 IoT 网络设计的最简洁 pub/sub 协议——QoS 0/1/2 提供三级递送保证,retained message 实现状态同步,will message 处理离线通知。MQTT 5.0 增加了 session expiry 和 shared subscriptions 等企业特性。
概述
MQTT(Message Queuing Telemetry Transport, 1999/2013)是最简洁的 pub/sub 消息协议,专门为低带宽、高延迟、不可靠的 IoT 网络设计。发布者不直接连订阅者——所有消息经过 broker(Mosquitto/EMQX),topic 支持通配符过滤。QoS 0/1/2 提供三种递送保证,retained message 和 will message 实现状态同步和离线通知。MQTT 5.0(2019)增加了 session expiry、shared subscriptions 等企业特性。
模型
MQTT 是极简的 pub/sub 协议,专为低带宽、高延迟、不可靠网络设计 (IoT, M2M)。所有消息经过 central broker (Mosquitto, EMQX):
QoS
MQTT CONNECT/CONNACK
CONNECT:
protocol_name: "MQTT" (v3.1.1) or "MQIsdp" (v3.1)
protocol_level: 4 (v3.1.1) or 5 (v5.0)
flags: clean_session, will_flag, will_qos, will_retain, password_flag, username_flag
keep_alive: 秒 (publisher 在 keep_alive 秒内必须发 PINGREQ)
client_id: 唯一 ID (或空 → broker 分配, 仅 v5.0)
[will_topic, will_message] ← 如果 will_flag=1
[username, password]
CONNACK:
session_present: 0 (新 session), 1 (已有 session 恢复)
return_code: 0=success, 1-5=失败原因
Will Message
客户端连接时声明: "如果我意外断开, broker 发这条消息": CONNECT will_topic + will_message + will_retain。客户端异常断开 (TCP close 或 keepalive timeout) → broker 发布 will message。
MQTT 5.0 改进
- Session expiry: 断开后 session 保留多久 (队列中的 QoS 1/2 消息继续)
- Message expiry: 单条消息 TTL
- Shared subscriptions: 多个 subscriber 负载均衡 (round-robin)
- Reason codes: 所有 ACK 消息含具体原因
- Topic aliases: 1/2-byte alias 替完整 topic → 省带宽
参考
- broker: Eclipse Mosquitto (C), EMQX (Erlang), VerneMQ
- 工具:
mosquitto_pub -h broker -t topic -m "hello", MQTT Explorer
Keywords: MQTT, pub/sub, QoS, retained, will, Mosquitto, IoT, topic filter