什么是Fabric?
Fabric可以被理解为一组相互信任的设备和控制器,它们共享一个共同的信任域。这意味着在同一个Fabric中的设备和控制器之间可以进行安全的通信,而无需额外的身份验证或安全检查。每个Fabric有一个唯一的标识,确保Fabric之间是隔离的,防止权限混乱。一个Matter Fabric就是一个Matter网络,一个Matter Fabric中的所有节点共享同一个根证书,所以他们可以相互通信,每个Matter Fabric会分配一个64bit的ID进行标识。一般来说,一个Matter生态就是一个Matter fabric,比如苹果的Home就是一个fabric,谷歌的home又是另一个fabric。
Fabric的组成:
一个Fabric主要由以下几个部分组成:
控制器(Controller):
控制器负责管理Fabric内的设备,执行设备的配置、管理和操作指令。
一个Fabric通常有一个或多个控制器。例如,智能手机、智能音箱、家用中枢设备都可以充当控制器角色。
设备(Node):
设备是由控制器管理的实际智能硬件,比如灯泡、温控器、摄像头等。
Fabric中的每个设备都有一个唯一的身份标识符(Node ID),并与控制器共享信任关系,以确保通信的安全性。
Matter Bridge(网桥)(可能有)
含义:Matter网桥是连接Matter设备和其他不支持Matter协议的智能设备或协议的桥梁,允许不同网络协议之间的设备互操作。
功能:
- 协议转换:Matter网桥可以将不同协议的设备(如Zigbee、Z-Wave、蓝牙等)映射为Matter设备,使它们能够与Matter生态系统中的设备通信。
- 互操作性:通过网桥,家庭中的老旧设备或非Matter设备也可以被集成到Matter网络中,扩大了设备的兼容性和使用范围。 应用:典型应用是将Zigbee、Z-Wave等设备连接到Matter网络中,网桥充当协议转换的媒介。
Fabric Identifier(Fabric标识符):
每个Fabric都有一个唯一的标识符,确保不同的Fabric之间不会产生混淆。即便是同一家庭的不同设备也可以加入不同的Fabric,而不会相互影响。
操作凭证(Operational Credentials):
这些是控制器和设备之间进行身份认证和加密通信的凭证。它们确保Fabric中的所有通信都是加密和受信任的。
Fabric的特性:
信任域:
在Matter协议中,Fabric表示的是一个受信任的网络结构,Fabric内的所有设备和控制器共享相同的信任域。这意味着Fabric中的所有设备可以相互通信和控制,而无需额外的信任验证。控制器可以轻松地向Fabric中的设备发送命令或读取设备状态。
安全通信:
Fabric中的通信通过强大的加密机制保护,确保设备和控制器之间的消息在传输过程中不会被截获或篡改。
每个Fabric都有独立的加密密钥,保证Fabric间的隔离性。即便设备加入了多个Fabric(见Multi-Fabric),它在每个Fabric中的通信依然是独立加密的。
Fabric的唯一性与隔离性:
每个Fabric有一个唯一的标识符,保证了Fabric之间的隔离。不同的Fabric代表不同的信任域和安全通信通道,即使一个设备加入了多个Fabric,不同Fabric的控制器之间仍不会共享设备的权限或控制。
Fabric的使用场景
单一家庭网络(Single-Fabric Scenario):
在典型的智能家居环境中,一个家庭可以有一个Fabric,所有的Matter设备和控制器都属于这个Fabric。用户可以通过智能手机、智能音箱等控制器管理和控制家中的所有设备。
例如,用户可以通过智能手机App控制灯光、门锁和恒温器,而这些设备都在同一个Fabric中,并且它们之间可以相互通信和协作。
多家庭网络或共享设备(Multi-Fabric Scenario):
Fabric允许多个Fabric并存,这意味着一个设备可以同时属于多个不同的Fabric。比如,一个设备可以既属于家庭的Fabric,又属于工作场所的Fabric,或者同时属于云服务提供商的Fabric。
这种设计使得设备可以在多个不同的控制环境中运行,而不会在控制权限上产生冲突。例如,你可以在家中通过本地控制器控制家中的设备,但在不同时,你的云服务提供商的控制器也可以对设备进行远程监控和操作。
隔离的控制权限:
Fabric之间的隔离意味着即便一个设备加入了多个Fabric,每个Fabric的控制器之间也不会共享控制权限。例如,如果你有一个工作Fabric和家庭Fabric,工作Fabric中的控制器无法控制家庭Fabric中的设备,反之亦然。
Fabric的管理
Commissioning(设备加入Fabric):
- 当一个设备被添加到一个Fabric中时,它需要通过一个称为“commissioning”的过程进行设备加入。控制器负责将设备纳入Fabric并生成相应的操作凭证,使设备和控制器可以相互验证身份并安全通信。
设备的移除和重置:
- 如果设备需要退出一个Fabric,它可以被安全移除。设备被移除后,它将失去与该Fabric中的控制器的信任关系。为了重新加入另一个Fabric或控制器,设备需要经过重新commissioning的过程。
多个Fabric之间的相互通信:
设备跨多个Fabric加入(Multi-Fabric Scenario)
虽然不同的Fabric彼此隔离,但设备本身可以同时加入多个Fabric。这种场景下,设备本质上在多个不同的信任域中工作,但它在每个Fabric中的通信是独立的。这是通过以下方式实现的:
- 独立的信任关系:设备在每个Fabric中都有独立的凭证和加密密钥,因此即使设备属于多个Fabric,不同Fabric之间的数据流也不会互相影响或泄露。
- 不同的控制器控制:在Multi-Fabric模式下,设备可以被多个控制器(属于不同的Fabric)控制。例如,设备可以被家里的本地控制器控制(家庭Fabric),同时也可以通过云端的控制器管理(云服务Fabric),但这两者互不影响。
示例场景:
- 一盏智能灯可以同时属于家庭的Fabric和办公室的Fabric。你可以通过家庭的控制器(比如智能手机)在家里控制它,但当你在办公室时,办公室的控制器也可以控制这盏灯。
Multi-Fabric模式下,一个设备会拥有多个凭证和加密密钥:
设备加入多个Fabric的过程:
加入第一个Fabric:
当设备首次加入一个Fabric时(如家庭Fabric),控制器会与设备进行通信,并通过设备配对的过程生成操作凭证和加密密钥。设备与控制器之间建立起安全通信的信任关系。
加入第二个Fabric:
当设备加入第二个Fabric时(如办公室Fabric),它将与该Fabric的控制器重新进行认证,生成新的操作凭证和加密密钥。这些凭证和密钥与之前在家庭Fabric中生成的凭证和密钥是完全独立的。
多Fabric同时存在:
当设备同时属于多个Fabric时,它可以根据不同的需求在不同Fabric中进行操作。例如,当家庭控制器向设备发送指令时,设备使用家庭Fabric中的凭证和密钥进行通信;当办公室控制器发送指令时,它使用办公室Fabric的凭证和密钥进行通信。
节点在Fabric中的通信机制:
节点ID(Node ID):
- 每个设备在加入Fabric时,会获得一个唯一的节点ID(Node ID),这个ID在Fabric内是唯一的。节点ID用于标识Fabric中的每个设备。
- 当一个控制器或设备要与另一个设备通信时,它会使用目标设备的节点ID来定位它,而不是直接使用IP地址。这是Matter协议通信的基础寻址方式。
Fabric ID:
- 每个Fabric有一个Fabric ID,标识该Fabric中的所有节点。Fabric ID加上节点ID可以唯一标识某个Fabric中的特定设备。
- 当设备或控制器在多Fabric环境下工作时,Fabric ID确保了设备知道自己要操作的目标是在哪个Fabric中,以避免混淆。
组播(Multicast):
- Matter协议支持使用组播来高效地向多个设备发送控制指令,尤其是在多设备同时响应某个命令的场景(例如群组控制灯光)。控制器可以向一组设备发送单一的组播消息,而不需要逐个设备发送。
- 设备通过其节点ID或组ID(Group ID)接收消息,然后决定是否对消息进行响应。组ID用于将多个设备分组,方便在相同类型设备之间进行批量操作。
服务发现(Service Discovery):
- Matter使用**mDNS(多播DNS)**来进行设备和服务的发现。通过mDNS,设备可以在网络中广播自己的存在,并提供它们的节点ID等信息。
- 当控制器想要找到特定的设备时,它可以通过mDNS来查找相应的节点ID。设备会在其网络范围内进行公告,使控制器知道哪些设备可以被控制。
路径计算和消息路由:
- Matter协议基于IP网络(通常是IPv6),因此底层网络层仍然使用传统的IP地址来进行通信。设备和控制器之间的消息在传输时会被封装在IP层消息中,设备的IP地址在这个阶段仍然发挥作用。
- 尽管在传输过程中可能使用IP地址,但Matter协议主要通过节点ID进行设备间的寻址和控制,而不是直接使用IP地址作为逻辑目标。
目录服务(Directory Service):
- 在一些场景中,Matter可以使用目录服务来维持设备的注册信息。这种服务可以帮助控制器快速找到某个特定节点的设备和其关联的服务。这种服务通常用于较大规模的Matter网络中,帮助优化设备和服务发现。
寻址过程举例:
点对点控制:
- 当一个控制器要控制特定设备时,它会根据设备的节点ID(以及可能的Fabric ID)发送指令。
- 控制器首先通过mDNS发现设备,并得到其节点ID和相关信息,然后通过设备的节点ID定位它。
- 消息通过Matter协议封装,并在底层网络中传输时使用设备的IP地址。目标设备接收消息后,解封并通过节点ID确认是否是自己的控制消息。
组控制:
- 如果控制器想要控制多个设备(如一组灯光),则它可以使用组播,向拥有相同组ID的设备发送命令。所有设备都会接收到该命令,但只有与该组ID匹配的设备才会响应。
- 这大大提高了群组控制的效率,不需要每次都对每个设备单独发送消息。