最后更新:2021-11-10 03:47:21 手机定位技术交流文章
MQTT(Message Queening Teleconomic Treaty Transport,NewsLog Telegraphy Transport协定)是以TCP/IP协议为基础、由IBM于199年出版的以出版/订阅(出版/订阅)结构为基础的轻量级通信协议,最新版本是v3.One.One.One.。 MQTT的主要好处是,它能够以很少的代码和最小带宽为远程设备提供实时、准确的信息服务。
当然,MQTT并不是材料联网发展的唯一选择;与MQTT的相互竞争协议包括XMP和CoAP等,并在文件结束时提供了比较和说明。
众所周知,TCP/IP参考模式分为四层:应用层、传输层、网络层和链层。 TCP和UDP被置于传输层,其协议,如HTTP、FTP、SSH等是常见的。 MOQTT协议在TCP之上运作,是申请级协议,因此,MQTT只要支持TCP/IP协议仓库,就可以使用。
每个 MQTT 命令信件都有一个固定信头, 有些信件还包含一个变量信头和一个负载。 信件格式如下:
负载、固定头标题和可更改头标题
MQTT 固定信头由至少两个字节组成, 第一个字节由信件类型( Message type) 和 Qos 级别( Qos) 等符号组成。 第二个字节从剩余长度字段开始, 即可变信件信头的完整长度加上后方的负载, 最多四个字节 。
剩余长度字段的最大个人字节值是二进制 0b011 11 11 16x7F。 这意味着单个字节可以传递最高长度127 字节。 为什么不是 256 字节? 因为 MQTT 协议规定, 单字节中的第八个字节( 上限) 表示存在未来的字节, 第八个字节则表示“ 继续 ” 。
例如,数字64,代码是一个字节,小数点为64,十六进制为0x40。 数字321(65+2*128)以两个字节编码,最不重要的字节在前面,第一个字节为65+128=193(0xC1),第二个字节为2(0x02),表示2x128。
由于MQTT协议允许在剩余长度(如表1)中最多使用四个字节,最后字节的最大值可能只有0x7F,而不是0xFF,因此最大信息大小为256 MB,而不是512 MB。

表1
变量页眉主要包括协议名称、协议版本、连接符号(Connect 旗子)、心跳间隔(保持活动计时器)、连接返回代码(Connect 返回代码)、主题名称(Topic Name)等等,然后是主部分的演示文稿。
有效载荷可直接转化为负载,而负载可能不敏感,并可能被解释为电文的主题(体)。
当 MQTT 发送CECT(连接)、PUBLISH(出版)、BUCRBE(订阅)、SubACK(订阅确认)和UNSUBSCRBE(注销)电文时。
固定信头的第一个字节包括连接旗,用来辨别 MQTT 电文类型。 MQTT 协议包含14种不同的电文类型(如表2),可以分为连接和终止、分发和订阅、 QOS 2 电文的程序以及不同的 ACK 确认。对于每一种电文将传递什么,没有什么可说的。

