转战物联网·基础篇06-深入理解MQTT协议之基本术语

??通过上一节我们对MQTT协议已经有了初步的印象,这一节我们开始深入的理解一下MQTT协议,介绍常用的MQTT 3.1.1版本,5.0版本后面指介绍新增部分即可。这一节我们先介绍MQTT里常用的术语(非官方文档直接复制)。

??网络连接(Network Connection):
??MQTT 是一种连接协议,底层使用 TCP/IP (传输层协议)提供网络连接,提供有序、可靠的、双向字节流传输。这个连接需要互联网通信的基础设施支撑,客户端使用它连接到服务端(MQTT代理服务的服务器或服务器集群)。

??会话(Session):
??客户端与服务端通过网络连接后的信息通道,服务端会有一个唯一的标志识别,也是状态交互的反映。通常一个会话就是一个网络连接,有些网络环境也可能将一个会话会扩展几个网络连接为之服务。

??应用消息(Application Message):
??使用MQTT协议通过网络连接传输的应用数据,也就是客户端与服务端之间交互的应用数据。应用消息通过MQTT传输时, 会有携带服务质量(QoS)和主题(Topic)等信息内容的。

??服务端(Server) / 代理(Broker):
??一个服务程序或设备,为消息发送方和消息订阅方提供中介服务,为发送方和订阅方提供中转分配处理,这个服务程序也称之为代理(Broker)。要处理来自客户端的网络连接、发布的应用消息,处理保存客户端的订阅和取消订阅,将应用消息转发给符合订阅条件的客户端,关闭客户端发出断开连接请求的网络连接等。

??客户端(Client):
??是与服务端对应的,使用MQTT为客户提供本地服务的程序或设备。客户端总是先发起连接请求通过网络连接到服务端。它可以:打开连接到服务端的网络连接、通过服务端发布应用消息给其他相关的客户端、订阅并接收相关的应用消息、取消订阅并不再接收相应消息、关闭与服务端的网络连接等。

??主题(Topic):
??标注应用程序消息的标签,订阅者用它来确定接收到所关心的消息,服务端代理服务会将消息转发给订阅者所匹配标签的每个客户端。主题名是一个分层的结构,可以有多个级别,级别之间用斜杠分隔。例:area-a/building-6/floor-8 代表A区6栋5层的设备发出的主题。
??订阅者的主题名支持通配符#和+,可以通过通配符进行匹配过滤:
??+为只匹配主题一个层级的通配符,例:area-a/+/floor-8 代表A区任何一个楼的8层的设备。
??#为匹配主题该层级向后任意级别的通配符,例:area-a/# 代表A区的所用设备。

??发布(Publish):
??从MQTT客户端向MQTT服务端主动发送主题消息,或MQTT服务端向MQTT客户端主动发送主题消息(这种情况很少)。主题消息中包含着服务质量(QoS)等级。

??订阅(Subscription):
??订阅的过程与我们生活中向邮局订阅杂志类似,只不过是客户端向服务端订阅,订阅的是主题消息而不是杂志。当服务端的代理服务发现有客户端发布了某客户端订阅的主题消息时,就会把该主题消息转发给订阅了该主题消息的那个客户端。订阅的主题会与某个单一会话(Session)关联,一个会话可以关联多个订阅。每个订阅都包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。

??主题过滤器(Topic Filter):
??是一个针对主题名过滤的筛选器,在订阅表达式中使用,表示订阅所匹配到的一个或多个主题。

??服务质量(QoS):
??表示发布者发布的主题到达代理和目标客户端的可靠性要求,MQTT服务质量分三个等级:
??QoS =0,至多一次,有可能会丢包,一般用在对实时性要求不高并且会有新的数据覆盖旧的数据的场景。例如,某个温度传感器的数据上报,间隔一定时间上报一次,每次都更新服务端数据库中的记录。这样对于是否丢失某次上报的数据并不太重要,因为稍候还会上报新的数据上来更新到最新。
??QoS =1,至少一次,确保到达目的地,但是有可能出现数据重复发送的现象,订阅者可能会收到重复的数据包。
??QoS =2, 刚好一次,确保到达目的地,并且不会出现数据重复发送的现象。

??遗嘱消息(Will Message):
??遗嘱消息一般是在客户端 发起连接的时候指定的。是客户端预先定义好的一个主题消息,代表在自己异常断开的情况下,所留下的最后遗愿(Last Will),也称之为遗嘱。在客户端连接出现异常的情况下,由服务端代理服务主动发布此消息,订阅此消息的其他客户端就收到了这个客户端离线的遗嘱消息了。也就是你希望一个客户端离线后,用什么信息内容通知关心这个客户端离线的其他客户端。

??控制报文 (MQTT Control Packet):
??在MQTT协议框架下通过网络连接发送的信息数据包。MQTT规范定义了十四种不同类型的控制报文,其中PUBLISH报文是用于传输发布应用消息的。控制报文中最多包含三部分,依次分别是固定报头、可变报头、有效载荷。

??固定报头(Fixed header):
??是控制报文的最开始部分,代表着这个报文的具体作用和其他一些控制配置信息等。固定报头长度固定为2个字节,后面会有详解。

