--- doc_type: hypothesis-highlights url: 'https://developer.aliyun.com/article/786001' --- # MQTT协议详解及v5.0实践-阿里云开发者社区 ## Metadata - Author: [developer.aliyun.com]() - Title: MQTT协议详解及v5.0实践-阿里云开发者社区 - Reference: https://developer.aliyun.com/article/786001 - Category: #source/article🗞 - Tags: ## Highlights - MQTTv3协议是为在低带宽、不可靠的网络上工作的传感器而设计的基于TCP的应用层协议,适用于IoT场景 - 使用发布/订阅消息模式,支持一对多的消息分发 - 报文格式设计精简, 适用于小规模数据传输以及资源受限的IoT设备 - 支持QoS0、QoS1、QoS2 三种消息QoS。 - MQTT-SN(Sensor Networks) 是MQTT协议的传感器网络版本,最早用在zigBee无线网络中,主要面对电池供电,有限的处理器能力和存储能力的设备。只有很小的内存和CPU,TCP 对于这些设备来说非常奢侈,甚至无法允许TCP协议栈。 - MQTT 5.0在协议层提供了更大的自定义扩展空间,平台基于扩展点可支持更丰富的协议能力 - 设备状态一致性策略设计,包括session管理机制、心跳检测机制、异地登陆问题、状态最终一致性策略 - 协议层本地有session管理器来对本地会话进行管理,通过心跳检测、会话自检来保证跟设备之间的连接状态一致性 - 设备状态一致性策略:设备到MQTT协议接入层之间是tcp长连接,通过心跳机制保证心跳周期内设备状态的最终一致性 - 通过分布式会话版本号,保证分布式会话并发更新安全,通过上行消息/心跳定时触发会话自检机制,解决异常情况下本地/分布式会话状态不一致的问题。 - MQTT协议是基于PUB/SUB的异步通信模式 - MQTT协议层针对不同场景支持多种MQTT接入方式,同时支持tcp直连、tls、ws、wss等方式接入 - 协议层实现了多协议端口复用,也就是一个端口同时支持多种协议 - 通过topic中包含的messageId匹配请求与响应,对业务数据零侵入messageId的生成与匹配、超时控制等逻辑,调用方无感知简化了业务方调用逻辑,扩展了MQTT使用场景。