MQTT报文组装实现1

MQttNet有些功能不支持,只是基本的操作,

比如 匹配规则 不支持

 

WireShark抓包工具

 

 可能有三种内容的拼装2、3、4

 

 

三、通信载荷

 User Name和Password如果是0的话,后面传了就会出错

MQTT通讯过程中,所有出现不支持的报文,标记不对应,功能不支持的,就直接断开连接

都分为两块:长度+内容n

长度说明,后面还有多少个字节的长度属于当前信息

 

应用

 客户端服务器,基于TCP必然有个连接的过程

不止三次握手

还需要连接报文,建立连接

 

【案例】连接服务器

一、请求

 1、固定报头

消息类型前4个字节

0001,后面4位保留,0就可以

剩余字节,为了短平快的推送,尽量不要太长 ,只有1个字节,0-255长度,大部分都满足

不建议一次性拼接太长 

2、可变报头

协议长度4,

协议:MQTT

需要携带用户名和密码

Will Retain:不保存接受的消息

Qos:0至多一次

Will Flag:0

Clean Session:保留session

保留:0

Keep Alive:100s

3、载荷:

ClientId 连接id

 

高级用法

 Will Flag如果是1的话

说明服务端上一次连接断开之后还保存了一些信息,

 

二、响应

就是2

0010

剩余两个字节

1个跟Clean Session有关,不需要关

2个Return Code

如果是0代表已经连接成功

也可以添加自定义

 

每个字节都是8个位,代码实现理论更清晰

 

订阅:

8:订阅请求

9:订阅请求确认

 

请求之后不一定马上就要订阅,订阅不确定什么时间,超过KeepAlive时间,

保证不被踢掉,就回心跳确认

12:心跳请求:1100+0000

13:心跳确认:1101+0000

只有固定报头

 

订阅固定报头,后四位0010,协议规定

可变报文package identifier,无实际用途

QoS2的过程中体现package identifier   ,保存消息的id,

topic01长度

载荷后两位QoS只是约定,具体还是看发送的消息,发布的最高值处理

同时订阅多个主题 ,有几个加几个

时间久了,有很多需要重新订阅,一次性订阅,

分多次,分组

长度指定,超过255,0x80

 

响应

package identifier

多对多

 

 

复杂过程

多种情况

QoS0,只管发布

 

Qos1

请求Pubush

DUP重试次数

主题Topic01字节长度,7个字节

PId

Message内容】

剩余字节长度

 

反馈Puback

PId返回确认才会完成,删掉存储的Pid

通过Pid去匹配,不需要额外存储什么东西 

如果没有匹配到,一定时间内需要重新发送

把固定报头3位设置为1

 

Qos2

多了个确认过程

PubRec 变化报文类型 0100,再发送一次Pid

Pubrel 报文类型0100,倒数第二位1,不一样的地方,

Pubcomp完成,0100,pid

围绕Pid处理,2个字节,带宽小

 基本上所有的请求都会需要固定报头

可变报头,可有可无,内容变化很大

 

 

 

主题:

Topic01

服务端有一个记录列表,对应客户端列表

多对多的关系

 没体现树状结构

不仅仅支持字符串,还支持分层/

a/b/c/d

a/b/c/d/e

a/b/c/d/f

a/b/c/d/g

分组,产线,车间,厂区,

某个车间下的所有设备发送,不用都录入,可用通配符

1、#:代表当前节点往后的所有节点,包括子节点,a/b/c/#,上面所有节点都可以支持

2、+:代表当前节点下的所有节点  a/b/c/+,只会匹配  a/b/c/d

3、$ :$SYS,系统自己处理的,实际应用一般不会自己处理

 

 规则:

1、至少一个字符

2、区分大小写

3、可以包含空格,前后中间都可以

4、/区分前后 

5、不能包含空字符 0X20  

6、不能超过65535

 

 

 MQTTNET不支持主题通配符,服务端和客户端都不支持

 win10应用商店下载的MQTTBox也不支持+#

 

EMQ的,服务器是商用的,也支持5.0,支持的完善

MQTTX支持通配符,

也支持汉字

服务器主题中间#不行

车间1#/产线1/设备1#

车间1/产线1/设备1#

 服务器是Apollo,阿波罗的也支持通配符主题

TCP、TIS、WS、WSS、协议都支持

默认密码admin

 

不关心通配符的话,MQTTNet入门级也够了

 

posted on 2025-03-01 09:40  张彦山  阅读(35)  评论(0)    收藏  举报