软件工程(七):MQTT协议

概念

特性 描述
协议类型 应用层协议(基于 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 保持连接机制

  • 使用 PINGREQPINGRESP 消息定期心跳检查
  • 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 连接、发布、订阅

你可能感兴趣的:(#,软件工程,MQTT)