[07] 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消息格式,敬请关注和期待,谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值