论坛» 嵌入式开发» STM32

STM32G070RB探测31-MQTT协议剖析1CONNECT②

高工
2021-03-23 22:30 1楼
这篇对照协议详细剖析一下上篇中的神秘报文这个需要打开MQTT 3.1.1协议说明对照着看了

先了解一下mqtt的MQTT 控制报文格式

三部分组成:

1.固定报头(所有控制报文都包含)

2.可变报头(部分控制报文包含)

3.有效载荷(部分控制报文包含)

其中固定报头是必须要有的

固定报头

固定报头也是三部分组成

1.控制报文类型

2.标志

3.剩余长度

其中的1,2为一个字节,控制报文类型为前4位标志为后四位

CONNECT的控制报文为1 标志位为0

所以第一个字节为10

看下之前抓的协议包里

对的上,证明是对的

然后就是剩余长度了,就是之后所有数据的长度

这个怎么计算呢,协议里给了个例子

321 = 65+2*128 即 321(十进制) = 0x41+0x02*0x80 所以剩余长度第一个字节等于0x41+0x80 第二个字节等于0x02 即 c1 02(十六进制)

是不是仿佛不明白? 再倒着推一遍

因为这个长度只有低7位是有效的,1个字节时,长度最长为0x7f,即127

而最高位则为延续位,当大于127时最高位为1,延续到第二位

当超过127时,比如129时,第一个字节最高位置1,第二个字节低七位为1,129-128=1,第一个字节低七位为1,即为11 01(十六进制) 拿上边的c1 02 推回去

2*128=256 0xc1-0x80=0x41=65 65+256=321

来看一下之前抓的协议包里

第一位0x92比0x80大,所以看第二位0x01比0x80小,所以到此结束 即剩余长度为92 01

再算一遍

(0x01*0x80)+(0x92-0x80) = 0x92 = 196(dec)

即长度为192,笨办法查一下

9*16+5-3 = 146

对的

专家
2021-03-24 00:02 2楼

感谢楼主的分享,很实用了。

工程师
2021-03-24 00:21 3楼

感谢楼主的分享,很实用了。

院士
2021-03-24 09:27 4楼

楼主您这是使用什么抓包工具来操作的啊

院士
2021-03-24 11:43 5楼

找到上一篇的内容了:

http://forum.eepw.com.cn/thread/349881/1


谢谢楼主了。

专家
2021-03-24 13:39 6楼

看看了解一下

院士
2021-03-27 08:18 7楼

有实用性

专家
2021-03-27 08:50 8楼

学习MQTT

专家
2021-03-27 09:44 9楼

实用

助工
2021-03-28 09:33 10楼

有用。

共24条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]