社区编辑申请
注册/登录
工业物联网核心技术——MQTT(一)
物联网 工业物联网
MQTT最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。

一、MQTT初探

1. MQTT是什么?

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布,目前***版本为v3.1.1。MQTT***的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。

当然,在物联网开发中,MQTT不是唯一的选择,与MQTT互相竞争的协议有XMPP和CoAP协议等,文章末尾会有一个比较和说明。

工业物联网核心技术

2. MQTT是哪一层的协议?

众所周知,TCP/IP参考模型可以分为四层:应用层、传输层、网络层、链路层。TCP和UDP位于传输层,应用层常见的协议有HTTP、FTP、SSH等。MQTT协议运行于TCP之上,属于应用层协议,因此只要是支持TCP/IP协议栈的地方,都可以使用MQTT。

3. MQTT消息格式

每条MQTT命令消息的消息头都包含一个固定的报头,有些消息会携带一个可变报文头和一个负荷。消息格式如下:

 

  1. 固定报文头 | 可变报文头 | 负荷 

4. 固定报文头(Fixed Header)

MQTT固定报文头最少有两个字节,***字节包含消息类型(Message Type)和QoS级别等标志位。第二字节开始是剩余长度字段,该长度是后面的可变报文头加消息负载的总长度,该字段最多允许四个字节。

剩余长度字段单个字节***值为二进制0b0111 1111,16进制0x7F。也就是说,单个字节可以描述的***长度是127字节。为什么不是256字节呢?因为MQTT协议规定,单个字节第八位(***位)若为1,则表示后续还有字节存在,第八位起“延续位”的作用。

例如,数字64,编码为一个字节,十进制表示为64,十六进制表示为0×40。数字321(65+2*128)编码为两个字节,重要性***的放在前面,***个字节为65+128=193(0xC1),第二个字节是2(0x02),表示2×128。

由于MQTT协议最多只允许使用四个字节表示剩余长度(如表1),并且***一字节***值只能是0x7F不能是0xFF,所以能发送的***消息长度是256MB,而不是512MB。

工业物联网核心技术(一):MQTT初探

表1

5. 可变报文头(Variable Header)

可变报文头主要包含协议名、协议版本、连接标志(Connect Flags)、心跳间隔时间(Keep Alive timer)、连接返回码(Connect Return Code)、主题名(Topic Name)等,后面会针对主要部分进行讲解。

6. 有效负荷(Payload)

Payload直译为负荷,可能让人摸不着头脑,实际上可以理解为消息主体(body)。

当MQTT发送的消息类型是CONNECT(连接)、PUBLISH(发布)、SUBSCRIBE(订阅)、SUBACK(订阅确认)、UNSUBSCRIBE(取消订阅)时,则会带有负荷。

二、MQTT的主要特性

1. MQTT的消息类型(Message Type)

固定报文头中的***个字节包含连接标志(Connect Flags),连接标志用来区分MQTT的消息类型。MQTT协议拥有14种不同的消息类型(如表2),可简单分为连接及终止、发布和订阅、QoS 2消息的机制以及各种确认ACK。至于每一个消息类型会携带什么内容,这里不多阐述。

工业物联网核心技术(二):MQTT的主要特性

表2

2. 消息质量(QoS)

MQTT消息质量有三个等级,QoS 0,QoS 1和 QoS 2。

  • QoS 0:最多分发一次。消息的传递完全依赖底层的TCP/IP网络,协议里没有定义应答和重试,消息要么只会到达服务端一次,要么根本没有到达。
  • QoS 1:至少分发一次。服务器的消息接收由PUBACK消息进行确认,如果通信链路或发送设备异常,或者指定时间内没有收到确认消息,发送端会重发这条在消息头中设置了DUP位的消息。
  • QoS 2:只分发一次。这是***级别的消息传递,消息丢失和重复都是不可接受的,使用这个服务质量等级会有额外的开销。

通过下面的例子可以更深刻的理解上面三个传输质量等级。

