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.

关于Route Request的广播发送导致zigbee网络应用层消息掉包

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;而且即使设备数大于了路由表大小时,是不是也应该在路由表中保存那些经常用的路由呢?

  • a; 网络拓扑结构是什么?如果是多跳的话,发送route request是正常的

    b, 你的发送数据频率和距离,对程序处理和CSMA信道检测都是很大挑战,掉包的百分比是多少?如此短的发送数据频率,又要处理route request,丢包也正常。

    你要看路由表中有没有具体的路由路径保存呢,如果没有保存的话,当然要发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的方式,程序运行过程中把这些信息输出来。