0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MQTT 5协议中的基础更改(二)

虹科工业物联网技术 来源: 虹科工业物联网技术 作者: 虹科工业物联网技 2023-05-16 10:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

上期文章中给大家介绍了MQTT规范版本5中基础更改的信息和CONNACK返回码,本篇文章我们继续介绍MQTT5协议中的基础更改中其他新功能的细节描述。

01 干净启动

MQTT 3.1.1的其中一个主流功能是MQTT客户端使用清除会话(cleanSession),即这些客户端可以通过临时连接的方式订阅消息或根本不订阅消息。当连接到MQTT代理时,客户端必须选择发送一个标注启用或禁用清除会话的CONNECT数据包。

在MQTT客户端使用清除会话后,一旦出现底层TCP连接断开、或客户端决定断开与代理的连接的情况,代理将会丢弃MQTT客户端的所有数据。此外,如果在代理上存在与客户端标识符关联的先前会话,清除会话CONNECT数据包将强制MQTT代理删除历史数据。

在MQTT v5中,客户端可以选择使用干净启动(Clean Start)(由 CONNECT 消息中的“干净启动”标志指示)。使用这个标志时,代理会丢弃任何以前的会话数据,客户端则会开启新的会话。关闭客户端和服务器之间的 TCP 连接后,会话不会被自动清理。要在客户端断开连接后触发会话删除,必须将“会话到期间隔”的新头字段设置为值 0。

新的Clean Start功能简化了 MQTT 的会话处理,因为它提供了更大的灵活性,并且比 cleanSession/持久会话概念更易于实现。使用 MQTT 5,除非“会话到期间隔”为 0,否则所有会话都是持久的。在超时后或客户端使用干净启动重新连接时,将删除会话。

02 额外的MQTT数据包

MQTT 5引入了一个新的MQTT数据包:AUTH数据包。这个新的数据包对于实现非简单的认证机制非常有用。

AUTH数据包可以在建立连接后由MQTT代理和客户端发送,以使用复杂的质询/响应认证方法(如SASL框架中定义的SCRAM或Kerberos)。也可以用于物联网的最先进的认证方法,如OAuth。这个数据包还允许在不关闭连接的情况下对MQTT客户端进行重新认证。

03 新的数据类型: UTF-8字符串对

自定义报头的出现也需要引入一种新的数据类型:UTF-8字符串对。这种字符串对本质上是一个键-值结构,键和值都是字符串数据类型,这种数据类型目前只用于自定义报头。

有了这种新的数据类型,MQTT在网络上共有7种不同的数据类型可以使用:

Bit

Two Byte Integer

Four Byte Integer

UTF-8 Encoded String

Variable Byte Integer

Binary Data

UTF-8 String Pair

大多数用户通常在其 MQTT 库的 API 中使用二进制数据和 UTF-8 编码字符串。在 MQTT 5 中,UTF-8 字符串对也经常被使用。所有其他数据类型对用户是隐藏的,但会被MQTT客户端和代理制作成网络上有效的MQTT数据包。

04 双向的DISCONNECT数据包

在MQTT 3.1.1中,客户端可以通过在关闭底层TCP连接之前,发送一个DISCONNECT数据包来表明它想断开连接。MQTT代理没有办法通知MQTT客户端发生了什么,并且代理将关闭TCP连接。

这一点在新的MQTT5中有所改变,现在允许代理在关闭套接字之前发送一个“MQTT DISCONNECT”包。客户端现在能够解释它被断开连接的原因并采取相应的行动,代理不需要指出确切的原因(例如出于安全原因)。但至少对于开发中的应用来说,这有助于找出代理关闭连接的原因。

当然,DISCONNECT数据包可以携带Reason Codes,所以很容易指出断开连接的原因(例如在无效权限的情况下)。

05 对QoS 1和2的消息不进行重试

MQTT客户端使用常设的TCP(或具有相同保证的类似协议)连接作为基础传输。TCP连接正常时提供双向连接,并且能保证消息符合恰好一次和按顺序传输,因此所有客户端或代理发送的MQTT数据包都会到达另一端。如果TCP连接中断,而消息正在进行时,QoS 1和2会通过多个TCP 连接提供消息传递保证。

MQTT 3.1.1允许在TCP连接正常时重新交付MQTT消息。实际上,这可能会导致过载的MQTT客户端得到更多的过载。试想一下,一个MQTT客户端从MQTT代理处收到一个消息,需要11秒来处理这个消息(并且在处理后会确认数据包)。现在假设,代理会在10秒的超时后重新发送消息。这种方法没有任何优势,它只是占用了带宽,并加重了MQTT客户端的负荷。

06 使用没有用户名的密码

MQTT 3.1.1要求MQTT客户端在CONNECT数据包中使用密码时要发送一个用户名。对于某些用例来说,如果没有用户名是非常不方便的。使用 OAuth就是一个很好的例子,它使用 JSON Web 令牌作为唯一的身份验证和授权信息。在 MQTT 3.1.1 中使用此类令牌时,经常使用静态用户名,因为唯一的相关信息在密码字段中。

虽然MQTT 5 中有更简便的方式来携带令牌(例如通过 AUTH 数据包),但仍然可以使用 CONNECT 数据包的密码字段。现在,用户只需使用密码字段,不再需要填写用户名。

07 虹科HiveMQ MQTT解决方案

虹科HiveMQ 是一个基于 MQTT 数据传输的通信平台,旨在将数据快速、高效、可靠地传递给连接的物联网设备,HiveMQ 使用 MQTT 协议在设备和企业平台之间进行实时、双向的数据推送。

wKgZomRi7nuAYf7IAABNxlBCX3o67.webp

