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

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

3天内不再提示

虹科干货 | MQTT 5协议中的基础更改(二)

虹科工业物联网技术 2023-05-15 09:40 次阅读

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

上期文章中给大家介绍了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,否则所有会话都是持久的。在超时后或客户端使用干净启动重新连接时,将删除会话。

额外的MQTT数据包

02

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数据包。

双向的DISCONNECT数据包

04

在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 协议在设备和企业平台之间进行实时、双向的数据推送。

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

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

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

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

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

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

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

    关注

    1

    文章

    290

    浏览量

    16686
  • MQTT
    +关注

    关注

    5

    文章

    651

    浏览量

    22502
收藏 人收藏

    评论

    相关推荐

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

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

    MQTT-3.1.1标准协议文档

    电子发烧友网站提供《MQTT-3.1.1标准协议文档.pdf》资料免费下载
    发表于 11-21 16:20 0次下载

    万字干货CAN XL研讨会问答,你想知道的都在这里!

    CANXL国际研讨会圆满结束,感谢各位观众的热情参与!携手多位CANXL创始成员及行业领袖,包括来自国际CiA协会、博世、英飞凌以及恩智浦等,带来
    的头像 发表于 11-16 01:00 457次阅读
    万字<b class='flag-5'>干货</b>!<b class='flag-5'>虹</b><b class='flag-5'>科</b>CAN XL研讨会问答,你想知道的都在这里!

    MQTT.fx 连接Onenet 多协议接入平台 MQTT协议(旧版)详解

    此文档可以作为中间态MQTT版本,默认参数获取教程 多协议接入地址 td {white-space:nowrap;border:1px solid #dee0e3;font-size:10pt
    的头像 发表于 09-30 15:20 666次阅读
    <b class='flag-5'>MQTT</b>.fx 连接Onenet 多<b class='flag-5'>协议</b>接入平台 <b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>(旧版)详解

    物联网行业MQTT通信协议详解以及使用

    在物联网、小型设备、移动应用等方面有较广泛的应用。 MQTT协议特点 MQTT是一个基于 客户端-服务器 的消息发布/订阅传输
    的头像 发表于 09-20 17:08 1434次阅读
    物联网行业<b class='flag-5'>中</b><b class='flag-5'>MQTT</b>通信<b class='flag-5'>协议</b>详解以及使用

    MQTT协议网关的工作原理及功能特性

    在物联网的快速发展MQTT协议网关作为连接物联网设备与消息代理服务器的重要桥梁,扮演着不可或缺的角色。MQTT是一种基于发布/订阅模式的轻量级通信
    的头像 发表于 09-18 17:00 489次阅读
    <b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>网关的工作原理及功能特性

    MQTT网关:物联网的关键桥梁

    MQTT网关:物联网的关键桥梁 在物联网(IoT)的广阔世界MQTT网关扮演着至关重要的角色。MQTT,全称为Message Queu
    的头像 发表于 08-22 14:15 401次阅读
    <b class='flag-5'>MQTT</b>网关:物联网<b class='flag-5'>中</b>的关键桥梁

    基于MQTT协议云平台的Modbus转MQTT网关

    钡铼Modbus转MQTT网关BL100是一款高性能、高性价比的物联网网关,它支持将Modbus协议(包括Modbus RTU和Modbus TCP)的数据转换为MQTT协议的数据格式
    的头像 发表于 07-29 17:59 762次阅读
    基于<b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>云平台的Modbus转<b class='flag-5'>MQTT</b>网关

    干货丨轻松掌握PCAN-Explorer 6,dll调用一文打尽!

    逻辑操作体验。本文将详细介绍如何在PE6高效调用dll,包括如何加载和使用dll文件,以及如何创建自定义的dll项目。
    的头像 发表于 04-19 10:36 807次阅读
    <b class='flag-5'>虹</b><b class='flag-5'>科</b><b class='flag-5'>干货</b>丨轻松掌握PCAN-Explorer 6,dll调用一文打尽!

    mqtt协议和tcp协议区别

    带宽和高延迟的网络环境,尤其在物联网环境中表现优秀。而TCP协议是面向连接的、可靠的、基于字节流的传输层通信协议,主要用于互联网和局域网的数据传输。 2. 连接方式:MQTT
    的头像 发表于 04-01 09:15 1630次阅读

    MQTT和Modbus的物联网网关协议的区别分析

    MQTT和Modbus的物联网网关协议区别分析 MQTT(Message Queuing Telemetry Transport)与Modbus是两种广泛应用在物联网环境的通信
    的头像 发表于 03-18 16:50 821次阅读
    <b class='flag-5'>MQTT</b>和Modbus的物联网网关<b class='flag-5'>协议</b>的区别分析

    MQTT协议网关解决方案设计与实施

    的主要功能包括协议转换、消息过滤、安全认证、负载均衡等,以确保消息的可靠传输和系统的稳定运行。随着物联网技术的快速发展,MQTT协议作为一种轻量级的发布/订阅消息传输协议,在物联网应用
    的头像 发表于 03-11 14:07 500次阅读

    干货|HK-TE-200x系列FAQ(一):如何定义EES的VLAN?

    导读:在今天的干货系列,我们将探讨HK-TE-200x系列交换机的VLAN配置。VLAN(虚拟局域网)在现代网络架构
    的头像 发表于 03-04 14:26 405次阅读
    <b class='flag-5'>虹</b><b class='flag-5'>科</b><b class='flag-5'>干货</b>|HK-TE-200x系列FAQ(一):如何定义EES的VLAN?

    什么是MQTTMQTT协议的方法

    MQTT是一种轻量级消息传递协议,由IBM开发,于1999年首次发布。它使用发布/订阅模式并在设备、服务器和应用程序之间转换消息。
    的头像 发表于 02-25 17:04 1338次阅读
    什么是<b class='flag-5'>MQTT</b>?<b class='flag-5'>MQTT</b><b class='flag-5'>协议</b><b class='flag-5'>中</b>的方法

    mqtt协议和http协议区别

    MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的“轻量级”通讯协议,构建于TCP/IP协议上。它是由IBM在1999年发布的。MQT
    的头像 发表于 01-19 15:56 6934次阅读