MQTT协议概念

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

1、MQTT协议可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

2、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用 TCP/IP 提供网络连接。

物联网(IoT) 设备要运作,就必须连接到互联网,设备才能相互协作,以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IP,MQTT 协议是基于 TCP/IP 协议栈而构建的,因此它已经慢慢的已经成为了 IoT 通讯的标准。

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

4、MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)。
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

Publish/Subscribe(发布订阅)模式:

客户端只需要订阅这个主题,当有其他客户端向这个服务端发布消息时,这个客户端就可以收到这个消息。

请求响应模式:
客户端向服务端发送请求,服务端收到请求后,向客户端返回响应

MQTT协议特点

  • 简单易实现
  • 支持Qos(服务质量)
  • 报文小
  • MQTT协议构建于TCP/IP协议之上

MQTT应用领域

  • 物联网M2M通信,物联网大数据采集
  • Android消息推送,WEB消息推送
  • 移动即时消息,例如Facebook Messenger
  • 智能硬件、智能家具、智能电器
  • 车联网通信,电动车站桩采集
  • 智慧城市、远程医疗、远程教育
  • 电力、石油与能源等行业市场

MQTT基本概念

应用消息 Application Message

MQTT协议通过网络传输应用数据。应用消息通过MQTT传输时,它们有关联的服务质量(QoS)和主题(Topic)。

客户端Client

一个使用 MQTT 协议的设备、应用程序等,它总是建立到服务器的网络连接。

  1. 可以发布信息,其他客户端可以订阅该信息
  2. 订阅其它客户端发布的消息
  3. 退订或删除应用程序的消息
  4. 断开与服务器连接
服务端 Server

MQTT 服务器以称为 Broker(消息代理),以是一个应用程序或一台设备。它是位于消息发布者 和订阅者之间

  1. 接受来自客户端的网络连接
  2. 接受客户端发布的应用信息
  3. 处理来自客户端的订阅和退订请求
  4. 向订阅的客户转发应用程序消息

(服务端不是数据的终点,它只是数据的中转站) (一般情况下,云平台==服务端)

订阅 Subscription

订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。
订阅与单个会话(Session)关联。
会话可以包含多于一个的订阅。
会话的每个订阅都有一个不同的主题过滤器。

主题名 Topic

Name附加在应用消息上的一个标签,服务端已知且与订阅匹配。服务端发送应用消息的一个副本给每一个匹配的客户端订阅。

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

  1. 要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如,/world 和 emq/emqtt/emqx 是有效的主题。
  2. 订阅者的Topic name支持通配符#和+ :

#支持一个主题内任意级别话题
+只匹配一个主题级别的通配符

  1. 客户端成功订阅某个主题后,代理会返回一条 SUBACK 消息,其中包含一个或多个 returnCode 参数
主题过滤器 Topic Filter

订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符。

会话 Session

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。

会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

控制报文 MQTT Control Packet

通过网络连接发送的信息数据包。MQTT规范定义了十四种不同类型的控制报文,其中一个(PUBLISH报文)用于传输应用消息。

清理会话 Clean Session

当MTT客户端接入MTT服务端时,选择是否继续之前的会话。
如果不清理会话,MTT服务端会在之前交互的基础上,继续交互如果清理会话,MTT服务端必须新建一个全新的会话。

负载(Payload)

消息订阅者所具体接收的内容

MQTT消息质量

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

服务质量,标志表明此主题范围内的消息传送到客户端所需的一致程度。

值 0:不可靠,消息基本上仅传送一次,如果当时客户端不可用,则会丢失该消息。
值 1:消息应传送至少 1 次。
值 2:消息仅传送一次。

QoS 0:最多分发一次。
消息的传递完全依赖底层的TCP/IP网络,协议里没有定义应答和重试,消息要么只会到达服务端一次,要么根本没有到达。

QoS 1:至少分发一次。
服务器的消息接收由PUBACK消息进行确认,如果通信链路或发送设备异常,或者指定时间内没有收到确认消息,发送端会重发这条在消息头中设置了DUP位的消息。

QoS 2:只分发一次。
这是最高级别的消息传递,消息丢失和重复都是不可接受的,使用这个服务质量等级会有额外的开销。

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

MQTT的消息类型

MQTT的消息类型(Message Type)

固定报文头中的第一个字节包含连接标志(Connect Flags),连接标志用来区分MQTT的消息类型。

MQTT协议拥有14种不同的消息类型(如表)

可简单分为连接及终止发布和订阅QoS 2消息的机制以及各种确认ACK。至于每一个消息类型会携带什么内容。

异步发布/订阅实现

发布/订阅模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系,这意味着发布者和订阅者之间并不需要直接建立联系。
这个模式有以下好处:
发布者与订阅者只需要知道同一个消息代理即可
发布者和订阅者不需要直接交互
发布者和订阅者不需要同时在线

MQTT基本原理和实现

MQTT 协议提供一对多的消息发布,可以解除应用程序耦合,信息冗余小。

该协议需要客户端和服务端,
而协议中主要有三种身份:发布者(Publisher)、代理(Broker,服务器)、订阅者(Subscriber)。

其中,消息的发布者和订阅者都是客户端,消息代理是服务器,而消息发布者可以同时是订阅者,实现了生产者与消费者的脱耦。

使用 TCP/IP 提供网络连接,提供有序、无损、双向连接

