MQTT-SN协议乱翻之简要介绍

前言

这一段时间在翻看MQTT-SN的协议,对针对不依赖于TCP传输的MQTT协议十分感兴趣,老是再想着这货究竟是怎么定义的。一系列文章皆有MQTT-SN 1.2协议所拼装组成,原文档地址: MQTT-SN_spec_v1.2.pdfjava

MQTT-SN文档分为7个部分,我直接按照从前到后的顺序,直接组装成四个小篇。嗯,若放在一篇文章中,文字太长,形成排版难度。缓存

非直译,彻底按照本身理解整理而成,请知晓。服务器

版本变迁历史

  1. 2007-11-29 1.0版本
  2. 2008-6-5 1.1版本,增长休眠设备支持
  3. 2011-5-20 1.2版本
  • 增长消息长度255字节支持
  • 增长转发封装支持
  • 增长返回代码"0x03 Rejected, not supported"
  • ReturnCode 增长到WILLTOPICRESP和WILLMSGRESP消息中

MQTT-SN名称由来

原名是MQTT-S,但会引发人们的误解,所以改名成MQTT-SN:网络

As part of the job of applying the same or similar license terms to the MQTT-S specification as those on the MQTT specification, we are proposing a small name change. The new name would be MQTT-SN, standing for exactly the same long name, MQTT for Sensor Networks. Some people had assumed that the S in MQTT-S stood for secure, so we hope this change will avoid that confusion. -- Ian Craggssession

MQTT-SN存在目的

MQTT for Sensor Networks is aimed at embedded devices on non-TCP/IP networks, such as Zigbee. MQTT-SN is a publish/subscribe messaging protocol for wireless sensor networks (WSN), with the aim of extending the MQTT protocol beyond the reach of TCP/IP infrastructure for Sensor and Actuator solutions.架构

针对适配传感装置(缩写为SA)的特定版MQTT协议,通常运行在嵌入式电池驱动的电子元件中,传输经过基于IEEE 802.15.4规范无线低速网络构成的无线传感网络(WSN),一样具备企业级别特性具备以数据为核心的(data-centric)订阅/发布特性。app

总之,针对低功耗、电池驱动、处理存储受限的设备、不支持TCP/IP协议栈网络的电子器件而定制,好比常见的ZigBee(或XBee),对所依赖的底层传输网络不可知,但只要网络支持双向数据传输和网关,都是能够支持较为上层的MQTT-SN协议传输。好比简单数据报服务,只要支持一个源端点发送数据到一个特定目的地端点,这对支持MQTT-SN协议,就足够了。广播数据报传输服务也是必须的用于网关和终端的自动发现流程。为了下降广播风暴,MQTT-SN定义了广播路径深度(广播范围或广播半径)。负载均衡

一些名词和术语

  • topic id,主题标识符,两个字节16位表示的天然数(java语言short类型,0-65535范围),对应于主题topic name
  • 网关/服务器(gateway/server),在MQTT-SN中统一称之为网关,主要处理和MQTT-SN客户端的交互,缩写为网关
  • MQTT-SN终端和客户端(client),统一称之为客户端,其实也是嵌入式传感设备,或电子元件,资源受限,在无线区域我的网中运行
  • IEEE 802.15.4,完整栈的整个数据上限为128个字节,通常选择UDP(相比20个字节的TCP协议,UDP报文头部仅仅须要8个字节)协议传输数据
  • 低速网络/当前网络,指的是LR-WPAN(low-rate wireless personal area network,),低速无线我的区域网络

MQTT-SN VS MQTT

尽管MQTT-SN被设计成尽量接近于MQTT,但那些低功耗、电池驱动、资源受限的设备所在网络场景为低速带宽、高链接失败、物理层数据包上线为128字节。文档提出了如下不一样点:less

  1. CONNECT消息被拆分红三个消息(CONNECT,WILLTIPIC,WILLMSG),后二者用于客户端传递遗嘱主题和遗嘱消息等
  2. 在PUBLISH消息中主题(topic name)被替换成两个字节长度天然数(topic id),这个须要客户端经过注册流程进行获取对应的topic id
  3. 预约义(提早定义)topic id和topic name,省去中间注册流程,客户端和网关要求提早在其固件中指定
  4. 协议引入的自动发现机制可帮助客户端发现潜在的网关。若存在多个网关,彼此可协调是为主从互备或者负载均衡
  5. "clean session"便可做用于订阅持久化,也被扩展做用于遗嘱特性(遗嘱主题和遗嘱消息)
  6. 针对休眠设备增长离线保活机制支持,当有消息时代理须要缓存,客户端被唤醒时再发送

MQTT-SN架构示意

在MQTT-SN架构图中,存在三种组件:this

  1. MQTT-SN 客户端
  2. MQTT-SN 网关,可单独存在,也能够被集成到MQTT服务器中。须要承担MQTT-SN和MQTT协议之间的转换工做
  3. MQTT-SN 转发器,负责转发当前客户端数据到不可直接访问的网关上去,针对客户端而言网关不可直接访问时,转发器做用就凸显。转发器封装MQTT-SN消息转发给网关,解封来自网关的消息发送给客户端。网关不可以篡改原始数据。

MQTT-SN传输网关

MQTT-SN网关传输方式,下面的图片一目了然。 

  1. 透明网关,会为每个客户端都创建一个TCP链接到MQTT服务器的通道,这样会较为耗费网关网络资源,但模型简单
  2. 聚合网关,只创建一条TCP链接通道到MQTT服务器上,全部的客户端共享一个通道,很经济的说。

网关须要抉择哪些消息须要和远程的MQTT Server进行交互,好比只选择客户端发送的PUBLISH、SUBSCRIBLE消息等。

小结

上面简单介绍了MQTT-SN,下面将会介绍MQTT-SN消息头部和格式。

相关文章
相关标签/搜索