一开始直接过滤没有发现mqtt的协议(后来发现是开始捕获数据的时候,1883端口刚好没有数据),上网看了要加.lua脚本,加了不好用。有的博客说最新的wireshark不需要脚本,于是直接升级到了Version 3.2.2 (v3.2.2-0-ga3efece3d640)。由于端口问题和测试时间问题还是没有数据。看到别的博客要先设置端口,在wireshark的“编辑”-》“首选项”-》“Protocols”-》“MQTT”中设置端口,
然后就能看到过滤出mqtt协议的数据了(因为我是用网页发送mqtt数据,所以端口号是8083).后来把端口号修改成1883,服务启动之后也有数据了。
记录一下mqtt协议
1.两个byte的固定头
| bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| byte 1 | Message Type | DUP flag | QoS level | RETAIN | ||||
| byte 2 | Remaining Length | |||||||
- 第一个byte4-7bit的意义:
|
名字 |
值 | 流向 | 描述 |
| CONNECT | 1 | C->S | 客户端请求与服务端建立连接 |
| CONNACK | 2 | S->C | 服务端确认连接建立 |
| PUBLISH | 3 | CóS | 发布消息 |
| PUBACK | 4 | CóS | 收到发布消息确认 |
| PUBREC | 5 | CóS | 发布消息收到 |
| PUBREL | 6 | CóS | 发布消息释放 |
| PUBCOMP | 7 | CóS | 发布消息完成 |
| SUBSCRIBE | 8 | C->S | 订阅请求 |
| SUBACK | 9 | S->C | 订阅确认 |
| UNSUBSCRIBE | 10 | C->S | 取消订阅 |
| UNSUBACK | 11 | S->C | 取消订阅确认 |
| PING | 12 | C->S | 客户端发送PING(连接保活)命令 |
| PINGRSP | 13 | S->C | PING命令回复 |
| DISCONNECT | 14 | C->S | 断开连接 |
- 第一个byte第3bit DUP flag是用来在保证消息传输可靠的,如果设置为1,则在下面的变长头部里多加MessageId,并需要回复确认,保证消息传输完成,但不能用于检测消息重复发送
- 第一个byte1-2bit QoS主要用于PUBLISH(发布态)消息的,保证消息传递的次数。00表示最多一次 即<=1;01表示至少一次 即>=1;10表示一次,即==1;11保留后用
- 第一个byte第0bit retain 主要用于PUBLISH(发布态)的消息,表示服务器要保留这次推送的信息,如果有新的订阅者出现,就把这消息推送给它。如果不设那么推送至当前订阅的就释放了。