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章 的相关文章

  • S281 LoRa网关在智能电力监测系统中的应用

    随着能源消耗的增加和环境保护的要求 智能电力监测系统在电力行业得到了广泛的应用 作为一家领先的科技公司 钡铼技术有限公司推出的S281 LoRa网关为智能电力监测系统提供了强大的支持和解决方案 本文将重点介绍S281 LoRa网关在智能电力
  • 【计算机开题报告】 网上茶叶销售平台设计与开发

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 1 研究背景 随着社会经济的迅速发展和科学技术的全面进步 以计算机与网络技术为基础的信息系统正处于蓬勃发展的时期 随着经济文化水平的提高 近年来 随着科学
  • 如何防护零日攻击

    零日攻击是什么 零日攻击 也称为零时差攻击 通常是指利用还没有被补丁的安全漏洞进行的攻击 这些漏洞在被发现后 由于各种原因 软件供应商未能及时发布补丁 使得黑客有机会利用这些漏洞进行攻击 零日攻击通常由技术高超的黑客发起 他们在对目标系统或
  • 网络安全现状:揭秘白帽黑客的真实收入

    前言 作为一个网络安全行业五年打工仔 今天就来看看黑客的收入和方向怎么样 一个黑客年薪是多少呢 外界普遍认为黑客是高收入群体 那么你想过黑客是怎么获得收入的吗 黑客分为白帽黑客和黑帽黑客 处于黑白两道的黑客会的技术都有些相似 但是却是对立的
  • 一个网工(网络工程师)七年的职业血泪史....

    前言 一个工作了七年的老网工 上家公司待了五年 现在这家公司也快三年了 分享一些我自己学习网络安全路上的一些经历 也算是帮大家少走些弯路 一 如何学习网络安全 1 不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全 一般
  • 6类典型场景的无线AP选型和部署方案

    你们好 我的网工朋友 前段时间刚给你们来了篇解决无线频繁断网的技术文 解决无线频繁断网 这个办法值得收藏 不少朋友私聊 说想再聊聊无线AP的选型和部署方案 这不就安排上了 无线网络覆盖项目中 无线AP的合理选型和部署非常重要 在设计施工中
  • 这些专利知识你知道吗?

    专利作为一种重要的知识产权保护形式 专利不仅成为了企业核心竞争力的重要组成部分 也成为了国家创新发展的重要支撑 专利是指国家专利主管机关授予发明创造申请人的一种专有权 这种专有权具有独占性 排他性和法律强制性 能够为持有者带来经济利益和竞争
  • 【CTF必看】从零开始的CTF学习路线(超详细),让你从小白进阶成大神!

    最近很多朋友在后台私信我 问应该怎么入门CTF 个人认为入门CTF之前大家应该先了解到底 什么是CTF 而你 学CTF的目的又到底是什么 其次便是最好具备相应的编程能力 若是完全不具备这些能力极有可能直接被劝退 毕竟比赛的时候动不动写个脚本
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 5个步骤,教你瞬间明白线程和线程安全

    记得今年3月份刚来杭州面试的时候 有一家公司的技术总监问了我这样一个问题 你来说说有哪些线程安全的类 我心里一想 这我早都背好了 稀里哗啦说了一大堆 他又接着问 那你再来说说什么是线程安全 然后我就GG了 说真的 我们整天说线程安全 但是对
  • 【信道估计】【MIMO】【FBMC】未来移动通信的滤波器组多载波调制方案(Matlab代码实现)

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

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • HPE Aruba Networking:五大网络现代化策略助力实现校园数字化转型

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

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 揭秘网络世界的幕后密码——Wireshark网络协议分析软件

    在我们日常生活中 计算机和互联网已经成为不可或缺的一部分 然而 很少有人真正了解网络背后复杂的工作原理和通信协议 幸运的是 有一款强大而实用的软件 Wireshark 可以帮助我们深入了解网络世界的幕后密码 Wireshark是一款免费的网
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 将数据从 Azure HUB-IOT 保存到 Azure SQL 数据库

    我最近创建了一个 Azure Hub IOT 其中我从虚拟设备发送一些数据 我知道数据已到达 因为我可以从终端看到它们 但现在我想获取这些数据并将它们保存到 Azure SQL DataBase 中 我怎样才能做到这一点 如果有人可以向我解
  • NMCLI 设备不可用

    我正在尝试在 ubuntu core 16 04 上配置带有蜂窝接口的新设备 我有 NMCLI 包在上面运行 在添加连接之前 我检查了接口 nmcli dev DEVICE TYPE STATE CONNECTION eth1 ethern
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它

随机推荐

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

    前方高能 请注意 想必大家都用过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专门针对 物联网设备 开发 是一种 低开销 低带宽占用的即时通讯协议