`

MQTT协议为什么这么轻量级

阅读更多

1、MQTT协议如何做到轻量级

MQTT是二进制的协议,控制字段是精确到Bit级别的。这就是MQTT轻量级的根本原因。

MQTT协议简单,最小的头部只需2个字节,特别适合于嵌入式中。

但MQTT是不支持分包等机制,并不适宜一些数据包特别大的应用场景。

MQTT协议控制报文的格式包含以下三个部分,以固定报头,可变报头和有效载荷,其中固定报文头是所有的控制报文都有, 可变报头和有效载荷都是部分控制报文包含。

1)固定报头

固定报头是两个字节组成,其具体的格式如下所示:
21.png

22.png

控制报文类型:第一个字节的二进制位7-4无符号整数表示控制报文的类型,具体类型对应的值为:
23.png

其中预留值15已经在MQTT5中使用到AUTH中了。

标志:

第一个字节的二进制位3-0包含每个MQTT控制报文类型特定的标志, 控制报文中的标志为必须按照如下表格进行设置,如果设置有问题,则接收者必须断开连接。

24.png
25.png

剩余长度:

第二个字节表示当前报文剩余部分的字节数,包括可变报头和有效载荷。剩余长度不包括用于编码剩余长度字段本身的字节数。剩余长度字段使用一个变长度编码方案,对小于128的值使用单字节编码,超过128的值,最高有效未用于指示是否有更多的字节,因此每个字节可以编码128个数值和一个延续位,剩余长度字段最大4个字节。 举例:十进制64被编码为一个字节,十六进制表示为Ox40。十进制数字321编码为两个字节,最低有效位在前,第一个字节65+128=193,第二个字节为2。 剩余长度最大为256M的报文,而且报文是不支持分包处理的,所以MQTT协议并不适合一些数据量特别大的场景,比如视频直播等数据包比较大的场景。

2)可变报头

可变报头介于固定报头和有效载荷中间。不同的控制报文有着不同的可变报头,其中PacketId是一个在多个控制报文中存在一个报文。 PacketId包含两个字节,现在包含该字段的控制报文有,PUBLISH(Qos>0), PUBACK, PUBREC, PUBREL,PUBCOMP,SUBSCRIBE,SUBACK, UNSUBSCRIBE, UNSUBACK。

26.png

其中,PUBLISH Qos0的报文是不能又packetId的。

有些对应的控制报文中的packetId必须和与该控制报文绑定的其它控制报文保持一直,例如PUBLISH Qos1对应的是PUBACK,PUBLISH Qos2对应的PUBCOMP。

发送者和接收者是分开维护各自的packetId,所以会出现交互双方出现相同packetId的两个不同的控制报文。

关于不能有packetId的控制报文,可能是由于packetId是可以复用的,没有办法确认可以复用的场景不能使用报文,比如Qos0的PUBLISH报文,由于没有回应,所以发送者无法得知packetId何时可以释放复用,故不允许存在该字段。

3)有效载荷

有效载荷即为应用消息。 目前MQTT3.1.1中包含如下的控制报文CONNECT, CONNACK, PUBLISH, PUBACK,PUBREC, PUBREL, PUBCOMP,SUBSCRIBE,SUBACK,UNSUBSCRIBE,UNSUBACK,PINGREQ,PINGRESP,DISCONNECT的协议

2、MQTT协议的官方介绍

It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is

required and/or network bandwidth is at a premium. For example, it has been used in sensors communicating to a broker via satellite link, over occasional dial-up connections with healthcare providers, and in a range of home automation and small device scenarios.

It is also ideal for mobile applications because of its small size, low power usage, minimised data packets, and efficient distribution of information to one or many receivers

MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽和远程设备连接。例如通过卫星和代理连接,通过拨号和医疗保健提供者连接,以及在一些自动化或小型设备上,而且由于小巧,省电,协议开销小和能高效的向一和多个接收者传递信息,故同样适用于称动应用设备上。

3、MQTT协议背景

MQTT于1999年由Andy Stanford-Clark(IBM)和Arlen Nipper(Arcom,现为Cirrus Link)发明,当他们的是创建一个协议,以最小的电池损耗和最小带宽连接把石油管道通过卫星进行连接。他们指定了以下目标,未来的协议应该有:

1)简单的实现

2)提供优质的服务数据传递

3)轻量级和带宽效率高

4)数据不可知

4)连续环节的认证

大约3年后首次出版,据宣布,MQTT应在OASIS的标准化下进行,OASIS是一个开放组织,旨在提高标准,AMQP,SAML,DocBook只是已经发布的几个标准标准化过程大约需要1年时间,2014年10月29日,MQTT被正式批准为OASIS标准。 MQTT 3.1.1现在是该协议的最新版本。

MQTT现状:今年年4月7日,OASIS正式发布了MQTT v5.0官方开源标准。

4、MQTT协议实战

目前开源的MQTT协议相关实现主要是个人版,社区或企业版本比较受认可的是Mosquitto、emqx。

其中:

Mosquitto是一款「An Open Source MQTT v3.1/v3.1.1 Broker」——开源的MQTT代理服务器;

https://www.emqx Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。

分享到:
评论

相关推荐

    MQTT 协议 5.0 中文版

    MQTT 协议是一种轻量级的、基于发布/订阅模式的消息传输协议,设计思想是轻巧、开放、简单、规范,因此易于实现。MQTT 协议 5.0 是 OASIS Message Queuing Telemetry Transport (MQTT) TC 委员会规范草案,于 2017 ...

    MQTT协议中文版.pdf

    MQTT协议是一种轻量级的、基于publish/subscribe模式的消息传输协议,广泛应用于机器与机器的通信(M2M)和物联网环境(IoT)。它的设计思想是轻巧、开放、简单、规范,易于实现。MQTT协议支持多种QoS,可以根据不同...

    MQTT 协议基本介绍

    目录   一、简介 ...MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。 MQTT 可以被解释为一种低开销,低带宽占用

    MQTT 协议 3.1.1 中文版

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的...

    mqtt协议文档(中文版)

    1. **轻量级**:MQTT协议使用TCP/IP栈作为基础,协议报文结构简洁,减少网络流量和内存占用,适合在有限计算资源和网络条件下的设备通信。 2. **发布/订阅模型**:在MQTT中,数据发布者与数据订阅者之间通过主题...

    MQTT协议完整中文版版.pdf

    MQTT(Message Queuing Telemetry Transport)是一个轻量级的消息传输协议,专为受限环境而设计,如物联网(IoT)和机器对机器(M2M)通信。该协议广泛应用于需要低带宽、不稳定网络或小代码空间的场景中。MQTT协议...

    MQTT协议中文手册

    **MQTT(Message Queuing ...MQTT协议以其轻量级、可靠和低延迟的特性,在物联网时代得到了广泛应用。通过MQTT中文手册,读者可以深入理解其工作原理,更好地实现设备间的通信和数据交换,推动各种物联网应用的发展。

    MQTT协议中文版 pdf 文档下载

    MQTT协议因其轻量级、高效的特性,成为物联网和M2M通信领域的首选协议之一。理解其核心概念、操作流程和安全措施,对于开发和维护与MQTT相关的应用程序至关重要。通过提供的中文文档,开发者可以更方便地学习和掌握...

    整理的MQTT协议

    **MQTT(Message Queuing Telemetry ...总结来说,MQTT协议因其轻量级、高效和可靠的特点,在物联网领域得到了广泛的应用。通过深入学习MQTT协议,开发者可以更好地构建和维护物联网系统,实现设备之间的高效通信。

    MQTT_协议_3.1.1_中文版.pdf

    MQTT协议,全称为消息队列遥测传输协议(Message Queuing Telemetry Transport),是一种轻量级的发布/订阅网络协议,它设计用于低带宽、不可靠网络和高延迟的网络环境。MQTT协议在物联网(IoT)、移动应用、传感器...

    mqtt协议3.1.1中文版

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以...

    MQTT协议-有这一篇就够了

    * 轻量级:MQTT协议的实现非常轻量级,适合资源有限的设备 * 开放:MQTT协议是开放的,任何人都可以使用和实现 * 简单:MQTT协议的设计思想是简单的,易于理解和实现 * 规范:MQTT协议有明确的规范,易于实现和维护 ...

    C++实现mqtt协议

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信。在C++中实现MQTT协议可以为开发者提供灵活且高效的解决方案,尤其对于资源受限的嵌入式系统。...

    MQTT协议资料及源码

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,主要用于物联网(IoT)领域,尤其适合资源有限的设备和低带宽、高延迟或不可靠的网络环境。这个压缩包文件包含了关于MQTT协议的相关...

    mqtt 协议 中文版

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的发布/订阅网络协议,它被设计用于在受限的环境中如机器与机器(M2M)通信以及物联网(IoT)场景。该协议支持多种传输模式,包括...

    MQTT协议_CN_注释.zip

    MQTT是一个基于TCP的发布订阅协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽...

    MQTT-3.1.1-CN(学习MQTT协议的完整中文资料)

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,被设计用来在低带宽、不稳定的网络环境中进行远程设备间的通信。它的主要特点包括使用TCP/IP协议进行网络传输,拥有双向通信能力,以及...

    MQTT协议及车联网应用.pdf

    MQTT(MQ Telemetry Transport)协议是一种轻量级的发布/订阅式消息传输协议,特别适合于物联网(IoT)设备之间的通信。由于物联网设备通常具有网络环境不稳定、内存和存储资源有限、处理能力受限的特点,MQTT协议以...

    4G通过MQTT协议ONENET,mqtt通信协议,MDK

    MQTT是一种轻量级的发布/订阅消息协议,特别适合于资源有限的设备和低带宽高延迟的网络环境。而ONENET是一个开放的物联网云平台,提供了丰富的API和SDK,便于开发者构建和管理物联网应用。 首先,了解MQTT协议的...

Global site tag (gtag.js) - Google Analytics