首页 > 编程知识 正文

mqtt协议传输数据最大长度,mqtt协议实现

时间:2023-05-04 05:58:25 阅读:44144 作者:2549

源视频地址

1.MQTT协议概念: MQTT是基于Publish/Subscribe模式的物联网通信协议

特长:

容易实现的支持服务质量(Qos )消息小

MQTT协议构建在TCP/IP协议之上,公开订阅模型:

客户端只需订阅本主题,当其他客户端向此服务端发布消息时,此客户端就可以收到此消息

请求响应模式

请求响应模式:客户端向服务端发送请求,服务端在收到请求后,向客户端返回响应

1.1 MQTT概述基于消息队列遥测传输协议(mqtt )、发布/订阅模式的“轻量级”通信协议IP协议中构建的MQTT的最大优点是能够以较少的代码和有限的带宽向远程连接设备提供实时可靠的消息服务,作为低开销、低带宽占用的即时消息收发协议

MQTT是基于客户端/服务器的消息传递/订阅传输协议。 MQTT协议重量轻、简单、开放、易于实现,这些特点使其适用范围非常广泛。 包括受限的环境,例如:机器与机器(M2M )的通信和物联网(loT )。 其中,被广泛用于通过卫星链路的通信传感器、偶尔拨号的医疗设备、智能家庭以及一些小型化设备。

1.2 MQTT协议设计规范(1)简化,不添加有无功能; )方便传出/订阅)模式、在传感器之间传递消息、解除客户端/服务器模式的连接的优点是,不需要事先知道对方的存在(ip/port ),不需要同时执行)3)用户运输成本为零(4)最大限度减少传输量提高传输效率)5)考虑低带宽、高延迟、不稳定的网络等因素。 (6)支持持续会话维护和控制的)心跳协议;(7)了解客户端计算能力可能较差;(8)服务质量)服务质量级别: (9QoS

1.3 MQTT协议的主要特性(1)开放消息协议易于实现。 (2)使用分发/订阅消息模式来提供一对多消息分发以及解除APP应用的耦合。 )3)屏蔽负载(协议持有的APP应用数据)内容的消息传输。 )4)基于TCP/IP网络连接,提供有序、无损、双向连接。

主流的MQTT基于TCP连接来推送数据,但同样具有被称为MQTT-SN的基于UDP的版本。 因为这两个版本基于不同的连接方式,所以优缺点当然也各不相同。

根据连接方法的不同,优缺点当然不同。 )5)消息服务质量) QoS )支持,保证传输可靠; 有三种消息传递服务质量:

QoSO:“至多一次”,信息发布完全依赖底层的TCP/IP网络。 会发生消息丢失或重复。 此级别表示环境传感器数据可以丢失一次读取记录。 因为最近有第二次发送。 这种方式主要是普通APP推送,如果你的智能设备在推送消息的过程中没有联网,推送过去没有收到,那么再次联网也收不到。

QoS1:“至少-次”,确保消息到达,但可能发生消息重复。

QoS2:“一次”,确保消息只发送一次。 此级别可用于要求苛刻的计费系统。 在计费系统中,如果消息重复或丢失,就会产生不正确的结果。 此最高质量的消息服务还可以用于推送即时消息类APP,使用户只能收到并接收一次。 )6) 1字节固定报头、2字节心跳消息最小化了传输开销和协议交换,有效减少网络业务。

所以在介绍中,“在物联网领域,要想知道传感器与服务器的通信、信息的收集、嵌入式计算能力和带宽相对较弱,使用这样的协议传递消息是最合适的。 )7)存在状态识别:使用Last Will和Testament特性向相关方的客户端通知异常中断的机制。

Last Will:是一种遗嘱机制,用于向同一主题下的其他设备通知发送遗嘱的设备已断开。

Testament:遗嘱机制类似于Last Will。 1.4 MQTT应用领域物联网M2M通信、物联网大数据采集安卓消息推送、WEB消息推送移动即时消息,如Facebook Messenger智能硬件、智能家具2. MQTT协议原理2.1 MQTT协议实现方式实现MQTT协议需要客户端与服务器端的通信完成。 在通信过程中,MQTT协议有三种身份:发布者(Publish )、代理(Broker )、服务器)、订阅者),消息发布者和订阅者都是客户端,消息代理

MQTT发送的消息分成两个部分33到360,即33到360主题和有效载荷

-1) Topic:可理解为消息类型,当订阅者订阅时,它将接收该主题的消息内容(payload )

)2) payload:可以理解为消息内容,是指读者具体使用的内容

2.2网络传输和APP应用消息

MQTT会构建底层网络传输: 它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输。
当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关联

2.3 MQTT客户端

一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以:

(1) 发布其他客户端可能会订阅的信息(2) 订阅其他客户端发布的消息(3) 退定或删除应用程序的消息(4) 断开与服务器的连接 2.4 MQTT服务器端

MQTT服务器以称为"消息代理"(Broker), 可以是一个应用程序或一台设备,它是位于消息发布者和订阅者之间,它可以:

(1) 接受来自客户的网络连接;(2) 接受客户发布的应用信息(3) 处理来自客户端的订阅和退订请求(4) 向订阅的客户转发应用程序消息 2.5 发布/订阅、主题、会话

MQTT是基于发布(Publish)/订阅(Subscribe)模式来进行通信及数据交换的,与HTTP的请求(Request)/应答(Response)的模式有本质的不同
订阅者(Subscriber)会向 消息服务器(Broker)订阅一个主题(Topic)。成功订阅后,消息服务器会将该主题下的消息转发给所有订阅者
主题(Topic)以’/‘为分隔符区分不同的层级,包含通配符’+’ 或 ‘#’的主题又称为主题过滤器(Topic Filters); 不含通配符的成为主题名(Topic Names) 例如:

