【MQTT-协议原理】

MQTT-协议原理

  • ■ MQTT-协议原理
  • ■ MQTT-服务器 称为"消息代理"(Broker)
  • ■ MQTT协议中的订阅、主题、会话
    • ■ 一、订阅(Subscription)
    • ■ 二、会话(Session)
    • ■ 三、主题名(Topic Name)
    • ■ 四、主题筛选器(Topic Filter)
    • ■ 五、负载(Payload)
  • ■ MQTT协议数据包结构
    • ■ (1)固定报头(Fixed header)
      • ■ 1.1 MQTT控制报文的类型
      • ■ 1.2 报文类型标志位
      • ■ 1.3 剩余长度
    • ■ (2)可变报头(Variable header)
    • ■ (3)消息体(Payload)

■ MQTT-协议原理

MQTT协议中有三种身份: 发布者(Publish)、 代理(Broker)(服务器)、 订阅者(Subscribe)。
MQTT传输的消息分为: 主题(Topic) 负载(payload)

■ MQTT-服务器 称为"消息代理"(Broker)

MQTT服务器以称为"消息代理"(Broker),可以是一个应用程序或一台设备。
它是位于消息发布者和订阅者之间,它可以:
(1)接受来自客户的网络连接;
(2)接受客户发布的应用信息;
(3)处理来自客户端的订阅和退订请求;
(4)向订阅的客户转发应用程序消息。

■ MQTT协议中的订阅、主题、会话

■ 一、订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

■ 二、会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

■ 三、主题名(Topic Name)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

■ 四、主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

■ 五、负载(Payload)

消息订阅者所具体接收的内容。

■ MQTT协议数据包结构

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

(1)固定报头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
(2)可变报头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
(3)消息体(Payload)。也是效载荷 存在于部分MQTT数据包中,表示客户端收到的具体内容。
在这里插入图片描述

■ (1)固定报头(Fixed header)

固定包头包含
控制报文类型
控制报文标志位
剩余长度
在这里插入图片描述
剩余长度是可变的 1-4 个字节

■ 1.1 MQTT控制报文的类型

在这里插入图片描述
在这里插入图片描述

■ 1.2 报文类型标志位

[3-0]包含每个 MQTT 控制报文类型特定的标志
在这里插入图片描述
DUP1 =控制报文的重复分发标志
QoS2 = PUBLISH 报文的服务质量等级
RETAIN3 = PUBLISH 报文的保留标志

■ 1.3 剩余长度

位置: 从第 2 个字节开始。
剩余长度(Remaining Length) 表示当前报文剩余部分的字节数, 包括可变报头和负载的数据。
剩余长度 不包括用于编码剩余长度字段本身的字节数。

剩余长度字段 使用一个变长度编码方案:
对小于 128 的值它使用单字节编码。
更大的值按下面的方式处理。低 7 位有效位用于编码数据,最高有效位用于指示是否有更多的字节。
因此每个字节可以编码 128 个数值和一个延续位(continuation bit) 。
剩余长度字段最大 4 个字节。
在这里插入图片描述
例如:剩余长度字节长度是64 剩余长度填充的值就是一个字节表示64。
答 :对小于 128 的值它使用单字节编码。

例如:剩余长度是321 剩余长度填充的值 如下:
答 :大于 128 低 7 位有效位用于编码数据
计算原理
321-128 = 193 //193又大于128 在减去
193-128 = 65

第一个字节: 193
第二个字节: 2 // 321 / 128 = 2 相当于上面减去两次128

假如 第二个字节又大于128 在进行上面计算原理。

■ (2)可变报头(Variable header)

可变报头的内容根据报文类型的不同而不同。
可变报头的报文标识符(Packet Identifier) 字段存在于在多个类型的报文里。
控制报文的可变报头部分包含两字节的报文标识符字段。
在这里插入图片描述
在这里插入图片描述

■ (3)消息体(Payload)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker容器安装的可道云挂接宿主机的硬盘目录:解决群晖 威联通 飞牛云等nas的硬盘挂接问题

基于Docker部署可道云(KodCloud)时,通过挂载宿主机其他磁盘目录可实现高效、安全的数据管理。具体而言,使用绑定挂载(Bind Mounts)将宿主机目录(如/data/disk2)映射到容器内的可道云…

go语言内存泄漏的常见形式

go语言内存泄漏 子字符串导致的内存泄漏 使用自动垃圾回收的语言进行编程时,通常我们无需担心内存泄漏的问题,因为运行时会定期回收未使用的内存。但是如果你以为这样就完事大吉了,哪里就大错特措了。 因为,虽然go中并未对字符串…

es6学习02-let命令和const命令

一、let命令 1.let块级作用域: let关键字 VS var关键字 2.for循环计数器很适合let命令 var:整个for循环中一直都是同一个i在做1,最后输出的就是10; let:每循环一次都是多一个i的赋值,最后输出是可以调出…

MySQL深分页问题

在项目中有一个数据导出的需求,原来的实现方式也比较简单,根据查询条件分页查所有的数据,然后转成csv的格式一行一行写进文件存储中。 实际上线之后,发现出现了慢查询,具体的sql如下: select * from tabl…

前端面试宝典---创建对象的配置

Object.create 对整个对象的多个属性值进行配置 创建对象 不可更改属性值 // 创建对象 不可更改属性值 let obj Object.create({}, {name: {value: lisi,writable: false,},age: {value: 20,writable: true,} })console.log(初始化obj, obj) obj.name wangwu console.log(…

