物联网平台通信协议之 MQTT 协议

物联网平台通信协议之 MQTT 协议

文章目录

  • 物联网平台通信协议之 MQTT 协议
    • MQTT 概述
      • MQTT 数据格式

MQTT 概述

MQTT( Message Queuing Telemetry Transport ),消息队列遥测传输协议,是一种基于发布/订阅( publish/subscribe )模式的"轻量级"通讯协议,该协议构建于 TCP/IP 协议上。
其设计思想是轻巧、开放、简单、规范,因此易于使用和开发。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT 特点如下:

序号 特点
1 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。不用单独推送给某个用户,只需要用户订阅,就能同时发送给多个用户。
2 消息传输不需要知道负载内容(基于主题)。
3 有三种消息发布服务质量,可粗略理解为:“至多一次”、“至少一次”和只有一次。
4 “至多一次”:消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。若当时设备未连接网络,未收到推送,则下次联网也不会收到之前丢失的数据。
5 “至少一次”:确保消息到达,但消息重复可能会发生。
6 “只有一次”:确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户能收到且只会收到这一次。
7 小型传输,开销很小,协议交换最小化,以降低网络流量。
8 异常连接断开发生时,能通知到 各方相关。

MQTT 数据格式

MQTT 数据包包括了固定头、可变头和消息体。

  • 固定头:存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识;
  • 可变头:存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容;
  • 消息体:存在于部分MQTT数据包中,表示客户端收到的具体内容;
bit 7 6 5 4 3 2 1 0
byte 1 消息类型 DUP Qos Level RET
byte 2 剩余字节长度
byte 3 ~ n 可变头
byte n+1 ~ m 消 息 体

上表中粗略展示了 MQTT 协议的数据包结构,其中:

  • MQTT消息类型 / message type :属于固定头,位置是 byte 1 的 bit 7-4,4位的无符号值。

  • 标识位 / DUP:发布消息的副本。用来在保证消息的可靠传输,如果设置为 1 ,则在下面的变长中增加 MessageId ,并且需要回复确认,以保证消息传输完成,但不能用于检测消息重复发送。

  • QoS Level/发布消息的服务质量:也就是上述 MQTT 特点中的三种消息发布质量。

  • RET :发布保留标识,表示服务器要保留这次推送的信息,如果有新的订阅者出现,就把这消息推送给它,如果设有那么推送至当前订阅者后释放。

  • 剩余长度:固定头的第二字节,用于保存变长头部和消息体的总大小的,但不是直接保存的。这一字节是可以扩展的,其保存机制为:前 7 位用于保存长度,后一部分用做标识。当最后一位为 1 时,则表示长度不足,需要使用二个字节继续保存。

  • 可变头:可变头的内容因数据包类型而不同,较常的应用是做为包的标识。

  • 消息体:消息体是MQTT数据包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息 有消息体:

    1、CONNECT 消息体内容主要是:客户端的 ClientID 、订阅的 Topic 、 Message 以及用户名和密码;

    2、SUBSCRIBE 消息体内容是一系列的要订阅的主题以及 QoS 。

    3、SUBACK 消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS 进行确认和回复。

    4、UNSUBSCRIBE 消息体内容是要订阅的主题。

你可能感兴趣的:(通信协议整理,物联网)