[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的消息格式。CONNACK消息没有消息负载(Payload),只有消息头:2个字节的固定消息头和2两个字节的可变消息头。总共4个字节

1. 固定消息头(Fixed Header): 16进制数据为:20 02

具体的协议格式,请见下面的表1

表1 – 固定消息头(Fixed Header)的格式

Bit


7


6


5


4


3


2


1


0


byte 1


MQTT Control Packet Type (2)


Reserved


0


0


1


0


0


0


0


0


byte 2


Remaining Length (2)


0


0


0


0


0


0


1


0

20表示是其当前的消息类型是:CONNACK

02 表示后面将跟着2个字节.

2.可变消息头(Variable Header): 16进制数据为:00 00

具体的协议格式,请见下面的表2

表2 – 可变消息头(Variable Header)的格式

 


描述


7


6


5


4


3


2


1


0


连接应答标志位


保留(没有使用)


SP1


byte 1


0


0


0


0


0


0


0


X


连接结果返回


byte 2


X


X


X


X


X


X


X


X

下面我们来分析其可变头的2个字节: 00 00

其中第一个00,目前没有什么特别的含义,是MQTT协议的保留字段,也许在将来的协议版本中会用到。

第二个字节的00 表示连接成功。MQTT协议对于返回的结果总共定义了6种类型(请见下面的表3): 连接接受,连接拒绝(不可接受的版本),连接拒绝(Client ID服务器不允许),连接拒绝(服务器不可达),连接拒绝(错误的用户名和密码),连接拒绝(客户端没有通过授权认证)。

表3 – 连接应答返回码值的含义


返回的连接码


描述


0


0x00 连接接受


连接接受


1


0x01 连接拒绝(不可接受的版本)


服务端不支持所连接的MQTT的协议


2


0x02 连接拒绝(Client ID服务器不允许)


Client ID符合UTF-8的标准,但是服务器不允许这个Client ID


3


0x03 连接拒绝(服务器不可达)


MQTT 服务器不可达


4


0x04 连接拒绝(错误的用户名和密码)


错误的用户名和密码


5


0x05 连接拒绝(客户端没有通过授权认证)


客户端没有通过授权认证


6-255


未来保留字段

这个消息格式简单吧,嘿嘿恭喜你在学习MQTT消息格式的旅途中又往前快速前进了一步,下章节,笔者将会继续讲解SUBSCRIBE消息格式,敬请关注和期待,谢谢.

时间: 2024-08-09 15:12:59

[7] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之CONNACK消息分析的相关文章

[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

[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软件,并

[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还是有

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.