Wi-Fi R-Mesh 介绍

Wi-Fi R-Mesh 拓扑结构

如下图所示,Wi-Fi R-Mesh 是一个树形 Mesh 网络,用于增加 Wi-Fi 覆盖范围,让距离 AP 较远的设备也能获得稳定的网络连线。

../../_images/rmesh_topology_capacity.svg

Wi-Fi R-Mesh 拓扑结构

Wi-Fi R-Mesh 优势

Wi-Fi R-Mesh 具有以下突出优势:

  • 应用层软件开发无感:

    • 所有的 Mesh 协议都在 Wi-Fi 驱动层实现,不管是根节点还是子节点,应用层都可以将当前的节点视为是一个和 AP 连接的 Wi-Fi Station。

  • 百微秒级别的快速配对和切换:

    • 当检测到信号更好的父节点的时候,子节点可以快速的从旧的父节点切换到新的父节点,而不影响数据通信。

    • 当父节点发生问题时(掉电或挂住),子节点可以迅速检测到并切换到另一个父节点,而不影响数据通信。

    • 一个节点可以携带其所有的子节点一起切换到另外一个父节点,所有节点的数据通信不受影响。

  • 经过数跳的设备也具备较高的吞吐量:

    • R-Mesh 转发无须经过 TCP/IP 协议栈,数据转发都在底层驱动实现,可以节省 SRAM 和 MCU 算力。

    • 软件处理时间极短,可以获得更好的吞吐量。

  • 整个 Mesh 网络具有很高的稳定性:

    • 软件处理极其简单,也不需要算法维护路由表,所以整个网络会非常的稳定。

    • 传统 Mesh 网络的 环路 问题不会发生。

Wi-Fi R-Mesh 数据流

Wi-Fi R-Mesh 直接在 Wi-Fi 驱动层实现数据转发, 消耗极少的 SRAM 和 MCU 算力。

由于需要极少的软件处理过程,所以即使经过几跳的节点也会有很好的吞吐量。

../../_images/rmesh_data_flow.svg

Wi-Fi R-Mesh 数据流

Wi-Fi R-Mesh 根节点容量

Wi-Fi R-Mesh 中每个根节点下可以连接的子节点个数称为 R-Mesh 的 根节点容量

如拓扑结构所示,根节点容量为 4,则每个根节点只可以连接 4 个节点,不管拓扑的形式是哪一种。

  • 拓扑 0(Root Sta 0):所有子节点都直接连接到根节点

  • 拓扑 3(Root Sta 3):4 个节点形成一个 4 跳的线型网络

  • 也可能是拓扑 0 和拓扑 3 之间的其他拓扑结构

../../_images/rmesh_topology_capacity.svg

Wi-Fi R-Mesh 拓扑结构(根节点容量=4)

RTL8721Dx:

根节点容量为 4

Wi-Fi R-Mesh NAT(R-NAT)

在 R-Mesh 中,如果所有节点都直接与 AP 建立 Wi‑Fi 连接,则网络规模会受到 AP 可支持的最大 Station 数量限制,此数量称为 AP 容量

为扩展可接入节点数,可引入 Station + SoftAP + NAT 架构:部分节点(称之为 R-NAT 节点)连接 AP 并提供 SoftAP 供其他节点接入,同时负责通过 NAT 在 AP 网络与 R-Mesh 网络之间转发数据。

如下图所示,R-NAT 节点放在根节点和 AP 之间,用于扩展可以接入网络的节点数量。

../../_images/rmesh_nat.svg

Wi-Fi R-NAT

R-NAT 节点的 SoftAP 能连接的节点数量称为 R-NAT 节点容量,由 ap_sta_num 参数控制,详见 R-Mesh 编程接口

整个 R-Mesh 网络中可接入的节点总数称为 R-Mesh 网络容量。根据是否部署 R-NAT 节点,决定 R-Mesh 网络容量的因素不同:

场景

网络容量

无 R-NAT

等于 AP 容量

