概述
前言:
继上篇MQTT测试环境搭建后,接下来趁热打铁来分析MQTT通讯协议数据包,来加深对MQTT理解,因个人技术有限,若以下分析有误,望留言纠正,谢谢。
环境: MQTT服务器(Mosquitto,ubuntu) + MQTT客户端(paho, windows) + wireshark(抓包工具)
参考文献: MQTT-3.1.1-CN
特别说明: 测试用的MQTT服务器和客户端为3.1.1版本
一. connect数据包分析
1.wireshark设置捕获
tcp and port 1883 , 如下
2. connect数据包抓取
1) 首选确保在ubuntu中的MQTT服务器已经运行, 命令行中输入: sudo service mosquitto status
2)打开paho MQTT客户端,设置好连接参数,点击"连接"
3)成功抓到connect数据包
OK, 注意上面用红色框选出来的数据, 就是我们的connect数据包。
10 : 表示是 connect连接数据包, 如后续断开连接disconnect为 0x20
26:剩余长度,计算方式 len = 2*16 + 6 = 38, 大家可以数下从 00 04 ....72 64 是不是有38个字节哦(完全对的上哦)
继续,根据MQTTv3.1.1规范中,可变消息头的协议名称的关键字是"MQTT",如下
因此 connect数据 包中: 00 04 4d 51 54 54 04 对应为:
00 04 : 协议名称长度("MQTT", 如是v3.1,则协议"MQIsdp",则为00 06)
4d 51 54 54 : M Q T T
04 : 协议版本(03表示v3.1, 04表示v3.1.1)
接下来就是连接标志: c2
User Name Flag : 使用用户名登陆
Password Flag : 用户密码
Will Retain : 主要用户PUBLISH(发布,后续分析再讲)的消息,表示服务器要保留这次推送信息, 如果有新的订阅者出现,就把这消息推送给它,这里我们关闭该选型
Wil QoS : 主要用于PUBLISH(发布态)消息的,保证消息传递的次数。
00表示最多一次 即<=1
01表示至少一次 即>=1
10表示一次,即==1
11保留后用
Will Flag : 遗嘱,表示如果连接请求被接收, 遗嘱消息(Will Message)必须被存储再服务端,之后网络连接关闭时,服务器必须发布这个遗嘱消息。 除非服务器端收到disconnect报文时删除了这个遗嘱消息,遗嘱消息发布条件, 包括但不限于:
* 服务端检测到一个I/O错误或者网络故障
* 客户端再保持连接(Keep Alive)的时间内未能通讯
* 客户端没有先发送DISCONNECT报文直接关闭了网络连接
* 由于协议错误服务端关闭了网络连接
CleanSession : 清除会话,客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。 会话仅持续和网络连接同样长的时间。 与这个会话关联的状态数据不能被任何之后的会话重用。
Reserved : 保留。
对比下我们的设置(0xc2), 如下图: (完全符合哦)
继续,
00 3c : 表示KeepAlive 保持心跳间隔, time = 3*16 + 12 = 60(秒), 与上图 保持连接 60秒 吻合
00 09 : 表示clientID客户端ID 长度, len = 9
31 32 33 34 35 36 37 38 39 : 就是 clientID客户端ID, 长度刚好为9
00 05 : 表示用户名长度, len = 5
61 64 6d 69 6e : 用户名,ascii表示 -> "admin"(默认设置), 长度刚好为5
00 08 : 表示密码长度, len = 8
70 61 73 73 73 77 6f 72 64 : 密码, ascii 表示-> "password"(默认设置), 长度刚好为8
二. connect ack数据包分析
1. 抓取connect ack
分析:
20 : 表示connect ack消息类型
02 : 剩余长度
00 : bit7~bit1 保留位0, bit0 表示当前会话 ,当前为0(因为我们的connect连接包设置clean seesion 为1)
00 : 连接已被服务器接收, 代表连接成功
至此, 以上是MQTT 的connect连接及connect ack数据包分析, 至于各个字段的含义细节,可查阅MQTT-3.1.1-CN等相关资料了解
最后
以上就是忧伤西装为你收集整理的MQTT通讯协议分析(一): connect连接数据包的全部内容,希望文章能够帮你解决MQTT通讯协议分析(一): connect连接数据包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复