MQTT协议解析(上)

一:背景:

MQTT协议是基于TCP/IP协议栈构建的异步通信协议,是轻量级的发布订阅传输协议,MQTT将发布者和接受者中间进行分离,可以在不可靠的网络中进行拓展,适用于设备硬件存储空间有限或者网络带宽有限的场景。

注:MQTT协议支持TLS/SSL的加密通信,保证信息安全。

二:名词解构:

1:Client(客户端):发布消息,订阅/取订消息,连接/断开代理的连接。

2:Server:(服务端/代理端):充当发布消息的客户端和已订阅的客户端的中介。

 接受多个订阅者,只接受一个发布者,点对点。

处理客户端/订阅者的各类诉求。

转发与客户端订阅匹配的消息。

3:Topic(主题):消息的类型,订阅者在订阅后就会接收到该主题内容/负载。

4:Payload(负载):消息的内容。

5:Session(会话):客户端和服务器之间的信息交互。

三:三种服务质量(QOS)

1:QOS 0:最多一次,这一级别会发生消息丢失或者重复,其依赖于TCP/IP网络,<=1次

2:QOS 1:至少发送一次(至少一次的将消息发送给订阅者),消息会确保到达,但是消息会重复 >=1次。

3:QOS 2:只有一次,发送一次消息(必然到达) =1,适用于严格计费的系统,花销也大。

 

     

四:MQTT的三大结构之:固定头

 

1:固定头:存在于所有的MQTT数据包中,表示数据包类型及数据包分组类标识,包括:连接,发布,订阅。

固定头=消息类型+DUP+可靠等级+RETAIN

地址\bit76543210
Byte1MQTT数据包类型不同类型MQTT数据包具体标识
Byte2                                     剩余长度

内容长度:八位四字节:0~127,若其为大于127的值,用最高位表示是否有后续字节,数据包最大可以容纳256MB的数据。

所以,第一个字节的高四位可以确定消息报文的类型;4个bit位可以确定16种类型;0000和1111是保留字段。

MQTT中有关Bit的知识:

Bit的【3-0】位:为标志位,用来控制报文的类型的字段

(1):其中Bit【3】为DUP字段,若是DUP=1,则该数据包为一条重复的消息,否则该数据为第一次发布的消息。

(2):Bit【2-1】为QOS 字段:QOS 0:Bit1=0 Bit2=0 至多一次消息发送。

QOS1:Bit1=1 Bit2=0 至多一次消息发送。

QOS2:Bit1=0 Bit2=1只发送一次消息。

非法:Bit1=1Bit2 空置,服务器认为非法会关闭当前连接。

目前Bit【3-0】只在PUBLISH协议中生效,且指定为MQTT 3.11/5.0版本。

PUBLISH中的Bit【0】中的RETAIN字段,发布了保留标识,当Bit【0】=1:表示服务器要求保留这次推送的消息,如果有新的订阅者出现,则将此消息推送给他,若没有,则将此次消息推送至已有订阅者之后再释放。

MQTT的消息报文类型如下:Bit【7-4】位

报文类型字段位数据方向描述7-4位Bit位
保留0禁用保留0000
CONNECT1Client-->Server客户端连接到服务器0001
CONNACK2Server-->Client连接确认0010
PUBLISH3Client<-->Server发布消息0011
PUBACK4Client<-->Server发布确认(QOS1)0100
PUBREC5Client<-->Server消息已接受(QOS2第一阶段0101
PUBREL6Client<-->Server消息释放(QOS2第二阶段0110
PUBCOMP7Client<-->Server发布结束(QOS2第三阶段0111
SUBSCRIBE8Client<-->Server客户端订阅请求1000
SUBACK9Server-->Client服务端订阅缺失1001
UNSUBSCRIBE10Client-->Server客户端取消订阅确认1010
UNSUBACK11Server-->Client服务端取消订阅确认1011
PINGREQ12Client-->Server客户端发送心跳1100
PINGRESP13Server-->Client服务端回复心跳1101
DISCONNECT14Client-->Server客户端断开连接请求1110
AUTH(V5.0使用)15Client<-->Server认证数据交换1111

                                      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿奇呦aqiyou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值