MQTT协议介绍,MQTT是物联网标准消息传递协议(物联网人必懂)
创始人
2025-07-02 08:50:49
0

图片

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在1999年发布,现已是用于物联网 (IoT) 的 OASIS 标准消息传递协议。MQTT 最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

MQTT 协议是轻量、简单、开放和易于实现的,这些特点使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT 协议运行在传输控制协议/互联网协议 (TCP/IP) 堆栈之上,提供有序、无损、双向连接。MQTT 协议在处理网络连接不稳定、带宽有限的环境中有较强的适应性,常被用于智能家居、医疗设备、卫星通信等场景中。

为什么选MQTT?

MQTT 协议具有以下特点:

  • 轻量且高效:MQTT 客户端的代码量非常小,对系统资源的需求也较低,因此非常适合在小型微控制器上使用。此外,MQTT 消息的头部字段较小,使得网络带宽得到优化,进一步提高传输效率。
  • 支持双向通信:MQTT 协议支持设备到云端以及云端到设备之间的消息传递。这使得向大量设备广播消息变得相对简单。
  • 可扩展性:MQTT 协议可以扩展以连接数百万个物联网设备,满足大规模设备部署和数据采集的需求。
  • 可靠的消息传递:对于许多物联网应用来说,消息传递的可靠性至关重要。MQTT 协议为此提供了三个定义的服务质量级别:最多一次(QoS 0)、至少一次(QoS 1)和恰好一次(QoS 2),以满足不同场景下对消息传递可靠性的需求。
  • 支持不可靠网络:许多物联网设备通过移动蜂窝网络进行连接,这种网络环境通常是不稳定的。然而,MQTT 协议通过持久会话的设计,减少了客户端与代理之间重新建立连接的时间和通信延迟,从而在不可靠网络环境下提供了较为可靠的消息传输。
  • 安全:MQTT 协议可以轻松使用 TLS(传输层安全协议)对传输的消息进行加密,并支持 OAuth 等现代身份验证协议对客户端进行身份验证,确保了消息传输的安全性和客户端身份的合法性。

常见名词术语解释

1.MQTT Broker

MQTT Broker 是消息中间件,它负责接收发布者发送的消息,并根据订阅者订阅的主题将消息转发给订阅者。它管理客户端连接、处理订阅和退订,并保证按照指定的服务质量(QoS)级别发送消息。MQTT 是一种开放的轻量级机器对机器协议,专为物联网交互设计。在 MQTT 网络中,MQTT Broker 是协调所有 MQTT 代理之间的交互的服务器。MQTT 客户端可以是发布者,也可以是订阅者,或者两者都是。MQTT 架构可以是集中式的,也可以是分布式的,以适应不同的应用场景。

2.Bridge

Bridge在MQTT协议中是指桥接,是指将两个MQTT代理(Broker)连接起来,使得它们可以相互通信,以实现消息的互通。

当两个Broker被桥接后,它们可以作为接入节点提供服务,对外可配置一个虚拟IP或域名来访问。这种桥接方式可以实现负载均衡和故障转移,提高系统的可用性和稳定性。

在配置Bridge时,需要指定消息同步的Topic,而不是同步所有Topic来规避流量放大的问题,更推荐通过垂直切分的方案进行分流。

MQTT协议中的Bridge主要有以下特点:

  • 可以实现两个MQTT代理之间的消息互通,保证消息的可靠性和稳定性。
  • 可以配置虚拟IP或域名来访问,提高系统的可用性和可维护性。
  • 可以实现负载均衡和故障转移,提高系统的可用性和稳定性。
  • 可以指定消息同步的Topic,避免流量放大的问题。
  • 更推荐通过垂直切分的方案进行分流,以进一步提高系统的可用性和稳定性。

3.MQTT Client

MQTT Client 是指运行MQTT库并通过网络连接到MQTT broker的设备,这些设备可以是微控制器,也可以是成熟的服务器,它实现了MQTT协议的客户端。在MQTT协议中,一个典型的客户端会有以下主要操作:发布消息到某个topic、从某个topic订阅消息、处理接收到的消息、对接收到的QoS 1或QoS 2消息进行确认。MQTT协议的客户端实现非常简单直接。

4.RSMB

RSMB(Very Small Message Broker)是IBM开发的一个轻量级消息代理,主要用于MQTT协议的C/S(客户端/服务器)架构中的消息传输服务。之后,Eclipse Foundation将RSMB接纳为其下的一个项目,并将其命名为Eclipse Mosquitto。

