线程和 IPv6

Matter 使用 IPv6 进行操作通信,并分别利用 IPv6 UnicastMulticast 地址访问其节点和群组。

低功耗

某些 Matter 节点是通过有线连接的,并且具有能耗预算,可让其持续开启无线电。其他类型的节点(例如传感器)需要依靠电池运行多年,并在 Thread 等低功耗网络上运行其无线电。代理架构以及 Thread 休眠端设备可让全功率节点同时提供网络级和应用级功能,从而使其子节点免受耗电量高的交易影响。

Matter 的一个基本方面是,它既适用于 Wi-Fi 和以太网等高吞吐量网络媒介,也适用于 Thread 等低延迟、低带宽网络。如果将来自 Wi-Fi 的所有 Multicast 数据包桥接到 Thread,网络就会过载,并可能会发生数据包洪泛。Thread 的目标是在低功耗、低延迟的网状网络中启用 IPv6,而不是实现高带宽数据传输。虽然 Thread 在本地网络中的 ICMPv6 ping 通常不到几十毫秒的 RTT,但其总带宽在 IEEE 802.15.4 PHY 上限制为 250 Kbps。考虑到数据包重传和开销,典型的最大带宽约为 125 Kbps。换句话说,比 Wi-Fi 低几个数量级。

IEEE 802.15.4 PHY 上的帧为 127 字节,但 Thread 中的 IPv6 数据包的最大传输单元 (MTU) 为 1280 字节(最大值和典型值)。因此,IPv6 数据包通常需要拆分为多个 PHY 帧。此过程由 RFC4944 定义。

如需了解详情,请参阅 openthread.io 上的 Thread Primer 中的 IPv6 地址部分。

边界路由器

那么,节点如何在同一架构中同时存在于这两种传输媒介上? 虽然这两个网络共享应用级 Matter 凭据,但它们并不共用相同的链接技术。在此场景中,网络需要 Thread 边界路由器 (BR) 才能实现连接。BR 是桩 IPv6 路由器。

桩路由器可实现桩网络与常规网络之间的连接。桩网络是一种“最后一英里”网络,可为其成员提供外部连接,但不会用作其他网络之间的中转网络路径。通常,Matter 桩网络基于 Thread。如需详细了解桩网络,请参阅 RFC 草稿

因此,BR 负责充当桩网络与相邻基础架构网络(即本地 Wi-Fi 或以太网)之间的链接。它们仅转发与 Thread 网络相关的数据包。

此过程通过为 Thread 和相邻基础架构网络分配不同的 IPv6 前缀来实现。因此,BR 仅转发到或从 Thread IPv6 前缀的单播。

边界路由器还负责:

  • 自动为 Thread 和相邻基础架构网络配置 IPv6 前缀和路由,以便 Thread 边界路由器两侧的主机能够进行通信。
  • 代表 Thread 节点发布 mDNS DNS-SD 发现数据包,以便在相邻的基础架构网络上发现这些节点。

如需了解详情,请参阅 openthread.io 上的边界路由器指南。

IPv6 多播

群组消息也很重要,因为它们允许通过 Multicast 同时控制多个 Matter 节点。为了将此类流量路由到 Thread 网络,MatterThread 都实现了 RFC 3306 中定义的Unicast基于前缀的 IPv6 Multicast 地址方案

通过此方法,您可以根据 Multicast 数据包共享的 IPv6 Unicast 前缀选择其目的地节点。

例如,Matter Multicast 地址可能如下所示:

FF35:0040:FD<Fabric ID>00:<Group ID>

表 1 详细介绍了此地址的构建方式:

表 1:Unicast基于前缀的 IPv6 地址
说明
12 位 0xFF3
4 位 0x05

范围:网站本地

8 位 0x00

已预留

8 位 0x40

表示 64 位长的前缀

8 位 0xFD

指定 ULA 前缀

56 位 布料 ID
8 位 0x00
16 位 组 ID

如需了解详情,请参阅 Thread 入门手册的 Multicast 部分以及 RFC 本身。

在构成 IPv6 Multicast 地址时,它们还包含 Fabric ID 的 56 位高位。这有一个重要的含义,即 Multicast 的范围在 Fabric 内,而 Unicast 地址在 Fabric 之间共享。具有多个 Fabric 的节点可能具有多个 Multicast 地址,这些地址定义了每个 Fabric 中范围重叠的节点组。

端口

Matter 使用端口 5540 进行多播。