计算机网络学习 - MQTT协议

一、概述

        消息队列遥测传输协议(Message Queuing Telemetry Transport),简称MQTT。是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,由IBM在1999年发布。
        MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

二、特点

        MQTT协议具有以下主要的特点:

  • 开放消息协议,简单易实现。
  • 发布订阅模式,一对多消息发布。
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
  • 消息QoS支持,可靠传输保证。
  • 提供Last Will和Testament特性通知有关各方客户端异常中断的机制。
    (1)Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
    (2)Testament:遗嘱机制,功能类似于Last Will。

三、原理

在这里插入图片描述
        MQTT协议有三种身份:

  • 发布者(Publisher),客户端。
  • 代理(Broker),服务器。
  • 订阅者(Subscriber),客户端。

        发布者和订阅者都为客户端,代理为服务器,同时消息的发布者也可以是订阅者(为了节约内存和流量发布者和订阅者一般都会定义在一起)。

四、概念

MQTT客户端

一个使用MQTT协议的设备、应用程序等,它总是建立到服务器的网络连接。

  • 可以发布信息,其他客户端可以订阅该信息。
  • 订阅其它客户端发布的消息。
  • 退订或删除应用程序的消息。
  • 断开与服务器连接。

MQTT 服务器

MQTT服务器以称为Broker(消息代理),以是一个应用程序或一台设备。它是位于消息发布和订阅者之间。

  • 接受来自客户端的网络连接。
  • 接受客户端发布的应用信息。
  • 处理来自客户端的订阅和退订请求。
  • 向订阅的客户转发应用程序消息。

主题(Topic)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

  • 要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如:/worldemq/emqtt/emqx是有效的主题。
  • 订阅者的主题名支持通配符#+
    (1)#支持一个主题内任意级别话题。
    (2)+只匹配一个主题级别的通配符。
  • 客户端成功订阅某个主题后,代理会返回一条SUBACK消息,其中包含一个或多个returnCode参数

主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

负载(Payload)

消息订阅者所具体接收的内容。

消息传递的服务质量水平(QoS)

服务质量,标志表明此主题范围内的消息传送到客户端所需的一致程度。

  • 至多1次(QoS = 0),消息发布完全依赖底层 TCP/IP
    网络,不可靠,消息基本上仅传送1次,如果当时客户端不可用,则会丢失该消息。这一级别可用于如下情况,环境传感器数据,丢失1次读记录无所谓,因为不久后还会有第2次发送。
  • 至少1次(QoS = 1),消息应传送至少1次,确保消息到达,但消息重复可能会发生。
  • 只有1次(QoS = 2),消息仅传送1次,确保消息到达1次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

  • 客户端在成功建立TCP连接之后,发送CONNECT消息,在得到服务器端授权允许建立彼此连接的CONNACK消息之后,客户端会发送SUBSCRIBE消息,订阅感兴趣的Topic主题列表(至少一个主题)。
  • 订阅的主题名称采用UTF-8编码,然后紧跟着对应的QoS值。

发布(publish)

控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息,MQTT 客户端发送消息请求,发送完成后返回应用程序线程。

        比如安卓的推送服务,还有一些即时通信软件如微信等也是采用的推送技术。

五、消息类型

        MQTT拥有14种不同的消息类型:

  • CONNECT:客户端连接到MQTT代理。
  • CONNACK:连接确认。
  • PUBLISH:新发布消息。
  • PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复。
  • PUBREC:QoS 2消息流的第一部分,表示消息发布已记录。
  • PUBREL:QoS 2消息流的第二部分,表示消息发布已释放。
  • PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成。
  • SUBSCRIBE:客户端订阅某个主题。
  • SUBACK:对于SUBSCRIBE消息的确认。
  • UNSUBSCRIBE:客户端终止订阅的消息。
  • UNSUBACK:对于UNSUBSCRIBE消息的确认。
  • PINGREQ:心跳。
  • PINGRESP:确认心跳。
  • DISCONNECT:客户端终止连接前优雅地通知MQTT代理。

六、协议

        MQTT中文网

        MQTT协议中文版

七、应用

        MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。

  • 物联网M2M通信,物联网大数据采集。
  • Android消息推送,WEB消息推送。
  • 移动即时消息,例如:Facebook Messenger。
  • 智能硬件、智能家具、智能电器。
  • 车联网通信,电动车站桩采集。
  • 智慧城市、远程医疗、远程教育。
  • 电力、石油与能源等行业市场。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用i.MX6ULL开发板学习MQTT时,您可以按照以下步骤进行计划: 1. 硬件准备: - 购买i.MX6ULL开发板,并确保其与您的计算机连接正常。 - 确保您具备基本的硬件知识,例如如何连接传感器或外设到开发板上。 2. 环境搭建: - 安装适用于i.MX6ULL开发板的操作系统,例如Linux发行版。 - 配置网络连接以便开发板能够访问互联网。 3. MQTT基础知识: - 了解MQTT协议的基本概念、工作原理和消息发布/订阅模型。 - 学习MQTT客户端库的使用方法,例如Paho MQTT。 4. 开发工具选择: - 选择适合i.MX6ULL开发板的编程语言,例如C/C++或Python。 - 选择一个MQTT客户端库来简化与MQTT代理的通信。 5. 编写代码: - 在开发板上编写代码以连接到MQTT代理,并实现消息发布和订阅功能。 - 使用所选的编程语言和MQTT客户端库进行开发。 - 可以尝试使用传感器或外设与MQTT通信,以加深对MQTT的理解。 6. 测试和调试: - 测试您的代码是否能够成功连接到MQTT代理并进行消息发布和订阅。 - 调试任何可能出现的错误或问题,确保代码的稳定性和可靠性。 7. 扩展和应用: - 尝试扩展您的应用程序,例如实现更复杂的消息处理或与其他服务的集成。 - 探索MQTT物联网应用中的应用场景,例如远程监控、设备控制等。 8. 学习资源: - 查阅MQTT的官方文档和规范,深入了解其更高级的特性和用法。 - 参考在线教程、博客文章或书籍,以获取更多关于MQTT和嵌入式开发的知识。 请注意,这只是一个大致的计划,您可以根据自己的需求和兴趣进行调整和扩展。祝您学习愉快!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值