Mqtt介绍

MQTT介绍与使用

物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。其英文名称是:“Internet of things(IoT)”。顾名思义,物联网就是物物相连的互联网。这有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。而在物联网的应用上,对于信息传输,MQTT是一种再合适不过的协议工具了。

万物联网的时代即将到来,物联网也由当初的概念开始进一步落实。随着无线网络技术飞速发展,各种设备都可以连接网络,实现远程控制。例如智能家居最近非常火爆,智能插座、智能LED灯、智能摄像头等。在互联网时代,HTTP协议负责建立网络连接,而到了物联网时代,由于智能硬件的差异,相比互联网终端,硬件配置要低的多,而且智能设备的环境也想多复杂,物联网中的数据传输会面临很多问题,比如在网络不稳定的情况下,如果保证数据的传输没有问题,如何保证数据不被重复发送,连接断开后如何进行重连,而HTTP协议由于太重量级了,不是适合物联网。因此IBM公司为此提出一种轻量级的MQTT协议(MQ Telemetry Transport),适合于低带宽、不可靠连接、嵌入式设备、CPU、内存资源紧张,适用于各种受限的环境。

一、MQTT简介

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

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

二、特性

MQTT协议工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  (1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

  (2)对负载内容屏蔽的消息传输。

  (3)使用TCP/IP提供网络连接。

  主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。

  (4)有三种消息发布服务质量:

“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

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

“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。 

  (5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。

三、实现方式

  实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:

  (1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);

(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

客户端Publisher发送一条消息message给MQTT Broker,发送消息时需要关联一个topic和QoS(Quality of Service)。topic指定了消息要发送给哪个主题,QoS指定了消息可靠性等级(这个在后边会讲到)。假设当前消息发给主题topic1,并且有两个客户端Subscriber分别订阅了topic1。MQTT Broker收到消息后,发现消息是发送给topic1的,于是将这份消息分别转发给它的两个订阅者。

 

MQTT的核心概念包括:

Broker,又称Server,是MQTT的服务端,负责与客户端建立连接,接收并转发消息,接收订阅和取消订阅请求等。

Client,使用MQTT协议的程序或设备,负责与Broker建立连接,发送或者接收数据,订阅主题或取消订阅。

Message,在MQTT协议中传输的数据,当消息被传输时,通常和一个主题名称(topic name)以及一个QoS(服务质量)关联起来。

 

Topic,主题有两层含义,在发布消息时,主题会和消息关联起来,告诉Broker这条消息要发给哪个主题。在订阅消息时,客户端需要告诉Broker自己对哪个主题感兴趣,一旦有消息发给这个主题,Broker会将消息发给主题的订阅者。主题支持统配符,对于使用通配符的主题,我们成为Topic Filter。

 

Publish,客户端发送消息给Broker的过程。发送消息时需要指定topic和QoS。Broker会将消息转发给订阅了该topic的其它客户端。

 

Subscribe,客户端订阅主题的过程。客户端告诉Broker,自己对某个topic感兴趣,当有其它客户端发送消息给这个topic时,Broker会转发该消息给自己。客户端可以取消订阅,这个过程称作Unsubscribe,取消订阅后,Broker不会再转发消息给当前客户端。

 

QoS,Quality of Service。消息可靠性传递的参数,有3个值,分别是:

 

0,消息只发送一次,不保证发送成功。

1,消息最少发送一次,保证发送成功。因为可能发送多次,因此接收方可能收到重复消息。

2,消息只发送一次,保证成功。接收方不会接到重复消息。

发送消息时,可以指定QoS,如果QoS>0,那么消息一定会发到Broker。订阅主题时,也可以指定QoS,如果QoS>0,那么Broker一定会将消息发给订阅者,不会丢失。这里要要注意,消息从发布者到订阅者,是分两步走的,第一步有发布者发布到MQTT Broker,第二步是MQTT Broker转发消息到订阅者。所以只有当发布消息时,指定QoS>0,并且订阅主题时,QoS>0,消息才能可靠的从发布客户端发送到订阅客户端端

消息类型

MQTT拥有14种不同的消息类型:

CONNECT:客户端连接到MQTT代理

CONNACK:连接确认

PUBLISH:新发布消息

PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复

PUBREC:QoS 2消息流的第一部分,表示消息发布已记录

PUBREL:QoS 2消息流的第二部分,表示消息发布已释放

PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成

SUBSCRIBE:客户端订阅某个主题

SUBACK:对于SUBSCRIBE消息的确认

UNSUBSCRIBE:客户端终止订阅的消息

UNSUBACK:对于UNSUBSCRIBE消息的确认

PINGREQ:心跳

PINGRESP:确认心跳

DISCONNECT:客户端终止连接前优雅地通知MQTT代理

应用领域:遥感数据、汽车、智能家居、智慧城市、医疗医护

 

Mqtt介绍

更详细资料见链接:https://docs.emqx.io/broker/latest/cn/