Matter 02 · アーキテクチャと用語の地図

Chapter 02

アーキテクチャと用語の地図

この章がなぜ必要なのか——用語を取り違えると、以降がすべて崩れる.

Matter には Fabric・Node・Endpoint・Cluster・Attribute・Device Type と、 似たような階層の言葉が並ぶ。しかもどれも日常語と意味がずれている。

ここで一度、全部の言葉を 1 枚の地図に配置する。 以降の章はこの地図の上を歩くだけになる。迷ったらここに戻ってきてほしい。

この章で使う既出の用語(定義は各リンク先). Matter(01 章 3 節)、コミッショニング(01 章 3 節)

1. レイヤ構造

Matter は下から順にこう積まれている。

層内容章
アプリケーション機器のロジック(電球を点ける、温度を測る)—
データモデルEndpoint / Cluster / Attribute / Command / Event07〜08
インタラクションモデルRead / Write / Invoke / Subscribe09〜10
アクション(フレーミング)上記をメッセージに変換。TLV でシリアライズ17
セキュリティセッション鍵で暗号化・認証(AES-CCM)11〜14
メッセージングMatter メッセージ形式、MRP による信頼性06
トランスポートUDP(主)/ TCP / BTP(BLE 上)06
ネットワークIPv6(必須)03
リンクWi-Fi / Ethernet / Thread (802.15.4) / BLE04〜05

注目すべき境界が 2 つある.

  1. IPv6 のところで一本化されている. 下が Wi-Fi でも Thread でも、 IPv6 より上はまったく同じコードが動く。これが「ネットワークを問わない」の実体である。
  2. BLE だけが例外. BLE は IP を持たないので、BTP という専用のトランスポートで Matter メッセージを運ぶ。そしてコミッショニング時にしか使わない(05 章)。

2. 用語の地図

Fabric(管理ドメイン。例: あなたの Apple Home)
 └── Node(1 台の機器。Fabric 内で一意な Node ID を持つ)
      ├── Endpoint 0 ── Root Node(必ず存在。ユーティリティクラスタ)
      │                  ├── Cluster: Basic Information (0x0028)
      │                  ├── Cluster: Operational Credentials (0x003E)
      │                  ├── Cluster: Access Control (0x001F)
      │                  └── Cluster: Descriptor (0x001D)
      └── Endpoint 1 ── Device Type: Dimmable Light (0x0101)
                         ├── Cluster: On/Off (0x0006)
                         │    ├── Attribute: OnOff (0x0000) = true/false
                         │    └── Command: On / Off / Toggle
                         ├── Cluster: Level Control (0x0008)
                         │    ├── Attribute: CurrentLevel (0x0000) = 0..254
                         │    └── Command: MoveToLevel / Move / Step / Stop
                         └── Cluster: Identify (0x0003)

各用語の定義

用語定義たとえるなら
Fabric共通の信頼の根(Root CA)を共有する、Node の集合「会社」
Nodeネットワーク上で個別にアドレス可能な 1 つの機器「社員」
EndpointNode の中の 1 つの機能単位「その社員が兼任している役職」
Cluster関連する Attribute と Command のまとまり「役職ごとの職務」
Attribute状態を表す値。読み書きできる「状態を示す掲示板」
Command動作を起こす要求「指示」
Event過去に起きた出来事の記録「日誌」
Device TypeEndpoint が満たすべきクラスタの組み合わせの規定「職務記述書」

具体例で確認する

電源タップ(3 口、それぞれ独立に ON/OFF):

EndpointDevice Type主なクラスタ
0Root Node (0x0016)Basic Information, Descriptor, Operational Credentials, …
1On/Off Plug-in Unit (0x010A)Identify, Groups, On/Off
2On/Off Plug-in Unit (0x010A)Identify, Groups, On/Off
3On/Off Plug-in Unit (0x010A)Identify, Groups, On/Off

1 台の Node に 3 つの独立した口がある——これが Endpoint の存在理由である。 「Node = 機器」「Endpoint = 機器の中の独立した機能」と覚える。

Endpoint 0 は特別である. 必ず存在し、Device Type は Root Node。 ネットワーク設定・証明書・アクセス制御・診断といった、 機器全体に関わるユーティリティクラスタがここに載る。 アプリケーションの機能(電球、センサー)は Endpoint 1 以降に置く。

3. ID の体系

Matter には多くの ID が登場する。整理しておく。

ID型割り当て用途
Vendor ID (VID)16 bitCSA が会員に割り当てメーカーの識別
Product ID (PID)16 bitメーカーが自由に決める製品の識別
Fabric ID64 bitFabric の管理者が決める管理ドメインの識別
Node ID64 bitFabric 内で一意Fabric 内の機器の識別
Group ID16 bitFabric 内一斉制御のグループ
Endpoint ID16 bit機器が決めるNode 内の機能単位
Cluster ID32 bit仕様 or メーカークラスタの識別
Attribute ID32 bit仕様 or メーカー属性の識別

Node ID は Fabric ごとに違う. 同じ電球が Apple Home では Node ID = 0x1234、Google Home では 0x5678 になりうる。 Node ID はグローバルな識別子ではない。機器のグローバルな身元は DAC 証明書(12 章)の VID/PID と、証明書のシリアル番号が担う。

Cluster ID の空間

Cluster ID は 32 bit で、上位 16 bit がベンダー、下位 16 bit がクラスタ番号である。

上位 16 bit意味
0x0000標準クラスタ(仕様で定義)
ベンダーの VIDメーカー独自クラスタ

