线程和 IPv6

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

低功率

一些 Matter 节点采用有线方式连接,并且具有允许其保持无线装置持续开启的能耗预算。其他类型的节点(如传感器)需要依靠电池运行多年,并在低功耗网络上(如 Thread)运行其无线装置。代理架构以及 Thread Sleepy End Devices 可让全功能节点同时提供网络级和应用级功能,使其子节点免受高能耗事务的影响。

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 字节,但 IPv6 数据包的最大(且典型)最大传输单元 (MTU)(以 Thread 为单位)为 1280 字节。因此,IPv6 数据包通常需要拆分为多个 PHY 帧。此过程由 RFC4944 定义。

如需了解详情,请参阅 Thread Primer 中的 openthread.io 中的 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 寻址方案

此方法允许根据共享 IPv6 Unicast 前缀选择 Multicast 数据包的目标节点。

例如,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 位 Fabric ID
8 位 0x00
16 位 组 ID

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

当 IPv6 Multicast 地址形成时,这些地址还会包含 Fabric ID 的上 56 位。重要的含义是,Multicast 的作用域在 Fabric 内,而 Unicast 地址在 Fabric 之间共享。具有许多结构的节点可能会有多个 Multicast 地址,用于定义每个结构范围内的重叠节点组。

端口

Matter 使用端口 5540 进行多播。