关于Mesh网络中,协调器和路由器之间的几个问题?
1,由于我所搭建的整个网络是Mesh网络,不牵涉到低功耗的情况,所以网络中只有两种类型的设备:协调器和路由器即:1个协调器+N个路由器
2,为了防止协调器在掉电的情况下路由器去维持整个网络,这样协调器就不能再加入到原来的网络中,所以协调器和N个路由器都开启了:NV_INIT, NV_RESTORE
3,我在协调器中建立了一个关联表用于维护所有路由节点的网络短地址,这样协调器和路由器通信的时候都采用单播的方式通信。
下面是产生的几个问题描述:
(1)我在协调器和N个路由器都开启NV_INIT NV_RESTORE的情况下,再打开AES加密功能。设置-DSECURE=1 , zgPreConfigKeys = TRUE,协调器和路由器设置相同的defaultKey(在nwk_global.c中修改)。
1.1 但是出现加密后路由器和协调器通信出现断断续续的情况,有的时候数据能够收到,有的时候收不到?
1.2 重启路由器,路由器在上电加入网络出现收不到协调器发送过来的数据的情况。
1.3 如果把所有节点的NV_INIT NV_RESTORE选项去掉,加密通信是没有问题的,请问:这两个选项和加密设置不能共同设置吗?相互之间会影响?
(2) 所有的路由器都开启了NV_RESTORE选项,如果路由器A通过路由器B加入到协调器的网络中,即路由器B是路由器A的parent父节点。
2.1 如果此时路由器B掉线,那么路由器A在开启NV_RESTORE的情况下回去选择新的路由器C作为父节点吗?如果会那么路由器C会给A分配新的网络地址 吗?
2.2 如果路由器A更换了新的父亲节点,当原来的路由器B上电后,路由器B认为A节点还是自己的孩子节点,单播发送数据给路由A节点能收到吗?
2.3 协调器也并不知道路由器A节点更换了新的父亲节的,保留的还是原来的路由路径,那么通过协调器单播数据给路由器A节点的时候能收到吗?
2.4 我看网上说可以通过路由器A节点调用ZDApp_AnnounceNewAddress()函数向网络中的所有设备进行新的地址更新通知,网络中协调器和所有的路由器在收到A节点的Device announce这个消息后判断A节点已经更换了父节点,会删除associated device list里面A节点的地址。协调器收到A节点的Device announce判断A节点更换了父亲节的,会更新老的路由路径为新的路由路径。
请问具体的代码是如何实现的呢?可以详细给下代码吗?路由A的代码和其他路由的代码,还有协调器的相应处理代码。
谢谢!
怎么都没人回答呢,技术支持有些慢了,哎,继续的问题,希望高手给个确定的答案和结果,最好针对于每一条详细的解答,谢谢!
非常感谢!
liuxing liu
1,由于我所搭建的整个网络是Mesh网络,不牵涉到低功耗的情况,所以网络中只有两种类型的设备:协调器和路由器即:1个协调器+N个路由器
2,为了防止协调器在掉电的情况下路由器去维持整个网络,这样协调器就不能再加入到原来的网络中,所以协调器和N个路由器都开启了:NV_INIT, NV_RESTORE
3,我在协调器中建立了一个关联表用于维护所有路由节点的网络短地址,这样协调器和路由器通信的时候都采用单播的方式通信。
下面是产生的几个问题描述:
(1)我在协调器和N个路由器都开启NV_INIT NV_RESTORE的情况下,再打开AES加密功能。设置-DSECURE=1 , zgPreConfigKeys = TRUE,协调器和路由器设置相同的defaultKey(在nwk_global.c中修改)。
1.1 但是出现加密后路由器和协调器通信出现断断续续的情况,有的时候数据能够收到,有的时候收不到?
[VV] 这个跟是否加密没有关系,既然你能收到数据,而且数据加解密都正常,那说明这个加密本身是没有问题的。
1.2 重启路由器,路由器在上电加入网络出现收不到协调器发送过来的数据的情况。
[VV] 是协调器没有发出来呢,还是发出来了没有收到?用空中抓包看下
1.3 如果把所有节点的NV_INIT NV_RESTORE选项去掉,加密通信是没有问题的,请问:这两个选项和加密设置不能共同设置吗?相互之间会影响?
[VV] 可以共同设置,不会有影响的。
(2) 所有的路由器都开启了NV_RESTORE选项,如果路由器A通过路由器B加入到协调器的网络中,即路由器B是路由器A的parent父节点。
2.1 如果此时路由器B掉线,那么路由器A在开启NV_RESTORE的情况下回去选择新的路由器C作为父节点吗?如果会那么路由器C会给A分配新的网络地址 吗?
[VV] 对于路由器只有在第一次入网的时候会选择一个父设备入网,主要目的是为了能获得父设备分配的网络地址,然后入网。一旦入网以后路由器的通信并不是一定依赖于父设备的,它自己可以维护邻居表和路由表和其他的节点进行通信,即便父设备不存在了,它不会重新选择父设备,而是继续维持正常工作。
2.2 如果路由器A更换了新的父亲节点,当原来的路由器B上电后,路由器B认为A节点还是自己的孩子节点,单播发送数据给路由A节点能收到吗?
[VV] 不会更换。通信不会有影响。
2.3 协调器也并不知道路由器A节点更换了新的父亲节的,保留的还是原来的路由路径,那么通过协调器单播数据给路由器A节点的时候能收到吗?
[VV] 不会更换,可以收到。
2.4 我看网上说可以通过路由器A节点调用ZDApp_AnnounceNewAddress()函数向网络中的所有设备进行新的地址更新通知,网络中协调器和所有的路由器在收到A节点的Device announce这个消息后判断A节点已经更换了父节点,会删除associated device list里面A节点的地址。协调器收到A节点的Device announce判断A节点更换了父亲节的,会更新老的路由路径为新的路由路径。
[VV] 在开启了NV的条件下,路由器不会重新入网了。
请问具体的代码是如何实现的呢?可以详细给下代码吗?路由A的代码和其他路由的代码,还有协调器的相应处理代码。
[VV] 你需要实现什么?
谢谢!
建议:
1) 一定要说下你用的协议栈版本。
2)学会用Sniffer 抓包分析ZigBee的通信问题,很重要。
你好!针对于上述的回答我可以这样理解吗?
1,针对于路由器设备在开启NV的情况下,如果其父节点掉线,路由器的网络短地址是不会发生变化的,而且也不会去选择新的父节点,他会自己维护自己的路由表信息。对吗?
2,如果是Endevice终端节点在开启NV的情况下,如果其父亲节点路由节点掉电,那么Endevice一定会去选择新的父节点加入网络,这个时候需要删除他与原来父亲节点的关联信息,这样才能进行路由信息转发多跳,不会影响正常的通讯流程。
但是有个问题,如果父亲节点掉电了,Endevice在开启NV的情况下会去选择新的父亲节点,那么他会重新得到新的网络地址吗?
3,第三个很重要的问题:
路由节点和协调器在开启NV的情况下,进行加密数据传输,设置-DSECURE=1 , zgPreConfigKeys = TRUE,协调器和路由器设置相同的defaultKey(在nwk_global.c中修改)。
路由节点和协调器能够正常通信,但是只要路由节点重启,重新上电,那么该路由节点和协调器就不能正常通信了,除非把协调器也重启才可以。
请问这是为什么呢?怎么解决这个问题呢?
整个系统中没有终端节点,只有路由和协调器,组建的是MESH网络。
谢谢!
请TI的技术支持给个正确的解答,谢谢!还有就是加密和NV同时开启的问题,thanks!