教你动手写网络协议栈-MQTT报文解析-实践

2022-05-10 17:57:29 浏览数 (1)

教你动手写网络协议栈系列文章

序号

内容

1

《教你动手写UDP协议栈-UDP协议栈格式》

2

《教你动手写UDP协议栈-DHCP报文解析》

3

《教你动手写UDP协议栈-OTA上位机》

4

《教你动手写UDP协议栈-DNS报文解析》

5

《教你动手写UDP协议栈-CoAP报文解析 》

6

《教你动手写网络协议栈-MQTT报文解析-实践 》

背景

  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。 --来源于网络
  • MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。 --来源于网络
  • 关于MQTT我分为2~3篇来描述,先从实践来描述。

MQTT服务器搭建

  • MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,所以需要一个服务器,MQTT服务器可以选择开源平台--EMQx和ThingsBoard。这两个开源平台部署比较方便。本次的讲解主要基于EMQx开源平台。
  • EMQx官网资料--《https://www.emqx.cn/downloads#broker》,不同平台的下载安装步骤都提供了。
EMQx配置
  • EMQx需要进行简单的配置,比如设置MQTT client连接服务器时,需要的username、password等。
  • 因为我的环境是在windows下,所以下面的配置都是基于windows下的,不过其他平台的大同小异。
  1. 配置username和password等参数
  • 在解压的目录中打开:emqxetcpluginsemqx_auth_username.conf
  • 从examples中可以看出,可以设置多个username和password
  • 加密方式设置为plain(透传)
  1. 配置匿名登录
  • 在解压的目录中打开:emqxetcemqx.conf
  • 为true,即允许匿名登录,方便调试,如果设置成false,需要进行鉴权。
  1. 操作emqx broker:
代码语言:javascript复制
// 启动EMQx Broker:
emqx start

// 停止EMQx Broker:
emqx stop

// 重启EMQx Broker:
emqx restart
  • 更多的操作命令参考链接:https://docs.emqx.cn/broker/v4.3/getting-started/command-line.html
EMQx管理界面
  • EMQx中包含了一个Web server,当启动EMQx后,通过浏览器登录《服务器IP:18083》就能登录web server。
  • 其中:默认用户名为 admin, 密码为 public

MQTT客户端搭建

  • 服务器搭建好了,那么还需要一个MQTT客户端,为了快速学习,我们可以使用别人做好的MQTT客户端软件-- MQTT.fx。下载地址:http://www.jensd.de/apps/mqttfx/
  • 下载完,根据提示安装即可。
启动一个MQTT客户端:
  • 打开设置:
  • 配置MQTT client:
  • 连接服务器:
  • 连接成功后,可以在EMQx web server上查看连接信息,如果信息跟客户端的一致,说明连接成功:
启动第二个MQTT客户端:
  • 操作跟第一个客户端一致,启动完之后就可以在EMQx web server上查看连接信息:

实验

  1. 在上述中服务器和客户已经成功建立连接。
  2. 我们通过一个实验演示M2M的通信。
  3. 其中client01客户端,订阅一个topic,topic名称为rice:
  1. 可以通过EMQx web server查看订阅的topic
  1. client02客户端,向topic:rice发布消息。

总结

  1. 通过EMQx搭建服务器和MQTT.fx客户端,我们很轻松的搭建好MQTT环境,这样我们很方面的学习MQTT。
  2. MQTT协议是一个基于TCP的应用层协议。可以跟上一篇文章的CoAP协议进行对比学习。CoAP是基于UDP的。不过也有基于UDP的MQTT。
  3. 接下来将分析MQTT的协议的结构。敬请期待

0 人点赞