MQTT协议-CONNECT报文介绍

news2025/7/18 20:22:18

MQTT协议-CONNECT报文介绍

参考MQTT协议中文笔记:https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html

Connect报文主要用于客户端连接服务器的,未涉及具体数据的传输,可以使用网络调试助手来连接阿里云平台,用十六进制格式发送这一串报文,来连接平台上的一个设备,使其显示在线

阿里云平台名词解释

在这里插入图片描述

CONNECT控制报文

报文由固定报头+可变报头+有效载荷组成,这个格式适合MQTT的大部分协议

在这里插入图片描述

在单片机中要发送CONNECT报文,需要转为十六进制再发送,下面是假设要发送的数据

在这里插入图片描述

固定报头

固定报头一般由两个字节组成,byte1和byte2

byte1的高4位为MQTT报文类型,低4位为用于指定控制报文类型的标志位

byte2为剩余长度,暂时不知

在这里插入图片描述

在这里插入图片描述

报文类型

在这里插入图片描述

可变报头

可变报头由协议名(Procotol Name)+协议级别(Procotol Level)+连接标志(Connect Flags)+保持连接(keep Alive)四个部分组成

1、协议名

已经固定好是MQTT,byte1和byte2表示协议名长度,为4个字节

在这里插入图片描述

2、协议级别

也已经固定好,十六进制为04

在这里插入图片描述

3、连接标志

占一个字节,只有最低位固定为0,其他位不固定,像用户名称User Name和密码Password这些一般都要的,所以可预设为1,则二进制可表示如下,转为十六进制是C2
在这里插入图片描述

4、保持连接

占两个字节,假如设置为100秒,则十六进制为00 64

在这里插入图片描述

可变报头的字符组合起来,则就为 00 04 4D 51 54 54 04 C2 00 64 ,共十个字节,基本固定

有效载荷

有效载荷由客户端标识符(Client Identifier)+用户名(User Name)+密码(Password)组成

在这里插入图片描述

设备名称和ProductKey可以在云平台的设备里获得,如

在这里插入图片描述

将设备名和ProductKey直接代入,可得

客户端ID:

在这里插入图片描述

用户名:

在这里插入图片描述

密码:

在这里插入图片描述

密码需要经过哈希加密,在线加密平台:http://encode.chahuo.com/

粘贴密码字符串后,点击HmacSHA1加密,需要输入密钥,该密钥可在云平台设备的三元组信息里获得

在这里插入图片描述

客户端ID进行发送要转为十六进制,需要在头部加上数据的长度,因为官方规定用户名必须是UTF-8编码字符串,而UTF-8编码规定:每一个字符串都有一个两字节的长度字段作为前缀,因此客户端ID头部加上的是 00 27,而不是单单的27

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将客户端ID、用户名和密码组合在一起,就得到了如下的数据,这是有效载荷的部分

在这里插入图片描述

将固定报头、可变报头和有效载荷组合在一起

在这里插入图片描述

整理过后就还有固定报头的剩余长度没有数据

在这里插入图片描述

剩余长度有复杂的规定,会出文章单独介绍,但这里可以简单的认为是该位置后面有多少个字节长度,经过计算,后面共有112个字节,转为十六进制是70,因此剩余长度可以填70,这样,Connect报文就组装好了,可通过此报文与阿里云平台连接

在这里插入图片描述

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

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

相关文章

什么是档案级光盘?它的寿命是多少年?

我们经常会听到有人在说:CD、DVD光盘的寿命多少多少年,蓝光光盘的寿命多少多少年。实际上这个说法是不对的,至少是不准确的,因为同样是CD、DVD光盘或者蓝光光盘,也分等级,而不同等级的光盘的寿命是不一样的…

ENVI_Classic:快速入门_菜单栏常见功能的基本介绍

说明:由于实验要求,所以并没有对各个功能进行详尽的解释,大多点到为止,少部分实验内容是实验要求所以步骤详尽。当然由于经验不足,有一些可能存在错误恳请指正.1. 实验目的通过ENVI Classic对自行下载的遥感图像进行一…

JavaScript Math 算数对象实例集合

文章目录JavaScript Math 算数对象实例集合使用 round() 对数字进行舍入使用 random() 来返回 0 到 1 之间的随机数使用 max() 来返回两个给定的数中的较大的数使用 min() 来返回两个给定的数中的较小的数摄氏度与华氏转换JavaScript Math 算数对象实例集合 注意: 了…

MySQL基础篇2

第一章 SQL语句之DQL 语法:查询不会对数据库中的数据进行修改,根据指定的方式来呈现数据。 语法格式: select * | 列名,列名 from 表名 [where 条件表达式] select 是查询指令,可以读 1 ~ n 行数据; 列名换成 * 号&a…

网络:TCP与UDP相关知识(详细)

