lesson6 ZIgbee网络特性抓包分析

news2024/9/22 5:29:13

目录

ZIgbee网络特性抓包分析

理论部分:

实验部分:

入网前相关数据帧(仅单个设备供电):

首先以路由器和协调器为例:(帧的类别从头部的Type可以看到,在四大帧类别中根据不同作用也可以细分为不同的帧)

再看终端的入网过程:


ZIgbee网络特性抓包分析

理论部分:

1、很多同学学完Zigbee之后,对它的印象仅仅是能够做单播和广播实验,为什么对无线局域网,脑海中没有太多的概念?

原因是对Zigbee网络的组建过程,以及网络工作时ZIgbee无线模块在空气中数据交换过程没有太多的了解。

2、在ZIgbee无线局域网里,节点(无线模块)按照在网络里的功能来划分,可分为:协调器、路由器和终端。(它们的硬件可以一模一样,之所以在网络中表现的功能不同,是因为下载了不同功能的代码)。我们说一个模块到底是协调器、路由器还是终端,前提是它必须在一个Zigbee无线局域网里,如果它还没有入网,那么它仅仅是一个下载了相应功能代码的模块而已。

3、下载了路由器和终端代码的模块,上电后第一件事是去寻找网络,请求加入;

网络是不会平白无故产生的,所以创建网络的工作由下载了协调器代码的模块来完成,下载协调器代码的模块上电后的第一件事就是去创建网络。

4、协调器的一般工作过程:下载了协调器功能的模块,上电之后的第一件事是创建网络,创建网络成功后,成为网络中的一个节点,等待路由器和终端模块节点的加入。

因此可以确定知识点:任何一个Zigbee无线局域网中诞生的第一个节点一定是该网络的协调器;一个网络里有且只有一个协调器。

而确定一个网络有没有创建成功,它的本质就是确定下来PANID(个域网ID),并且协调器的地址0x0000确定下来(地址2个字节,且协调器地址必须为0x0000)。只有PANID和协调器地址确定好,无线局域网才创建完毕。

5、任何一个ZIgbee模块要加入某个网络,一定要一个处于该网络里的节点作为介绍人,并且这个介绍人不能是终端节点。在加入网络以后,介绍人节点和被介绍加入的节点互为父子关系,介绍人节点是被介绍加入节点的父节点,被介绍加入节点是介绍节点的子节点。

6、当被加入节点有多个介绍人可以选择加入的时候,根据相对于被加入节点的信号强度等一些其它的参数,选择最佳的介绍人节点加入。

7、例子分析:现在有三个模块,如图所示

如果A模块没有上电,B和C模块上电后,就会一直寻找网络请求加入。直到A模块上电,A模块就会创建网络,然后确定下来这个网络的PANID,把自身的地址变为0x0000,将网络创建成功。网络一旦创建成功以后,B和C就会加入到网络中去。

加入的过程有两种情况:

  • 下载了终端代码的模块C先入网,C只能选择A作为它的父节点,A和C互为父子关系,C是A的子节点。又由于终端节点不能够作为父节点,因此当B入网之后,只能选择A作为父节点,A和B也互为父子关系。此时网络拓扑结构如图所示

  • 下载了路由器代码的模块B先入网,B只能先选择A作为它的父节点。而当终端模块C加入网络后,C可以有两种选择,既可以选择A作为它的父节点,也可以选择B作为它的父节点。C实际中选择谁作为父节点,要看A模块和B模块谁的数据信号更强,C会选择数据信号较强的那个模块作为父节点。

8、如果两个节点不在同一个局域网里,即使距离隔得再近,也无法进行通信。

9、ZIgbee网络组建后,网络里的节点可以进行相互通信,数据通信的方式有4中

  • 单播
  • 广播
  • 组播
  • 绑定

实验部分:

入网前相关数据帧(仅单个设备供电):

  • 路由器:

路由器在入网前,一直发送信标请求帧,它的作用是让在它附近的所有具备介绍人资格的节点都回复信标帧,这些返回的信标帧被这个想要加入的无线模块拿到,通过这些信标帧选出最佳介绍人节点,请求加入。

  • 终端:

它在入网前的行为和下载了路由器代码的模块在入网 前的行为是一样的。

  • 协调器:

上电后先发送了一帧信标请求帧,发送这一帧也会得到周围具备介绍人资格的节点回复信标帧,但是协调器拿到这些信标帧,是用来判断周围的环境情况,为创建网络做准备(当收到来自周围模块的信标帧后,就会判断周围有哪些局域网,从而不会创建重名的PANID)。

当协调器创建成功以后,就会发送一个数据帧,这个帧里面可以看到协调器的地址0x0000,以及PANID。可以把这个帧叫做网络连接状态帧。

第二个帧有点长,我这里分开来截

入网后到稳定工作相关数据帧:

入网只针对终端和路由器,事先保证协调器上电完毕。