つまり標準の On/Off クラスタは 32 bit で書けば 0x00000006 である。 独自クラスタを VID 0xFFF1 で作るなら 0xFFF1_0001 のようになる。

独自クラスタは相互運用性を犠牲にする. 他社のエコシステムは独自クラスタを理解できない。 まず標準クラスタで表現できないかを徹底的に検討すること。 どうしても必要なら、標準クラスタで基本機能を提供したうえで、 独自クラスタは付加機能に留めるのが定石である(23 章)。

4. Fabric と信頼の構造

Fabric とは何か

同じ Root CA(RCAC)を信頼する Node の集合。技術的にはこれがすべてである。

要素内容
Root CA 証明書 (RCAC)この Fabric の信頼の根
Fabric ID64 bit の識別子
各 Node の NOCRoot CA から発行された、Node の操作用証明書
IPKIdentity Protection Key。Fabric 内で共有される鍵

Node は複数の Fabric に所属できる。所属ごとに:

を持つ。Fabric どうしは互いに独立しており、片方の管理者が他方の設定を見ることはできない。

Compressed Fabric ID. DNS-SD のサービス名などで使う短縮識別子。 Root Public Key と Fabric ID から HKDF で導出した 64 bit 値である。 ネットワーク上に Fabric ID そのものを晒さないための工夫でもある(06 章)。

対応 Fabric 数

機器は最低いくつの Fabric を受け入れるべきか。 これは Operational Credentials クラスタの SupportedFabrics 属性で公開される。

仕様の下限は 5 である(SupportedFabrics の最小値)。 ただし Fabric ごとに証明書・鍵・ACL・グループ鍵を保持するので、 フラッシュと RAM を消費する。設計時に必ず見積もること(17 章)。 実際の製品では 5〜10 程度が多い。

5. ロールの分類

ロール役割
Commissioner機器を Fabric に参加させる側(スマホアプリなど)
Commissionee参加される側(新品の機器)
Controller機器を操作する側
AdministratorFabric の管理権限を持つ Node
Border RouterThread ネットワークと IP ネットワークを繋ぐ
OTA Providerファームウェアを配布する Node
Bridge非 Matter 機器を Matter として見せる Node

Client と Server の向きに注意. Matter のクラスタには Server 側と Client 側がある。

「サーバ = 大きい機械」ではない。電球が Server で、スイッチが Client である。 Descriptor クラスタの ServerList / ClientList 属性でどちらを持つか公開される。

6. 1 つの操作を最後まで追う

「スマホから電球を点ける」で、全レイヤがどう動くかを見る。

#層起きること
1アプリユーザーが「点ける」をタップ
2データモデル対象を特定: Node 0x1234 / Endpoint 1 / Cluster 0x0006 / Command On (0x01)
3インタラクションInvoke Request を構築
4アクションTLV でエンコード
5セキュリティCASE セッション鍵で AES-CCM 暗号化・認証
6メッセージングMatter メッセージヘッダを付与、MRP で ACK を要求
7トランスポートUDP ポート 5540 へ
8ネットワークIPv6 パケットとして送出(宛先は DNS-SD で解決済み)
9リンクWi-Fi か Thread で物理的に飛ぶ
—機器側では逆順に処理され、電球が点く
10Invoke Response と MRP ACK が返る
11購読していれば OnOff 属性の変化が Report として通知される(10 章)

この流れを頭に入れておくと、障害の切り分けが速くなる. 「反応しない」とき、どの層で止まっているのかを問える: IPv6 が届いていないのか(層 8)、セッションが張れていないのか(層 5)、 ACL で拒否されているのか(層 5-6 の間)、コマンドが未実装なのか(層 2)。 21 章のデバッグはこの分解が土台になる。

7. データはどう表現されるか(TLV の予告)

Matter のすべてのペイロードは TLV(Tag-Length-Value)でエンコードされる。 JSON や XML ではなく、独自のバイナリ形式である。

理由内容
小さい組み込み機器のメモリと 802.15.4 の小さな MTU に収める
スキーマ不要タグに型情報が入るので、受信側は構造を知らなくてもパースできる
前方互換知らないタグは読み飛ばせる。仕様の拡張に強い

詳細と実際のエンコード例は 17 章で扱う(コーデックのデモも用意している)。 ここでは「JSON ではなくバイナリの TLV である」とだけ覚えておけばよい。

8. 仕様書の構成

Matter の仕様は主に 3 冊に分かれている。どれを見るかを間違えないこと。

仕様書内容よく見る場面
Core Specificationアーキテクチャ、ネットワーク、セキュリティ、インタラクションモデル、TLV、コミッショニングプロトコルの疑問
Application Cluster Specification各クラスタの属性・コマンド・イベントの定義「この属性の値域は?」
Device Library Specificationデバイスタイプごとの必須/任意クラスタ「この製品は何を実装すべき?」

このほか、 Standard Namespace Specification(意味付けのためのタグ)、 Test Plans(認証テストの中身)などがある。

開発中に最も開くのは Application Cluster と Device Library である. Core は最初に通読し、あとは必要なときに引く。 Device Library は「実装漏れがないか」の最終チェックリストになる(22 章)。

9. まとめ

階層一言で
Fabric同じ Root CA を信頼する Node の集合 = 1 つのエコシステムの管理ドメイン
Node1 台の機器。Fabric ごとに別の Node ID を持つ
EndpointNode の中の独立した機能単位。0 番は必ず Root Node
ClusterAttribute と Command のまとまり。Server 側と Client 側がある
Attribute状態(読み書きできる値)
Command動作の要求
Event起きたことの記録
Device Type実装すべきクラスタの組み合わせの規定