我是靠谱客的博主 饱满凉面,最近开发中收集的这篇文章主要介绍Mqtt协议基本介绍,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Mqtt协议基本介绍

  1. 简介
    1. MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
    2. MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
  2. 特点与优势
    1. 适用于低带宽,小型传输,开销很小。
    2. 基于发布/订阅的体系结构,基于事件的驱动,可以实现一对多的消息发布以及应用解耦
    3. 使用TCP/IP提供网络连接。
    4. 使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
    5. 有三种消息发布服务质量。
    6. 对负载内容屏蔽的消息传输。
  3. MQTT协议原理
    1. 通信过程中MQTT协议具有三种身份,即发布者(Publish)、代理(Broker服务器)、订阅者(Subscribe)。

    2. 其中主要包括两个部分

      1. topic:主题(主题是一个简单的字符串,可以有更多的层次结构级别,用斜杠分隔,如:/sys/{deviceId}/thing/register),在客户端订阅主题以后,就可以收到此类主题的publish消息。
      2. payload:负载信息,也就是消息内容 在iot中主要是设备定义协议发来的信息(json数据等)
    3. MQTT会建立tcp连接作为连接通道,然后客户端发送connect信息,服务端返回conack连接确认信息,之后会用心跳来测试对方在线情况。

sequenceDiagram
客户端 ->> 服务端:tcp连接(三次握手)
客户端 ->> 服务端:connect报文连接
服务端 ->> 客户端:conack响应连接MQTT完成
客户端 ->> 服务端:心跳pingreq
服务端 ->> 客户端:响应心跳pingresp
客户端 ->> 服务端:订阅主题SUBSCRIBE(可以包含多个带有订阅的主题topic)
客户端 ->> 服务端:publish发布信息(带有主题topic)
服务端 ->> 客户端:publish发布信息(带有主题topic)
```

  其中,客户端可以发布/订阅(可以是其他客户端的)信息,取消订阅关闭连接,服务端可以接受客户端发来的信息,处理客户端订阅与退订信息,向有相关订阅信息客户端发送信息。
  1. MQTT协议数据结构
    1. 固定头(Fixed header)主要是表示数据包类型与分组标识

    2. 可变头(Variable header) 根据固定头的数据包类型决定

    3. 负载(payload消息体)这个是发送的具体数据

  2. MQTT协议的固定头部
    1. 第一个字节信息,messageType代表了消息的类型

img

  1. 服务质量

      	 1. 至多一次   Qos = 0   这个代表消息会发送一次,不管有没有到达服务端
      	 2. 至少一次  Qos =1  这个代表会保证服务到达一次,服务端通过puback来响应,这样就算一次,如果通信异常就会重发这条在消息头中设置了DUP(固定头部的数据)位的消息
      	 3. 一次  Qos=2  这个会执行一次而且只有一次。
    
    1. 服务质量对应头报文信息类型

      1. PUBACK 报文是对 QoS 1 等级的 PUBLISH 报文的响应,即只有当PUBLISH发布QoS 1 等级的消息时,服务器才会发出对应的响应报文
      2. PUBREC报文是对QoS等级2的PUBLISH报文的响应。它是QoS 2等级协议交换的第二个报文。真正能实现QoS2等级消息而且没有性能问题的Broker或mqtt server的很少。
      3. PUBREL报文是对PUBREC报文的响应。它是QoS 2等级协议交换的第三个报文。
      4. PUBCOMP报文是对PUBREL报文的响应。它是QoS 2等级协议交换的第四个也是最后一个报文。

    注意:可以下载mqttfx工具自己测试MQTT协议的数据是怎么传输的也可以再结合抓包工具(wireshark)捕获看MQTT协议传输的是什么。

最后

以上就是饱满凉面为你收集整理的Mqtt协议基本介绍的全部内容,希望文章能够帮你解决Mqtt协议基本介绍所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部