Skip to content
ZIGBEE 机制实验室 · 网状组网

网状拓扑:路由器互联成网,数据按路由表择优多跳

网状(Mesh)是 Zigbee 最灵活的拓扑:路由器之间互相转发、按路由表择优,数据可以穿越整个网格,路径断了还能绕行。与树形「固定父子链」相比,网状多一跳、冗余多、更可靠。本页数据来自 ns-3 真实跑通的 2×3 网格网络(1 协调器 + 5 路由器)。

数据源:ns-3.48 zigbee 模块 · zigbee-mesh-network 示例真实输出(含真实 3 跳路径 + 路由表)
应用
APS
NWK
MAC
PHY
实验一 · 网状拓扑总览

拖动节点方案,看 Mesh 结构怎么变

切换三种真实仿真过的布局(只移动了 ZR5 的位置),观察:节点一动,能发现几个网络、数据走哪条路径,全都跟着变。再点「发送数据包」看该方案下的真实逐跳路径。

协调器 ZC 00:00根 · 数据源
路由器 ZR1 75:82网格节点
路由器 ZR2 cf:e0网格节点
路由器 ZR3 f0:e3左列节点
路由器 ZR4 52:c5网格节点
路由器 ZR5 ad:6e远目标 · 多跳
当前目标:ZR5(ad:6e) —— 真实路径 ZC → ZR1 → ZR2 → ZR5(3 跳,穿越网格)
实验二 · 带终端的完整 Mesh:数据流向 + 数据内容

协调器发一条 LED 命令,看它怎么流到终端

Mesh 不只路由器:终端设备(ZE) 挂靠在父路由器下、不参与转发。这条真实仿真里,协调器向终端 ZE1 发一条 2 字节 LED 点亮命令 [0x01][0x01],数据流向 = 协调器 → 路由器骨干(按路由表择优) → 最后一段父子链路 → 终端。注意:ZE1 距 ZR5≈64m、距 ZR4≈70m,ns-3 实测择优挂靠了 ZR4(父选择看 LQI/入网时机,不是纯看距离)——所以数据路径是 ZC→ZR1→ZR4→ZE1。数据来自 zigbee-mesh-with-ze 在 ns-3.48 中的真实运行。

0x01命令码=点亮
+
0x01序号=1
→ 解析:LED 点亮终端执行结果
协调器 ZC00:00根·数据源
路由器 ZR175:82骨干
路由器 ZR2cf:e0骨干
路由器 ZR3f0:e3骨干
路由器 ZR452:c5父节点
路由器 ZR5ad:6e骨干
终端 ZE158:d8挂靠 ZR4
终端 ZE22f:35已入网
实验三 · 网格怎么长出来

路由器逐个入网,中段节点能发现多个网络

与树形「先根、后分支、再叶子」不同,网状里每个节点都是路由器,入网后都能转发。注意 ZR4、ZR5 入网时发现了 2 个网络——它们能看到不止一个候选父节点,这就是冗余的来源。

实验四 · 路由表 + 邻居表 + 路由发现

节点位置一变,路由就「重新择优」

下表是三种布局的真实仿真对比——同一个目标 ZR5,只改它的位置,发现网络数、路径、下一跳、路由发现代价全部联动。下方再以「方案1」为例详解三张表。

三种布局 · 真实仿真对比(ns-3 各跑一次)

方案ZR5 位置发现网络真实路径跳数路由表 NextHopRREQ 代价
方案1 标准网格(180,90)2 个ZC→ZR1→ZR2→ZR5375:82 (ZR1)0 / 4
方案2 远端绕行(90,180)1 个ZC→ZR3→ZR4→ZR53f0:e3 (ZR3)0 / 4
方案3 近端直达(45,45)3 个ZC→ZR1→ZR5275:82 (ZR1)0 / 2
结论:位置 → 邻居可见性 → 路由选择。方案2 把 ZR5 移远,路径绕到左列;方案3 移近,路径变短、路由发现的代价预算也从 4 降到 2。

路由表 · ZC(源)视角

DestinationNext hopStatus
ad:6e (ZR5)75:82 (ZR1)ACTIVE
ZC 到 ZR5 的路由:下一跳选 ZR1,而非直达 ZR3 的路线。这是路由发现(RREQ/RREP)后按路径代价择优的结果。

邻居表 · ZC(源)视角

邻居关系类型
75:82 (ZR1)CHILDROUTER
f0:e3 (ZR3)CHILDROUTER
ZC 直连两个路由器 ZR1、ZR3(都是它的孩子)。但到 ZR5 的路径仍选 ZR1——说明路由表不只看「是不是邻居」。

路由发现表 · ZC(源)视角

RREQ IDSourceCost 前向/剩余过期
21400:000 / 4+19s
没有路由时,源发起路由发现(RREQ),剩余代价 4:意味着最多允许 4 跳开销。RREQ 泛洪、RREP 回报,路由表随之建立。

邻居表 · ZR5(目标)视角

邻居关系类型
cf:e0 (ZR2)PARENTROUTER
52:c5 (ZR4)NONEROUTER
ZR5 的父节点是 ZR2,但它还看得见非父邻居 ZR4——这就是网格冗余:万一 ZR2 这条链路失效,数据可以改走 ZR4 绕行。
实验五 · 星形 / 树形 / 网状怎么选

三种拓扑,三种「数据走路」的方式

用三张真实跑过的路径做对比:同样的「协调器 → 远端设备」,星形直达、树形沿父子链、网状按路由表择优穿越。虚线为拓扑示意,琥珀粗线为本例真实路径。

星形

全部直达协调器

每一跳都是单跳直达。简单但覆盖有限,协调器是瓶颈。

树形

沿固定父子链

路径由父子关系固定:数据只能沿树上下,叶子必须经父节点。

网状

按路由表择优多跳

路径由路由表择优(本例 ZC→ZR1→ZR2→ZR5 三跳),有冗余可绕行,覆盖最广。

实验六 · 完整仿真时间线

从建网到两次数据发送,真实回放

数据来自 zigbee-mesh-network 在 ns-3.48 中的真实运行(以方案1·标准网格为例;其中 ZC→ZR3 单跳为近距离对比)。

数据来源:E:\ns3_zigbee\output\zigbee-mesh-network.log(ns-3.48 真实仿真输出,含真实路径与路由表)
这个页面怎么用? 三层教学:① 概念层——讲清网状「路由器互联、按路由表择优、多跳」,终端设备(ZE)挂靠父路由器、不参与转发;② 验证层——实验一/二/四/六全部来自 ns-3 真实仿真,实验四的路由表/邻居表/路由发现表是仿真原样打印,实验二展示了「协调器→骨干→父子链路→终端」的完整数据流向与帧内容;③ 源码层——打开 zigbee-mesh-network.cc / zigbee-mesh-with-ze.cc 对照看实现。
标注:实验五为教学示意(三拓扑用真实路径作代表);实验一/二/四/六数据来自真实仿真。仿真环境:WSL2 Ubuntu + ns-3.48 + zigbee 模块。

aioteer · 物联网专业课程群

💬AI 伴学配置