美文网首页路由联盟
3-MQTT协议分析

3-MQTT协议分析

作者: Creator_Ly | 来源:发表于2020-07-06 09:08 被阅读0次

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

1. 报文

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

Bit 7 - 4 3 - 0
byte 1 MQTT控制报文的类型 用于指定控制报文类型的标志位
byte 2... 剩余长度
1.1 MQTT控制报文的类型:
报文类型 字段值 数据方向 描述
保留 0 禁用 保留
CONNECT 1 Client ---> Server 客户端连接到服务器
CONNACK 2 Server ---> Client 连接确认
PUBLISH 3 Client <--> Server 发布消息
PUBACK 4 Client <--> Server 发布确认
PUBREC 5 Client <--> Server 消息已接收(QoS2第一阶段)
PUBREL 6 Client <--> Server 消息释放(QoS2第二阶段)
PUBCOMP 7 Client <--> Server 发布结束(QoS2第三阶段)
SUBSCRIBE 8 Client ---> Server 客户端订阅请求
SUBACK 9 Server ---> Client 服务端订阅确认
UNSUBACRIBE 10 Client ---> Server 客户端取消订阅
UNSUBACK 11 Server ---> Client 服务端取消订阅确认
PINGREQ 12 Client ---> Server 客户端发送心跳
PINGRESP 13 Server ---> Client 服务端回复心跳
DISCONNECT 14 Client ---> Server 客户端断开连接请求
保留 15 禁用 保留
1.2 控制报文类型的标志位:
控制报文 固定报头标志 Bit 3 Bit 2 Bit 1 Bit 0
CONNECT Reserved 0 0 0 0
CONNACK Reserved 0 0 0 0
PUBLISH Used in MQTT 3.1.1 DUP QoS QoS RETAIN
PUBACK Reserved 0 0 0 0
PUBREC Reserved 0 0 0 0
PUBREL Reserved 0 0 1 0
PUBCOMP Reserved 0 0 0 0
SUBSCRIBE Reserved 0 0 1 0
SUBACK Reserved 0 0 0 0
UNSUBSCRIBE Reserved 0 0 1 0
UNSUBACK Reserved 0 0 0 0
PINGREQ Reserved 0 0 0 0
PINGRESP Reserved 0 0 0 0
DISCONNECT Reserved 0 0 0 0
  • 看上面的消息可以观察到PUB的QOS标志直接位于“控制报文类型的标志位”里面,而CONNECT和SUB的QOS标记却不在头部。
  • 抓包可以发现CONNECT和SUB的QOS标记位于后续的数据里面
  • PING心跳没有QOS设置

2. 连接

报文类型 数据方向 描述
0x10 client->broker MQTT CONNECT
0x20 broker->client MQTT CONNACK
返回码响应 描述
0 0x00连接已接受 连接已被服务端接受
1 0x01连接已拒绝,不支持的协议版本 服务端不支持客户端请求的MQTT协议级别
2 0x02连接已拒绝,不合格的客户端标识符 客户端标识符是正确的UTF-8编码,但服务端不允许使用
3 0x03连接已拒绝,服务端不可用 网络连接已建立,但MQTT服务不可用
4 0x04连接已拒绝,无效的用户名或密码 用户名或密码的数据格式无效
5 0x05连接已拒绝,未授权 客户端未被授权连接到此服务器
6-255 保留 如果认为上表中的所有连接返回码都不太合适,那么服务端必须

3. 心跳

一个心跳有三个包

报文类型 数据方向 描述
0xc0 client->broker MQTT PINGREQ
0xd0 broker->client MQTT PINGRESP
client->broker TCP ACK

4. 发布

4.1 QOS=0时
报文类型 数据方向 描述
0x30 client->broker MQTT PUBLISH
broker->client TCP ACK
4.2 QOS=1时
报文类型 数据方向 描述
0x32 client->broker MQTT PUBLISH
0x40 broker->client MQTT PUBACK
4.3 QOS=2时
报文类型 数据方向 描述
0x34 client->broker MQTT PUBLISH
0x50 broker->client MQTT PUBREC
0x62 client->broker MQTT PUBREL
0x70 broker->client TCP 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

相关文章

  • 3-MQTT协议分析

    MQTT的协议有必要的话也是可以抓包看一下其交互过程,加深理解其原理 1. 报文 固定报文格式:类型+标志位 Bi...

  • 协议分析学习

    Ⅰ.协议分析用途 协议分析(Protocol Analysis),也称作网络分析(Network Analysis...

  • Python 高级 9 HTTP协议

    浏览器访问服务器的过程、HTTP协议、开发者工具、HTTP请求报文协议分析、HTTP响应报文协议分析、长连接和短连...

  • 信息安全

    信息安全 反编译 协议分析

  • http协议那些事

    1.输入网址后发生了什么2.http协议详解3.https协议分析4.http2协议分析5.了解http36.后台...

  • 自定义协议方法

    发送消息实现聊天功能的通讯字节流协议 接受数据、分析协议

  • wireshark学习笔记(三)——ARP协议分析

    ARP协议 什么是ARP协议 协议分析篇第一个要研究的就是ARP协议。ARP(Address Resolution...

  • mysql 协议分析-握手协议

    ★ 握手过程:sync -> ack, sync -> ackhanshake req -> handshake ...

  • RTSP 协议初步解析

    RTSP 协议分析1.概述:RTSP(Real Time Streaming Protocol),实时流传输协议,...

  • Swift--协议

    协议概念 协议定义和遵从 协议方法 协议属性 面向协议编程 协议概念 几何图形这种类在面向对象分析与设计方法学中称...

网友评论

    本文标题:3-MQTT协议分析

    本文链接:https://www.haomeiwen.com/subject/weaiqktx.html