MQTT通信协议的简介、特点及实现原理 - 第1章

2023-11-04

目录

1.1 MQTT 特点

1.2 MQTT实现原理

1.3 术语

相关链接


MQTT是一种基于 发布/订阅 模式的 轻量级 通信协议,由IBM于1999年发布。MQTT专门针对 物联网设备 开发,是一种 低开销、低带宽占用的即时通讯协议。该协议构建于 TCP/IP 协议上,旨在为低带宽和不稳定网络环境中的物联网设备,提供可靠的网络服务。它的设计思想是简单、开放、规范,易于实现,这些特点使其非常适合 机器间通信(M2M)物联网(IoT)等场景。

 

以下内容,部分摘自于MQTT3.1.1。完整中文译文:MQTT3.1.1 中文协议文档

1.1 MQTT 特点

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一个客户端 - 服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如:机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。

本协议运行在TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。它有以下特点:

  • 使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。
  • 消息传输不需要知道负载内容。
  • 提供三种等级的服务质量:
  1. “最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久之后会再次发送。
  2. “至少一次”,保证消息可以到达,但是可能会重复。
  3. “仅一次”,保证消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。
  • 很小的传输消耗和协议数据交换,最大限度减少网络流量。
  • 异常连接断开发生时,能通知到相关各方。

 

 

1.2 MQTT实现原理

IOT传感器的 MQTT发布和订阅模型

 

  • 实现MQTT协议需要 客户端 和 服务器端 通讯完成。
  • MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端消息代理是服务器消息发布者可以同时是订阅者
  • MQTT 传输的消息分为:主题(Topic)和 负载/载荷(payload)两部分:
  1. Topic:消息的类型/主题,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)。
  2. payload:消息的内容,指订阅者需要的具体内容。

 

类比博客体系中关注的博主(Topic),一旦博主有更新,博客系统(Broker)会将内容(payload)自动推送到我的消息中。而我可以随时关注/取关博主(Topic)。并且我在关注他人的同时,我也可以写博客,其他人也可以关注我。我与博主之间没有明显的分级关系。

 

1.3 术语

网络连接(Network Connection):MQTT使用的底层传输协议基础设施。

  • 客户端使用它连接服务端。
  • 它提供有序的、可靠的、双向字节流传输。


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


客户端(Client):使用MQTT的程序或设备。客户端总是通过网络连接到服务端。它可以

  • 发布应用消息给其它相关的客户端。.
  • 订阅以请求接受相关的应用消息
  • 取消订阅以移除接受应用消息的请求。
  • 从服务端断开连接。


服务端(Server): 一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端

  • 接受来自客户端的网络连接
  • 接受客户端发布的应用消息
  • 处理客户端的订阅和取消订阅请求。
  • 转发应用消息给符合条件的客户端订阅。


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


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


主题过滤器(Topic Filter:): 订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符。
会话(Session): 客户端和服务端之间的状态交互。一些会话持续时长与网络连接一样,另一些可以在客户端和服务端的多个连续网络连接间扩展。


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

 

 

相关链接

MQTT 协议原文:MQTT 3.1.1英文原文

MQTT 中文网:MQTT 3.1.1 中文网

MQTT 协议译文:MQTT3.1.1 中文协议文档

目前各大服务器应用主流版本为 MQTT 3.1.1

 

MQTT 协议详解:MQTT 协议详解

MQTT 报文帧格式详解:MQTT 报文帧格式详解

