浅谈物联网开发最热协议—MQTT协议

简介: 浅谈物联网开发最热协议—MQTT协议

 

MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。

目录

MQTT是什么?

什么是发布/订阅?

MQTT属于哪一层协议?

MQTT协议通信模型

消息主题

服务质量定义

MQTT客户端的功能

MQTT服务器的功能

MQTT协议会话

MQTT协议的报文详情


Hello,大家好,我是灰小猿!

最近在在物联网相关项目的开发的时候,有用到物联网常用的通信协议--MQTT协议,刚开始对这一块的知识并不是很了解,所以在这里一边学习一边记录,有不合理的地方还希望能多多指正。

MQTT是什么?

MQTT协议全称是(Message Queuing Telemetry Transport),即消息队列遥测传输协议

是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,我们知道TCP协议本身就具有高可靠性的特点,因此基于其上的MQTT协议同样也是具有高可靠、低开销的特点,之所以低开销,是以为MQTT协议传输的最小的报文也只有两个字节。

什么是发布/订阅?

我们在上面说到,MQTT协议是一种基于发布/订阅模式的轻量级通讯协议,那么什么是订阅和发布呢?

订阅&发布

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

我们拿抖音平台来举个例子,我们每一个用户就都是一个客户端,而抖音就是MQTT协议中的服务器,当我们(用户一)关注某一个用户(用户二)时,这样一个关注的行为就可以理解为订阅;同时用户二也可以关注你,那么这就是相互订阅。当用户二发布作品的时候,这个作品是发布到了抖音平台,也就是我们现在的服务器,这个过程就是消息的发布。

在这里需要注意的是:用户二(客户端)发布的消息并不是直接发布给了用户一,而是发布到了抖音平台(服务器),由于用户一订阅了用户二的消息,所以抖音平台(服务器)就会向用户一推送。这就是MQTT协议订阅&发布的一个简单比喻。

image.gif编辑

MQTT属于哪一层协议?

MQTT协议是构建于TCP/IP协议之上的,同时TCP/IP参考模型可以分为四层:

应用层 传输层 网络层 链路层

image.gif编辑

而MQTT协议运行于TCP协议之上,属于应用层协议,因此只要是支持TCP/IP协议栈的地方,都可以使用MQTT协议。

MQTT协议通信模型

MQTT协议是基于<客户端-服务器>模型设计的,

主要有三种身份:发布者(publisher)、服务器(broker)、订阅者(subscriber)

同时“发布者”和“订阅者”均属于客户端的范畴。

image.gif编辑

消息主题

主题(Topic):是附加在消息上的一个标签,该标签与服务器中的所有订阅相匹配,服务器会将消息转发给与标签相匹配的每个客户端(订阅者)。

在这里主题(Topic)就可以理解为你抖音用户的“网名”,只有我们订阅了该“网名”,才能通过服务器进行数据的交互,所以在这里我们就可以将服务器理解为一个“中转枢纽”,用户一将“作品”(消息)发布到这个“中转枢纽”(服务器),之后服务器再将该作品推送给订阅了该用户一的粉丝用户二。

主题过滤器(Topic Filter):订阅中包含的一个表达式,用于表示相关的一个或多个主题,主题过滤器可以使用通配符。在这里我的理解就是存放订阅的主题的一个集合,集合中有该主题则推送消息给客户端,没有则不会推送。