chat/ room/1sensor/10/temperaturesensor/+/temperature$SYS/broker/metrics/packets/received$SYS/broker/metrics/# '+' : 表示通配一个层级, 例如a/+,匹配a/x, a/y'#' : 表示通配多个层级,例如a/#,匹配a/x, a/b/c/d注: '+' 通配一个层级,‘#’ 通配多个层级(必须在末尾)

发布者(Publisher)只能向主题名发布消息,订阅者(Subscriber)则可以通过订阅主题过滤器来通配多个主题名称

会话(Session)
每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

2.6 MQTT协议中的方法

MQTT协议中定义了一些方法(也被称为动作),来于表示对确定资源所进行操作。这个资源可以代表预先存在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源指服务器上的文件或输出。主要方法有:

(1) CONNECT: 客户端连接到服务器(2) CONNACK: 连接确认(3) PUBLISH: 发布消息(4) PUBACK: 发布消息确认(5) PUBREC: 发布的消息已接收(6) PUBREL: 发布的消息已释放(7) PUBCOMP: 发布完成(8) SUBSCRIBE: 订阅请求(9) SUBACK: 订阅确认(10) UNSUBSCRIBE: 取消订阅(11) UNSUBACK: 取消订阅确认(12) PINGREQ: 客户端发送心跳(13) PINGRESP: 服务端心跳响应(14) DISCONNECT: 断开连接(15) AUTH: 认证 3.MQTT协议数据包结构

在MQTT协议中,一个MQTT数据包由: 固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。
MQTT数据包结构如下:

(1) 固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识,如连接,发布,订阅,心跳等。其中固定头是必须的,所有类型的MQTT协议中,都必须包含固定头。
(2) 可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。可变头部不是可选的意思,而是指这部分在有些协议类型中存在,在有些协议中不存在。
(3) 消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。与可变头一样,在有些协议类型中有消息内容,有些协议类型中没有消息内容。

3.1 固定头(Fixed Header)


固定头存在于所有MQTT数据包中
固定头包含两部分内容:
首字节(字节1)、
剩余消息报文长度(从第二个字节开始,长度为1-4字节)
剩余长度是当前包中剩余内容长度的字节数,包括变量头和有效负载中的数据)。剩余长度不包含用来编码剩余长度的字节。
剩余长度使用了一种可变长度的结构来编码,这种结构使用单一字节表示0-127的值。大于127的值如下处理。每个字节的低7位用来编码数据,最高位用来表示是否还有后续字节。因此每个字节可以编码128个值,再加上一个标识位。剩余长度最多可以用四个字节来表示。

数据包类型
位置: 第一个字节(Byte 1)中的7-4个bit被(Bit[7-4]),标识4位无符号值


标志位
位置: 第一个字节中的0-3个bit位(Bit[3-0])。意思是字节位Bit[3-0]用作报文的标识。
首字节的低4位(bit3-bit0)用来表示某些报文类型的控制字段,实际上只有少数报文类型有控制位,如下图:

(1) : 其中Bit[3]为DUP字段,如果该值为1,表明这个数据包是一条重复的消息;否则该数据包就是第一次发布的消息
(2) : Bit[2-1]为QoS字段:
如果Bit 1 和 Bit 2都为0,表示QoS 0: 至多一次;
如果Bit 1为1, 表示QoS 1: 至少一次;
如果Bit 2为1,表示QoS 2:只有一次;
如果同时将Bit 1 和 Bit 2都设置成1,那么客户端或服务器认为这是一条非法的消息,会关闭当前连接。
MQTT消息QoS
MQTT发布消息服务质量保证(QoS)不是端到端的,是客户端与服务端之间的。订阅者收到MQTT消息的QoS级别,最终取决于发布消息的QoS和主题订阅的QoS
QoS: 服务质量是指 客户端和服务端之间的服务质量

QoS消息订阅(至多一次):

QoS1消息发布订阅(至少一次)

QoS2消息发布订阅(只有一次)

3.2 可变头(Variable Header)

可变头的意思是可变化的消息头部。有些报文类型包含可变头部有些报文则不包含。可变头部在固定头部和消息内容之间,其内容根据报文类型不同而不同

协议版本
位无符号值表示客户端的版本等级。3.1.1版本
MQTT会话
MQTT客户端向服务器发起CONNECT请求时,可以通过’Clean Session’标志设置会话。
‘Clean Session’设置为0,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。
‘Clean Session’设置为1,表示创建一个新的临时会话,在客户端断开时,会话自动销毁
Will Flag /Will QoS/Will Retain
Will Flag : 遗言标志位
Will QoS: 遗言的消息质量
Will Retain: 遗言的保持状态
Keep Alive timer(心跳时长)
心跳协议:

Keep Alive timer 最大时间间隔

3.3 消息体(Payload)

有些报文类型是包含Payload的,Payload的意思是消息载体的意思
如PUBLISH的Payload就是指消息内容(应用程序发布的消息内容)。而CONNECT的Payload则包含Client Identifier, Will Topic, Will Message, Username, Password等信息
包含payload的报文类型如下:

Payload是消息内容,也只在某些报文类型中出现,其内容和格式也根据报文类型不同而不同
具体不同报文类型所包含的不同Payload,请查看官方文档
官方文档

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。