目录:1、UDP 和 TCP 的特点与区别2、UDP 、TCP 首部格式3、TCP 的三次握手和四次挥手4、TCP 的三次握手(为什么三次?)5、TCP 的四次挥手(为什么四次?)6、TCP 长连接和短连接的区别7、TCP粘包、拆…

Caddy2学习笔记——Caddy2的安装、部署和编译小白教程

个人环境概述 本人拥有一个国内云服务商的云主机和一个备案好的域名,希望通过caddy2来作为web服务器。我的云主机是公网ip,地址为:43.126.100.78;我备案好的域名是:hotgirl.com。后面的文章都以上述的ip和域名来进行讲…

什么是jvm?

说明:做java开发的几乎都知道jvm这个名词,但是由于jvm对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及理解什么是jvm&…

跨源资源共享(CORS)-亲测理解,以及对http的状态,参数的理解和使用,对预检请求的触发和解决

跨源资源共享(CORS)-亲测理解,以及对http的状态,参数的理解和使用 跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的…

Python 的IDE——PyCharm

IDE介绍与安装 介绍 集成开发环境(IDE) 集成开发环境(IDE,integrated Development Environment) —— 集成开发软件需要的所有工具,一般包括以下工具: 图形用户界面 代码编辑器(支持代码补全、自动缩进) 编译器/解释器 调试器…

002+limou+HTML——(2)HTML文档

000、前言 一般来说一个静态网页拥有四种元素:文字、图片、超链接、音频和视频(注意,即使在web网页中植入Javascript语言,也不一定是动态网页,真正的动态网页判断标准:是否和服务器产生交互) …

Nginx 高可用方案

准备工作 10.10.4.5 10.10.4.6 VIP:10.10.4.10 两台虚拟机。安装好Nginx 安装Nginx 更新yum源文件: rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm wget -O /etc/yum.repos.d/CentOS-Ba…

17、经验贝叶斯估计

经验贝叶斯估计贝叶斯估计的问题定义为根据一些观测数据 x 来估计未知参数 θ,用一个损失函数来衡量估计的准确性,如果用均方误差(MSE)来估计的话,将问题建模为等价于求解后验分布的均值最小均方误差估计器 minimum mean square error (MMSE)…

XSS挑战赛(xsslabs)11~16关通关解析

简介 XSS挑战赛,里面包含了各种XSS的防御方式和绕过方式,好好掌握里面的绕过细节,有助于我们更好的去发现XSS漏洞以及XSS的防御。本文更多的是分享解析的细节,不是一个标准的答案,希望大家在渗透的时候有更多的思维。…

MySQL日期和时间函数 整理

1 获取日期、时间 CURDATE() ,CURRENT_DATE() 返回当前日期,只包含年、月、日 CURTIME() , CURRENT_TIME() 返回当前时间,只包含时、分、秒 NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP() 返回当…

工作订单之检查

1. 创建并查看检查 1.1 检查存在的意义 检查旨在帮助技术人员轻松回答工作订单中所需要回答的一系列问题,能够帮助技术人员梳理工作步骤,指导技术人员在检查中获得帮助 检查支持脱机操作,即在没有网络的情况下填写数据,并在网络恢…

Java多种方法实现等待所有子线程完成再继续执行

简介 在现实世界中,我们常常需要等待其它任务完成,才能继续执行下一步。Java实现等待子线程完成再继续执行的方式很多。我们来一一查看一下。 Thread的join方法 该方法是Thread提供的方法,调用join()时,会阻塞主线程&#xff0…

【建议收藏】深入浅出Yolo目标检测算法(含Python实现源码)

深入浅出Yolo目标检测算法(含Python实现源码) 文章目录深入浅出Yolo目标检测算法(含Python实现源码)1. One-stage & Two-stage2. Yolo详解2.1 Yolo命名2.2 端到端输入输出2.3 Yolo中的标定框2.4 Yolo网络结构2.5 Yolo的算法流…

【IoT】《天道》中音响案例的SWOT分析

在20世纪80年代初,SWOT最初是由美国知名管理学教授海因茨韦里克提出的。 之后这个工具就经常被用于企业的战略分析、竞争对手分析等场景。 在每年例行的公司产品规划过程中,我个人也经常使用这个工具。 由于涉及一些公司商业上的信息,下面会用…

Linux- 系统随你玩之--网络上的黑客帝国

文章目录1、前言2、TCPDump介绍2.1、问题来了: 所有用户都可以采用该命令吗?2.2、抓包原理2.3、特点2.3.1、参数化支持2.2.2、 TCP功能3、 服务器安装Tcpdump3.1、安装3.2、检查安装是否正常。4、tcpdump 命令4.1、常用功能选项4.2、输出内容5、实操5.1、…

安卓反编译入门04-对重新打包的APK进行签名

前提:重签的前提需要安装java环境,我电脑安装的地址:C:\Program Files\Java\重签的文件目录地址要在jdk的bin目录。进入命令行,执行 cd/d C:\Program Files\Java\jdk1.8.0_181\bin(注意,由于这个文件C:\Program Files要…