3-MQTT协议分析

MQTT的协议有必要的话也是可以抓包看一下其交互过程,加深理解其原理

1. 报文

固定报文格式:类型+标志位

Bit7 - 43 - 0
byte 1MQTT控制报文的类型用于指定控制报文类型的标志位
byte 2…剩余长度
1.1 MQTT控制报文的类型:
报文类型字段值数据方向描述
保留0禁用保留
CONNECT1Client —> Server客户端连接到服务器
CONNACK2Server —> Client连接确认
PUBLISH3Client <–> Server发布消息
PUBACK4Client <–> Server发布确认
PUBREC5Client <–> Server消息已接收(QoS2第一阶段)
PUBREL6Client <–> Server消息释放(QoS2第二阶段)
PUBCOMP7Client <–> Server发布结束(QoS2第三阶段)
SUBSCRIBE8Client —> Server客户端订阅请求
SUBACK9Server —> Client服务端订阅确认
UNSUBACRIBE10Client —> Server客户端取消订阅
UNSUBACK11Server —> Client服务端取消订阅确认
PINGREQ12Client —> Server客户端发送心跳
PINGRESP13Server —> Client服务端回复心跳
DISCONNECT14Client —> Server客户端断开连接请求
保留15禁用保留
1.2 控制报文类型的标志位:
控制报文固定报头标志Bit 3Bit 2Bit 1Bit 0
CONNECTReserved0000
CONNACKReserved0000
PUBLISHUsed in MQTT 3.1.1DUPQoSQoSRETAIN
PUBACKReserved0000
PUBRECReserved0000
PUBRELReserved0010
PUBCOMPReserved0000
SUBSCRIBEReserved0010
SUBACKReserved0000
UNSUBSCRIBEReserved0010
UNSUBACKReserved0000
PINGREQReserved0000
PINGRESPReserved0000
DISCONNECTReserved0000
  • 看上面的消息可以观察到PUB的QOS标志直接位于“控制报文类型的标志位”里面,而CONNECT和SUB的QOS标记却不在头部。
  • 抓包可以发现CONNECT和SUB的QOS标记位于后续的数据里面
  • PING心跳没有QOS设置
2. 连接
报文类型数据方向描述
0x10client->brokerMQTT CONNECT
0x20broker->clientMQTT CONNACK
返回码响应描述
00x00连接已接受连接已被服务端接受
10x01连接已拒绝,不支持的协议版本服务端不支持客户端请求的MQTT协议级别
20x02连接已拒绝,不合格的客户端标识符客户端标识符是正确的UTF-8编码,但服务端不允许使用
30x03连接已拒绝,服务端不可用网络连接已建立,但MQTT服务不可用
40x04连接已拒绝,无效的用户名或密码用户名或密码的数据格式无效
50x05连接已拒绝,未授权客户端未被授权连接到此服务器
6-255保留如果认为上表中的所有连接返回码都不太合适,那么服务端必须
3. 心跳

一个心跳有三个包

报文类型数据方向描述
0xc0client->brokerMQTT PINGREQ
0xd0broker->clientMQTT PINGRESP
client->brokerTCP ACK
4. 发布
4.1 QOS=0时
报文类型数据方向描述
0x30client->brokerMQTT PUBLISH
broker->clientTCP ACK
4.2 QOS=1时
报文类型数据方向描述
0x32client->brokerMQTT PUBLISH
0x40broker->clientMQTT PUBACK
4.3 QOS=2时
报文类型数据方向描述
0x34client->brokerMQTT PUBLISH
0x50broker->clientMQTT PUBREC
0x62client->brokerMQTT PUBREL
0x70broker->clientTCP PUBCOMP
5. 抓包

【MQTT】使用Wireshark分析MQTT协议:
https://blog.csdn.net/yannanxiu/article/details/71310723

  • 更新到最新的版本可以可以直接解析mqtt的报文(必须是1883端口的才可以解析)
  • 但是还是没办法解析mqtts的报文,会显示BitTorrent(比特流)
  • 可以用端口过滤(tcp.dstport == 1883) || (tcp.srcport == 1883)

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html
https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32-C3是一款基于ESP32系列的微控制器,它支持MQTT协议MQTT是一种轻量级的消息传输协议,用于在物联网设备之间进行可靠的通信。在ESP32-C3上使用MQTT协议可以实现设备与设备之间的数据传输和控制。 关于ESP32-C3和MQTT协议的使用,可以参考以下内容: 1. 基础介绍:了解MQTT协议的基本概念和ESP-MQTT的基础知识,包括SSL和MQTT over WebSocket等内容。\[1\] 2. 示例测试:可以使用测试工具和示例代码进行测试和分析。测试工具可以帮助你模拟MQTT通信场景,示例代码可以帮助你理解和实现ESP32-C3与MQTT的连接和通信。\[2\] 3. MQTT over WebSocket:了解MQTT over WebSocket的概念和用途,它可以在MQTT设备和Web端之间建立连接和通信。\[2\]\[3\] 总结来说,ESP32-C3可以通过MQTT协议实现与其他设备之间的通信。你可以使用MQTT over WebSocket来支持ESP32-C3与Web端的通信。希望这些信息对你有所帮助。 #### 引用[.reference_title] - *1* *2* *3* [ESP32-C3入门教程 网络 篇(三、 MQTT 协议基础介绍及测试)](https://blog.csdn.net/weixin_42328389/article/details/123049977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值