问答中心

Answer Center

下载中心

视频中心

常见问题

售后服务

报文是什么意思?mqtt协议报文格式详解

时间:2022-11-05 14:26:42 

点击:2834 

关键词:报文,mqtt,报文格式 

问题
报文是什么意思?mqtt协议报文格式详解

回答
报文是网络中交换和传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那就是报文头。
 
mqtt协议报文结构
 
固件报头Fixed header
 
最多一次(0), 发出去了就不管了
 
至少一次(1),发出必须要等接收方回复ack,没有回复,那么就找时机重发,接收方需要处理去重
 
准确一次(2),保证只发一次,需要持久化,重复消息自动去重,并且只有当接收方把消息投递出去,才算完成
 
控制报文的类型 Control Packet type,14种有效类型: [connect, publish, subscribe,.....]
 
第一个1个字节前4位,
 
标志Flags,
 
第一个1个字节后4位,
 
DUP 控制报文是否为重复报文,只有PUBLISH才会有DUP为1的情况,其他的报文类型都是0
 
QoS 控制PUBLISH报文的质量等级,
 
publish
 
publish - pubrec
 
publish - pubrec - pubrel - pubcomp
 
RETAIN,
 
每个topic只有唯一的保留消息,每个client订阅的时候,会立刻读取到保留消息
 
如果订阅者无法与broker连接,可以通过retain消息,让订阅者下次连接订阅成功时一次接受所有的内容
 
发布者定时发布retain消息,订阅者可以根据retain消息的变化推测发布者状态
 
剩余长度 Remaining Length
 
从第二个字节开始,最大长度是4个字节,低位在前,高位在后,通过每一个字节第一位[0不需要,1需要]确定是否需要继续往后继续计算,也就是最多可以存储256M, 最大值16进制为:0xFF,0xFF,0xFF,0x7F
 
可变报头Variable header
 
可变报文部分是根据不同的报文类型,这部分的内容也不同
 
比如: 连接报文会有用户名密码标识,遗嘱标识,是否清理会话标识等,发布报文会有topic信息
 
报文标识符 PackageIdentifier [messageId]
 
标识符作用:
 
2个字节最大65535
 
这些报文类型需要:PUBLISH(QoS > 0), PUBACK, PUBREL, PUBCOMP, SUBSCRIBE,SUBACK, UNSUSCRIBE,UNSUBACK
 
重发使用相同的标识符
 
确认后释放标识符
 
有效载荷Payload
 
以下这些报文类型才有payload:
 
CONNECT(用户名密码,遗嘱消息,遗嘱topic,客户端标识),
 
PUBLISH(可有可无,根据实际情况),
 
SUBSCRIBE(订阅的topic信息集合),
 
SUBACK(按顺序返回的订阅的topic的报文质量等级集合)
 
UNSUBSCRIBE(取消订阅的topic信息集合)
 
报文类型处理逻辑(接收方的处理逻辑)
 
CONNECT 连接服务端 客户端--服务端
 
报文解析错误:
 
如果报文解析错误,连接失败
 
如果解析的报文标识符不合法,连接失败
 
报文解析成功
 
重发QoS1的未完成的消息
 
重发QoS2的未完成的消息
 
连接成功,保存会话信息
 
连接成功,回会CONNACK报文给客户端
 
如果之前保存的会话信息,cleanSession == true,需要清空保存的session,订阅信息,需要重发的发布QoS1报文,需要重发的发布的QoS2的报文
 
关闭之前的保存的会话
 
如果报文标识符不存在,连接失败
 
如果用户密码验证失败,连接失败
 
如果是会话中已经存在该连接,说明是发送重复的连接报文
 
检查心跳包,将已经存在的心跳包的间隔时间,更新成客户端指定的时间
 
如果连接报文中存在遗嘱消息,需要将遗嘱消息保存在本次连接的会话对象中
 
如果本次连接的报文cleanSession == false,也就是不清理会话,如果是客户端重连的,可能存在服务端有部分信息没有发送出去,需要重新发送给该客户端
 
CONNACK 确认连接请求 服务端--客户端
 
客户端确认连接成功
 
PUBLISH 发布消息 双向
 
