MQTT控制报文(连接)

1.CONNECT – 连接服务端

1.1 可变报文 (协议名 + 协议级别 + 连接标志 + 保持连接)

1.1.1 协议名(内容固定,标识是MQTT协议 。 前2个字节表示长度,后4个字节ASCII码的MQTT)

MQTT控制报文(连接)

1.1.2 协议级别(8位的无符号值表示协议的修订版本,对于3.1.1版协议,协议级别字段的值是4(0x04))

MQTT控制报文(连接)

1.1.3 连接标志

MQTT控制报文(连接)

注:第0位一定是0

Clean Session:客户端和服务端可以保存会话状态,以支持跨网络连接的可靠消息传输

0:(false)缓存住连接断开时的所有Qos 1 和Qos 2级别的消息

1:(true) 重连时不会收到旧消息

Will Flag:遗嘱标志

1:遗嘱消息会存储在服务器,网络连接关闭时服务器发布这个遗嘱消息,除非收到主动发送的disconnect报文,会删除这个遗嘱。主要目的 就是非主动断开连接(网络断开等)时的处理

Will QoS:遗嘱消息 服务质量等级(0  1  2  )

Will Retain:遗嘱标志是1时才有效,将遗嘱消息当作 非保留消息/保留消息 发布

Password Flag:用户名标志是0,则密码也必须是0;1 有密码

User Name Flag:1 有用户名

1.1.4 保持连接 Keep Alive(心跳包)

MQTT控制报文(连接)

在KeepAlive时间内(单位秒)发送PINGREQ报文,使用返回的PINGRESP报文判断网络和服务端的活动状态

可变报头非规范示例

MQTT控制报文(连接)

1.2 有效载荷 Payload

组成:客户端标识符,遗嘱主题,遗嘱消息,用户名,密码 

1.2.1 客户端标识符ClientId(UTF-8编码字符串)

只能是数字和字母

1.2.2 Will Topic

1.2.3 Will Message  2个字节的遗嘱长度+遗嘱消息

1.2.4 User Name 服务端可以将它用于身份验证和授权

1.2.5 Password  2个字节的数据长度+数据

MQTT控制报文(连接)

 

2.CONNACK – 确认连接请求

2.1 固定报头

MQTT控制报文(连接)

2.2 可变报头(2个字节)

第一个字节:连接确认标志

第1-7位:保留,都设置位0 

第0位:(Session present)connect的cleanSession是1就设置成0;cleanSession是0,如果服务端已经保存了会话状态则是1,否则是0

 

服务端的连接返回码不是0,session present必须是0;

第二个字节:连接返回码

MQTT控制报文(连接)