博客
关于我
一文读懂MQTT协议
阅读量:156 次
发布时间:2019-02-28

本文共 1272 字,大约阅读时间需要 4 分钟。

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,由IBM于1999年发布,构建于TCP/IP协议上。MQTT以其高效低资源消耗的特点,在物联网、小型设备和远程设备通信中应用广泛。本文将深入分析MQTT的设计原则、特性以及数据包结构。

1. MQTT的设计原则

MQTT设计特别考虑了物联网环境的特殊需求,遵循以下原则:

  • 精简设计:去除可有可无的功能,保持协议简洁易于实现。
  • 发布/订阅模式:支持消息在传感器之间的流动,减少系统耦合。
  • 动态主题创建:允许用户自定义主题,支持零运维模式。
  • 资源节约:通过最小化传输量和头部大小,提升网络传输效率。
  • 适应性网络:考虑高延迟和不稳定网络,确保消息可靠传输。
  • 会话控制:支持连续会话管理,适合多次连接场景。
  • 低计算能力支持:设计为低功耗,适合嵌入式设备。
  • 服务质量管理:提供多级消息可靠性,满足不同场景需求。
  • 灵活性:不强制数据格式,支持任意类型消息传输。
  • 2. MQTT的主要特性

    MQTT的核心特性包括:

  • 发布/订阅模式:支持一对多的消息发布,解耦应用程序。
  • 消息中继:屏蔽负载过重的消息,优化网络流量。
  • 基于TCP/IP:利用标准网络协议,确保广泛兼容性。
  • 消息质量等级:提供三种服务质量(QoS):至多一次、至少一次和只有一次。
  • 小型传输:固定头部仅2字节,减少网络负担。
  • 遗言机制:通过Last Will和Testament机制通知离线设备。
  • 3. MQTT协议数据包结构

    MQTT数据包由固定头、可变头和消息体三部分组成:

  • 固定头(Fixed header):包含数据包类型和标识位。

    • 数据包类型:由4位字段确定,包括CONNECT、PUBLISH、SUBSCRIBE等。
    • 标识位:包含DUP、QoS、RETAIN等控制位。
  • 可变头(Variable header):根据数据包类型,包含额外信息。

    • 通常用于PUBLISH、SUBSCRIBE等有状态消息。
  • 消息体(Payload):包含实际消息内容,包括 CONNECT中的客户端信息、SUBSCRIBE的主题列表等。

  • 4. MQTT的核心组件

    MQTT系统包含以下关键组件:

    • 发布者(Publisher):发送消息到主题。
    • 代理(Broker):接收并路由消息,支持多个客户端。
    • 订阅者(Subscriber):监听特定主题的消息。
    • 会话(Session):维护客户端与代理的连接状态。

    5. MQTT消息传输流程

  • 连接建立:客户端通过TCP连接到代理。
  • 订阅主题:客户端向代理发送SUBSCRIBE消息,代理确认。
  • 发布消息:发布者向代理发布消息,代理转发给订阅者。
  • 消息质量控制:根据QoS级别确保消息可靠传输。
  • 断开连接:客户端或代理断开连接,释放资源。
  • MQTT协议通过简洁的设计和灵活的特性,成为物联网和嵌入式设备通信的首选方案。其适应性强、资源消耗低,能够在各种复杂网络环境中稳定工作。

    转载地址:http://spuj.baihongyu.com/

    你可能感兴趣的文章
    Node-RED中使用node-red-contrib-image-output节点实现图片预览
    查看>>
    Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中使用range范围节点实现从一个范围对应至另一个范围
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>
    Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
    查看>>
    Node-RED中建立TCP服务端和客户端
    查看>>
    Node-RED中建立Websocket客户端连接
    查看>>
    Node-RED中建立静态网页和动态网页内容
    查看>>
    Node-RED中解析高德地图天气api的json数据显示天气仪表盘
    查看>>
    Node-RED中连接Mysql数据库并实现增删改查的操作
    查看>>
    Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
    查看>>
    Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件
    查看>>
    Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
    查看>>
    Node-RED怎样导出导入流程为json文件
    查看>>
    Node-RED订阅MQTT主题并调试数据
    查看>>
    Node-RED通过npm安装的方式对应卸载
    查看>>
    node-request模块
    查看>>
    node-static 任意文件读取漏洞复现(CVE-2023-26111)
    查看>>
    Node.js 8 中的 util.promisify的详解
    查看>>