阿里云物联网——MQTT协议---CONNECT

2023-11-02

什么是MQTT

1.1简介

MQTT的中文含义:消息队列遥测传输
MQTT的英文:Message Queuing Telemetry Transport
它是基于TCP/IP协议,为硬件性能低下的远程设备和网络情况糟糕的情况下设计发布的发布/订阅型消息协议。MQTT在空间和时间上,将接受者和发送者分离。

想要深入了解MQTT的 MQTT的中文文档

1.2 Connect连接报文

固定报头+可变报头+有效载荷
固定报头:必须存在,用于描述报头的类型,等级
可变报头:不一定存在,看报文类型
有效载荷:通信信息的存放地,会存放额外信息,如ID

1.2.1固定报头

固定报头的格式
在这里插入图片描述一共两个字节
控制报文的类型
控制报文的类型
当控制报文类型为CONNECT是固定报头的10进制表示为 1 0
1 指控制报文的类型,0 指标志位为零
控制报文类型的标志位
控制报文类型的标志位在这里插入图片描述PUBLISH使用的 DUP,QoS,RETAIN 后面会详细说明

1.2.2 可变报头

协议名(Potocol Name) 6个字节

MSB LSB M Q T T
00 04 4D 51 54 54

MSB,LSB 报文标识符

协议级别 1个字节
04
连接标志 1个字节
C2
保持连接(以秒表示为一个16位的字为单位的时间间隔)2个字节
00 64
在这里插入图片描述

是否需要可变报头
在这里插入图片描述

1.2.3 有效载荷

客户端标识符 Client Identifer
用户名 User Name
密码 Password

以阿里云物联网为例
客户端IDDeviceName|securemode=3,signmethod=hmacsha1|
客户端ID:MQTT_Devicel|securemode=3,signmethod=hmacsha1|
将转化为16进制
4D 51 54 54 5F 44 65 76 69 63 65 6C 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C
(46)0X2E(一共46个字节)

用户名DeviceName&ProductKey
用户名:MQTT_Devicel&a1n。。。。。。。
在这里插入图片描述
将其转化为16进制
4D 51 54 54 5F 44 65 76 69 63 65 6C 26 61 31 6E 64 73 55 31 45 6B 49 6B
(一共24个字节) 将其转化为16进制为 0x18

