[5] MQTT,mosquitto,Eclipse Paho---MQTT消息格式分析概述

我们知道MQTT是一个物联网协议的一个规范,MQTT的协议最新的两个版本是:3.1.1和3.1.0

(1) 3.1.0的规范如下

http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html

(2) 3.1.1的规范如下

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718029

规范3.1.0和3.1.1还是有不少的区别。比如可变头部中,在3.1.0的规范中,其关键字是,“MQISdP”

表1. MQTT V3.1规范可变消息头的前8个字节

  Description 7 6 5 4 3 2 1 0
Protocol Name
byte 1 Length MSB (0) 0 0 0 0 0 0 0 0
byte 2 Length LSB (6) 0 0 0 0 0 1 1 0
byte 3 ‘M‘ 0 1 0 0 1 1 0 1
byte 4 ‘Q‘ 0 1 0 1 0 0 0 1
byte 5 ‘I‘ 0 1 0 0 1 0 0 1
byte 6 ‘s‘ 0 1 1 1 0 0 1 1
byte 7 ‘d‘ 0 1 1 0 0 1 0 0
byte 8 ‘p‘ 0 1 1 1 0 0 0 0

表2. MQTT V3.1.1可变消息头的前6个字节


描述


7


6


5


4


3


2


1


0


协议名称


byte 1


Length MSB (0)


0


0


0


0


0


0


0


0


byte 2


Length LSB (4)


0


0


0


0


0


1


0


0


byte 3


‘M’


0


1


0


0


1


1


0


1


byte 4


‘Q’


0


1


0


1


0


0


0


1


byte 5


‘T’


0


1


0


1


0


1


0


0


byte 6


‘T’


0


1


0


1


0


1


0


0


Protocol Level


描述


7


6


5


4


3


2


1


0


byte 7


Level (4)


0


0


0


0


0


1


0


0

规范主要描述了消息的通用格式,消息的命令,消息流动等等的规范和规则。在前面的四个章节,我们对MQTT有了一个感性的大概认识,在接下来的系列文章,我将带大家把MQTT的下面14种命令消息通过抓包软件(WireShark)并结合具体的规范和大家全部过一遍。 注意,因为我用的Eclipse Paho API的java库,支持MQTT 3.1.1 的版本,且mosquitto也支持3.1.1的版本,所以本系列所有的抓包都会是基于MQTT 3.1.1的规范,而不是MQTT 3.1的规范,请大家注意。下面的表格描述了MQTT的14中不同的消息类型。

表3. MQTT的14种消息类型(Command message)


名字



信息流方向


描述


Reserved


0


Forbidden


Reserved


CONNECT


1


Client to Server


Client request to connect to Server


CONNACK


2


Server to Client


Connect acknowledgment


PUBLISH


3


Client to Server

or

Server to Client


Publish message


PUBACK


4


Client to Server

or

Server to Client


Publish acknowledgment


PUBREC


5


Client to Server

or

Server to Client


Publish received (assured delivery part 1)


PUBREL


6


Client to Server

or

Server to Client


Publish release (assured delivery part 2)


PUBCOMP


7


Client to Server

or

Server to Client


Publish complete (assured delivery part 3)


SUBSCRIBE


8


Client to Server


Client subscribe request


SUBACK


9


Server to Client


Subscribe acknowledgment


UNSUBSCRIBE


10


Client to Server


Unsubscribe request


UNSUBACK


11


Server to Client


Unsubscribe acknowledgment


PINGREQ


12


Client to Server


PING request


PINGRESP


13


Server to Client


PING response


DISCONNECT


14


Client to Server


Client is disconnecting


Reserved


15


Forbidden


Reserved

在接下来的章节我们将会逐一个给大家用WireShark抓包,并给大家一个一个分析其协议,敬请期待和关注,谢谢。

时间: 2024-08-01 19:11:41

[5] MQTT,mosquitto,Eclipse Paho---MQTT消息格式分析概述的相关文章

[3] MQTT,mosquitto,Eclipse Paho---如何使用 Eclipse Paho MQTT工具来发送订阅MQTT消息?

在上两节,笔者主要介绍了 MQTT,mosquitto,Eclipse Paho的基本概念已经如何安装mosquitto. 在这个章节我们就来看看如何用 Eclipse Paho MQTT工具来发送接收MQTT消息.Eclipse Paho MQTT工具是一个基于Java的Eclipse桌面客户端程序,其底层的和MQTT服务器进行的交互的java类库就是Eclipse Paho java库.假设我们在本机(127.0.0.1)已经启动了一个mosquitto MQTT服务器,其端口为1883.如

