IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> MQTT协议介绍 -> 正文阅读

[系统运维]MQTT协议介绍

1.MQTT协议简介


MQTTMessage Queuing Telemetry Transport,消息队列遥测传输)是一个轻量的发布/订阅模式消息传输协议,是专门针对低带宽和不稳定网络环境的物联网应用设计的。

特点:

????????1.开放消息协议,易实现

????????2.发布订阅模式,一对多消息发布

????????3.基于TCP/IP网络连接

????????4.报文结构紧凑

????????5.消息QoS支持,保证可靠传输

MQTT协议原理

????????实现MQTT 协议需要客户端和服务器 端建立 TCP 连接, 在通讯过程中, MQTT 协议中 有三种身份 :发布 者( Publish )、代理( Broker )(服务器)、订阅者( Subscribe )。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者
MQTT 传输的消息分为 :主 题( Topic )和负载( payload
????????(1) Topic ,可以理解为消息的类型,订阅者订阅( Subscribe )后,就会收到该主题 的 消息 内容( payload );

????????(2payload可以理解为消息的内容,是指订阅者具体要使用的内容。

MQTT协议服务器?:

????????MQTT服务器以称为“消息代理”(Broker),它是位于消息发布者和订阅者之间,服务器可以:

????????(1)接受来自客户端的网络连接;

????????(2接受客户端发布的信息;

????????(3)处理来自客户端的订阅和退订请求;

????????(4)向订阅的客户转发消息

?MQTT协议客户端:

????????一个使用MQTT协议设备,它总是建立到服务器的网络接,客户端可以:

????????(1)发布其他客户端可能会订阅的信息;

????????(2)订阅其它客户端发布的消息;

????????(3)退订或删除消息;

????????(4)断开与服务器连接。

MQTT协议栈

?2.MQTT通信报文


MQTT协议数据包结构:

MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体Payload)三部分构成MQTT数据包结构如下:

?Fixed Header(固定报文头)

?Variable Header &Payload

2.1? CONNECT报文解读

Clean Session:清理会话,用于控制会话状态的生存时间,标志被设置为 1,客户端和服务端 必须丢弃之前的任何会话并开始一个新的会话。标志被设置为 0,服务端 必须基于当前会话(使用客户端标识符识别)的状态恢复与客户端的通信;

Will Flag:遗嘱标志设置为 1,表示如果连接请求被接受了,遗嘱(Will Message)消息 必须被存储在服务端;

QoS:遗嘱消息服务质量等级,遗嘱标志被设置为 0,遗嘱 QoS 也设置为 0;遗嘱标志被设置为 1,遗嘱 QoS 的值可以等于 012

User Name Flag:用户名标志,标志被设置为 0,有效载荷中 不能包含用户名字段,标志被设置为 1,有效载荷中 必须包含用户名字段;

Password Flag:密码标志,标志被设置为 0,有效载荷中 不能包含密码字段,标志被设置为 1,有效载荷中必须包含密码字段;

2.2? CONNACK 报文解读

?返回码说明:

?服务端发送给客户端的第一个报文 是 CONNACK,服务端发送 CONNACK 报文响应从客户端收到的 CONNECT 报文。

Sp: Session Present Flag

当前会话标志

session信息在服务器已保持,置1

未保存,置0

2.3 PUBLISHC<>S发布消息报文解读

DUP:重发标志

QoS2Qos1:如果为0,则表示是第一次发送该包,如果为1,则表示为重复发送的包。

Qos0DUP必须为0

QOS: 指定了该Publish包的Qos等级如下

RETAIN: 保留标志位,如果为1,服务器存储最新一条RETAIN消息,以便分发给新的订阅者;

2.4. PUBACK? 收到发布消息确认报文解读

PUBACK 报文是对 QoS 1 等级的 PUBLISH 报文的响应。

2.5 PUBREC? 发布消息收到

PUBREC 报文是对 QoS 等级 2 PUBLISH 报文的响应。它是 QoS 2 等级协议交换的第二个报文。

2.6 PUBRECL? 发布消息释放报文解读

PUBREL 报文是对 PUBREC 报文的响应。它是 QoS 2 等级协议交换的第三个报文。

2.7 PUBCOMP? 发布完成报文解读

PUBCOMP 报文是对 PUBREL 报文的响应。它是 QoS 2 等级协议交换的第四个也是最后一个报文。

2.8 SUBSCRIBE? 订阅主题报文解读

?SUBSCRIBE 报文的有效载荷包含了一个主题,它们表示客户端想要订阅的主题,后面跟着一个字节,这个字节被叫做 服务质量要求(Requested QoS)。它给出了服务端向客户端发送应用消息所允许的QoS 等级。

2.9 SUBACK? 订阅确认报文解读

返回码说明:

2.10? UNSUBSCRIBE? 取消订阅报文解读

??UNSUBSCRIBE 报文提供的主题与服务端持有的这个客户端的当前主题集合逐个字符比较。如果主题完全匹配,那么它(服务端)自己的订阅将被删除,否则不会有进一步的处理。

2.11 UNSUBACK? 取消订阅确认

可变报头包含等待确认的 UNSUBSCRIBE 报文的报文标识符。

2.12 PINGREQ? 心跳请求报文解读

2.13 PINGRESP? 心跳响应报文解读

客户端发送 PINGREQ 报文给服务端的。用于:

1. 在没有任何其它控制报文从客户端发给服务的时,告知服务端客户端还活着。

2. 请求服务端发送 响应确认它还活着。

3. 使用网络以确认网络连接没有断开。

14. DISCONNECT? 断开连接

客户端发送 DISCONNECT 报文之后:

? 必须关闭网络连接;
? 不能通过那个网络连接再发送任何控制报文;

服务端在收到 DISCONNECT 报文时:

? 必须丢弃任何与当前连接关联的未发布的遗嘱消息;
? 应该关闭网络连接。

?3. MQTT接入流程


3.1 连接流程

? 设备向平台发起 CONNECT 请求 , CONNECT 中携带鉴权信息 , 平台拿到鉴权信息进行鉴权。

? 鉴权通过后,如果 CLEANSESSION=0, 平台将会加载保存的设备的一些信息 如果 CLEANSESSION=1, 设备没有保存信息在平台,则不加载设备相关信息
?
? 返回鉴权结果 CONNACK

?3.2 发布消息流程

? 设备发布 Qos0 消息;
?

平台收到上报数据点后保存起来

? 设备发布 Qos1 消息
? 平台收到上报数据点后保存起来
? 平台给设备回复相应的 PUBACK

?

? 设备发布 Qos2 消息
? 平台收到上报数据点后保存起来
? 平台给设备回复相应的 PubRec 报文
? 设备需回复平台 PubRel 报文,如超时不回平台则会断开相应连接
? 平台给设备回复 PubComp 报文

3.3 订阅流程

设备发起订阅请求;

平台收到请求后更新topic列表;

平台给设备回复SubAck;

subscriberequestqos级别可以为012

? 设备发起取消订阅请求
? 平台收到请求后更新 topic 列表
? 平台给设备回复 UnSubAck

?3.5 连接保活流程

客户端发送 PINGREQ 报文给服务端的,服务端发送 PINGRESP 报文响应客户端的 PINGREQ 报文,表示服务端还活着。

3.6 断开连接流程

DISCONNECT 报文是客户端发给服务端的最后一个控制报文,表示客户端正常断开连接。

?4.MQTT消息QOS


级别0:最多一次,消息发送者会想尽办法发送消息,但是遇到意外并不会重试,这一级别会发生消息丢失。

级别 1 :至少一次。消息接收者如果 没有知会或者知会本身 丢失,消息发送者会再次发送以保证消息接收者至少会收到一次 ,这一级别会保证消息到达,可能造成消息重复。

级别 2 :恰好一 次,确保消息只有一次到达。

?

?MQTT发布消息QoS保证不是端到端的,是客户端与服务器之间的。订阅者收到MQTT消息的QoS级别,最终取决于发布消息的QoS和主题订阅的QoS

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:59:51  更:2021-09-24 11:00:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:01:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码