数据结构:C语言版严蔚敏和解析介绍,附pdf

《数据结构:C语言版(第2版)》严蔚敏李冬梅吴伟民.pdf 《数据结构:C语言版》严蔚敏,李冬梅.pdf 《数据结构C语言第2版习题解析与实验指导》李冬梅.pdf 「《数据结构:C语言版(第2版 )》…

深入理解 v-for 指令及其使用方法

在 Vue.js 中,v-for 是用于渲染列表的核心指令,它允许你通过循环渲染数据源中的每一项。通过 v-for,你可以轻松地将数组、对象或其他可迭代的数据渲染成 HTML 元素。本文将详细介绍 v-for 的基本用法、常见的应用场景、最佳实践及性能优化&am…

VIRT, RES,SHR之间的关系

VIRT、RES 和 SHR 是进程内存使用的三个关键指标,它们之间的关系反映了进程的内存分配和使用情况。以下是它们的定义和关系: VIRT(虚拟内存):表示进程分配的虚拟内存总量,包括所有代码、数据、共享库、堆栈…

2025届蓝桥杯JavaB组个人题解(暂时不全,没题目)

2025 届蓝桥杯 Java B 组题解 第一次参加蓝桥杯,输入输出都用的BufferedReader和PrintWriter,怕输入输出不对或者内存超限,也怕出现小错误运行不了的,比如Main打成Mian什么的,但还是希望能拿省一,这里给出自…

在Vue项目的引入meting-js音乐播放器插件

开源项目:https://github.com/swzaaaaaaa/NBlog 1、开源项目中音乐播放插件的使用流程 步骤1:下载meting-js相关文件 在MetingJS官方仓库或其他可靠的CDN获取meting-js的JavaScript文件以及相关依赖(如APlayer的文件)。将它们下…

HTML应用指南:利用GET请求获取全国汉堡王门店位置信息

在当今快节奏的都市生活中,餐饮品牌的门店布局不仅反映了其市场策略,更折射出消费者对便捷、品质和品牌认同的追求。汉堡王(Burger King)作为全球知名的西式快餐品牌之一,在中国市场同样占据重要地位。自进入中国市场以…

使用 Function 来编写策略模式:优雅而高效的设计模式实践

引言:为什么选择策略模式? 策略模式(Strategy Pattern)是行为设计模式中的经典之一,它允许我们定义一系列的算法或操作,并使得它们可以互换使用。策略模式的关键思想是将算法的实现与使用它们的上下文分离…

Windows 系统中安装 Git 并配置 GitHub 账户

由于电脑重装系统,重新配置了git. 以下是在 Windows 系统中安装 Git 并配置 GitHub 账户的详细步骤: 1. 安装 Git 访问 Git 官网下载页面下载 Windows 版本的 Git 安装程序运行安装程序,使用默认选项即可 2. 配置 Git 用户信息 打开命令…

MergeX亮相GTC2025:开启全球广告流量交易新篇章

全球流量盛宴GTC2025深圳启幕,共探出海新蓝海 2025年4月24日至25日,GTC2025全球流量大会将在深圳福田会展中心9号馆隆重召开。作为跨境出海领域内规模最大、资源最丰富、产业链最完备的年度盛会,此次大会将汇聚众多行业精英,共同探…

kubernetes》》k8s》》Volume 数据卷 PVC PV NFS

为啥需要数据卷 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重…

第十六届蓝桥杯 省赛C/C++ 大学B组

编程题目现在在洛谷上都可以提交了。 未完待续,写不动了。 C11 编译命令 g A.cpp -o A -Wall -lm -stdc11A. 移动距离 本题总分:5 分 问题描述 小明初始在二维平面的原点,他想前往坐标 ( 233 , 666 ) (233, 666) (233,666)。在移动过程…

谷歌怎么设置在新标签页中打开网页

按图示操作即可,藏得真深啊,无语,而且就算打开了,点收藏夹,顶部快捷栏里的网站,网站里的连接,打开也还是覆盖原来的,呵呵呵呵呵呵呵,有没有人管管 另外我的edge不知咋滴…

【企业级数据安全】掌握高性能Log4j2敏感信息脱敏方案

前言 在数据安全合规日益严格的今天,日志中的敏感信息保护已成为企业IT建设的必备环节。本文带您深入了解如何打造一套高性能、可实时配置的Log4j2日志脱敏插件,轻松应对各类敏感数据保护需求,让您的系统既满足合规要求,又不牺牲…

Linux中的tar -P选项

tar -P选项 Linux中的tar命令可用于文件和目录的归档以及压缩解压缩。而其中的-P选项是什么含义呢?下面我们就来看一看 1、不添加-P选项 对于如下压缩命令: tar -czvf pkg.tar.gz /opt/software执行该命名,控制台首行输出将会提示&#xf…

【2025年泰迪杯数据挖掘挑战赛】B题 详细解题思路+数据预处理+代码分享

目录 2025年泰迪杯B题详细解题思路问题一问题分析数学模型Python代码Matlab代码 问题二问题分析数学模型Python代码Matlab代码 问题三问题分析数学模型Python代码Matlab代码 问题四问题分析数学模型Python代码Matlab代码 2025年泰迪杯B题详细解题思路 初步分析整理了B题的赛题分…