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

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