MQTT 是一种连接协议,它指定了如何组织数据字节并通过 TCP/IP网络传输它们。设备联网,也需要连接到互联网中,在大万维的世界中,TCP 如同汽车,有轮子就能用来运输数据,MQTT就像是交通规则。在网络模型中,TCP是传输层协议,而 MQTT是在应用层,在 TCP 的上层,因此MQTT也是基于这个而构建的,提高了可靠性。

对负载内容屏蔽的消息传输

可以对消息订阅者所接受到的内容有所屏蔽。

具体有三种消息发布的服务质量

至多一次,消息发布完全依赖底层 TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

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

只有一次,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

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

整体上协议可拆分为:固定头部+可变头部+消息体,这就是为什么说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集"。

使用Last Will和Testament特性通知有关各方客户端异常中断的机制

Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。

Testament:遗嘱机制,功能类似于Last Will。

物联网通信协议——MQTT协议相关推荐

  1. 关于物联网通信协议(通讯协议)

    一.区分通讯与通信协议: 1.传统意义上的"通讯"主要指电话.电报.电传.通讯的"讯"指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端.媒体讯 ...

  2. 物联网通信协议-MQTT及使用python实现

    MQTT概念及其原理 简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的& ...

  3. 基于阿里云物联网平台MQTT协议实现云端和mqttfx通讯

    本项目的目的,借助阿里云物联网平台实现ESP8266(IDE:Arduino)与小程序(作为客户端)的互相通信,并通过小程序控制以及获取esp8266上的灯状态. 准备材料以及要使用的IDE 阿里云账 ...

  4. 物联网之MQTT协议详解基础篇(一)—— MQTT介绍

    MQTT: The Standard for IoT Messaging 开场白 大概是这么个背景 比如小米智能家居目前是这么个流程: 物联网设备通过家里的wifi连接到外网服务器 在外网通过米家ap ...

  5. [ 物联网篇 ] - MQTT协议是如何工作的 ?

    MQTT是物联网项目中最常用的协议之一,全称是消息队列遥测传输. 此外,它被设计为轻量级消息传递协议,它使用发布/订阅操作在客户端和服务器之间交换数据.此外,它的小尺寸,低功耗,最小化数据包和易于实现 ...

  6. 关于物联网通信协议(接入协议)

    一.概述: 应用层.网络层/传输层.物理层/数据链路层.设备层 接入协议一般负责子网内设备间的组网及通信. 二.近距离通信协议: 2.1.RFID 1.RFID简介 RFID的空中接口通信协议规范基本 ...

  7. Java物联网开发(一) —— MQTT协议

    基于 Publish/Subscribe 模式的物联网通信协议MQTT 一. 简介 二. 特点 QoS消息发布质量介绍 三. 应用场景 四. 原理 MQTT协议中的方法 五. MQTT协议数据包结构 ...

  8. 智联物联分享之物联网协议MQTT简述,MQTT协议特点

    接触过物联网设备的朋友们对于MQTT应该都不陌生吧,那MQTT是什么呢?智联物联小编为大家分享下MQTT的简述与特点. MQTT(Message Queuing Telemetry Transport ...

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

    物联网平台通信协议之 MQTT 协议 文章目录 物联网平台通信协议之 MQTT 协议 MQTT 概述 MQTT 数据格式 MQTT 概述 MQTT( Message Queuing Telemetry ...

最新文章

  1. 523. Continuous Subarray Sum
  2. 中国电梯行业动态调研与未来发展趋势展望报告2022-2028年版
  3. python有限循环_Python循环
  4. 一个简单的验证码识别教程
  5. 模板:多项式乘法(FFTNTT)
  6. php支付密码控件,Android高仿微信支付密码输入控件实例代码
  7. 启动Tomcat出现Using CATALINA_BASE
  8. Maven的-pl -am -amd参数学习 -am 踩过的坑
  9. Jetty报ArrayIndexOutBoundsException:30305的解决方案
  10. matlab调和均值滤波_均值滤波和中值滤波的MATLAB实现
  11. python基础篇11-文件操作
  12. 语音论文优选:口语理解A Streaming End-to-End Framework For SLU
  13. shader拖尾_拖尾效果 - LouisSong - 博客园
  14. OA系统十九:请假申请五:【请假申请】这个内嵌页面的前台文件;设置【点击左侧菜单栏的“请假申请”后】在首页的“功能区”显示【请假功能】这个内嵌页面;
  15. grep命令的使用;正则;位置锚定
  16. SEO之了解搜索引擎
  17. C++ 进制转换器:二进制、十进制、十六进制
  18. CodeLite工具的使用
  19. windows cmd显示当前路径echo %cd% 对应linux pwd
  20. Grafana table 表格配置方法

热门文章

  1. 如何将Oracle 当前日期加一天、一分钟?
  2. KVC\KVO 简介
  3. vim选中多行复制粘贴
  4. win7系统搭建流媒体服务器,windows7 下 搭建 nginx + rtmp 流媒体服务器
  5. python语言缺点_1.3 Python语言有什么缺点
  6. lhgDialog窗口组件
  7. GameFramework教程✨二、GameEntry,游戏入口
  8. ios https 单项认证 双向认证 以及服务端配置
  9. 天梯赛刷题1:Prime Path
  10. 只要你用微信,那一定要读今天这篇文章