首先以路由器和协调器为例:(帧的类别从头部的Type可以看到,在四大帧类别中根据不同作用也可以细分为不同的帧)

  • 第一帧:协调器模块发出的网络连接状态帧,表明协调器稳定工作,与路由器入网无关
  • 第二帧:路由器模块发出的信标请求帧,用于发现周围的网络,请求加入
  • 第三帧:协调器模块发出的信标帧,路由器模块在拿到这一帧之后可以得到协调器模块相对于它自己的信号强度,判断是不是最佳介绍人。
  • 第四、第五帧,第六、第七帧是在重复第二和第三帧的工程(这样重复收发三次是协议栈设置规定好的,用于提高通信正确率)

可以发现到此,路由器的信标请求帧都是广播信号(目标地址为0xFFFF)

补充:

在Zigbee网络里,如果一个模块发出来的射频帧,非常明确地指定接收目标节点的地址,那么目标节点在接收到这个帧以后,会自动回复一个ACK,表明已经收到。

TI在每一个CC2530芯片出厂的时候,在FLASH上固化了一个8个字节编号唯一的值,这个值是这颗芯片的物理地址,也叫MAC地址或IEEE地址。

  • 第八帧:路由器模块发送给协调器模块,这个帧的作用是:在前面路由器模块收到协调器模块发送的信标帧,路由器通过信标帧判断得到协调器是当前自己的最佳介绍人。路由器模块通过发送这一个帧来高速协调器,你是我当前的最佳介绍人,请你充当我入网的介绍人并介绍我入网,在这个帧中还携带了自己的MAC地址。这个MAC地址是介绍人模块(协调器模块)给被介绍人模块(路由器模块)来分频其网络地址的依据。
  • 第九帧:协调器模块硬件回复给路由器模块的ACK,表明协调器模块已经收到了路由器发过来的请求帧
  • 第十帧:路由器发给协调器模块的帧,请求协调器,把根据前面发送的MAC地址分频好的网络地址发给路由器。这是一个数据请求帧。
  • 第十一帧:协调器模块硬件回复给路由器的ACK,表明收到了路由器的请求。
  • 第十二帧:协调器把为路由器分配好的网络地址发给路由器。这个帧需要非常明确地发给路由器,但是路由器模块还不知道自己的网络地址是多少,所以在指定目标地址的时候用MAC地址。
  • 第十三帧:在路由器模块根据自己的MAC地址收到了协调器发过来分频给自己的网络地址,硬件自动回复ACK,表明自己已经收到
  • 第十四帧:路由器模块发送的入网宣告帧,目的是高速当前网络里的所有节点,我入网了,我的网络地址是0xE9EB。
  • 第十五帧:协调器模块在收到了路由器模块发出的入网宣告帧后,将内容进行转发
  • 第十六、十七帧是协调器模块和路由器模块在工作稳定时,发出的网络连接状态帧

补充:协调器和路由器在入网后,稳定工作的行为是,每隔一段时间发送一次网络连接状态帧,默认是15s一次,时间可通过代码设置调整。

再看终端的入网过程:

入网过程,终端和路由器所有的行为都是一样的。入网稳定后的行为从第十六帧开始一直重复向父节点发送状态。

第十六帧:终端节点发送给它的父节点协调器的数据请求帧,为了告诉它的父节点,我还在线。

第十七帧:协调器在收到终端发送来的帧,硬件自动回复的ACK

补充:

当协调器和路由器入网后,终端入网后的通信数据包如下:

此时终端发送请求信标帧,会同时收到协调器和路由器的信标帧,然后最终会根据谁的信号强来选择谁作为父节点(一般模块离得越近,信号也会越强)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/690521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 项目build打包发布到github pages ,刷新页面首页正常打开,子路由报错404的解决方法

一、问题效果如下: 二、解决方法 1、切换到gh-pages分支 2、在index.html同级新增404.html文件,其内容与index.html一样 三、解决后的效果如下: 相关文章 Vue3 Vite Ts开源后台管理系统模板 基于ElementUi或AntdUI再次封装基础组件文档 基…

Java版本spring cloud 电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

VueX用法快速回顾(简洁纯干货)

