1.背景

当咱们进行物联网开发过程中,设施调试有时候很难进行,就须要借助网络抓包工具Wireshark来帮咱们剖析设施行为,定位问题。上面咱们通过一个简略案例,给大家解说应用Wireshark剖析设施与阿里云IoT物联网平台通信的过程。

2. 筹备工作

2.1 创立设施

在阿里云IoT物联网平台创立产品,并注册设施,获取三元组。

2.2 设施模拟程序

咱们在电脑上用Nodejs编写device模拟程序,建设连贯,订阅,公布,断开连接。

/** * node aliyun-iot-device.js */const mqtt = require('aliyun-iot-mqtt');//设施身份三元组+区域const options = {    "productKey": "设施PK",    "deviceName": "设施DN",    "deviceSecret": "设施Secret",    "regionId": "cn-shanghai"};//1.建设连贯const client = mqtt.getAliyunIotMqttClient(options);//2.订阅主题setTimeout(function() {    client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`)}, 3 * 1000);//3.公布音讯setTimeout(function() {    client.publish(`/${options.productKey}/${options.deviceName}/user/update`, getPostData(),{qos:1});}, 5 * 1000);//4.敞开连贯setTimeout(function() {    client.end();}, 8 * 1000);function getPostData() {    const payloadJson = {        temperature: Math.floor((Math.random() * 20) + 10),        humidity: Math.floor((Math.random() * 20) + 10)    }    console.log("payloadJson " + JSON.stringify(payloadJson))    return JSON.stringify(payloadJson);}

2.3 应用Wireshark抓取网络包

IoT物联网平台应用MQTT协定通信,咱们只须要配置如下规定即可:
 tcp and port 1883 

2.4 启动模拟程序

3. 网络抓包剖析

随着模仿脚本执行结束,残缺的MQTT网络交互过程都在wireshark捕捉到了。
为了不便我把设施ip标记成了 device,本次连贯的阿里云IoT的IP放弃不变。

3.1 TCP的三次握手


下面截图红框局部就是 TCP 的三次握手行为。由device的发动,设施端用的端口是 56150。

3.2 MQTT的CONNECT行为

下图展现了MQTT的Connect的行为。
点击Connect记录,在底部能够看到具体报文。其中client id,user name,password是这次CONNECT用来验证设施合法性的身份信息。想理解细节请 移步这里。

身份验证实现,IoT物联网平台会回复CONNACK作为CONNECT的响应。

3.3 MQTT的SUBSCRIBE行为

下图展现了device向IoT物联网平台订阅topic的过程。这里device被动订阅了一个Topic,见红框局部。

下图展现了IoT物联网平台响应device订阅的行为。

3.3 MQTT的PUBLISH行为

下图展现了device向IoT物联网平台PUBLISH一条QoS=1的音讯。在报文信息里,咱们能够看到音讯对应的Topic和Payload。

因为是QoS=1音讯,IoT物联网平台会回复一条PUBACK给device。

在IoT物联网控制台的日志服务也能看到这条消息日志。

3.4 MQTT的DISCONNECT行为

下图展现了device被动发动DISCONNECT命令,断开MQTT连贯通道。

3.5 TCP的四次挥手


在IoT物联网控制台的日志服务也能看到残缺的设施高低线日志,如下。

4. 结束语

至此,咱们把握了应用Wireshark抓包工具剖析设施和阿里云IoT物联网平台网络通信的基本技能,心愿对大家IoT物联网开发有所帮忙。

5. 附录

TCP层的几个标识

物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn

              阿里云物联网平台客户交换群