使用电脑网络调试助手,MQTT接入阿里云物联网平台:网络调试助手接入阿里云

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MQTT通信协议的简介、特点及实现原理 - 第1章 的相关文章

  • 八路视频光端机技术导论:多通道视频传输的高效解决方案

    随着光通信技术的快速发展 八路视频光端机 已成为多通道视频传输的有效解决方案 本文将探讨该技术的原理 优势及应用前景 为光通信行业的技术人员和研究学者提供参考 技术原理 八路视频光端机基于 波分复用 WDM 技术 通过一个光纤同时传输多路视
  • Metasploit安装及使用教程(非常详细)从零基础入门到精通,看完这一篇就够了。

    通过本篇文章 我们将会学习以下内容 1 在Windows上安装Metasploit 2 在Linux和MacOS上安装Metasploit 3 在Kali Linux中使用 Metasploit 4 升级Kali Linux 5 使用虚拟化
  • 网络基础面试题(二)

    11 什么是网桥 防火墙的端口防护是指什么 网桥是一种网络设备 用于连接两个或多个局域网 LAN 并转发数据包 它能够根据MAC地址来识别和转发数据 提高网络的传输效率和安全性 防火墙的端口防护是指对防火墙上的各个端口进行保护和限制 只允许
  • 浅谈能耗系统在马来西亚连锁餐饮业的应用

    1 背景信息 Background 针对连锁餐饮业能耗高且能源管理不合理的问题 利用计算机网络技术 通讯技术 计量控制技术等信息化技术 实现能源资源分类分项计量和能源资源运行监管功能 清晰描述各分店总的用能现状 实时监测各供电回路的电压 电
  • Azure IoT 中心证书

    我正在尝试使用 Mqtt 在 Azure IoT 中心发布一些数据 我已使用 SAS 令牌成功发布了一些数据 但我的客户想要一个 x509 自生成和自签名证书 Azure 支持这一点 但没有提供太多相关信息 https learn micr
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • HPE Aruba Networking:五大网络现代化策略助力实现校园数字化转型

    作者 Aruba中国区技术销售总监 俞世丹 全球数字化进程日益加深 科技已成为加速教育行业发展的重要驱动力 人工智能 大数据 云计算 物联网 虚拟现实等新兴技术的快速发展 正在深刻改变着教育的形态和模式 为了更好地满足学校师生个性化教育教学
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 【无标题】

    大家都知道该赛项的规程和样题向来都是模棱两可 从来不说具体的内容 导致选手在备赛时没有头绪 不知道该怎么训练 到了赛时发现题目和备赛的时候完全不一样 那么本文将以往年信息安全管理与评估赛项经验来解读今年2023年国赛的规程 帮助选手们指明方
  • 网工内推 | 上市公司同程、科达,五险一金,年终奖,最高12k*15薪

    01 同程旅行 招聘岗位 网络工程师 职责描述 1 负责职场 门店网络规划 建设 维护 2 负责网络安全及访问控制 上网行为管理和VPN设备的日常运维 3 负责内部相关网络自动化和系统化建设 4 优化与提升网络运行质量 制定应急预案 人员培
  • Eclipse Californium CoAP 通配符作为 url 路径

    我正在使用 Eclipse Californium 开发一个 CoAP 应用程序 它将仅显式声明根资源路径 其余资源应通过通配符提供和解析 root 就像在 REST API 或 servlet 上一样 有什么办法可以实现这一点吗 好吧 我
  • Mosquitto 1.4.2 Websocket 支持

    我正在尝试利用 Mosquittos 最近的更新来支持代理中的 websocket 我正在运行 Mosquitto v1 4 2 并将以下几行添加到 mosquitto 配置文件 mosquitto conf 中 listener 1000
  • NMCLI 设备不可用

    我正在尝试在 ubuntu core 16 04 上配置带有蜂窝接口的新设备 我有 NMCLI 包在上面运行 在添加连接之前 我检查了接口 nmcli dev DEVICE TYPE STATE CONNECTION eth1 ethern
  • Android Ble GATT_ERROR 133 经常使用三星设备

    我正在研究 BLE 应用程序 我已经使用 Nexus Moto Samsung LG 等不同设备进行了测试 我仅在三星设备中收到 GATT 错误 133 三星 A5 2016 尝试连接 10 次 但只连接了 2 或 3 次 请帮助我 Non
  • 可以在 lambda 中订阅 aws IOT 主题吗?

    新手问题 找不到以前的答案 我想用 Alexa 构建一个简单的泵控制器 希望 Alexa 报告泵状态 最简单的方法是 Alexa gt lambda gt publish to Iot 然后 或者可能在发布之前 订阅另一个主题 本地控制器将
  • Azure 物联网中心设备到云分区的用途

    创建新的 Azure IOT 中心时 系统会询问您需要多少个设备到云分区 您可以为标准层选择 2 32 个分区 据我了解 SKU 和单位数量决定了您可以发送到 IOT Hub 的消息的每日最大配额 建议将设备分成多个物联网中心 以平滑流量突

