物联网通信协议——MQTT协议
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 协议的设备、应用程序等,它总是建立到服务器的网络连接。
- 可以发布信息,其他客户端可以订阅该信息
- 订阅其它客户端发布的消息
- 退订或删除应用程序的消息
- 断开与服务器连接
服务端 Server
MQTT 服务器以称为 Broker(消息代理),以是一个应用程序或一台设备。它是位于消息发布者 和订阅者之间
- 接受来自客户端的网络连接
- 接受客户端发布的应用信息
- 处理来自客户端的订阅和退订请求
- 向订阅的客户转发应用程序消息
(服务端不是数据的终点,它只是数据的中转站) (一般情况下,云平台==服务端)
订阅 Subscription
订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。
订阅与单个会话(Session)关联。
会话可以包含多于一个的订阅。
会话的每个订阅都有一个不同的主题过滤器。
主题名 Topic
Name附加在应用消息上的一个标签,服务端已知且与订阅匹配。服务端发送应用消息的一个副本给每一个匹配的客户端订阅。
连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。
- 要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如,/world 和 emq/emqtt/emqx 是有效的主题。
- 订阅者的Topic name支持通配符#和+ :
#支持一个主题内任意级别话题
+只匹配一个主题级别的通配符
- 客户端成功订阅某个主题后,代理会返回一条 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.传统意义上的"通讯"主要指电话.电报.电传.通讯的"讯"指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端.媒体讯 ...
- 物联网通信协议-MQTT及使用python实现
MQTT概念及其原理 简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的& ...
- 基于阿里云物联网平台MQTT协议实现云端和mqttfx通讯
本项目的目的,借助阿里云物联网平台实现ESP8266(IDE:Arduino)与小程序(作为客户端)的互相通信,并通过小程序控制以及获取esp8266上的灯状态. 准备材料以及要使用的IDE 阿里云账 ...
- 物联网之MQTT协议详解基础篇(一)—— MQTT介绍
MQTT: The Standard for IoT Messaging 开场白 大概是这么个背景 比如小米智能家居目前是这么个流程: 物联网设备通过家里的wifi连接到外网服务器 在外网通过米家ap ...
- [ 物联网篇 ] - MQTT协议是如何工作的 ?
MQTT是物联网项目中最常用的协议之一,全称是消息队列遥测传输. 此外,它被设计为轻量级消息传递协议,它使用发布/订阅操作在客户端和服务器之间交换数据.此外,它的小尺寸,低功耗,最小化数据包和易于实现 ...
- 关于物联网通信协议(接入协议)
一.概述: 应用层.网络层/传输层.物理层/数据链路层.设备层 接入协议一般负责子网内设备间的组网及通信. 二.近距离通信协议: 2.1.RFID 1.RFID简介 RFID的空中接口通信协议规范基本 ...
- Java物联网开发(一) —— MQTT协议
基于 Publish/Subscribe 模式的物联网通信协议MQTT 一. 简介 二. 特点 QoS消息发布质量介绍 三. 应用场景 四. 原理 MQTT协议中的方法 五. MQTT协议数据包结构 ...
- 智联物联分享之物联网协议MQTT简述,MQTT协议特点
接触过物联网设备的朋友们对于MQTT应该都不陌生吧,那MQTT是什么呢?智联物联小编为大家分享下MQTT的简述与特点. MQTT(Message Queuing Telemetry Transport ...
- 物联网平台通信协议之 MQTT 协议
物联网平台通信协议之 MQTT 协议 文章目录 物联网平台通信协议之 MQTT 协议 MQTT 概述 MQTT 数据格式 MQTT 概述 MQTT( Message Queuing Telemetry ...
最新文章
- 523. Continuous Subarray Sum
- 中国电梯行业动态调研与未来发展趋势展望报告2022-2028年版
- python有限循环_Python循环
- 一个简单的验证码识别教程
- 模板:多项式乘法(FFTNTT)
- php支付密码控件,Android高仿微信支付密码输入控件实例代码
- 启动Tomcat出现Using CATALINA_BASE
- Maven的-pl -am -amd参数学习 -am 踩过的坑
- Jetty报ArrayIndexOutBoundsException:30305的解决方案
- matlab调和均值滤波_均值滤波和中值滤波的MATLAB实现
- python基础篇11-文件操作
- 语音论文优选:口语理解A Streaming End-to-End Framework For SLU
- shader拖尾_拖尾效果 - LouisSong - 博客园
- OA系统十九:请假申请五:【请假申请】这个内嵌页面的前台文件;设置【点击左侧菜单栏的“请假申请”后】在首页的“功能区”显示【请假功能】这个内嵌页面;
- grep命令的使用;正则;位置锚定
- SEO之了解搜索引擎
- C++ 进制转换器:二进制、十进制、十六进制
- CodeLite工具的使用
- windows cmd显示当前路径echo %cd% 对应linux pwd
- Grafana table 表格配置方法