vuex基础结构 代码结构 vuex的完整结构长这样,其包含了state、mutations、actions、modules及getters5个部分。 import Vue from vue import Vuex from vuexVue.use(Vuex)const store new Vuex.Store({state: {},mutations: {},actions:{},modules:{},getters:{…

mysql数据库 查询出的字段值是 科学计数法数字,数字转换为易于理解的形式

目录 1 问题2 实现 1 问题 数据库查询出来的可能是这种,如何将数字转换为易于理解的形式; 2 实现

ppt文件全部删除怎么恢复?别急,这些方法能挽救

PPT文件全部删除怎么恢复?如果您不小心将PPT文件删除,不要担心,您可能还有机会将其恢复。在下面的文章中,我们将介绍一些技巧来恢复已删除的PPT文件。 第一部分:关于PPT文件 PPT文件是指Microsoft PowerPoint软件创建…

互联网医院开发|互联网医院系统源码技术实现

健康医疗这几年一直成为人们比较关注的问题,互联网医院系统通过信息化技术精简了预约挂号,优化了医生的诊断流程,通过互联网医疗,患者复诊或医疗咨询需求都可以在线上进行,这种快捷的线上问诊方式缓解一线医务人员的压…

【成都】EFDC建模方法及在地表水环境评价、水源地划分、排污口论证中实践技术应用

为了定量地描述地表水环境质量与污染排放之间的动态关系,EFDC、MIKE、Delft3D、Qual2K等数值模型被广泛应用在环境、水务、海洋等多个领域。Environmental Fluid Dynamics Code(EFDC)是一款用于模拟江河,湖泊,河口&…

Linux 中利用设备树点灯

系列文章目录 第一章 Linux 中内核与驱动程序 第二章 Linux 设备驱动编写 (misc) 第三章 Linux 设备驱动编写及设备节点自动生成 (cdev) 第四章 Linux 平台总线platform与设备树 第五章 Linux 设备树中pinctrl与gpio(…

通过一道题再了解一点Array原型上的every方法

一、例题 首先我们先来看这么一系列关于every使用的题: console.log(1, [].every(() > false)) console.log(2, [,,].every(() > false)) console.log(3, [undefined].every(() > false)) console.log(4, [false].every(() > false)) console.log(5, […

【深度学习】最全的十九种损失函数汇总

tensorflow和pytorch很多都是相似的,这里以pytorch为例。 文章目录 一、L1范数损失 L1Loss二、均方误差损失 MSELoss三、交叉熵损失 CrossEntropyLoss四、KL 散度损失 KLDivLoss五、二进制交叉熵损失 BCELoss六、BCEWithLogitsLoss七、MarginRankingLoss八、HingeEm…

git rebase和git merge在团队协作开发中的用法

git rebase和git merge是在日常开发中常用的用于分支合并的命令,也是非常容易误用的两个命令。本文将通过图文的方式去详解二者之间的区别。 git merge git merge会为本次的合并过程生成一条新的commit,并将该commit添加到目的分支上。通常用于将featu…

【Tensorflow object detection API + 微软NNI】图像分类问题完成自动调参,进一步提升模型准确率!

1. 背景&目标 利用Tensorflow object detection API开发并训练图像分类模型(例如,Mobilenetv2等),自己直接手动调参,对于模型的准确率提不到极致,利用微软NNI自动调参工具进行调参,进一步提…

Keep通过IPO聆讯,3年烧掉16亿

“运动科技第一股”来了! 6月21日,线上健身平台的运营方、北京卡路里科技有限公司(下称“Keep”)已正式通过聆讯,股票代码为810342.HK。 Keep是一家在线健身平台,主要产品包括在线健身内容、智能健身设备…

【python百炼成魔】python之内置函数range

前言 文章目录 前言内置函数 range()三种创建方式1. 只有一个参数的情况2. 给定两个参数的情况3. 三个参数都给定的时候 使用in和not in 来判断指定的整数是否存在1. 判断range生成的序列中是否存在指定的值2. in 和not in 不与range结合的情况 总结 内置函数 range() range()函…

第六章、Linux文件与目录管理

6.1 目录与路径 6.1.1 相对路径与绝对路径 绝对路径:路径的写法“一定由根目录 / 写起”,例如: /usr/share/doc 这个目录。 相对路径:路径的写法“不是由 / 写起”,例如由 /usr/share/doc 要到 /usr/share/man 下面…

chatgpt赋能python:使用Python获取句柄和发送消息

使用Python获取句柄和发送消息 什么是句柄? 在计算机中,句柄是指一个唯一的标识符,用于引用正在执行的进程或程序。在Python中,我们可以使用win32api模块获取Windows操作系统中的句柄。使用句柄,我们可以与Windows中…

Qt/C++编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)

一、前言 跨平台的推流工具当属OBS最牛逼,功能也是最强大的,唯一的遗憾就是多路推流需要用到插件,而且CPU占用比较高,默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流,意味着肯定占用不少CPU资…

DragGAN开源:生成图像流形上的基于点的交互式操作

文旨在解决生成对抗网络(GAN)中控制生成图像的问题。通过“拖动”图像中的任意点,实现用户交互式精确控制生成图像的姿态、形状、表情和布局。 这个名叫DragGAN的模型,本质上是为各种GAN开发的一种交互式图像操作方法。论文以Sty…

215. 数组中的第K个最大元素

题目描述&#xff1a; 主要思路&#xff1a; 利用堆排序实现第k大的数的查找。 class Solution { public:void maxHeapify(vector<int>& a,int i,int heapsize){int li*2,ri*21,lagesti;if(l<heapsize&&a[l]>a[lagest])lagestl;if(r<heapsize&…

iOS应用上架全攻略

目录 引言 一、基本需求信息。 二、证书 一.证书管理 二.新建证书 三.使用appuploader服务同步证书 三、打包 三、审核 四、整体架构流程 五、代码实现 六、总结 引言 上架IOS应用到app store&#xff0c;需要正式的打包证书、证书profile文件和需要使用专用的工具…