Eclipse Mosquitto是一个开源的消息代理,它实现了MQTT协议的版本3.1和3.1.1,被设计用于从低功耗的单板计算机到完整的服务器等各种设备。MQTT协议使用发布/订阅模型进行消息传递,这种模型被证明在许多场景下,特别是物联网(IoT)应用中,都非常有效。

5.LWT

Last Will and Testament (LWT) 是 MQTT 协议中用于处理非正常断开连接时的一种机制。

LWT 可以被理解为在连接到 MQTT Broker 时提到的遗嘱。当 Broker 检测到 Client 非正常地断开连接的时候,就会向遗嘱主题里面发布一条消息。遗嘱相关的设置是在建立连接的时候,在 CONNECT 数据包里面的 Variable header (可变头与) Payload (有效载荷) 中指定的。

6.M2M

机器对机器Machine to machine (M2M)是指数据从一台终端传送到另一台终端,也就是机器与机器的对话。M2M应用系统构成有智能化机器、M2M硬件、通信网络、中间件。M2M应用领域有家庭应用领域、工业应用领域、零售和支付领域、物流运输行业、医疗行业等。

7.IoT

物联网(Internet of Things,IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络。

8.QoS

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)中设计了保证消息稳定传输的机制,包括消息应答、存储和重传。在此机制下,提供了三种不同层次的服务质量(Quality of Service,QoS)等级:

  • QoS0,即至多一次(At most once)。这种等级下,发送方(Sender)会尽力向接收方(Receiver)发送消息,但消息的传递流程只包括一次。如果发送失败,则不会重试。这种QoS等级适用于对消息传递可靠性要求不高,但对响应速度要求较高的场景。
  • QoS1,即至少一次(At least once)。这种等级下,发送方会确保消息至少被传递一次到接收方。在某些情况下,消息可能会被多次传递。接收方可以通过消息ID或其他标识符来判断是否已经接收过某个消息,从而处理重复接收的情况。这种QoS等级适用于需要确保消息被至少传递一次的场景,但允许消息的重复传递。
  • QoS2,即确保只有一次(Exactly once)。这种等级下,发送方会确保每个消息只被传递一次到接收方。在某些情况下,消息可能会被延迟传递。接收方可以依赖某种机制(如数据库事务)来确保某个消息的处理不会重复。这种QoS等级适用于需要确保每个消息只被传递一次的场景,并且对消息的延迟传递有一定的容忍度。

不同的QoS等级为MQTT的应用提供了不同的选择和灵活性,可以根据实际需求和网络环境来选择最合适的QoS等级。需要注意的是,QoS是Sender和Receiver之间的协议,而不是Publisher和Subscriber之间的协议。

常见问题

1.什么是 MQTT?

MQTT 是 IoT 连接的 OASIS 标准。它是一种发布/订阅、极其简单且轻量级的消息传递协议,专为受限设备和低带宽、高延迟或不可靠的网络而设计。设计原则是最大限度地减少网络带宽和设备资源需求,同时尝试确保可靠性和一定程度的交付保证。这些原则也使该协议成为连接设备的“物联网”世界以及带宽和电池电量非常宝贵的移动应用的理想选择。

2.MQTT 是谁发明的?

MQTT 由 IBM 的 Andy Stanley-Clark 博士和 Arcom(现为 Eurotech)的 Arlen Nipper 于 1999 年发明。

3.MQTT用在什么地方?

自 1999 年以来,MQTT 已在各个行业广泛实施。

4.MQTT 是标准吗?

v5.0 和 v3.1.1 现已成为 OASIS 标准(v3.1.1 也已获得 ISO 批准)。

5.是否有可供 MQTT 使用的标准端口?

是的。TCP/IP 端口 1883 已由 IANA 保留用于 MQTT。TCP/IP 端口 8883 也已注册,用于通过 SSL 使用 MQTT。

6.MQTT 支持安全性吗?

在协议 V3.1 中,您可以使用 MQTT 数据包传递用户名和密码。网络上的加密可以使用 SSL 进行处理,独立于 MQTT 协议本身(值得注意的是,SSL 不是最轻的协议,并且确实会增加大量的网络开销)。可以通过应用程序加密其发送和接收的数据来增加额外的安全性,但这不是协议内置的东西,以便保持简单和轻量级。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...