服务质量定义

    1. QoS0:最多发送一次消息
    2. QoS1:最少发送一次消息(消息最少需要送达一次,也有可能送达多次)
    3. QoS2:最高等级的服务质量,有且只有一次

    MQTT协议服务质量定义

    Qos值 Bit2 Bit1 描述
    0 0 0 最多分发一次
    1 0 1 至少分发一次
    2 1 0 只分发一次

    MQTT客户端的功能

      1. 发布消息给其它相关客户端
      2. 订阅主题请求接收相关的应用消息
      3. 取消订阅主题请求移除接收应用消息
      4. 从服务器终止连接

      MQTT服务器的功能

        1. 接受来自客户端的网络连接请求
        2. 接受客户端发布的应用消息
        3. 处理客户端的订阅和取消订阅请求
        4. 转发应用消息给符合条件的已订阅客户端(包括发布者自身)

        MQTT协议会话

        客户端与服务器之间的状态交互

        一些会话的持续时长与网络连接一样,另一些可以在客户端和服务端的多个连续网络连接之间扩展。

        MQTT协议的报文详情

        报文

        描述

        流向

        固定报头

        可变报头

        负载

        CONNECT

        客户端请求与服务器端建立连接

        C->S

        1

        CONNACK

        服务器端确认建立连接

        S->C

        2

        PUBLISH

        发布消息

        C<->S

        3

        PUBACK

        收到发布消息确认(QoS1等级)

        C<->S

        4

        PUBREC

        发布消息收到(QoS2等级)

        C<->S

        5

        PUBREL

        发布消息释放(QoS2等级)

        C<->S

        6

        PUBCOMP

        发布消息完成(QoS2等级)

        C<->S

        7

        SUBSCRIBE

        订阅请求

        C->S

        8

        SUBACK

        订阅确认

        S->C

        9

        UNSUBSCRIBE

        取消订阅

        C->S

        10

        UNSUBACK

        取消订阅确认

        S->C

        11

        PING

        客户端发送PING(连接保活)命令

        C->S

        12

        PINGRSP

        PING命令回复

        S->C

        13

        DISCONNECT

        断开连接

        C->S

        14

        好了,关于MQTT协议的这些基本概念就先分享这些。有错误的地方还希望大佬能够批评改正,之后关于MQTT的相关学习也会再继续更新。

        觉得不错记得点赞关注哟!

        大灰狼期待与你一同进步!

        image.gif编辑

        相关实践学习
        消息队列RocketMQ版:基础消息收发功能体验
        本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
        消息队列 MNS 入门课程
        1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
        目录
        相关文章
        |
        2月前
        |
        监控 网络协议 物联网
        你知道什么是物联网MQTT么?
        你知道什么是物联网MQTT么?
        49 0
        |
        6天前
        |
        网络协议 物联网 网络性能优化
        物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
        【8月更文挑战第14天】本文概览了MQTT、CoAP、RESTful/HTTP及XMPP四种物联网通信协议。MQTT采用发布/订阅模式,轻量高效;CoAP针对资源受限设备,基于UDP,低延迟;RESTful/HTTP易于集成现有Web基础设施;XMPP支持双向通信,扩展性强。每种协议均附有示例代码,助您根据不同场景和设备特性作出最佳选择。
        15 5
        |
        1月前
        |
        供应链 网络协议 安全
        物联网协议包含哪些协议?
        物联网协议是物联网生态系统中不可或缺的组成部分,它们负责处理和协调物联网设备之间的通信。
        46 3
        |
        22天前
        |
        消息中间件 物联网 API
        消息队列 MQ使用问题之如何在物联网项目中搭配使用 MQTT、AMQP 与 RabbitMQ
        消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
        |
        2月前
        |
        数据采集 监控 物联网
        MQTT协议在智能制造中的应用案例与效益分析
        【6月更文挑战第8天】MQTT协议在智能制造中的应用案例与效益分析
        80 1
        |
        2月前
        |
        消息中间件 Java Kafka
        SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
        SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
        |
        2月前
        |
        消息中间件 存储 Java
        后端开发Spring框架之消息介绍 同步异步 JMS AMQP MQTT Kafka介绍
        后端开发Spring框架之消息介绍 同步异步 JMS AMQP MQTT Kafka介绍
        19 0
        |
        2月前
        |
        消息中间件 存储 RocketMQ
        消息队列 MQ产品使用合集之Remoting协议是否可以直接和proxy交互的吗
        阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
        |
        2月前
        |
        消息中间件 Serverless Windows
        消息队列 MQ产品使用合集之MQTT协议是否可以应用于社交软件的系统通知场景
        阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
        |
        2月前
        |
        监控 网络协议 C#
        一款基于C#开发的通讯调试工具(支持Modbus RTU、MQTT调试)
        一款基于C#开发的通讯调试工具(支持Modbus RTU、MQTT调试)

        相关产品

      1. 物联网平台