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协议传输的是什么。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值