滨州论坛网站建设,产品的推广及宣传思路,做房产网站用什么软件,网站开发赚钱吗 知乎一、简介 MQTT #xff08; Message Queuing Telemetry Transport#xff0c;消息队列遥测传输#xff09;#xff0c; 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样#xff0c; MQTT 协议也是应用层协议#xff0c;工作在 TCP/IP 四…一、简介 MQTT Message Queuing Telemetry Transport消息队列遥测传输 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样 MQTT 协议也是应用层协议工作在 TCP/IP 四层模型中的最上层应用层构建于 TCP/IP 协议上。MQTT 最大 优点 在于可以以极少的代码和有限的带宽为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议使其在物联网、小型设备、移动应用等方面有较广泛的应用。 二、MQTT 的主要特性 MQTT 协议是为工作在低带宽、不可靠网络的远程传感器和控制设备之间的通讯而设计的协议它具有以下主要的几项特性 ①、使用发布 / 订阅消息模式提供一对多的消息发布解除应用程序耦合。 ②、基于 TCP/IP 提供网络连接。 主流的 MQTT 是基于 TCP 连接进行数据推送的但是同样也有基于 UDP 的版本叫做 MQTT-SN 。这两种版本由于基于不同的连接方式优缺点自然也就各有不同了。 ③、支持 QoS 服务质量等级。 根据消息的重要性不同设置不同的服务质量等级。 ④、小型传输开销很小协议交换最小化以降低网络流量。 因为它开销小所占带宽低的特性所以适合在算力小资源少的嵌入式设备上。 ⑤、使用 will 遗嘱机制来通知客户端异常断线。 ⑥、基于主题发布 / 订阅消息对负载内容屏蔽的消息传输。 ⑦、支持心跳机制。 三、开销小、带宽消耗少的原因 MQTTMessage Queuing Telemetry Transport是一种轻量级的发布/订阅消息传输协议专为低带宽、不稳定网络环境设计。它的开销小、带宽需求低的原因有以下几点 1. 头部结构简洁 固定头部MQTT 的固定头部只有2字节包括消息类型和标志位。对于一些简单的消息类型例如 PINGREQ 或 DISCONNECT固定头部就足够了不需要额外的可变头部或负载。可变头部和负载仅在需要时才添加不必要时省略。这减少了数据包的总大小。 2. 协议设计轻量化 简单的操作码MQTT 的操作码和控制字段设计简单减少了解析和处理的复杂度。低开销的消息格式消息格式紧凑有效载荷不包含冗余信息。仅在需要时才传输必要的数据。 3. 发布/订阅模型 异步通信发布/订阅模型允许设备在有数据时才发送消息无需保持长时间的连接减少了不必要的数据传输和带宽占用。减少点对点连接一个消息发布到主题多个订阅者可以接收避免了多个点对点连接减少了网络流量。 4. 保持连接机制 心跳包Keep Alive通过心跳包机制保持连接不频繁建立和断开连接减少了 TCP 连接建立和断开的开销。PINGREQ 和 PINGRESP用于保持连接的消息很小仅有固定头部。 5. QOSQuality of Service等级 QOS 0最多一次传输不需要确认最小带宽消耗。QOS 1至少一次传输需要确认带宽消耗适中。QOS 2仅一次传输最高保证需要两阶段确认带宽消耗相对较高。按需选择用户可以根据应用需求选择合适的 QOS 等级优化带宽使用。 6. 保留消息和遗嘱消息 保留消息服务器保留最新的消息新的订阅者一连接就能收到无需发送多个请求。遗嘱消息客户端异常断开时服务器自动发布预设的遗嘱消息无需额外的检测和重连开销。 7. 小型消息体 适用于小型消息MQTT 适合小型消息传输通常用于传感器数据、状态更新等小型数据包。减少数据量通过小型数据包传输减少了整体数据量和带宽占用。 四、补充心跳包 心跳包Keep Alive机制是 MQTT 协议的一项重要特性用于保持客户端和服务器之间的连接。以下是对这项机制的详细解释 心跳包机制的工作原理 Keep Alive 时间间隔 在 MQTT 连接建立时客户端和服务器约定一个时间间隔称为 Keep Alive 时间间隔以秒为单位。在这个时间间隔内如果客户端没有向服务器发送任何消息则必须发送一个 PINGREQ心跳请求消息。 PINGREQ 和 PINGRESP PINGREQ客户端发送的心跳请求消息通知服务器客户端仍然在线。PINGRESP服务器收到 PINGREQ 后发送回客户端的响应确认连接正常。 作用 保持连接活跃 即使客户端没有实际数据要发送心跳包也可以确保连接不被服务器认为已断开。这对于长时间空闲但需要保持连接的设备非常重要例如 IoT 设备。 检测连接状态 如果服务器在 Keep Alive 时间内未收到任何消息包括 PINGREQ则认为客户端已断开连接可以采取相应的措施例如发布遗嘱消息。同样客户端如果在合理时间内未收到服务器的 PINGRESP可以认为连接出现问题尝试重连。 优势 减少频繁的连接建立和断开 TCP 连接的建立和断开是一个耗时且资源消耗较大的过程。通过保持长时间的稳定连接而不是频繁建立和断开连接可以显著减少网络资源的开销。 高效的带宽利用 心跳包非常小通常只有固定的 2 字节头部几乎不会占用带宽。通过这种方式保持连接比重新建立连接所消耗的带宽要少得多。 提高实时性 保持连接的状态使得客户端和服务器之间的通信可以在需要时立即进行而不需要等待重新建立连接的时间。 示例 假设一个 IoT 设备需要每小时发送一次数据到服务器而在其他时间段保持连接 设备与服务器约定 Keep Alive 时间间隔为 60 秒。每隔 60 秒设备发送一个 PINGREQ服务器响应 PINGRESP。设备在每小时的数据发送前不需要重新建立连接可以立即发送数据。 通过这种方式设备和服务器保持了一个稳定的连接减少了频繁的连接建立和断开操作降低了网络开销和资源消耗。 五、MQTT版本 目前 MQTT 主流版本有两个分别是 MQTT3.1.1 和 MQTT5 。 MQTT3.1.1 是在 2014 年 10 月发布的而 MQTT5 是在 2019 年 3 月发布的。虽然 MQTT3.1.1 与 MQTT5 在时间相差了将近五年但是 MQTT3.1.1作为一个经典的版本目前仍然是主流版本能够满足大部分实际需求。 MQTT5 是在 MQTT3.1.1 的基础上进行了升级因此 MQTT5 是完全兼容 MQTT3.1.1 的。而 MQTT5 是在 MQTT3.1.1 的基础上添加了更多的功能、补充完善 MQTT 协议。 MQTT 5.0 是在 MQTT 3.1.1 的基础上进行扩展和改进的版本它添加了许多新的功能和特性使协议更加完善和灵活。以下是对 MQTT 5.0 新增功能和改进的详细解释 新增功能和改进 属性Properties 在 MQTT 5.0 中每个 MQTT 控制报文例如 CONNECT、PUBLISH、SUBSCRIBE 等可以携带一组属性。这些属性提供了额外的元数据可以用于控制消息的行为、传递额外的信息等。例如PUBLISH 报文可以包含消息过期间隔Message Expiry Interval、内容类型Content Type等属性。 改进的错误报告 MQTT 5.0 引入了更多的返回码使得错误报告更加具体和详细。客户端和服务器可以在不同情况下返回不同的错误码帮助诊断和处理错误。 共享订阅Shared Subscriptions 支持多个客户端共享一个订阅。这对于负载均衡非常有用消息可以分发到多个订阅者中而不是每个订阅者都接收到相同的消息。 会话过期间隔Session Expiry Interval 允许客户端在断开连接后指定会话的过期间隔。在指定的时间内客户端可以重新连接并恢复之前的会话状态如订阅和未传递的消息。 消息过期间隔Message Expiry Interval 消息可以设置一个过期间隔。如果消息在这个时间内没有被传递消息将被丢弃。这对于时间敏感的消息非常有用。 请求/响应模式Request/Response Pattern 支持直接在 MQTT 协议中实现请求/响应模式客户端可以请求并等待响应而不是单纯的发布和订阅。 用户属性User Properties 允许用户在消息中添加自定义属性。这些属性可以包含任何用户定义的键值对提供了更大的灵活性。 流量控制Flow Control 引入了流量控制机制通过设置最大消息量Maximum Packet Size和请求限速Request Rate Limiting来管理和控制消息的流量防止网络拥塞和过载。 增强的订阅选项Subscription Options 订阅选项更加丰富例如可以设置是否保留消息Retain Handling、指定的 QOS 等级等。 断开连接原因码Disconnect Reason Codes 当客户端或服务器断开连接时可以提供具体的断开原因码帮助诊断和处理连接问题。 举例说明 假设有一个 IoT 环境中的温度传感器网络MQTT 5.0 的一些新特性可以提供以下优势 属性Properties 在发布温度数据时传感器可以在 PUBLISH 报文中包含内容类型例如 application/json和消息过期间隔例如 60 秒。 改进的错误报告 如果订阅失败服务器可以返回详细的错误码说明订阅失败的具体原因。 共享订阅 多个监控系统客户端可以共享一个温度数据的订阅服务器将消息负载均衡到各个监控客户端。 会话过期间隔 当传感器设备临时掉线后重新连接可以恢复之前的会话状态而不需要重新订阅所有主题。 请求/响应模式 监控系统可以请求某个传感器的数据并在同一连接上接收到响应而不是通过发布/订阅方式间接获取数据。 总结 MQTT 5.0 在 MQTT 3.1.1 的基础上增加了许多新功能和改进使协议更加灵活、健壮和适应现代物联网应用的需求。这些改进包括属性机制、改进的错误报告、共享订阅、会话和消息的过期间隔、用户自定义属性、流量控制、增强的订阅选项以及具体的断开原因码等。通过这些特性MQTT 5.0 提供了更强的可扩展性和可管理性适用于更加复杂和多样化的应用场景。