ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机网络学习(6)—— MQTT协议

2020-04-28 10:41:39  阅读:354  来源: 互联网

标签:协议 QoS 订阅 主题 计算机网络 MQTT 消息 客户端


一、概述

        消息队列遥测传输协议(Message Queuing Telemetry Transport),简称MQTT。是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,由IBM在1999年发布。
        MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

二、特点

        MQTT协议具有以下主要的特点:

  • 开放消息协议,简单易实现。
  • 发布订阅模式,一对多消息发布。
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
  • 消息QoS支持,可靠传输保证。
  • 提供Last Will和Testament特性通知有关各方客户端异常中断的机制。
    (1)Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
    (2)Testament:遗嘱机制,功能类似于Last Will。

三、原理

在这里插入图片描述
        MQTT协议有三种身份:

  • 发布者(Publisher),客户端。
  • 代理(Broker),服务器。
  • 订阅者(Subscriber),客户端。

        发布者和订阅者都为客户端,代理为服务器,同时消息的发布者也可以是订阅者(为了节约内存和流量发布者和订阅者一般都会定义在一起)。

四、概念

MQTT客户端

一个使用MQTT协议的设备、应用程序等,它总是建立到服务器的网络连接。

  • 可以发布信息,其他客户端可以订阅该信息。
  • 订阅其它客户端发布的消息。
  • 退订或删除应用程序的消息。
  • 断开与服务器连接。

MQTT 服务器

MQTT服务器以称为Broker(消息代理),以是一个应用程序或一台设备。它是位于消息发布和订阅者之间。

  • 接受来自客户端的网络连接。
  • 接受客户端发布的应用信息。
  • 处理来自客户端的订阅和退订请求。
  • 向订阅的客户转发应用程序消息。

主题(Topic)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

  • 要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如:/worldemq/emqtt/emqx是有效的主题。
  • 订阅者的主题名支持通配符#+
    (1)#支持一个主题内任意级别话题。
    (2)+只匹配一个主题级别的通配符。
  • 客户端成功订阅某个主题后,代理会返回一条SUBACK消息,其中包含一个或多个returnCode参数

主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

负载(Payload)

消息订阅者所具体接收的内容。

消息传递的服务质量水平(QoS)

服务质量,标志表明此主题范围内的消息传送到客户端所需的一致程度。

  • 至多1次(QoS = 0),消息发布完全依赖底层 TCP/IP
    网络,不可靠,消息基本上仅传送1次,如果当时客户端不可用,则会丢失该消息。这一级别可用于如下情况,环境传感器数据,丢失1次读记录无所谓,因为不久后还会有第2次发送。
  • 至少1次(QoS = 1),消息应传送至少1次,确保消息到达,但消息重复可能会发生。
  • 只有1次(QoS = 2),消息仅传送1次,确保消息到达1次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

  • 客户端在成功建立TCP连接之后,发送CONNECT消息,在得到服务器端授权允许建立彼此连接的CONNACK消息之后,客户端会发送SUBSCRIBE消息,订阅感兴趣的Topic主题列表(至少一个主题)。
  • 订阅的主题名称采用UTF-8编码,然后紧跟着对应的QoS值。

发布(publish)

控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息,MQTT 客户端发送消息请求,发送完成后返回应用程序线程。

        比如安卓的推送服务,还有一些即时通信软件如微信等也是采用的推送技术。

五、消息类型

        MQTT拥有14种不同的消息类型:

  • CONNECT:客户端连接到MQTT代理。
  • CONNACK:连接确认。
  • PUBLISH:新发布消息。
  • PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复。
  • PUBREC:QoS 2消息流的第一部分,表示消息发布已记录。
  • PUBREL:QoS 2消息流的第二部分,表示消息发布已释放。
  • PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成。
  • SUBSCRIBE:客户端订阅某个主题。
  • SUBACK:对于SUBSCRIBE消息的确认。
  • UNSUBSCRIBE:客户端终止订阅的消息。
  • UNSUBACK:对于UNSUBSCRIBE消息的确认。
  • PINGREQ:心跳。
  • PINGRESP:确认心跳。
  • DISCONNECT:客户端终止连接前优雅地通知MQTT代理。

六、协议

        MQTT协议中文版

七、应用

        MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。

  • 物联网M2M通信,物联网大数据采集。
  • Android消息推送,WEB消息推送。
  • 移动即时消息,例如:Facebook Messenger。
  • 智能硬件、智能家具、智能电器。
  • 车联网通信,电动车站桩采集。
  • 智慧城市、远程医疗、远程教育。
  • 电力、石油与能源等行业市场。

标签:协议,QoS,订阅,主题,计算机网络,MQTT,消息,客户端
来源: https://blog.csdn.net/hezhanran/article/details/105786540

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有