ZigBee的Many-to-One和Source Routing

news/2024/11/16 22:41:07/

1. Many-to-One Routing

Many-to-One Routing,是一种简单的路由机制,使得整个网络中的路由设备拥有回到中心节点的路由。
在这种机制下,中心节点周期性发送Many-to-One route discovery广播(协议栈默认设置为60s,可以在Plugin中更改)。当网络中的路由设备收到这条广播之后,其拥有回到中心节点的下一跳路由,并将此跳节点信息存储在自己的路由表中。至此,只要网络中的路由设备收到Many-to-One route discovery的广播,就知道回中心节点的路由(上行路由已经确认)。

2. Source routing

Source routing,是指中心节点将发往其它路由设备的路由机制。对于中心节点而言,其还不知道下行的路由,即将信息发往每个路由设备的路由还未知。当每个路由设备发送单播到中心节点时,会在此之前发送一条Route Record给中心节点。中心节点收到这条Route Record,将这条路由反向并存储在中心节点的Source routing表里。这样,中心节点就可以通过查询Source routing表来获取发给目的节点的路由。

简而言之,只要路由设备收到Many-to-One route discovery广播,就知道回到中心节点的路由。只要中心节点的Source routing表里面有路由设备的Source routing信息,则中心节点就知道发往该路由设备的路由。

3. 芯科Silicon Labs 网关开发注意点

注意在Gateway的”Concentrator Support” Plugin里面可以配置Source routing表的大小(理论上要大于网络中的路由设备的数量)以及Concentrator Type (LowRamConcentrator以及HighRamConcentrator)。两种不同的Concentrator Type使用的RAM空间不同。

对于HighRamConcentrator,Gateway会存储所有路由节点的信息到Source routing表中。

对于LowRamConcentrator,Gateway只将部分最新的路由节点的信息存储到Source routing表中。

  1. 当设为HighRamConcentrator时,每个路由节点只有在收到Many-to-One route discovery广播之后的第一条发送给中心节点的单播时,在此之前发送一条Route Record给中心节点。中心节点收到Route Record则会更新Source routing表的路由。
  2. 当设为LowRamConcentrator时,每个路由节点发送给中心节点的单播时,都会提前发送一条Route Record给中心节点。中心节点收到Route Record则会更新Source routing表信息。

在正常网络路由建立起来之后,Gateway节点和路由节点之间的上下行通信都能正常工作。

当某种异常情况出现时,在网络组建之后的某个时刻,Gateway复位或断电重启,其Source routing表的信息会全部丢失。此时需要有相应的机制来恢复其Source routing表。否则,中心节点不能发送单播到指定目的节点。在此情况下,可以使Gateway先发送一条Many-to-One route discovery路由,之后再发送一条广播到各路由节点,使得路由节点向Gateway回复一条单播。路由节点在发送此条单播之前,会返回一条Route Record。当Gateway收到Route Record就会将此条路由重新添加到Source routing表中。

如果在某种异常情况下,路由设备节点全部断电或重启,其中各路由节点的路由表也会丢失。此时需要等待至少16s左右之后,每个路由节点建立起与邻居路由节点的链路之后。再由Gateway端发送Many-to-One route discovery广播。一旦各路由节点设备收到Many-to-One route discovery广播,就拥有了回到Gateway的路由。

4.为什么多对一路由请求需要多跳,即使我所有的节点都在很近的范围内?

在ZigBee PRO中,一个节点只能听到来自其邻居表中的节点的广播。这样做的原因是它必须跟踪与之通信的每个节点的帧计数器,并且它只能对有限数量的节点这样做。因此,当多对一路由请求发出时,只有在其邻居表中具有集中器的节点才能听到它。然后这些节点会重复这个过程,直到所有节点都有了自己的新路由。

5.以下是设计大型密集网络的一些有用提示,例如用于办公室、酒店或大型住宅区的楼宇自动化网络。

Guidelines for Large/Dense Networks with EmberZNet PRO


http://www.ppmy.cn/news/1052852.html

相关文章

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务 Intel DevCloud for oneAPI 和 Intel Optimization for PyTorch基于BERT预训练模型的英文文本蕴含任务语料介绍数据集构建 模型训练 结果参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0…

gremlin安装使用 详细步骤

gremlin是一个图数据库查询工具,注意他只是一个工具类似于dbeaver,navicat,sqlyog,是专门来分析图数据库的一个工具。 下载 下载地址Apache Download Mirrors 省事的可以直接 wget https://www.apache.org/dyn/closer.lua/tin…

Spring源码深度解析三 (MVC)

书接上回 10.MVC 流程&源码剖析 * 问题1:Spring和SpringMVC整合使用时,会创建一个容器还是两个容器(父子容器?) * 问题2:DispatcherServlet初始化过程中做了什么? * 问题3:请求…

如何将数据从 InfluxDB 无缝接入到 TDengine 中?来看看

现在借助 TDengine 3.0 企业版和 TDengine Cloud,你可以无缝接入不同数据源的数据到 TDengine 中了,为了帮助大家更好地应用此功能,我们还输出了系列的教程文章。上期《TDengine 推出重磅功能,助力 MQTT 无缝数据接入》一文为大家…

vue中的canvas插件

vue中canvas插件有vue-konva、vue-fabricjs、vue-canvas-effect、vue-chartjs和vue-threejs等。详细介绍:1、vue-konva是一个用于在Vue.js中使用Konva.js的插件,Konva.js是一个功能强大的HTML5 2D 渲染引擎,可以用于创建交互式的Canvas应用程…

centos7 系统手动安装openssh后使用systemctl命令无法管理sshd服务问题解决

CentOS7系统下,通过源码手动安装升级openssh后使用systemctl命令无法管理sshd服务问题解决 问题描述 之前在centos7系统下手动安装升级openssh后,使用systemctl命令管理sshd服务都正常,但是今天安装完成后,发现使用systemctl sta…

《数字图像处理-OpenCV/Python》连载(1)前言

《数字图像处理-OpenCV/Python》连载(1)前言 本书京东优惠购书链接:https://item.jd.com/14098452.html 写作背景 编写本书的初衷,源自作者学习数字图像处理的经历。 在创新实验班开设的专业创新教育课程中,我选择的…

257_C++_异步io的方式测试卡线程的问题,一旦线程卡住超过5秒,就会进行打印【boost::asio::io_context】

#if defined(N88SX) static std::once_flag flag; static void *work_thread(void *pvParm) {prctl(PR_SET_NAME,