有 R-NAT

大于 AP 容量,与 R-NAT 节点容量和 R-NAT 节点数相关

根节点容量是拓扑约束,限制单个根节点下可挂载的节点数,与 R-Mesh 网络容量无关。

Wi-Fi R-Mesh 吞吐量

吞吐量测试

与普通的 Station 或 AP 模式无异,我们可以通过 iperf 命令测试 R-Mesh 的吞吐量。如下图所示,在 AP 端和节点端的 PC 上输入 iperf 指令即可。

../../_images/rmesh_tp_test_ipref.svg

R-Mesh 吞吐量测试

UDP Tx 测试:
  • 节点端通过 UART 输入如下 AT 指令:

    AT+IPERF=-c,<server IP>,-i,<periodic>,-u,-b,<bandwidth>,-t,<transtime>,-p,<port>
    
  • AP 端通过 Terminal 输入如下 iperf 指令:

    iperf -s -i <periodic> -u -p <port>
    

吞吐量数据

Wi-Fi R-Mesh 的吞吐量数据如下表所示:

(Single Node 表示各层级节点分别单独打流;L1 + L2 表示 L1 和 L2 节点同时打流;其他场景以此类推)

RTL8721Dx:

测试场景

UDP Tx(Mbps)

UDP Rx(Mbps)

TCP Tx(Mbps)

TCP Rx(Mbps)

Single Node

Layer1

39.5

27.2

27.5

22.3

Layer2

19.4

15.6

14.4

12

Layer3

12.5

9.73

9.25

8.23

Layer4

9.36

7.6

7.18

5.66

Layer5

7.53

6.23

5.37

4.45

L1 + L2

Layer1

13.3

9.67

10.1

8.19

Layer2

12.5

9.66

9.43

8

L1 + L2 + L3

Layer1

6.21

5.07

5

4.24

Layer2

6.15

5.05

4.81

4.12

Layer3

6.02

5.04

4.88

4.04

L1 + L2 + L3 + L4

Layer1

3.77

2.88

2.89

2.58

Layer2

3.48

2.88

2.92

2.52

Layer3

3.41

2.88

2.91

2.47

Layer4

3.23

2.88

2.89

2.36

L1 + L2 + L3 + L4 + L5

Layer1

2.94

2.2

1.86

1.57

Layer2

2.89

1.97

1.85

1.58

Layer3

2.4

1.97

1.83

1.54

Layer4

2.03

1.95

1.85

1.54

Layer5

2.19

2.18

1.81

1.47

测试条件:

  • Image2 运行在 PSRAM 上

  • 信道带宽为 20MHz

  • 在 Menuconfig 主页面 CONFIG WIFI 中打开 Enable HIGH TP 选项

  • AP:ASUS RT-AX88U

Wi-Fi R-Mesh RTT

不同于 BLE 和 ZigBee,R-Mesh 的 RTT(Round-Trip Latency)是非常低的,并且不会随着数据包的增大而明显增加。

../../_images/rmesh_rtt.png

Wi-Fi R-Mesh 内存占用

R-Mesh only:

开启 R-Mesh 功能 的设备与普通 STA 模式的设备相比,需要额外多消耗的内存如下表所示:

RTL8721Dx:

项目

KM0

KM4

txt

25KB

0.5KB

rodata

2.3KB

0.1KB

data+bss

0.5KB

<0.1KB

heap

20KB + N * 0.2KB [1]

0.2KB

  • [1] N 代表此 R-Mesh 节点扫描到的附近其他 R-Mesh 节点的个数(自己的子节点除外)

若需要使用可视化测试工具( Gravitation MGravitation ),则需要再 使能 R-Mesh Socket 。R-Mesh Socket 功能在 R-Mesh/R-NAT 功能的基础上需要额外消耗如下内存:

RTL8721Dx:

项目

KM0

KM4

txt

0.8KB

1.8KB

rodata

<0.1KB

0.2KB

data+bss

0

0.2KB

heap

0

7KB