??可变报头(Variable header):
??一个控制报文需要携带的控制信息量较多,就在固定报头后面增加了可变报头,一般也是2个字节长度,后面会有详解。

??有效载荷(Payload):
??是控制报文的最后一部分,包含主题名和我们需要携带的自定义的应用消息。例如我们要通过MQTT协议发送一个字符串“hello”,那这个“hello”字符串就是在有效载荷部分。

??本节完,待续......

原文地址:https://www.cnblogs.com/xueweisuoyong/p/11219542.html

时间: 2024-10-01 05:26:05

转战物联网·基础篇06-深入理解MQTT协议之基本术语的相关文章

转战物联网·基础篇05-通俗理解MQTT协议的实现原理和异步方式

??网络上搜索MQTT协议,会出现太多的解释,这里就不做官方标准释义的复制了.这一节我们从实战理解角度,通俗的将MQTT协议的作用及实现原理说一下,旨在可以快速理解MQTT协议.所以可能会出现很多看似不标准的解释,但是更容易理解MQTT的内涵,对MQTT十分精通者请忽略此文. ??在物联网项目中,经常出现的要求是"有限环境".什么意思呢,通俗说就是网络可能不太稳定,带宽也可能很小,网速也比较低,硬件MCU性能也很低,要求在这种情况下也能可靠联网传输信息.看到这里大家就会想到我前面提到的

iOS系列 基础篇 06 标签和按钮 (Label & Button)

iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single View Application模板创建一个名为“LabelAndButtonSimple”的工程 (PS:具体创建过程和各设置项介绍等可参见前面的文章,这里就截图简单带过了:) (1) 打开Xcode,选择Create a new Xcode Project: (2) 选择Single View Applic

9-STM32物联网开发WIFI+GPRS基础篇(STM32+SIM800实现MQTT远程通信控制)

https://www.cnblogs.com/yangfengwu/p/11484159.html 注意:TCP运行在云端服务器上,因为GPRS只能连接公网IP哈!  如果自己测试可以使用花生壳映射! 可以直接搜索我的博客      要写就写的更全面一点吧,把常用的芯片全部都写上 先说一下SIM800的问题 长时间不通信,通信就死掉了,服务器发送数据发送不过去了 但是可以看到串口那边没有报任何的错误..... 查询状态..查询不到 然后我多发了几次查询状态 所以...实际如果做成项目,必须有心

SWA2G422&485JK2G基础篇: STM32+W5500实现MQTT通信控制,485/422透传通信

说明 这节实现的功能: STM32+W5500实现MQTT通信控制 细节功能: 1.DHCP动态获取IP 2.DNS域名解析 3.网口<--MQTT-->485/422透传通信 测试准备工作 注:如果想连接自己的服务器测试,请修改为自己的MQTT连接信息 一,按照下面方式短接通信端口 电脑串口<-->STM32串口1 422/485 <-->STM32串口3 二,连接网线(网线另一端连接可以上网的路由器或者交换机) 三,连接485/422通信模块(任选一种即可,下面说明

MySQL基础篇(06):事务管理,锁机制案例详解

本文源码:GitHub·点这里 || GitEE·点这里 一.锁概念简介 1.基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题.锁机制是一个非常大的模块,贯彻MySQL的几大核心难点模块:索引,锁机制,事务.这里是基于MySQL5.6演示的几种典型场景,对面MySQL这几块问题时,有分析流程和思路是比较关键的.在MySQL中常见这些锁概念:共享读锁.排它写锁 ; 表锁.行锁.间隙锁. 2.存储引擎和锁 MyISAM引擎:基于读写两种模式,支持表级锁 ; Inn

linux基础篇-06,linux bash特性详解

################################################ bash及其特性 shell外壳 clt:sh csh ksh bash tcsh zsh 程序和进程之间的关系:1个程序,多个进程 进程:每个进程,当前主机只存在内核和当前进程 进程是程序的副本,进程是程序的执行实例 用户工作环境 bash shell与子shell ################################################ bash支持以下特性 1,命令历史

linux基础篇-06,linux文件管理du touch stat file rm cp mv vim

文件管理du touch stat file rm cp mv vim ################################################ du:估计文件空间使用情况 touch:创建文件 stat: file rm:删除文件 cp:复制文件,复制目录 mv:剪切文件,重命名文件 vim:编辑文件 ################################################ touch:默认为创建空文件 修改访问时间 [[email protec

Java多线程系列--“基础篇”06之 线程让步

概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479243.html 1. yield()介绍 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”, 从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在当前线程调用yield()之后,其

【物联网云端对接-2】通过MQTT协议与阿里云物联网套件进行云端通信

 在<程序员>杂志2017.4刊上,曾写过一篇<微软百度阿里三大物联网平台探析>,上面曾介绍了阿里云物联网套件的一些内容,在写该篇文章的时候,凌霄物联网网关还无法对接到此平台(TLS必须1.1版本以上).但是随着阿里云物联网套件的不断发展,目前设备除了支持HTTPS认证外,也支持MQTT客户端域名直连认证(可以是TCP直连模式,也可以是TLS直联模式). 最近有幸参与了阿里的飞凤物联网平台计划,可以更为深入的去研究阿里云物联网套件,除了用直接编写代码连接云外,也尝试用组态的方式去对