虹科HiveMQ 的建立是为了解决企业在构建新的物联网应用时面临的一些关键技术挑战,包括:

构建可靠、可扩展的关键业务物联网应用

快速的数据交付,以满足终端用户对响应式物联网产品的期望

通过有效利用硬件、网络和云资源降低运营成本

将物联网数据整合到现有的企业系统中

虹科HiveMQ 提供免费版、专业版、企业版 MQTT Broker 产品,并提供 Kafka、企业安全及 MQTT Broker 桥接三种企业级扩展套件,HiveMQ 还提供高效的 MQTT 客户端及云平台,多方位满足用户需求。

wKgaomRi7nyACBWrAACVmsyI9Eg67.webp

更多精彩资讯 欢迎关注博主

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2939

    文章

    47317

    浏览量

    407763
  • MQTT
    +关注

    关注

    5

    文章

    720

    浏览量

    24782
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    北向MQTT工业物联网网关是什么

    北向MQTT工业网关是工业物联网连接底层设备与上层云平台的核心设备,其核心功能是通过MQTT协议实现设备数据的高效、可靠上传,并支持云端对设备的远程监控与管理。 以下从定义、功能、应
    的头像 发表于 12-02 11:13 73次阅读

    工业智能网关可以通过MQTT协议对接到哪些平台

    、规则引擎等功能。 典型应用:工业设备数据实时上传至阿里云,结合大数据分析优化生产流程。 华为云IoT平台 通过MQTT协议实现设备与云端的双向通信,支持海量设备连接。 典型应用:能源管理场景,传感器数据经网关转换后上传至华为
    的头像 发表于 09-29 11:29 372次阅读

    MQTT_协议中文资料

    电子发烧友网站提供《MQTT_协议中文资料.pdf》资料免费下载
    发表于 09-02 16:19 0次下载

    物联网MQTT网关是什么

    物联网MQTT网关是一种采用MQTT物联网协议的智能设备或软件组件,其核心功能是连接不同通信协议的物联网设备与消息代理服务器,实现设备间的数据交换与集中管理,同时支持边缘计算、安全防护
    的头像 发表于 08-29 15:24 645次阅读

    通过MQTT协议能接入工业物联网云平台中吗

    通过MQTT协议完全可以接入工业物联网云平台,且因其轻量、高效、可靠等特性,已成为工业物联网场景的主流通信协议之一。
    的头像 发表于 08-26 18:03 639次阅读

    GraniStudio :MQTT 协议的深度剖析

    在工业物联网(IIoT)的通信协议体系MQTT(Message Queuing Telemetry Transport)凭借其轻量级、发布 - 订阅模式和低带宽占用等特性,成为连接边缘设备与云端
    的头像 发表于 08-04 09:48 809次阅读
    GraniStudio :<b class='flag-5'>MQTT</b> <b class='flag-5'>协议</b>的深度剖析

    简析Modbus和MQTT协议

    Modbus和MQTT协议在设计目标、通信模式、应用场景、网络结构、数据传输效率、设备兼容性及安全性等方面存在显著差异,具体分析如下: 一、设计目标与定位 Modbus :诞生于1979年,由施耐德
    的头像 发表于 07-10 14:25 478次阅读

    MQTT 回调处理程序遇到了随机 MQTT 断开连接的问题,怎么解决?

    MCU:CYW55913。 MQTT Broker 端点:Amazon AWS 云。 保持活动超时:60 秒 ping 响应超时:5 秒 我们在 MQTT 回调处理程序遇到了随机
    发表于 06-05 07:14

    MQTT为何成为物联网协议

    的优势,以下为你详细介绍: 轻量级特性,适配资源受限设备 协议头开销小 :MQTT协议头非常简洁,相比其他协议,它在数据传输时添加的额外信息极少。例如,在一个简单的物联网设备向服务器发
    的头像 发表于 05-20 09:54 596次阅读

    KaihongOS操作系统:MQTT物联网通讯协议

    @ohos.net.khMqtt (MQTT物联网通讯协议) 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 目前支持3.1.1
    发表于 05-08 07:51

    《DNESP32S3使用指南-IDF版_V1.6》第五十五章 基于MQTT协议连接阿里云服务器

    的消息发布/订阅传输协议MQTT 协议是轻量、简单开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限境,如:机器与机器(M2M)通信和物联网(IoT)。其在,通
    发表于 03-18 09:22

    MQTT物联网平台有哪些?有哪些功能?

    MQTT(Message Queuing Telemetry Transport)是一种基于客户端-服务器架构的发布/订阅模式的消息传输协议,它广泛应用于机器与机器的通信(M2M)以及物联网环境
    的头像 发表于 03-15 14:23 1217次阅读
    <b class='flag-5'>MQTT</b>物联网平台有哪些?有哪些功能?

    基于MQTT协议的车云通信设计

    随着智能汽车的发展,车云通信的功能场景及数据量也逐渐增多,具有轻量化、可靠性等特点的MQTT协议成为很多OEM车云通信协议的选择。本文主要介绍。 什么是MQTT
    的头像 发表于 01-08 10:24 1717次阅读
    基于<b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>的车云通信设计

    百问MQTT协议分析 - 报文分析①

    5 4 3 2 1 0 Byte1 Mqtt报文类型(1) Reserved(保留位) 0 0 0 1 0 0 0 0 Byte2~n 剩余长度 表格3.1 16.3.1.2 协议
    发表于 12-13 09:41

    百问MQTT协议分析 - MQTT简述及协议报文格式组成

    16.1 mqtt协议介绍 16.1.1 概述 ​MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景
    发表于 12-13 09:29