(转)MQTT 协议解析(https://blog.csdn.net/amwha/article/details/74464554)

0. 准备

  1. wireshark安装包:网络抓包工具
  2. qmqtt源码:mqtt客户端源码(Qt版本)
  3. 官网:http://mqtt.org/
  4. 英文版协议说明文档:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
  5. 中文版协议说明文档 https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html

1、帧

1.1帧结构

Fixed header, present in all MQTT Control Packets
Variable header, present in some MQTT Control Packets
Payload, present in some MQTT Control Packets

帧 = 固定头+可变头+载荷

1.2 帧类型

namevaluedrirectionDescription
Reserved0ForbiddenReserved
CONNECT0Client to ServerClient request to connect to Server
CONNACK0Server to ClientConnect acknowledgment
PUBLISH0Client to Server or Server to ClientPublish message
PUBACK0同上Publish acknowledgment
PUBREC0同上Publish received (assured delivery part 1)
PUBREL0同上Publish release (assured delivery part 2)
PUBCOMP0同上Publish complete (assured delivery part 3)
SUBSCRIBE0Client to ServerClient subscribe request
SUBACK0Server to ClientSubscribe acknowledgment
UNSUBSCRIBE0Client to ServerUnsubscribe request
UNSUBACK0Server to ClientUnsubscribe acknowledgment
PINGREQ0Client to ServerPING request
PINGRESP0Server to ClientPING response
DISCONNECT0Client to ServerClient is disconnecting
Reserved0ForbiddenReserved

2、 wireshark 使用

打开wireshark 后主界面会显示网络的连接有那些,如果安装了虚拟机的话会有如下的连接:
这里写图片描述

选择 realtek PCIe……..
双击进入如下界面

这里写图片描述

选择过滤为 mqtt(见左上角),这样的话wireshark就只会显示MQTT协议的包了。

3、connect 帧

与服务器连接时可以使用will topic 和will msg,

它俩的作用是什么呢?
就是在这个客户端非正常的退出时,服务器会推送这个topic给定阅了这个topic的客户端。
这里写图片描述
这里我们的client id没有填写,而在我们的抓包中(下图)可以看到到一个字串,这是QMQTT生成的一个uuid

这里写图片描述

对照协议文档再看wrieshark所抓的包,就可以清楚的明白,帧结构了。

4、subscribe 帧

这里我们定阅了一个主题是:guangzhou/huangpu

这里写图片描述
抓出来的包如下:
这里写图片描述

5、publish 帧

这里我们发布了一个主题消息:work here
这里写图片描述
以下是抓到的包:
这里写图片描述

6、总结

其它的帧可以通过同样的方法可以抓到,如此我们就可以根据数据来分析帧的结构了。(对照文档)

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值