概念
特性 | 描述 |
---|
协议类型 | 应用层协议(基于 TCP/IP) |
通信模式 | 发布/订阅(Publish/Subscribe) |
网络开销小 | 报文头仅 2 字节起,非常轻量 |
保持长连接 | 使用 Keep Alive 机制,适合持续连接的设备 |
面向物联网 | 广泛用于智能家居、传感器网络、车联网、工业自动化等 |
通信模型
三个核心角色:
角色 | 说明 |
---|
Client(客户端) | 连接到Broker,发布消息或订阅消息 |
Broker(消息代理) | 中心节点,负责接收、过滤、分发消息 |
Topic(主题) | 类似于路径字符串,如 home/temperature ,用于消息分类 |
通信过程:
+---------+ publish(msg) +--------+ deliver(msg) +---------+
| ClientA | -------------------------> | Broker | -------------------------> | ClientB |
| | topic: /sensor/temp | | topic: /sensor/temp | |
+---------+ +--------+ +---------+
- ClientA 发布消息到主题
/sensor/temp
- Broker 接收到消息后,将其转发给所有订阅该主题的客户端(如ClientB)
消息结构
MQTT 报文头部非常小,典型的报文格式包括:
+-----------+-------------+----------------+
| FixedHeader | VariableHeader | Payload |
+-----------+-------------+----------------+
- FixedHeader:消息类型、QoS 等信息,占 2 字节起
- VariableHeader:可选,如 Topic 名称、消息标识符
- Payload:消息实际内容
报文类型(固定14种)
报文类型 | 描述 |
---|
CONNECT | 客户端请求建立连接 |
CONNACK | 连接确认 |
PUBLISH | 发布消息 |
PUBACK/PUBREC/… | QoS确认机制相关报文 |
SUBSCRIBE | 订阅主题 |
SUBACK | 订阅确认 |
UNSUBSCRIBE | 取消订阅 |
PINGREQ/PINGRESP | 保活机制 |
DISCONNECT | 客户端断开连接 |
QoS 服务质量等级(Quality of Service)
等级 | 含义 | 说明 |
---|
0 | 至多一次(at most once) | 不保证送达,可能丢失 |
1 | 至少一次(at least once) | 保证至少送达一次,可能重复 |
2 | 仅一次(exactly once) | 保证仅送达一次,最安全但最慢 |
MQTT 保持连接机制
- 使用
PINGREQ
和 PINGRESP
消息定期心跳检查 Keep Alive
超时时,Broker 可以主动断开连接
安全机制
机制 | 说明 |
---|
用户名密码 | Client可在 CONNECT 报文中提供 |
TLS/SSL | 支持基于 TLS 加密的连接 |
ACL | Access Control List 控制发布/订阅权限 |
与其他协议比较
协议 | 优点 | 缺点 |
---|
MQTT | 轻量、低带宽、实时性好 | 需要保持长连接 |
HTTP | 易用、成熟、兼容性强 | 不适合实时推送 |
CoAP | 更轻、更适合资源受限设备 | 兼容性差、不如MQTT通用 |
AMQP | 企业级功能强 | 复杂、开销大 |
常用工具/服务器
名称 | 类型 | 说明 |
---|
Mosquitto | Broker | 轻量级、开源、高性能 MQTT Broker |
EMQX | Broker | 支持百万级连接,功能强大 |
HiveMQ | 商业/企业级 | 可视化管理、集群支持 |
MQTT.fx | 客户端工具 | 测试 MQTT 连接、发布、订阅 |