客户端发送给服务端,是为了将报文分发到其他订阅匹配的客户端
 
服务端发送给客户端,是为了发消息给匹配订阅的客户端
 
根据不同的质量等级进行不同的回复报文
 
QoS 0 直接publish消息即可
 
QoS 1 PUBLISH消息之后,还需要回复PUBACK给来源客户端
 
Qos 2 PUBLISH消息之后,还需要回复PUBREC给来源客户端 (后续客户端端发送PUBREL,再服务端发送PUBCOMP完成整个生命周期)
 
如果是保留消息,需要覆盖之前保存的保留消息
 
PUBACK 发布确认 双向
 
带着messageId回复发布方,通知发布成功
 
PUBAREC 发布收到 双向
 
带着messageId回复发布方,通知收到了发布报文
 
PUBREL 发布释放 双向
 
带着messageId回复接收方,可以释放报文
 
PUBCOMP 发布完成 双向
 
带着messageId回复发布方,可以发布完成了
 
SUBSCRIBE 订阅主题 客户端--服务端
 
根据订阅的主题列表,
 
保存订阅信息
 
回复SUBACK,按顺序返回订阅报文中的报文质量等级集合
 
根据订阅的主题,处理服务端保留信息,立即PUBLISH给客户端
 
SUBACK 订阅确认 服务端-- 客户端
 
客户端确认订阅成功
 
UNSUBSCRIBE 取消订阅 客户端--服务端
 
移除掉该客户端保存的订阅主题
 
回复UNSUBACK报文
 
UNSUBACK 订阅确认 服务端-- 客户端
 
客户端确认取消订阅成功
 
PINGREQ 心跳请求 客户端--服务端
 
返回客户端PINGRESP报文
 
PINGRESP 心跳响应 服务端--客户端
 
收到报文确认服务端正常

 

免责声明:本网站部分文章、图片等信息来源于网络,版权归原作者平台所有,仅用于学术分享,如不慎侵犯了你的权益,请联系我们,我们将做删除处理!


产品系列

工业智能网关
物通博联·WG系列工业智能网关是一款支持采集各种PLC,仪器仪表,水环保,电力设备,CNC等各种工业设备数据,具有协议解析,边缘计算的高可靠性工业智能网关,是构建工业互联网系统的核心边缘节点。
了解更多
工业数采终端
物通博联·WD系列工业数采终端,主要实现对现场工业设备的数字量DI、DO,模拟量AI,AO的采集和控制,实现LORA本地组网和4G数据上云的功能,从而实现对现场传感器、执行机构、指示灯等数采和控制。
LoRa终端
LoRa网关
DTU
RTU
4G无线IO
WIFI无线IO
了解更多
工业联网终端
物通博联·工业联系终端包含WR系列工业无线路由、WC系列网段隔离器和WS系列工业交换机。 支持5G/4G/WIFI/以太网等方式联网接入,支持VPN组网,为现场设备提供低时延、高可靠、高安全的网络接入,从而实现大规模设备组网应用。
了解更多
设备远程维护系统
物通博联·设备远程维护系统是一套实现对分散式设备远程维护和运营的软硬件系统,为工程师搭建一条通往远端设备现场的安全数据通道,实现对现场设备(PLC)的远程配置、远程诊断、远程调试和远程升级程序。
设备远程配置
设备远程调试
远程上下载程序
设备远程维护
设备远程监控
设备预防式维护
了解更多
工业设备数据平台
物通博联·工业设备数据平台是一款高并发的工业设备远程管理和工业设备数据可视化的云平台,广泛应用于智能工厂数采中台、远程设备运营管理平台、各行业的物联网数据云平台等。
海量设备接入
高效数据采集
丰富组态控件
强大的数据分析
预防式设备维护
丰富的API接口
了解更多
设备远程接入平台
物通博联·设备远程接入云平台是一款针对分布式设备数据实时监测的快速接入平台,采用SAAS云服务方式为工业现场的各种工业设备的数据互通互联建立实时在线的数据通道。
分布式项目监控
设备互通互联
无需公网IP
快速低成本接入
实时在线通道
点对点通信
了解更多

物通博联,助您开启工业数字化和智能化之路

申请样机
在线
咨询
免费
试用