MQTT协议简介和基本概念

一、MQTT协议

1、简介

MQTT(MQ Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。

MQTT是机器对机器(M2M)/物联网(IoT)连接协议。

2、MQTT的特点:

  • 开放消息协议,简单容易实现
  • 消息QoS支持,可靠传输保证(设备网络环境复杂)
  • 发布订阅模式,一对多消息发布
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量(轻量且省带宽)
  • 数据无关(不关心 Payload 数据格式)
  • 有持续地会话感知能力(时刻知道设备是否在线)

3、应用场景:

MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。

  • 物联网M2M通信,物联网大数据采集
  • Android消息推送,WEB消息推送
  • 移动即时消息,例如Facebook Messenger
  • 智能硬件、智能家具、智能电器
  • 车联网通信,电动车站桩采集
  • 智慧城市、远程医疗、远程教育
  • 电力、石油与能源等行业市场

4、MQTT 5.0 与 3.1.1

在 MQTT 3.1.1 发布并成为 OASIS 标准的四年后,MQTT 5.0 正式发布。这是一次重大的改进和升级,它的目的不仅仅是满足现阶段的行业需求,更是为行业未来的发展变化做了充足的准备。

MQTT 5.0 在 3.1.1 版本基础上增加了会话/消息延时、原因码、主题别名、用户属性、共享订阅等更加符合现代物联网应用需求的特性,提高了大型系统的性能、稳定性与可扩展性。目前,MQTT 5.0 已成为绝大多数物联网企业的首选协议,我们建议初次接触 MQTT 的开发者直接使用该版本。

MQTT v5.0现在成为了OASIS官方标准:

OASIS已经发布了官方的MQTT v5.0标准 - 这对于已经为物联网(IoT)所用的消息传输协议来说,这是一个改进和功能的巨大飞跃。基于早期的v3.1.1标准,它具有重要的更新,同时最大限度地减少与现有版本的不兼容性。

新版本的亮点包括:

  • 更好的错误报告 - 特别是,在发布的响应中添加了原因代码(PUBACK / PUBREC)。MQTT起源于输油管道沿线的传感器等使用案例 - 如果它们的消息发布未能传输,则传感器将不采取任何措施。然而,MQTT的用例现在要广泛得多,如果数据没有成功传输,手机上的应用程序可能会想要警告用户。返回代码现在出现在所有确认中(以及包含人类可读错误诊断的可选原因字符串)。
  • 共享订阅 - 如果订阅上的消息速率很高,则可以使用共享订阅在多个接收客户端之间对消息进行负载平衡。
  • 消息属性 - 消息标题中的元数据。这些用于实现此列表中的其他功能,但也允许用户定义的属性,例如通过告知接收方使用哪个密钥来解密消息内容来协助消息加密
  • 消息过期 - 如果消息无法在用户定义的时间段内传递,则可以选择丢弃消息。
  • 会话到期 - 如果客户端未在用户定义的时间段内连接,则可以丢弃状态(例如,订阅和缓冲的消息)而无需进行清理。
  • 主题别名 - 允许将消息中的主题字符串替换为单个数字,从而减少发布者重复使用相同主题时需要传输的字节数。
  • Will Delay - 如果客户端断开连接的时间超过用户定义的时间段, 则允许发布消息。允许有关重要客户端应用程序中断的通知, 而不会被误报淹没。
  • 允许的功能发现 - 在连接开始时,可以传输最大数据包大小和(QoS> 0)消息的数量限制,以通知客户端允许执行的操作。 新功能的完整列表见标准的附录C。

5、为什么 MQTT是适用于物联网的最佳协议?

在如此大规模的物联网需求下,海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了巨大的挑战。对于物联网协议来说,必须针对性地解决物联网设备通信的几个关键问题:网络环境复杂而不可靠、内存和闪存容量小、处理器能力有限。

MQTT 协议正是为了应对以上问题而创建,经过多年的发展凭借其轻量高效、可靠的消息传递、海量连接支持、安全的双向通信等优点已成为物联网行业的首选协议。

所以,随着物联网(IoT)的快速发展,MQTT协议被许多公司和开发人员广泛使用。

6、MQTT vs HTTP

  • MQTT 的最小报文仅为 2 个字节,比 HTTP 占用更少的网络开销。
  • MQTT 与 HTTP 都能使用 TCP 连接,并实现稳定、可靠的网络连接。
  • MQTT 基于发布订阅模型,HTTP 基于请求响应,因此 MQTT 支持双工通信。
  • MQTT 可实时推送消息,但 HTTP 需要通过轮询获取数据更新。
  • MQTT 是有状态的,但是 HTTP 是无状态的。
  • MQTT 可从连接异常断开中恢复,HTTP 无法实现此目标。

二、MQTT 的工作原理

了解 MQTT 的工作原理,首先需要掌握以下几个概念:

  • 发布-订阅模式、
  • MQTT Broker、
  • MQTT 客户端、
  • 主题、
  • QoS。

1、发布-订阅模式

MQTT 基于发布订阅模式,它解耦了消息的发送方(发布者)和接收方(订阅者),引入了一个中间代理的角色来完成消息的路由和分发。

发布者和订阅者不需要知道彼此的存在,他们之间唯一的联系就是对消息的一致约定,例如消息将使用什么主题、消息将包含哪些字段等等。这让 MQTT 的通信更加灵活,因为我们可以随时动态地增加或减少订阅者和发布者。

通过发布订阅,我们可以轻易地实现消息的广播、组播和单播。

关于 MQTT 发布订阅模式的更多介绍,我们可以参考 MQTT 系列博客中的 发布订阅模式介绍:https://www.emqx.com/zh/blog/mqtt-5-introduction-to-publish-subscribe-model

2、MQTT Broker

在发布消息的客户端和订阅的客户端之间充当中介,将所有接收到的消息转发到匹配的订阅客户端。所以有时我们也会直接将服务端称为 Broker。

MQTT Broker 是负责处理客户端请求的关键组件,包括建立连接、断开连接、订阅和取消订阅等操作,同时还负责消息的转发。一个高效强大的 MQTT Broker 能够轻松应对海量连接和百万级消息吞吐量,从而帮助物联网服务提供商专注于业务发展,快速构建可靠的 MQTT 应用。

3、MQTT 客户端

使用 MQTT 协议连接到 MQTT 服务端的设备或应用程序。它既可以是发布者,也可以是订阅者,也可以具备这两种身份。

任何运行 MQTT 客户端库的应用或设备都是 MQTT 客户端。例如,使用 MQTT 的即时通讯应用是客户端,使用 MQTT 上报数据的各种传感器是客户端,各种 MQTT 测试工具也是客户端,比如:MQTTX客户端工具。

4、主题

MQTT 协议根据主题来转发消息。主题被用来标识和区分不同的消息,它是 MQTT 消息路由的基础。

发布者可以在发布时指定消息的主题,订阅者则可以选择订阅自己感兴趣的主题来接收相关的消息。

主题通过 / 来区分层级,类似于 URL 路径。例如:

chat/room/1

sensor/10/temperature

sensor/+/temperature

MQTT 主题支持以下两种通配符:+ 和 #。

  • +:表示单层通配符,例如 a/+ 匹配 a/x 或 a/y。
  • #:表示多层通配符,例如 a/# 匹配 a/x、a/b/c/d。

注意:通配符主题只能用于订阅,不能用于发布。

关于 MQTT 主题的更多详情,请参阅文章通过案例理解 MQTT 主题与通配符:https://www.emqx.com/zh/blog/advanced-features-of-mqtt-topics

5、QoS

MQTT 定义了三种 QoS 等级,来分别保证在不同网络环境下的消息可靠性。每条消息都可以在发布时独立设置自己的 QoS。

  • QoS 0:消息最多交付一次。如果当前客户端不可用,它将丢失这条消息(消息可能丢失);
  • QoS 1:消息至少交付一次,消息可以保证到达,但是可能重复;
  • QoS 2:消息只交付一次,消息保证到达,并且不会重复。

QoS 越大,消息的传输复杂程度也越高,我们需要根据实际场景来选择合适的 QoS。

关于 MQTT QoS 的更多详情,请参阅文章 MQTT QoS 0, 1, 2 介绍:https://www.emqx.com/zh/blog/introduction-to-mqtt-qos

三、MQTT 的工作流程

了解了 MQTT 的基本组件之后,让我们来看看它的一般工作流程:

  1. 客户端使用 TCP/IP 协议与 Broker 建立连接,可以选择使用 TLS/SSL 加密来实现安全通信。客户端提供认证信息,并指定会话类型(Clean Session 或 Persistent Session)。
  2. 客户端既可以向特定主题发布消息,也可以订阅主题以接收消息。当客户端发布消息时,它会将消息发送给 MQTT Broker;而当客户端订阅消息时,它会接收与订阅主题相关的消息。
  3. MQTT Broker 接收发布的消息,并将这些消息转发给订阅了对应主题的客户端。它根据 QoS 等级确保消息可靠传递,并根据会话类型为断开连接的客户端存储消息。

更多信息查看官方文档。

– 求知若饥,虚心若愚。

猜你喜欢

转载自blog.csdn.net/qq_42402854/article/details/132645388