表2
MQTT 信息质量分为三个层次: Qos0、Qos1和Qos2。
例如,目前流行的共用自行车智能锁使智能锁能够使用QOS0级质量信息定期请求服务器,发送目前自行车的位置,如果服务器被没收,将在适当时候再次发送。 用户可以通过 App 访问周围的自行车,在找到自行车后需要打开这些自行车,使用QOS 1级质量信息,移动电话App 持续地向自行车锁发送解锁信息,以确保一个信息能够达到打开自行车的地步。 当终端用户没有自行车时,它必须提交支付表,该表可以使用QOS 2级质量信息,从而确保数据只传输一次,否则用户将支付更多的费用。
Will Flag、 Will QOS 和 Will Restain Flag 是用于监测客户端和服务器之间连接状态的连接旗中的三个 Will 标记。 如果设置了 Will Flag, Will QOS 和 Will 将保留标签也必须设置, 威尔 Top 和 Will 信件字段必须包含在信件主题中 。
当服务器与客户端通信时, MQTT 服务器会在异常或客户端的心率发生变化时向客户端发送 Will 信息。 当然, 如果服务器从客户端收到 DISCONNEC 信息, Will 信息的发送不会被触发 。
因此,在设备下降时需要通知用户时,可以使用威尔域。
如果在这一时间周期内没有商业数据相关信息,客户会发送 PINGREQ 信息,因此服务器会回复 PINGRESP 信息确认。 如果服务器位于一个半(1)(5)之内,如果客户在心跳之间的时间周期内没有收到任何信息,与客户的连接就会中断。
分配/订阅方法解码订阅者(签发者)与订阅者(下标者)之间的关系,因此不需要出版商与订阅者之间的直接联系。
这一模式的好处如下:
一旦发行/订阅确定, MQTT 可以双向通信。 这意味着 MQTT 支持服务允许使用反向控制设备, 该设备可以订阅一个主题, 然后出版商就主题发出信息, 一旦收到信息, 该设备可以进行一系列活动 。
MQTT是在二进制基础上完成的,而不是像HTTP和XMPP那样以字符串为基础完成的。 因为HTTP和XMP有很长的协议头条,而MQTT固定头条只有两个字节,发送一个信息是协议中最不稳定的一个。
由于MQTT在TCP层之上运行,并且以某种方式进行传递,它等于一种明示的HTTP传输,而MQTT发送的所有信息都完全可以使用Wiresark获得,信息指示是详尽无遗的,如图1所示。
图片1描述Wiresark抢夺MQTT数据包。
这可能导致以下风险:
作为一项传输协议,MQTT只涉及信息传输,开发者有义务提供必要的安全特征,安保职能可在三个层面处理:应用、传输和网络。
MQTT承认两个认证级别:
MQTT客户端可以将多达65535个字符作为客户身份(客户身份识别器)进行沟通,通常可以使用嵌入芯片的MAC地址或芯片序列号。 虽然使用客户身份认证可能不可靠,但在某些受限制的情况下可能就足够了。
MQTT协议允许通过CONNECT电文的用户名和密码字段传输用户名和密码。
用户名和密码很容易得到认证,但由于以明确格式提供,可以使用抓取工具迅速获取。
一般来说,使用客户身份识别、用户名和密码(如支持 MQTT 协议连接的 OneNET 云平台)就足够了,这三个字段被用作认证。 如果看起来不安全,也可以在传输层进行认证。
传输层就是这种情况:在TLS握手成功之后,MQTT代理商可以继续提供客户X509证书,以核实设备,如果设备不合法,可以终止连接。使用X509认证的好处是在传输层可以确认设备的有效性,在发送CONNECT信息之前可以终止非法设备的连接。
MQTT 协议只完成了电文格式,而且没有限制用户协议遵循某种风格的要求,因此在 MQTT 协议上,我们必须设计一套我们自己通信协议。例如,出版商向设备发送一个可对电文作出反应的开放信息,并以二进制、字符串或 JSON 格式传送返回代码。下面将展示一个基本示例。
MQTT最初是在二进制系统的基础上建立的,因此,使用者协议使用二进制系统实现是合适的替代办法。 虽然视觉可读性已经丧失,但交通量可能保持极小。 16进制对于单电影开发者来说并不陌生,因为单电影机器是按位运行的,而六进制/二进制通信也用于芯片到芯片的通信。
字符串对于单个的机器开发者来说也是一种选择。例如,对序列端口传递的 AT 命令是一种基于字符串的通信。虽然字符串很容易理解,但对于复杂的语言开发者来说,它不是理想的选择,而 Key-Value 是最好的形式 。
JSON 在中国的全名是 JavaScript 对象标记语言, 其中所有东西都是对象。 因此, 任何类型的支持, 如文本、 整数、 对象、 阵列等等, 都可以使用 JSON 描述 。
JSON等级对阅读和写作来说是简单明了的,计算机理解和制作,有效提高网络传输效率也是简单易懂的。
对于单一机器开发者来说,流行微控制软件开发工具Keil有一个JSON图书馆,可用于创建STC和STM32等微控制器,从而不必用写JSON解析器或转换器来解释微控制器装置上的JSON。
如果您不想使用 JSON 库来构建或理解它, 您可以使用 Springtf 在 C 中生成 JSON 字符串, 例如 :
因此,你可以建造一个字符串:"哈罗世界!", "价值":12345JSON阵列。
MQTT协议只负责通信部分,用户协议可以自行选择,或者当然也可以以复杂和冗长的XML格式选择。 但是,如果选择 MQTT+XML,为什么不选择 XMP?
最后,MQTT+JSON是目前最佳的替代方案,协议简洁、易于理解、区分和制作等,并考虑到服务器和设备开发商的开发成本。
目前,100度、Ali和tungsten云平台已逐步建立一个目标联网开发一揽子方案:正在测试平台,正在测试Ali云网络包,100度云网络包已经在支持MQTT,并可能免费试用一段时间。
如果您不想使用云平台,而只想对 MQTT 进行实验或在内联网上监测设备,您可以在本地部署 MQTT 服务器。 以下是一些 MQTT 服务器:
您熟悉主要平台上的 MQTT, 您也可以在内联网上安装 MQT 服务器 。 因此, 如果没有调试工具, 您如何完成? 您是否想要用您感兴趣的语言写一个? 要处理主题订阅和文章, MQT 调试工具应该考虑使用 MQTT 客户端LiveMQ Websocket Clit, 基于 WebSocket 的浏览器、 MQTT 客户端。
当主要平台开始采用MQTT时,MQTT与其他协议相比有什么好处?物体联网装置是否可能使用附加议定书?这是对MQTT与协议其他协议的比较。
虽然MQTT似乎高于TCP水平,而TCP似乎根本不相似,但作者认为必须讨论这一点,因为大多数参与硬件或嵌入式开发的工程师都直接与TCP水平挂钩,所有对嵌入式开发感兴趣的人都应当认识到,LwIP是嵌入系统的一个开放源,TCP/IP议定书lodge,LwIP在保证嵌入产品具有全部TCP/IP能力的同时,保证了有限的消费。
也就是说,每当LwIP被用于嵌入设备时,TCP/IP协议就被启用,允许使用MQTT协议。
由于TCP协议有粘滞和分包问题,它必须调整数据传输,如果数据传输超过MSS的长度(最长报告期),则有必要建立一个电文长度字段,以保证收件人能够完全通过缓冲接收电文。
当然,不需要使用MQTT协议,这些MQTT已经得到解决,MQTT最多可以一次性提供256MB数据,而不必考虑粘性分包合同。
TCP和MQTT并非内在冲突,而是基于以下事实:Socket开发需要更多,大多数嵌入式开发模块只能为定制协议提供Socket界面。
HTTP的最初目标是提供一个主要用于Web的HTML网页的出版和接收机制。 HTTP是一种典型的C/S通信方式:客户提出请求,只能被动地接收服务,连接只能一次性发送,回复和断开连接。见下文的网络终端样本。
目前,SNS网站的大批用户,如Weibo,都可公开查阅该内容,当出版商发布电文和数据发送到服务器更新时,需要尽可能为有关的人实时更新该内容。 网站以HTTP协议为基础,使用HTTP协议检测服务器内容更新情况,需要客户经常要求服务器确认。 在浏览器中可以使用基于HTTP长期连接的“服务器推进”技术的彗星技术实现这一效果,该技术有两个主要实现模型:AJAX长周期(长期循环)办法和Iframe和htmlfile(流动)办法。 这里没有详细开发这两个技术模型,感兴趣的读者可以获得有关资料。
如果要对设备进行逆向控制,可能需要使用上述彗星技术,由于需要不断要求服务器,因此通信费用非常高,如果加上HTTP报告的持续时间,在节制带宽方面没有实际的优势。
当然,HTTP协议可以使用,如果该装置只是用于报告数据而没有控制的时间。
XMP协议是最有可能与MQTT.XMPP(扩展通信和表达协议)进行竞争的对手,它是一种开放的实时通信技术,使用扩展标记语言(XML)作为信息交流的核心格式。 它的好处是成熟、稳健和可缩放。 它主要用于许多聊天系统,即MQTT和XMPP在信息传播领域竞争的聊天系统。
CoAP是另一个可以与 MQTT 竞争的协议。 它模仿 HTTP REST 模式, 服务以 URI 为基础提供资源, 客户可以利用 Get、 PUT、 POST、 DELETE 和协议风格获取这些资源, 协议风格与 HTTP 相当相似, 例如, 当设备有温度数据时, 其表达方式为 :
CoAP://:/sensors/temperature
这是设备IP地址,是港口
然而,使用计算机用户协会可能会使网络后端的情况复杂化。例如,计算机用户协会可能完成最简单的互联网用户协会结构:设备+MQT服务器+APP,移动或网络终端都可以直接从MQTT服务器上订阅所需的主题。另一方面,计算机用户协会可能需要一种结构,如计算机用户协会+Web+Database+App,它必须通过数据数据库传送给第三方。
然而,目前关于《守则》的信息有限,此外,《手册》除了在物体联网领域使用外,还可以在移动电话信息、在线聊天等领域发挥作用。
在进行上述比较之后,我们可以得出结论认为,MQTT在无同步/订阅的基础上释放/订阅发送人和用户,二进制实现节省了存储空间和交通,而且MQTT拥有更好的信息处理机制,可以取代TCP Socket应用程序的一部分。 MQTT可以选择与HTTP和XMP相比的用户数据格式,这种格式在解释上不那么复杂,而MQTT也可以用于诸如移动电话推动等领域。MQTT作为人的切入点,移动电话是人与对象之间的完美联系,是双层拼接的雕刻。 当然,其他协议也可以作为辅助存在,HTTP服务设备只定期上载数据,而CoAP更适合高度限制的流动通信网络,表3直截了上述协议之间的相似和不利之处。
本文由 在线网速测试 整理编辑,转载请注明出处。