目录
前言
不论我们使用哪种互联网接入方式,只要我们的设备可以通过UDP或TCP通信访问互联网上对应IP地址的主机
那么理论上,当设备与云服务器建立UDP/TCP通信后,只要按照云服务器所规定的通信协议(数据格式)发送/接收消息,我们的设备就能接入云平台,实现物联网。
【MQTT 】,就是一种通信协议(数据格式协议)。【百度云】【阿里云】【腾讯云】的物联网组件都支持MQTT协议。
特点:
①、"轻量级"通信协议:实现MQTT协议的开销比较小,无需太多的额外数据/文本。
②、基于TCP/IP协议:建立TCP连接后,【云下设备】/【云平台】按照MQTT协议规定的数据格式来通信。(属于应用层)
③、基于【客户端-服务端】模式:云下设备==客户端、云平台==服务端
④、基于【消息发布(PUBLISH)】/【消息订阅(SUBSCRIBE)】模式
【发布(PUBLISH)】/【订阅(SUBSCRIBE)】
【请求 /回答】模式:假设你要打电话给朋友,你需要等到朋友接电话了,你们才能够开始交流。
【发布/订阅】模式:假设你要发邮件给朋友,邮件点击发送后,你就不用管了。
邮件服务器会将邮件发送给你的朋友,朋友收到新邮件提醒后,任何时候查看邮件都可以。(间接联系)
与【请求/回答】(例如HTTP)这种同步模式不同,【发布/订阅】模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系。
这意味着【发布者】和【订阅者】之间并不需要直接建立联系。
客户端&服务器

客户端A发布这个主题后也可以订阅这个主题 客户端A,B,C是可以进行通信的,但是在网络连接上客户端A,B,C只和MQTT服务端建立网络连接,通过MQTT服务端来将消息转发


MQTT 控制报文中的文本字段编码为UTF-8格式的字符串。UTF-8 [RFC3629]是一个高效的Unicode字符编码格式,为了支持基于文本的通信﹐它对ASCII字符的编码做了优化·建议大家尽量发送【标准ASCII码字符串】
需要注意因为之后的mqtt协议编程需要计算每一个字符串的长度,并且把这个长度作为前缀,添加到这个字符串前面
MQTT控制报文
MQTT协议通过交换预定义的MQTT控制报文来通信
MQTT协议规定大部分通信规则,但是有一些通信规则没有规定,交由MQTT服务端(云平台来规定)
比如:用户名/密码的位数、发布消息的有效载荷格式(纯文本 / JSON /…)客户端订阅的最大主题数量 /
【百度云】、【阿里云】、【腾讯云】支持 【Qos=0/Qos=1】,不支持 【Qos=2】
留意【剩余长度】、【字符串前级】、【主题】、【Qos】、【遗嘱】。。。等参数
下面这三个只有在QoS等于2的时候使用
PUBREC 5 两个方向都允许 发布收到(保证交付第一步)
PUBREL 6 两个方向都允许 发布释放(保证交付第二步)
PUBCOMP 7 两个方向都允许 QoS 2消息发布完成(保证交互第三步)
MQTT控制报文由三部分组成

固定报头 Fixed header

第一个字节的高四位MQTT控制报文的类型,也就是MQTT控制报文的值
第一个字节的低四位用于指定控制报文类型的标志位,除了发布消息这个控制报文之外,别的控制报文都是固定的

从第二个字节开始是剩余长度
剩余长度 Remaining Length
剩余长度(Remaining Length)表示当前报文剩余部分的字节数,包括可变报头和负载的数据,也即是说我们只有知道剩余长度,我们才能知道这个MQTT的报文是到哪里结束。剩余长度不包括用于编码剩余长度字段本身的字节数。也就是说剩余长度的字节数只是可变报头和有效负载的长度,不包括他自己本身
剩余长度字段使用一个变长度编码方案,对小于128的值它使用单字节编码。更大的值按下面 的方式处理。低7位有效位用于编码数据,最高有效位用于指示是否有更多的字节。因此每个 字节可以编码128个数值和一个延续位(continuation bit)。剩余长度字段最大4个字节。
它的第一个字节的低7位就是65,因为他之后还有第二个字节,所以说第一个字节它的最高位应该置一,第一个字节就是65+128=193。第二个字节是2,他是小于128的 可以使用7位数据来编码
MQTT控制报文中的可变报头,有效载荷我们以具体的MQTT控制报文来讲,在介绍MQTT控制报文之前,我们需要先了解一下服务质量等级和协议流程
服务质量等级和协议流程
的消息质量等级
QoS只能等于0,1,2
当QoS等于0的时候,表示这个消息最多发送一次,发送方发送了消息,接收者不会发送响应,发送者也不会重试。消息可能送达一次也可能根本没送达
QoS 等于1的时候: 表示这个消息至少发送一次,发送方发送了这个消息,他需要等待接收方应答,如果接收方没有应答,发送方会尝试再次发送这个消息,那么这个消息至少发送了一次
QoS 等于2的时候:表示这个消息仅分发一次,他使用下面三个控制报文来实现仅分发一次
本文介绍了MQTT协议的基础知识,包括其轻量级特性、基于TCP/IP的通信方式、客户端-服务器模式以及消息发布/订阅模式。详细讲解了MQTT控制报文的组成部分,如固定报头、剩余长度、服务质量等级和协议流程,并举例说明了如CONNECT、PUBLISH、SUBSCRIBE等关键控制报文的结构和作用。此外,还探讨了心跳请求(PINGREQ)和响应(PINGRESP)的机制,以及如何确保客户端与服务端的连接保持。
最低0.47元/天 解锁文章
772

被折叠的 条评论
为什么被折叠?



