你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

为什么MQTT会是物联网的首选传输协议呢?

[复制链接]
gaosmile 发布时间:2020-3-4 16:01
MQTT:Message Queuing Telemetry Transport,消息队列遥测传输,基于 TCP/IP 协议栈而构建,而互联网的基础网络协议是 TCP/IP。

MQTT 由 IBM在1999年发布,是一种基于发布/订阅(publish / subscribe)模式的"轻量级"通讯协议,在 2014 年末,它正式成为了一种 OASIS 开放标准,而且在一些流行的编程语言中受到支持(通过使用多种开源实现)。

参考网址:http://mqtt.orghttp://mqtt.p2hp.comhttp://www.ibm.com/developerworks/cn/iot/http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html

01
MQTT特点

MQTT通信协议是物联网应用中使用最多的协议,具有以下特点:
  • 轻量级通信协议,大小仅有几K
  • 适用资源受限设备,低带宽,高延时,不稳定网络中进行消息传输
  • 开放消息协议,简单易实现
  • 发布/订阅消息模式,提供一对多消息发布
  • 消息QoS支持,可靠传输保证
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。

1583308514.png

设计规范:由于物联网的环境是非常特别的,所以MQTT遵循以下设计原则:
  • 精简,不添加可有可无的功能;
  • 允许用户动态创建主题,零运维成本;
  • 把传输量降到最低以提高传输效率;
  • 支持连续的会话控制;
  • 理解客户端计算能力可能很低;
  • 提供服务质量管理;
  • 发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递;
  • 假设数据不可知,不强求传输数据的类型与格式,保持灵活性。


02
物联网为何首选MQTT?

为何选择 MQTT?MQTT 是一种轻量级的、灵活的网络协议,致力于为 IoT 开发人员实现适当的平衡:
  • 这个轻量级协议可在严重受限的设备硬件和低带宽/高延迟/带宽有限的网络上实现。
  • 它的灵活性使得为 IoT 设备和服务的多样化应用场景提供支持成为可能。

为了了解为什么 MQTT 如此适合 IoT 开发人员,我们首先来分析一下为什么其他流行网络协议未在 IoT 中得到成功应用。

1583308546(1).png

为什么不选择其他众多网络协议?大多数开发人员已经熟悉 HTTP Web 服务。那么为什么不让 IoT 设备连接到 Web 服务?设备可采用 HTTP 请求的形式发送其数据,并采用 HTTP 响应的形式从系统接收更新。这种请求和响应模式存在一些严重的局限性:A.HTTP 是一种同步协议。客户端需要等待服务器响应。Web 浏览器具有这样的要求,但它的代价是牺牲了可伸缩性。在 IoT 领域,大量设备以及很可能不可靠或高延迟的网络使得同步通信成为问题。异步消息协议更适合 IoT 应用程序。传感器发送读数,让网络确定将其传送到目标设备和服务的最佳路线和时间。B.HTTP 是单向的。客户端必须发起连接。在 IoT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。HTTP 是一种一对一协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 IoT 应用程序中的一种常见使用情况。C.HTTP 是一种有许多标头和规则的重量级协议。它不适合受限的网络。

出于上述原因,大部分高性能、可扩展的系统都使用异步消息总线来进行内部数据交换,而不使用 Web 服务。事实上,企业中间件系统中使用的最流行的消息协议被称为 AMQP(高级消息排队协议)。但是,在高性能环境中,计算能力和网络延迟通常不是问题。AMQP 致力于在企业应用程序中实现可靠性和互操作性。它拥有庞大的特性集,但不适合资源受限的 IoT 应用程序。
除了 AMQP 之外,还有其他流行的消息协议。例如,XMPP(Extensible Messaging and Presence Protocol,可扩展消息和状态协议)是一种对等即时消息 (IM) 协议。它高度依赖于支持 IM 用例的特性,比如存在状态和介质连接。与 MQTT 相比,它在设备和网络上需要的资源都要多得多。
那么,MQTT 为什么如此轻量且灵活?因为MQTT 协议的一个关键特性是发布和订阅模型。与所有消息协议一样,它将数据的发布者与使用者分离。
03
MQTT的报文结构

一个MQTT的数据包由三部分组成:固定头、可变头和负载
微信图片_20200304155621.png

固定头(Fixed Header):MQTT的数据包都包含有固定头,长度为两个字节。
微信图片_20200304155639.png

② 可变头(Variable Header):不同类型的控制报文的Variable Header的内容不一样;部分控制报文包含2字节的Packet Identifier。
微信图片_20200304155653.png

③ 负载(Payload):不同类型的数据包,负载内容所带的含义不一样。

MQTT建立连接时,会用到CONNECT和COMMACK两个数据包,如下图。
微信图片_20200304155701.jpg

微信图片_20200304155646.png
收藏 评论0 发布时间:2020-3-4 16:01

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版