实验目的
1)熟悉Wireshark抓包工具及抓包流程。
2)掌握MQTT通信流程。
实验准备
实验硬件: |
笔记本电脑 x 1 |
实验软件: |
Wireshark、MQTTX客户端、免费的公共MQTT服务器 |
实验原理
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT 的连接地址通常包含:服务器 IP 或者域名、服务器端口、连接协议。mqtt是普通的 TCP 连接,端口一般为1883。mqtts是基于TLS/SSL的安全连接,端口一般为8883。比如mqtt://broker.emqx.io:1883是一个基于普通TCP的MQTT连接地址。
在建立连接时,首先客户端往服务器发送CONNECT连接建立报文。规定在网络连接建立后,客户端发送给服务端的第一个报文必须是CONNECT报文。在一个网络连接上,客户端只能发送一次CONNECT报文。服务端必须将客户端发送的第二个CONNECT报文当作协议违规处理并断开客户端的连接。在这个报文中包含了遗嘱信息、keep alive等标志位。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
在服务器接收到CONNECT报文后,服务端发送CONNACK报文响应从客户端收到的CONNECT报文。服务端发送给客户端的第一个报文必须是CONNACK。如果客户端在合理的时间内没有收到服务端的CONNACK报文,客户端应该关闭网络连接。合理的时间取决于应用的类型和通信基础设施。在CONNACK报文中,主要包含连接确认标志和返回码,但是不包含有效载荷。
通过Wirshark对电脑网络通信的监听,抓取MQTTX客户端在连接MQTT服务器、订阅主题、发布消息和断开连接时发出的数据报文,通过对报文的抓包更加直观的学习和理解MQTT服务器与客户端之间的通信流程。
实验步骤
1)启动抓包工具Wireshark,选择WLAN接口(根据本机实际选择)进行网络数据的监听和记录。
2)使用MQTTX客户端连接公共MQTT服务器,在此过程中MQTTX客户端会向服务器发出建立连接请求,在成功建立连接后服务器则会返回客户端连接确认报文。
若是使用本地部署的EMQX服务器,则将EMQX启动后,将公共MQTT服务器的域名更换为EMQX服务器所在的IP地址,端口号不变。
3)与MQTT的服务器成功建立连接后,即可订阅主题和发布消息。
4)订阅该主题后,MQTT服务器在收到向该主题发布的消息后,会将该消息转发给所有订阅该主题的客户端。
5)在完成测试后,点击右上角的红色电源图标,即可断开与MQTT服务器的连接,此时会有断开连接的报文发送。
实验结果
在Wireshark软件中成功监听到MQTTX客户端和MQTT服务器进行通信的报文。