微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > zstack2.5.1中路由设备改变网络地址的问题

zstack2.5.1中路由设备改变网络地址的问题

时间:10-02 整理:3721RD 点击:

在一个协调器与三个路由器及两个终端设备的网络中

三个路由器无论其中哪一个 总是会在一定时间后重新执行加入网络的操作,

即路由器会被重新加入到协调器的关联表中并被分配一个新的网络地址,请问这是什么原因呢

此举导致此路由器下的子设备因为找不到原先的父设备也会重新寻求加入,对整个网络稳定性有一定破坏

这其中协调器无论是否如此设置 

CONCENTRATOR_ENABLE = true

CONCENTRATOR_ROUTE_CACHE = true

MAX_RTG_SRC_ENTRIES =1

当协调器不设成CONCENTRATOR时也有此问题出现

这里顺便问一下CONCENTRATOR这种模式

是否设置成CONCENTRATOR,其下各路由器就不会频繁发送router request?

只需要将协调器设成CONCENTRATOR即可?还是路由器也需要设置?这里的router request是在什么条件下发送的?

如果协调器没有断电的情况下,路由器重新加入的话分配到的地址应该是原先的地址,这个现象不应该出现的。

你可以把你运行的整个过程的抓包问题用附件传上来吗?

当一个节点需要发送数据,如果目的地址刚好是Concentrator,那么就会启动many-to-one的router discovery过程,通过router request来实现的。

首先非常感谢您的回答,希望您能继续帮我解决这个问题

这个现象我又反复验证了一下,当有多个路由设备的时候,它是会被重新分配一个新的网络地址, 当网络内只有这一个路由器存在的时候,它会被分配原先的网络地址。

但是,这时候终端设备虽然以data request和此路由保持着轮询,可是以协调器向下发送广播或单点传送到此终端时已经找不到此终端设备了。

感觉像是此终端设备已不在此路由的关联表中似的,这是其中一个问题

我所疑问的是,为什么路由器会无故有此一步操作?为什么要有这个重新加入网络的过程?我将协调器的路由过期时间设为0也依然如此

我将抓包工具存储的文件《question.psd 》以附件形式上传,这里面显示的内容是 我只以一个路由与一个协调器通讯

在 rx 212行的位置,路由器执行了重新加入网络的操作

顺便附上协调器与终端的一些配置

/********
路由
********/
#define CONCENTRATOR_ENABLE                      false // true if concentrator is enabled

#define CONCENTRATOR_ROUTE_CACHE       false // true if concentrator has route cache

#define MAX_RTG_SRC_ENTRIES 12

#define BCAST_DELIVERY_TIME 100// 30

#define ROUTE_DISCOVERY_TIME 10 //5

#define LINK_DOWN_TRIGGER 7//3

#define SRC_RTG_EXPIRY_TIME    2 //10 // seconds before the source route entry expires

#define MAX_NEIGHBOR_ENTRIES 16 // 16

/*********
协调器
*********/
#define MAX_RTG_SRC_ENTRIES                                 16//12

#define SRC_RTG_EXPIRY_TIME                                    2 // 10 // seconds before the source route entry expires

#define CONCENTRATOR_ROUTE_CACHE                 true //true if concentrator has route cache

#define CONCENTRATOR_ENABLE                                true //  if concentrator is enabled

#define CONCENTRATOR_DISCOVERY_TIME              60//0

#define ROUTE_DISCOVERY_TIME                                13 //5

#define BCAST_DELIVERY_TIME                                     100 //30

从数据包来看应该没什么问题,我得出的原因肯能因为距离缘故,路由节点失去父节点后,重新请求入网的过程。有以下两点分析

1)在数据包中又出现router request的数据帧,如果是正常环境下,路由器和协调器都有发出来link status,作为邻居节点维护在邻居表中的。

2)另外可以看到路由节点 抓包文件中第209行 路由节点发出来的mac seq是118,但是下面一条 第212行 路由节点发出来的beacon request 的mac seq是126,中间少了8条数据,所以需要确定你的路由节点和协调器之间的距离,你的抓包工具协调器,路由器之间的距离是多少?

再次感谢您的回复

关于您的回复1)中   在数据包中又出现router request的数据帧

这个似乎是受     #define CONCENTRATOR_DISCOVERY_TIME              60        //0

这个编译选项控制的,我通过抓包工具看到的也是如此,每隔60s,协调器发送一次router request,这里有什么不正常的情况吗?

这是一个问题,因为我这边将要实现的效果是,一个主协调器,一定数量的路由器和一定数量的终端设备,所有终端设备采集的数据将统一发送到协调器中,路由器起中转作用。是否应该使用此种CONCENTRATOR的方式?我觉得用此种方式可以减少路由器之间的router   request等广播信息的数量,这样的用法有没有什么问题?

同时:

我又改写了一些东西,发现也许路由器的重新加入网络是因为应用层调用了如果几次没有收到MAC应答的话,重新启动的缘故

但是您在抓包过程中也看到了,协调器对每一次路由器的数据请求都有响应的,这里是不是存在一个可能,协调器发出了mac应答,抓包工具也抓到了此数据帧,但是路由设备没有收到呢?这里是不是有关于路由设备等待接收的时间问题呢?

再一个我还遇到如下一个问题,当网络内一个路由器和几个协调器同时开启,其中一个路由器并不向协调器发送数据,也并无数据从此路由器转发,只是以一定时间间隔发送link status。但是过了一段时间后,无link status从此路由器发出,此路由器也无执行重新加入网络的操作,也没有beacon request发出,请问这是什么原因导致的呢?

辛苦了!

开启这个CONCENTRATOR_DISCOVERY_TIME变量的目的,是为了定期的去维护到coordinator的路由路径,可以维持路由路径,这种做法也是可以的,而且可以动态的保持到concentrator的路由路径

你的实际应用用concentrator是没有问题的,也比较恰当。

你上次上传的时候路由器重新入网分配同样的address,你有重新入网分配不一样address的数据包吗?

路由器定期发link status是正常的,为了让neighbor节点收到数据,维护neighbor信息。你可以看下程序是否有挂掉。

不好意思

請夠請教大大,CC2530 路由器如何串接路由器?

我設定2個路由器都只能跟協調器連結

感謝您 (我於SENSORDEMO.EWW下執行)

 

你好!

如果是跟这个帖子主题不太相关的问题,可以单独开一个新帖。

你可以做个实验,先让协调器建立网络,让1个路由节点加入到网络中,然后把协调器断电,再打开第2路由器,看第2个路由器能否正常加入到第1个路由器中。

从原理上来说,join的设备选择谁作为父设备是随机的,当然前提是父设备要有接收新设备的能力。

最好通过抓包来看具体的过程

谢谢

VV你好,你的意思是当距离远离,协调的信号质量差了,路由就会重新选别的路由加入做他的父节点?这样才导致路由的地址发生了变化吗?怎么才能让选择别的路由作为父节点,但是自己的网络短地址保持不变呢?

有可能!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top