随机推荐

  • 在线接口测试工具(神器)

    前方高能 请注意 想必大家都用过POSTMAN 进行接口的测试吧 那么接下来我告诉你 你用了这个工具以后 你就不会再想去用POSTMAN了 话不多说了 直接上代码吧 还是那句话 我会尽可能详细的去演示操作过程 避免大家走弯路 123456
  • MySQL阅读网上MySQL文章有感的杂记

    前言 本篇文章将会记录各大MySQL文章的一些有意思的内容摘取 以及一些问题的提问 并且持续更新 并且MySQL专栏将会记录MySQL常考的场景题等实战 问题归类 1 MySQL从加锁范围上分为哪三类 2 全局锁加锁方法的执行命令是什么 主
  • Openwrt的uci接口

    UCI是Unified Configuration Interface的缩写 翻译成中文就是统一配置接口 用途就是为OpenWrt提供一个集中控制的接口 OpenWrt实现的这个工具 能够让你的不管是Lua还是PHP程序 或者SHELL程序
  • 无网络环境,如何部署Docker镜像

    一 简介 无网络环境 部署 Docker 镜像 这通常适用于一些部署环境是脱离网络的公司 或者公司内部有着严格的网络安全要求 且还是 Docker 部署的程序 这个时候怎么办 别急今天就来讲讲 无网络环境 如何部署 Docker 镜像 二
  • awk命令的使用

    1 获取根分区剩余大小 先用df h命令查看磁盘 确定我们需要获取字段的位置 再使用awk命令获取此字段 df h df h awk NR 6 print 4 2 获取当前机器ip地址 ifconfig awk NR 2 print 2 3
  • 终止for循环的方式

    continue break return 1 continue 当程序运行到 continue 语句时 会终止当前的这一次循环 进入下一次的循环中 它 适用于所有的循环结构 for int i 0 i lt 10 i 执行内容 conti
  • stm32F103C8T6 keil5编译完成使用XCOM进行串口打印时乱码

    一 检查波特率 串口调试工具和main c的串口初始化一定要相同 二 检查编码格式 第一步 点击keil5的小扳手图标 修改为Chinese GB2312 Simplified 这样一来 代码的中文就可以显示出来啦 第二步 XCOM这款串口
  • 安装Visio 2013与原本的office冲突的最终解决方案

    一 下载office visio 2013 二 开始安装 但是提示卸载原本的office 三 网上找寻答案 于是按照这篇文章https jingyan baidu com article 19192ad8c1d6dae53e570735 h
  • HashMap常用API及注意事项

    map clear map size map isEmpty map containsKey 判断 map containsValue map get key map put key value map putAll otherMap ma
  • ubuntu18.04安装cmake3.18.0

    ubuntu18 04安装cmake3 18 0 1 本方法可适用安装任何版本的cmake 可以在官网中找到需要的版本 本文以3 18 0为例 https cmake org files 2 wget https cmake org fil
  • Javaweb和微信小程序项目部署阿里云服务器总结(上)

    谈到微信小程序的java后台怎么部署在阿里云服务器上的问题 弯弯绕绕 好多坑 网上的博客资料也特别乱 博主也是在没有任何经验和指导下花了几天的工夫才完成的 这里为了方便大家不踩坑 总结了下整个流程和注意事项 由于篇幅原因 只讲重点的地方 所
  • 软件测试(3)——白盒测试

    文章目录 白盒测试 白盒测试方法 静态测试 人工代码检查 软件度量 其它方法 动态测试 覆盖测试分析 运行时错误检测 覆盖测试 逻辑覆盖方法 路径测试 数据流测试 白盒测试 白盒测试也称结构性测试 逻辑驱动测试 基于程序的测试 特点 将程序
  • Android App开机自启动

    最近项目中 有用到开机自启动的功能 这里做一下总结 供大家学习探讨 Android 开机启动延迟问题 Android 开机自启动被拦截问题 实战演练 测试手机 红米手机 Redmi 6A 安卓version 9 华为手机 DUA AL00
  • vs2010 vs2013等vs中如何统计整个项目的代码行数

    vs2010 vs2013等vs中如何统计整个项目的代码行数 在一个大工程中有很多的源文件和头文件 我如何快速统计总行数 解决方案 b b b b ctrl shift F 查找选项选 正则表达式 具体步骤 1 鼠标停靠在你的项目解决方案附
  • ERRORS: auth.User.groups: (fields.E304) Reverse accessor for ‘User.groups‘ clashes with reverse acce

    写博客网站后台 设计数据库结构时 博客 Article 表中定义了一个作者外键 author models ForeignKey settings AUTH USER MODEL verbose name 作者 这个外键是网站注册用户 这样
  • Oracle数据库获取uuid函数

    Oracle新建系统表时 要求主键为32位uuid 猜测Oracle肯定会提供相关的函数 翻阅相关文档 果然发现Oracle提供的函数 sys guid 用于获取32位uuid 简单使用为 select sys guid from dual
  • 【Linux内核中的并发控制】- 自旋锁

    在内核中会经常看到spin lock 自旋锁 它到底是个神马东西 在驱动相关的书籍和论坛中查阅了不少资料 看的也是云里雾里 现在将知识罗列总结一下 便于日后回顾 1 自旋锁定义 在Linux内核并发控制中最常见的锁就是自旋锁 自旋锁最多只能
  • POJ 1302 Blue Gene, Jr.(递归实现)

    Inspired by IBM s Blue Gene project the CEO of Universal Biological Machinery UBM has called on you UBM s top software e
  • Intellij IDEA 报错java.lang.NoClassDefFoundError

    Intellij IDEA 报错java lang NoClassDefFoundError Intellij IDEA 报错java lang NoClassDefFoundError 11 Aug 2018 23 48 24 686 严
  • MQTT通信协议的简介、特点及实现原理 - 第1章

    目录 1 1 MQTT 特点 1 2 MQTT实现原理 1 3 术语 相关链接 MQTT是一种基于 发布 订阅 模式的 轻量级 通信协议 由IBM于1999年发布 MQTT专门针对 物联网设备 开发 是一种 低开销 低带宽占用的即时通讯协议