[2] MQTT,mosquitto,Eclipse Paho----mosquitto使用扫盲

既然要说后续系统都是围绕MQTT,mosquitto,Eclipse Paho展开,则在这里有必要先给大家简单说一下mosquitto的基本使用,扫一下盲.给大家简单介绍一下mosquitto在window系统下如何安装和启动. (1) 下载安装包 首先登录mosquitto的官方网站(http://mosquitto.org/),到下面的地址(http://mosquitto.org/download/)下载一个安装包,咱们以Window系统为例子.下载mosquitto-1.4.2-inst

[1] MQTT,mosquitto,Eclipse Paho----入门

MQTT,mosquitto,Eclipse Paho这三个单词陌生而又神秘.那么这三个单词究竟是什么意思,代表了什么技术,他们之间有关联吗?不着急,请听笔者慢慢给大家分享. (1)MQTT(英语全称,Message Queue Telemetry Transport),中文翻译过来就是遥测传输协议:其主要提供订阅/发布模式,更为简约.轻量,易于使用,针对受限环境(带宽低.网络延迟高.网络通信不稳定),属于物联网(Internet of Thing)的一个传输协议.具体协议内容,请参考:http

[6] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之CONNECT消息格式分析

在"[3] MQTT,mosquitto,Eclipse Paho---如何使用 Eclipse Paho MQTT工具来发送订阅MQTT消息?"一文中我已经和大家简单讲述了如何使用Eclipse Paho MQTT.那么当我们点击"Connect"按钮,究竟在TCP协议层发生了什么?如何通过MQTT规定的协议和TCP的二进制数据进行对比,从而更加深入的学习MQTT的消息格式呢?笔者将带领大家以CONNECT消息格式为例子,分析第一个MQTT的消息格式, MQTT的

[9] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之SUBACK(消息订阅应答)消息分析

0.前言 在上一节中(MQTT消息格式之SUBSCRIBE(消息订阅)消息分析),客户端发送了订阅的消息,这个时候,服务器端收到订阅主题的MQTT消息之后,肯定需要给一个应答,这个应答信息就是SUBACK(消息订阅应答).消息订阅应答相对来说比较简单. 1.准备步骤 (1) 首先打开WireShark软件,并启动监听 (2) 在Eclipse里面运行下面的代码 [java] view plaincopy import org.eclipse.paho.client.mqttv3.MqttClie

[7] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之CONNACK消息分析

在上节中([6] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之CONNECT消息格式分析)我们分析了CONNECT消息格式,我们知道CONNECT消息是客户端发送出去的,作为对客户端的连接请求,服务器端同样会有一个消息的返回,这个消息就是CONNACK的消息.我们在发出去CONNECT消息后,如果WireShark抓包工具依然开启的话,将会抓到类似于下面的TCP消息,其16进制为:20 02 00 00,那么其代表什么意思呢? 首先我们来看CONNACK的消息格

[8] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之SUBSCRIBE(消息订阅)消息分析

0.前言 我们在上几节的协议分析中,发送连接的请求用的是Eclipse Paho MQTT工具,那么笔者这一次改一下,咱们这次用代码来发送Subscribe的MQTT消息,请注意,下面的代码是基于Eclipse Paho Java API之上的代码,在运行下面的代码前,请先去下载Eclipse Paho Java库,其下载地址为:https://www.eclipse.org/paho/clients/java/. 下面我们正式切入正题. 1.准备步骤 (1) 首先打开WireShark软件,并

MQTT协议实现Eclipse Paho学习总结

转载自:http://xiaoxinzhou.blog.163.com/blog/static/20704538620145411306821/ 一.概述 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放.简单.轻量.易于实现.这些特点使它适用于受限环境.例如,但不仅限于此: 网络代价昂贵,带宽低.不可靠. 在嵌入设备中运行,处理器和内存资源有限. 该协议的特点有: 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合. 对负载内容屏蔽的消息传输. 使

Paho - MQTT C Cient的实现

来自我的CSDN博客 ??在前几天,我大致了解了一下Paho C项目,并对其的一些内容进行了翻译.俗话说,光说不练假把戏,今天就给大家讲一下使用Paho的客户端库文件实现MQTT C Client的过程. 安装 ??本文是在Linux下安装的,推荐直接进行克隆并安装即可. git clone https://github.com/eclipse/paho.mqtt.c.git cd paho.mqtt.c make sudo make install ??在make完之后,在paho.mqtt.