比如目前流行的共享单车智能锁,智能锁可以定时使用QoS level 0质量消息请求服务器,发送单车的当前位置,如果服务器没收到也没关系,反正过一段时间又会再发送一次。之后用户可以通过App查询周围单车位置,找到单车后需要进行解锁,这时候可以使用QoS level 1质量消息,手机App不断的发送解锁消息给单车锁,确保有一次消息能达到以解锁单车。***用户用完单车后,需要提交付款表单,可以使用QoS level 2质量消息,这样确保只传递一次数据,否则用户就会多付钱了。

3. 遗愿标志(Will Flag)

在可变报文头的连接标志位字段(Connect Flags)里有三个Will标志位:Will Flag、Will QoS和Will Retain Flag,这些Will字段用于监控客户端与服务器之间的连接状况。如果设置了Will Flag,就必须设置Will QoS和Will Retain标志位,消息主体中也必须有Will Topic和Will Message字段。

那遗愿消息是怎么回事呢?服务器与客户端通信时,当遇到异常或客户端心跳超时的情况,MQTT服务器会替客户端发布一个Will消息。当然如果服务器收到来自客户端的DISCONNECT消息,则不会触发Will消息的发送。

因此,Will字段可以应用于设备掉线后需要通知用户的场景。

4. 连接保活心跳机制(Keep Alive Timer)

MQTT客户端可以设置一个心跳间隔时间(Keep Alive Timer),表示在每个心跳间隔时间内发送一条消息。如果在这个时间周期内,没有业务数据相关的消息,客户端会发一个PINGREQ消息,相应的,服务器会返回一个PINGRESP消息进行确认。如果服务器在一个半(1.5)心跳间隔时间周期内没有收到来自客户端的消息,就会断开与客户端的连接。心跳间隔时间***值大约可以设置为18个小时,0值意味着客户端不断开。

5. MQTT其他特点

(1) 异步发布/订阅实现

发布/订阅模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系,这意味着发布者和订阅者之间并不需要直接建立联系。

这个模式有以下好处:

  • 发布者与订阅者只需要知道同一个消息代理即可;
  • 发布者和订阅者不需要直接交互;
  • 发布者和订阅者不需要同时在线。

由于采用了发布/订阅实现,MQTT可以双向通信。也就是说MQTT支持服务端反向控制设备,设备可以订阅某个主题,然后发布者对该主题发布消息,设备收到消息后即可进行一系列操作。

(2) 二进制格式实现

MQTT基于二进制实现而不是字符串,比如HTTP和XMPP都是基于字符串实现。由于HTTP和XMPP拥有冗长的协议头部,而MQTT固定报文头仅有两字节,所以相比其他协议,发送一条消息最省流量。

接下篇《工业物联网核心技术——MQTT(二)

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2019-05-15 08:40:34

2018-03-29 10:13:54

2022-06-27 10:41:45

MQTT物联网协议

2015-11-03 09:35:42

2022-02-25 07:34:36

MQTT协议RabbitMQ

2018-08-17 06:13:16

2022-07-18 14:17:00

工业物联网物联网商业模式

2022-05-07 14:31:46

物联网

2022-05-17 11:06:52

车联网通信协议MQTT

2020-05-08 11:00:22

物联网网络技术

2019-07-30 09:02:45

2021-02-24 08:20:33

MQTT物联网网关开发物联网

2022-07-27 08:00:00

物联网架构连接设备

2022-07-18 11:35:01

物联网智慧城市数据

2021-02-21 08:31:45

物联网MQTT消息

2022-03-07 15:15:49

物联网技术物联网

2022-05-05 08:55:12

工业物联网IIoT

2022-07-06 10:07:21

物联网IoT

2021-04-28 09:00:00

物联网开发工具

2019-12-27 10:42:45

HTTPMQTT物联网

同话题下的热门内容

如何保护智能家居避免黑客攻击如何为智能建筑设计网络基础设施?大数据求签,人工智能算命,技术革新下传统行业还有灵魂吗智慧城市之智慧停车篇工业物联网的最大挑战:集成应用物联网如何助力办公建筑高效运营物联网如何防止家庭暴力?LoRaWAN 和物联网在优化资产管理中的作用

编辑推荐

总有一款适合你!11款物联网可视化编程工具别被忽悠了!你真的了解物联网卡吗?三分钟看懂5G的NSA和SA十大物联网云平台,第一毫无悬念!物联网(IoT)的11大云平台
我收藏的内容
点赞
收藏

51CTO技术栈公众号