物联网通信协议–MQTT

发表于 知识科普  |  标签 , , ,

概述

物联网应用千差万别,协议多种多样,在众多的物联网通信协议中,MQTT应该是专门针对物联网所设计的,尽管当时没有如此称呼。官方的MQTT3.1.1规范中描述:“MQTT 是一个客户端服务器发布/订阅消息传递传输协议。它重量轻,开放,简单,设计易于实施。这些特性使其非常适合在许多情况下使用,包括受限环境,例如机器对机器(M2M)和物联网(IoT)环境中的通信,在这些环境中,需要较小的代码占用空间和/或网络带宽非常宝贵。其功能包括:

  • · 使用发布/订阅消息模式,该模式提供应用程序的一对多消息分发和解耦。
  • · 与负载内容无关的消息传递传输。
  • · 消息传递的三种服务质量:0(最多一次)、1(至少一次)、2(恰好一次)
  • · 传输开销小,协议交换最小化,以减少网络流量。
  • · 一种在发生异常断开连接时通知相关方的机制。

发展历史

1999年IBM公司的Andy Stanford-Clark和Arcom(现在为Cirrus link)的Arlen Nipper,为了解决卫星和石油管道的连接和通信,他们发明和设计了一种协议以实现最小的电池损耗和最少的带宽传输,协议有几项明确的需求:

  • 实施简单方便
  • 服务数据的可靠传输品质
  • 轻量级和高带宽效率
  • 数据不可知
  • 持续的会话感知

2010年,IBM经过十年的内部讨论,正式对外发布了MQTT3.1免费版本,欢迎大家实施和使用此协议。

2013年,OASIS这样一个开放的标准化组织,正式对外宣布对MQTT进行标准化工作。经过标准化小组一年的持续努力,2014年10月29日,MQTT成为官方批准的OASIS版本。

2019年3月,OASIS批准了新的MQTT 5规范,新的规范引入了部署在云平台的物联网程序所需要的新功能,以及需要更高可靠性和低错误率的消息传递。

MQTT中的“MQ”是指IBM为支持遥感传输而开发的MQ系列产品,也就是说MQ只是一个标志,并没有任何意思再里面,很多文章将MQTT标记为消息队列协议(message queue protocol)是不正确的,一个明显的例子是:消息队列协议一条消息仅由一个客户端使用,而MQTT则是每个订阅者都可以收到消息。

MQTT的发布/订阅模式

MQTT发布/订阅架构

发布/订阅模型将发送消息的客户端(发布者)与接收消息的客户端(订阅者)分离。它们之间的连接由第三个组件(代理)处理。这样的规范解决了空间、时间和同步的问题。

  • 空间:发布者和订阅者不需要知道对方,不需要交换IP地址和端口
  • 时间:发布者与订阅者不需要同时工作
  • 同步:在发布或接收器件,不需要中断发布和接收的任何操作

发布/订阅模型删除了消息发布者与收件人/订阅者之间的直接通信,让客户端和服务器能更好的进行扩展并高度并行化,消息缓存和消息的智能路由提高了可伸缩性的物联网架构。通过MQTT服务器代理的过滤活动,可以控制哪个客户端/订户接收哪个消息,代理有以下3个选项:

基于主题的筛选:客户端基于主题进行订阅,主题具有分层结构,并容许有限数量的表达式进行筛选

基于内容的筛选:接收客户端可以订阅感兴趣的消息,但是问题是消息内容需要提前知道,无法加密

基于类型的筛选:基于消息message(事件event)的类型type/类class进行筛选

MQTT的三个服务级别

QoS(Quality of Service 服务质量)是MQTT一个重要的衡量指标,是消息发送方和消息接收方之间的协议,用于定义特定消息的传递保证

QoS 0 最多一次

根据操作环境的尽最大努力传递消息。但不保证接收方一定可以收到数据,也有可能会发生信息丢失,其中丢失单个读数并不重要,因为下一个读数将很快发布。服务级别为0,通常称之为”即发即弃“。

QoS 0

QoS 1 至少一次

QoS 级别 1 保证消息至少传递一次到接收方。发送方存储消息,直到它从接收方获得确认收到消息的 PUBACK 数据包。可以多次发送或传递消息

QoS 1

QoS 0 正好一次

QoS 2 是 MQTT 中的最高服务级别。此级别保证每次信息仅由收件人接收一次。QoS 2 是最安全、最慢的服务质量级别。保证由发送方和接收方之间的至少两个请求/响应流(四次握手)提供。发送方和接收方使用原始发布消息的数据包标识符来协调消息的传递。

QoS 2

资源链接

MQTT.org 网站

MQTT规范

OASIS MQTT 技术委员会

EMQ X:免费在线的 MQTT 5 服务器,由 EMQ X Cloud 提供。为优化国内用户访问速度,分别提供了海外跟国内两个接入点,其中 EMQ X 部署在 AWS 美国,EMQ X(国内)部署在腾讯云上海区域,国内访问有稳定的网络通道

Eclipse :提供的免费在线 MQTT 服务器

Mosquitto 社区提供的免费在线 MQTT 服务器,

HiveMQ:成立于2012年,总部位于德国兰茨胡特,位于慕尼黑的葡萄酒中心。旗舰产品 HiveMQ 是一个基于 MQTT的消息传递平台,旨在实现设备和云之间快速、高效、可靠的双向数据移动

Cirrus Link’s :Cirrus Link解决方案基于首席技术官Arlen Nipper共同创建的高效、开放标准的MQTT协议

MQTT在各个行业的应用案例

网站总编:

内容审核: