This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
1、Route Request的广播发送导致zigbee网络应用层消息掉包。 问题现象:a、在只有一个Coordinator和5个Router的情况下,从协调器发送控制命令给5个Router,抓包发现也会发送Route Request消息; b、现在我们展厅测试环境中,也是30个设备左右,在没有Route Reqest消息的时候,能正常通信,但一旦出现了Route Request广播就导致应用层掉消息。 问题补充:上面的程序中都去掉了协议栈自带的30s过期作废的功能,RouteTable大小是协议栈默认的40。问题a中,6个设备零距离,发送频率很快,200ms/次控制所有设备。问题b中,掉消息的一般都是3~4跳路由才到的设备。
问题:为啥去掉了Route Request 的自动Expire功能,和设备数少于RouteTable Size时,还会发送Route Request;而且即使设备数大于了路由表大小时,是不是也应该在路由表中保存那些经常用的路由呢?
hi,VV,感谢你的回帖。
1)请问为啥多跳就会发送Route Request 呢?
2)是不是CSMA信道检测时,如果信道忙,就会发送Route Request啊,既然信道都忙,为啥还要发送这个消息呢,而且还是广播发送?
3)另外,通过抓包发现,这个Route Request广播发送之后,其他设备都跟着广播,然后就有设备发送Route Reply,发送这个Reply就没有了,这是为啥,这个Route Reply是干嘛用的
4)最后你说:“你要看路由表中有没有具体的路由路径保存呢,如果没有保存的话,当然要发route request”,我怎么看路由表里的数据呢,如果通过IAR在线调试看内存值的话,那样比较难搞就是我的环境中并不是经常出现这个Route Request,而且要控连着通过场景控制很多设备才会出现,所以不好断下来看啊,不知道你是否有好办法?
1)发送router request的目的是为了,找到目的节点的路由路径,原因是因为在路由路径表里面无法找到达到该节点的路径,所以需要发送route request来发现
2)这个跟CSMA没有任何关系,CSMA是物理层的东西,跟是否发送数据有关。广播的目的是为了找到该节点,然后知道路径,如果是单播也不知道该往哪发,只能是广播了方式来发送了。
3)发出去route request的目的为了找到路径,那么路径信息就是在回来的route reply里面
4)如果需要动态的观察这个表格的话,你可以通过串口打印log的方式,程序运行过程中把这些信息输出来。