MQTT控制报文(连接)
1.CONNECT – 连接服务端
1.1 可变报文 (协议名 + 协议级别 + 连接标志 + 保持连接)
1.1.1 协议名(内容固定,标识是MQTT协议 。 前2个字节表示长度,后4个字节ASCII码的MQTT)
1.1.2 协议级别(8位的无符号值表示协议的修订版本,对于3.1.1版协议,协议级别字段的值是4(0x04))
1.1.3 连接标志
注:第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(心跳包)
在KeepAlive时间内(单位秒)发送PINGREQ报文,使用返回的PINGRESP报文判断网络和服务端的活动状态
可变报头非规范示例
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个字节的数据长度+数据
2.CONNACK – 确认连接请求
2.1 固定报头
2.2 可变报头(2个字节)
第一个字节:连接确认标志
第1-7位:保留,都设置位0
第0位:(Session present)connect的cleanSession是1就设置成0;cleanSession是0,如果服务端已经保存了会话状态则是1,否则是0
服务端的连接返回码不是0,session present必须是0;
第二个字节:连接返回码