物联网应用层协议主要有CoAP, MQTT, XMPP,HTTP等,'物联网时空'公众号将分别进行协议分析和比较。上一篇文章我们介绍了CoAP协议,本文我们再来看看历史更加悠久的MQTT协议。 1.什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM主导开发的一个即时通讯协议,其发展历史大致如下:
MQTT是专门针对物联网开发的轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。 2.MQTT协议详解 实现MQTT协议需要客户端和服务器端: MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。 MQTT传输的消息分为:主题(Topic)和负载(payload)两部分。
MQTT协议报文内容分为固定报文头、可变报文头、消息体三部分。 2.1 固定头部: 1.MessageType(0和15保留,共占4个字节) 2.DUP flag 用来在保证消息传输的可靠。如果设置为1,则在下面的变长头部里多加MessageId,并需要回复确认,保证消息传输完成,但不能用于检测消息重复发送。 3.Qos 主要用于PUBLISH(发布态)消息的,保证消息传递的次数。 00表示最多一次 即<> 01表示至少一次 即>=1 10表示一次,即==1 11保留后用 4.Retain 主要用于PUBLISH(发布态)的消息,表示服务器要保留这次推送的信息,如果有新的订阅者出现,就把这消息推送给它。如果不设那么推送至当前订阅的就释放了。 5.固定头部的byte 2 用来保存可变头部+消息体的总大小。 2.2 可变头部 1.Protocol Name,UTF编码的字符“MQIsdp”,头两个是编码名提长为6。 2.Protocol Version,协议版本号,v3 也是固定的。 3.Connect Flag,连接标识,有点像固定头部的。8位分别代表不同的标志。第1个字节保留。 4.Keep Alive,表示响应时间,如果这个时间内,连接或发送操作未完成,则断开tcp连接,表示离线。 2.3 消息体(PayLoad) 只有3种消息有消息体:CONNECT,SUBSCRIBE,SUBACK。
而PUBLISH是消息体中则保存推送的消息,以二进制形式,当然这里的编辑可自定义。 3.MQTT协议特点 1.使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 2. 对负载内容屏蔽的消息传输。 3. 使用TCP/IP提供网络连接。 4. 有三种消息发布服务质量: “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况:环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。 “至少一次”,确保消息到达,但消息重复可能会发生。 “只有一次”,确保消息到达一次。这一级别可用于如下情况:在计费系统中,消息重复或丢失会导致不正确的结果。 5. 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。 6. 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。 本文简要分析了MQTT协议,读者可下载协议原文进行详细解读:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/MQTT_V3.1_Protocol_Specific.pdf
|
|
来自: 美目扬 > 《物联网技术(NB-IoT, LTE,5G)》