目录
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.fwqtg.net
题目描述 解题思路 执行结果 leetcode 1184. 公交站间的距离. 题目描述 公交站间的距离 环形公交路线上有 n 个站,按次序从 0 到 n – 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号…