4_4_MQTT 协议讲解|学习笔记

简介: 快速学习4_4_MQTT 协议讲解。

开发者学堂课程【HaaS 物联网应用开发课程4_4_MQTT 协议讲解】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/801/detail/13838


4_4_MQTT 协议讲解

 

内容介绍:

一、MQTT 基本介绍

二、MQTT 协议细节

 

一、MQTT 基本介绍

1. MQTT 简介

MQTT ( Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅 ( publish/subscribe )模式的"轻量级"通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在1999年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

image.png

如图,MQTT 作为左侧发布端,通过 MQTT Broker 发送给右侧订阅端。

2. 物联网常见协议介绍

物联网最常用的协议主要有下面两种:

MQTT (Message Queuing Telemetry Transport,消息队列遥测传输)

·最早由 IBM 开发的,专门为计算能力有限,工作在低带宽,不可靠网络的控制设备进行通信而设计的

·基于 TCP/IP,开销小,支持 QoS

·常连接,支持多对多的协议

COAP (Constrained Application Protocol,受限制的应用协议)·基于 UDP,采用请求响应的工作模式

·无连接,只支持一对一

一般 loT 与云端通信用 MQTT 协议要多一些,局域网通信一般采用 CoAP 协议

其余常用的网络通信协议,如 http,https 等协议很复杂,对计算能力要求较高,不适合计算能力有限的 loT 设备,在 loT 领域应用相对比较少

3.MQTT 和 COAP 帧结构介绍

image.png

Payload length <128时

- payload 占比为 payload/(payload + variable header +3)

-在 variable header=0时,payload 占比介于25%~97.7%

image.png

Payload length <128时

- payload 占比为 payload/(4 + token + options 1 + payload)

-在 tokenloptions 长度为0时,payload 占比介于20%~96.2%

图中可以看出 MQTT 帧结构和 CoAP 帧结构中头部占比相对较少。MQTT 头部占用有固定两个字节和可变字节。

loT 设备跟云端进行交互的消息一般都比较短,HTTPHTTPS 协议头部少则几十多则上百字节,传输效率相比MQTT/CoAP 低太多。

 

二、MQTT 协议细节

1.MQTT 主要特点

MQTT 最早设计用于监控穿越沙漠中的油管的监控状况其主要特点如下:

·基于 TCP 长连接

·使用发布者/订阅者的模式,提供一对多的消息发布·构建并提供底层传输通道,不关心负载内容

·QoS 支持“至少一次”,“至多一次”,“只有一次”三种不同的模式

·开销很小(固定字节的头部只有2个 Byte)

截止目前,MQTT 有三个版本,3.1.0,3.1.1和最新的5.0版本,5.0版本也已经被纳入 OASIS 标准

image.png

2.MQTT 模式与角色

一种模式:发布者/订阅者模式

三种角色:发布者、代理服务器、订阅者

发布者/订阅者模式:

分为发布者(Publish)、代理(Broker)服务器、订阅者(Subscribe)三种角色

消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者也可以同时是订阅者。

客户端和服务器的两种角色

·客户端

·MQTT 连线的发起者

·发布消息供到其它订阅者订阅的主题

·订阅/退订主题(用于接收其它客户端向该主题发布的消息)服务器

·接收来自客户端的连线请求

·接收客户端的的订阅/退订主题需求向订阅的客户端转发其订阅主题的消息

image.png

3. MQTT 模式与角色举例

image.png

图中空调既是发布者又是订阅者,发布状态信息,订阅温度、定时等控制指令。所有信息都会以中间 MQTT Broker作为中介来传输。当作为发布者时,状态信息通过 MQTT Broker 发送给订阅者监控面板。如果想人为控制空调,可以通过上报信息实施控制。比如温度定时等控制指令,通过 MQTT Broker 发送给空调,从而完成整个数据通信。

完成这个模式需要协议内部的帧来完成。

 4. MQTT 数据帧类型

方法定义

数据帧类型

说明


连线

CONNECT

连线请求帧



CONNACK

连线请求响应帧


断线

DISCONNECT

断线帧


订阅

SUBSCRIBE

订阅主题帧



SUBACK

订阅主题响应帧



UNSUBSCRIBE

取消订阅主题帧



UNSUBACK

取消订阅主题响应帧


发布

PUBLISH

发布消息帧



PUBACK

发布消息响应帧



PUBREC

发布消息接收确认帧

QoS2专用


PUBREL

发布消息接收确认响应帧

QoS2专用


PUBCOMP

发布消息确认完成帧

QoS2专用

心跳

PINGREQ

保活请求帧

客户端发送


PINGRESP

保活确认帧

服务器发送

其中 CONNECTCONNACK、SUBSCRIBESUBACKPUBLISHPUBACKPINGREQPINGRESP 使用较多。

应用场景可以 MQTT QOS 机制来看。

5. MQTT QOS 机制

MQTT 传输的消息分为:主题和负载两部分

·主题(Topic)

·消息的类型,订阅者订阅(Subscribe)一个主题后,就会收到该主题的消息内容(payload)

·负载( payload)

·消息的内容,是指订阅者具体要使用的内容

MQTT 会构建底层网络传输:它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输。MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性。

MQTT 设计了3个 QoS 等级。

QoS 0:消息最多传递一次,如果当时客户端不可用,则会丢失该消息。QoS 1:消息传递至少1次。

QoS 2:消息仅传送一次。

Qos O是:Sender (可能是Publisher或者Broker)发送一条消息之后,就不再关心它有没有发送到对方,也不设置任何重发机制。QoS1包含了简单的重发机制,Sender 发送消息之后等待接收者的 ACK,如果没收到 ACK 则重新发送消息。这种模式能保证消息至少能到达一次,但无法保证消息重复。

QoS 2设计了重发和重复消息发现机制,保证消息到达对方并且严格只到达一次。

6. MQTT QOS0

QoS0:- Fire and Forget 机制,一般局域网信息或无关紧要的互联网信息传输

·最多传输一次

·适用于不重要的消息传输

image.png

传输方式为从发送者发送 Publisher 的消息给 Broker,Broker 再调用 Publish 发送给订阅者,最后 Publisher 会自动删除。

7. MQTT QOS1

QoS1:-简单的 ACK 机制,适用于一般互联网实时消息的传递

·最少传输一次

·适用于对可靠性有要求,但对重复度没有要求的消息传输

image.png

流程为首先保存将要发送的消息,调用 Publish 发送消息,Broker 收到消息之后保存下来,再发送消息到订阅者,并且回复 Publisher ACK 表示收到了 Publish,Publisher 发送消息并且收到回应,说明消息至少传输了一次,Broker 需要等到订阅者收到 Publish 后回应后再删除消息,因为引入了 Store 机制存储信息,从而保证至少传输一次的功能。

8. MQTT QOS2

QoS2:-复杂的消息及 ACK 流程,适用于敏感信息(如国防工业及医疗设备等应用场景)的传递

·只传输一次

·适用于有可靠性要求,也不允许发生重复的消息传输

image.png

具体流程为 Publisher 首先把消息保存下来,通过 Publish 发送给 Broker,Broker 收到消息后也会保存下来并且回复收到的消息。Publisher 收到回复的 ACK 之后会再回应一个确认的 ACK,Broker 收到确认之后保障前面不会再发送,此时再把消息发送给订阅者。发送结束之后会回应一个 Publish 表示完成,此时把消息删除。对于 Publisher 来说就只传输了一次。

Subscriber 收到消息之后也会把消息保存下来并且回应确认帧。Broker 收到确认帧之后回应确认。

Subscribe 通知之后会回应表示 Publish 环节完成,Broker 最后删除消息,Subscribe 处理完之后也会删除消息。

9. MQTT 应用一般流程

image.png

通过 Client 数据帧和 Server 端建立联接。此处 Client 和 Server 就是订阅方和 Broker 作为连接,Server 回应 ACK 从而连接,连接后 Client 会做订阅,即 SUSCRIBE 以及订阅的 ACK。订阅可有多个主题,每一个主题的订阅都需要SUSCRIBE 的报文并且订阅成功会回应 SUBACK。订阅之后如果 Client 想要发送消息,把 Publish 发送给 Server,Server 收到消息之后回应 PUBACK,从而完成数据传输。经常也会 Client 发送 Request,Server 端回应 Response,完成整个过程长连接的维护。如果想要断开则需要调用 Disconnect 的数据帧。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
消息中间件 物联网 网络性能优化
MQTT常见问题之MQTT不支持5.0的协议如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
21天前
|
数据采集 传感器 监控
多协议网关BL110钡铼6路RS485转MQTT协议云网关
BL110钡铼6路RS485转MQTT协议云网关是一款高性能、易配置的工业级设备,适用于各种需要远程监控和数据采集的物联网应用场景。通过将传统RS485设备的数据转换为MQTT协议并上传至云平台,实现了设备的远程管理和智能控制,极大地提升了系统的管理效率和响应速度。
26 2
|
2月前
|
网络协议 物联网 网络性能优化
物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
72 5
|
3月前
|
消息中间件 监控 物联网
MQTT协议对接及RabbitMQ的使用记录
通过合理对接MQTT协议并利用RabbitMQ的强大功能,可以构建一个高效、可靠的消息通信系统。无论是物联网设备间的通信还是微服务架构下的服务间消息传递,MQTT和RabbitMQ的组合都提供了一个强有力的解决方案。在实际应用中,应根据具体需求和环境进行适当的配置和优化,以发挥出这两个技术的最大效能。
208 0
|
7月前
|
传感器 网络协议 Ubuntu
MQTT协议与EMQ
MQTT协议与EMQ
187 0
|
4月前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
151 0
|
4月前
|
物联网 网络性能优化 Python
"掌握MQTT协议,开启物联网通信新篇章——揭秘轻量级消息传输背后的力量!"
【8月更文挑战第21天】MQTT是一种轻量级的消息传输协议,以其低功耗、低带宽的特点在物联网和移动应用领域广泛应用。基于发布/订阅模型,MQTT支持三种服务质量级别,非常适合受限网络环境。本文详细阐述了MQTT的工作原理及特点,并提供了使用Python `paho-mqtt`库实现的发布与订阅示例代码,帮助读者快速掌握MQTT的应用技巧。
95 0
|
6月前
|
数据采集 监控 物联网
MQTT协议在智能制造中的应用案例与效益分析
【6月更文挑战第8天】MQTT协议在智能制造中的应用案例与效益分析
185 1
|
6月前
|
消息中间件 存储 RocketMQ
消息队列 MQ产品使用合集之Remoting协议是否可以直接和proxy交互的吗
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
6月前
|
消息中间件 Serverless Windows
消息队列 MQ产品使用合集之MQTT协议是否可以应用于社交软件的系统通知场景
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。

热门文章

最新文章