密码clientIddeviceNameproductKey#
(*表示DeviceName,#表示ProductKey)
在这里插入图片描述利用在线解码工具进行解码
在线解码工具
密码是由 HmacSHA1加密过的
在这里插入图片描述
将密钥复制下来
在这里插入图片描述将最后生成的密码转化为16进制
34 64 39 31 30 32 34 32 61 36 37 36 32 61 66 65 63 34 62 30 61 38 33 32 38 37 37 64 36 64 30 33 61 61 66 34 64 39 36 64 (40)0x28

最后的有效报头
00 2E 4D 51 54 54 5F 44 65 76 69 63 65 6C 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 18 4D 51 54 54 5F 44 65 76 69 63 65 6C 26 61 31 6E 64 73 55 31 45 6B 49 6B 00 28 34 64 39 31 30 32 34 32 61 36 37 36 32 61 66 65 63 34 62 30 61 38 33 32 38 37 37 64 36 64 30 33 61 61 66 34 64 39 36 64

最终:固定报头+可变报头+有效载荷
10 7E 00 04 4D 51 54 54 04 C2 00 64 00 2E 4D 51 54 54 5F 44 65 76 69 63 65 6C 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 18 4D 51 54 54 5F 44 65 76 69 63 65 6C 26 61 31 6E 64 73 55 31 45 6B 49 6B 00 28 34 64 39 31 30 32 34 32 61 36 37 36 32 61 66 65 63 34 62 30 61 38 33 32 38 37 37 64 36 64 30 33 61 61 66 34 64 39 36 64

7E表示可变报头和有效载荷的最终长度

在这里插入图片描述返回
CONNACK 20 02 00 00 表示连接成功
20 表示服务器到客户端,是固定报头,02是剩余长度
00 为连接确认标志
00 表示连接已被服务器接收
阿里云平台对应的设备同时会显示在线

CONNECT 已完成 完结 撒花。。。。欢迎讨论。。。

(有需要网络调试助手的朋友,可以评论,留下邮箱)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阿里云物联网——MQTT协议---CONNECT 的相关文章

随机推荐

  • 独立按键消抖与松手检测

    记录下最近独立按键消抖和松手检测 我对独立按键的处理思路是 1 获得键值 2 消抖处理 3 松手检测 4 键值解析 1 获得键值 这里把独立按键做个编号 例如有两个按键记为KEY0 KEY1 用一个变量来记录当前按键标记值 比如Cur Ke
  • npm install 编译时报“Cannot read properties of null (reading ‘pickAlgorithm‘)“

    先看报错 先说下网上大多数的解决方案 方案一 重新安装node解决 方案二 删了node models重新下 或者直接下载CNPM 淘宝镜像 进行安装 CNPM安装办法 npm install g cnpm registry https r
  • 解决STM32驱动0.96OLED不亮的问题

    问题描述 使用STM32无法驱动OLED 解决方案 1 检查硬件连接是否有误 OLED STM32 VCC 5V或3 3V SDA SDA SCL SCL GND GND 备注 最好接STM32最小系统版的3 3V 当连接STM32最小系统
  • Javaio流

    io流 关于Java的io流一般按照数据操作类型可以分为字节流与字符流 首先来说一下字节流 字节流 字节流的方法都是以stream结尾的 字节流的用途 转换图片为二进制 转换音频 视屏为二进制 字符串等也可以转为二进制 字节流常用于图片 音
  • 签到题【牛客算法周周练6E】【暴力枚举+线段树】

    题目链接 题目保证数据随机 数据随机真的是太强了 直接可以跑最坏时候是的复杂度 直接暴力建线段树 然后更新的时候更新到底 查询的时候也是查询到底 因为数据随机 所以其实被处理的次数是很少的 因为要刚好是set里有的 或者是set里没有的 这
  • Unity3D-----三维数学(向量)

    Unity3d gt 三维数学之向量 一 向量 1 什么是向量 2 向量的形式 3 向量的大小 4 向量的方向 二 向量运算 1 向量相减 2 向量相加 3 向量与标量的乘除法 4 点乘 5 叉乘 三 三角函数 1 角的度量单位 2 三角函
  • Labelme 目标检测和语义分割的数据标注

    1 安装labelme 打开conda prompt 输入以下代码创建虚拟环境 打开虚拟环境 安装lelme conda create n labelme python 3 6 创建虚拟环境 conda activate labelme 打
  • 解决idea出现报错:Error running,Command line is too long. Shorten command line

    报错的原因 因为项目需要打印的环境变量太长 超过了限制 需要缩短命令行来解决问题 解决办法 方法一 Edit Configurations 将默认的Shorten command line的值user local default 改为 JA
  • 格式工厂多个图片合并成一个PDF的报错

    使用图片合并PDF功能时 当图片数量超过50会报错 找到imgconv py文件 将50改为500 保存 现在可以支持100张图合并成一个PDF文件了 但是超过150张程序会直接闪退 正在解决中 补充说明 1 如何设置PDF压缩比 打开 g
  • 有奖调研

    简介 感谢您一直以来对阿里云通信短信服务的支持 为了提升用户体验 为您在数字化转型的通信之路提供助力 云通信短信服务将发起一次满意度调研 有关短信服务 无论使用情况 抑或功能需求 还是文档 产品介绍页 计算与账单 控制台 API SDK 售
  • TypeError Cannot read properties of undefined (reading ‘matched‘)vue项目创建之后写路由报错

    vue项目创建之后写路由报错 原代码 修改之后代码 在 import 路由文件后 命名为Router 就会出现报错 原因 router 才是Vue实例化的配置字段名称 不识别其他的
  • Linux下访问数据库

    Linux下访问数据库 声明 本文只简单描述Linux系统下访问mysql数据库的步骤 关于连接上数据库之后的简单的对于数据库的增删改查等操作只是稍微提及 关于增删改查的语句书写 本文不再讲述 一般来说 访问数据库有如下几个步骤 1 初始化
  • C#控制台程序中使用log4.net来输出日志

    Apache log4net 库是一个帮助程序员将日志语句输出到各种输出目标的工具 log4net 是优秀的 Apache log4j 框架到 Microsoft NE T 运行时的端口 我喜欢他可以自定义输出 区分等级等特点 导入库 我们
  • Android自定义控件(三)---实战篇(详解onMeasure)

    接着Android自定义控件 二 实战篇的讲解 这篇我们来详细讲一下测量 onMeasure 和绘制 onDraw 这两个方法 首先 我们来看测量 onMeasure 方法 在这个方法里 我们主要是设置控件的宽高 widthMeasureS
  • jqgrid 翻页记录选中行

    简单的jqgrid列表 list jqGrid url contextPath getList postData data datatype json colNames 用户名 密码 colModel name name index nam
  • 递归算法

    一 一半又一只 一个人赶着鸭子去每个村庄卖 每经过一个村子卖去所赶鸭子的一半又一只 这样他经过了七个村子后还剩两只鸭子 问他出发时共赶多少只鸭子 经过每个村子卖出多少只鸭子 1 题目分析 设经过第n个村子时有fun n 只鸭子 卖去fun
  • java 根据数据库表生成实体类工具

    public class CodeGenerator 修改生成配置 public static String dbUrl 数据库连接串 public static String dbName 账号 public static String
  • 【js】Object.entries的用法

    Object entries是返回一个键值对数组 const obj one 1 two 2 three 3 const result Object entries obj console log result one 1 two 2 th
  • 【Go】Go 的项目目录

    文章目录 一 Go 的项目目录 1 适合个人开发者 2 目前流行的项目结构 3 适合企业开发者 二 Go 项目构建及编译 第一个 Go 程序 参考链接 一 Go 的项目目录 进行Go语言开发的时候 我们的代码总是会保存在 GOPATH sr
  • 阿里云物联网——MQTT协议---CONNECT

    什么是MQTT 1 1简介 MQTT的中文含义 消息队列遥测传输 MQTT的英文 Message Queuing Telemetry Transport 它是基于TCP IP协议 为硬件性能低下的远程设备和网络情况糟糕的情况下设计发布的发布