浅谈物联网开发最热协议—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
        目录
        相关文章
        |
        15天前
        |
        传感器 消息中间件 物联网
        常用的物联网协议
        常用的物联网协议包括:MQTT(消息队列遥测传输)、CoAP(受限应用协议)、HTTP/HTTPS、LWM2M(轻量级机器对机器)和Zigbee等。这些协议在不同的应用场景中发挥着重要作用,如数据传输、设备管理等。
        |
        1月前
        |
        网络协议 物联网 网络性能优化
        物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
        【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
        53 5
        |
        11天前
        |
        消息中间件 监控 物联网
        物联网8大协议介绍及对比
        根据具体的应用需求,选择合适的协议可以大幅提升系统的性能和可靠性。希望本文能为您在物联网协议的选择和应用中提供有价值的参考。
        66 0
        |
        2月前
        |
        物联网 C# C语言
        物联网开发中C、C++和C#哪个更好用
        在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
        |
        2月前
        |
        存储 传感器 物联网
        结合物联网开发探讨C语言的变量
        在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
        |
        2月前
        |
        消息中间件 监控 物联网
        MQTT协议对接及RabbitMQ的使用记录
        通过合理对接MQTT协议并利用RabbitMQ的强大功能,可以构建一个高效、可靠的消息通信系统。无论是物联网设备间的通信还是微服务架构下的服务间消息传递,MQTT和RabbitMQ的组合都提供了一个强有力的解决方案。在实际应用中,应根据具体需求和环境进行适当的配置和优化,以发挥出这两个技术的最大效能。
        181 0
        |
        2月前
        |
        网络协议 物联网 网络性能优化
        物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
        【9月更文挑战第3天】物联网(IoT)的兴起催生了多种通信协议,如MQTT、CoAP、RESTful/HTTP和XMPP,各自适用于不同场景。本文将对比这些协议的特点、优缺点,并提供示例代码。MQTT轻量级且支持QoS,适合大规模部署;CoAP基于UDP,适用于低功耗网络;RESTful/HTTP易于集成但不适合资源受限设备;XMPP支持双向通信,适合复杂交互应用。通过本文,开发者可更好地选择合适的物联网通信协议。
        40 2
        |
        3月前
        |
        物联网 C# 智能硬件
        智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
        【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
        123 0
        |
        11天前
        |
        存储 安全 物联网
        政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
        政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
        84 50
        |
        11天前
        |
        安全 物联网 物联网安全
        制定统一的物联网技术标准和规范的难点有哪些?
        制定统一的物联网技术标准和规范的难点有哪些?
        25 2

        相关产品

      1. 物联网平台
      2. 下一篇
        无影云桌面