Thread がネットワーク内の各デバイスをどのように識別し、どのようなタイプのアドレスを使用して相互に通信するかを見てみましょう。
スコープ
Thread ネットワークには、ユニキャスト アドレス指定用に 3 つのスコープがあります。
- リンクローカル - 単一の無線伝送で到達可能なすべてのインターフェース
- Mesh-Local - 同じ Thread ネットワーク内で到達可能なすべてのインターフェース
- グローバル - Thread ネットワークの外部から到達可能なすべてのインターフェース
最初の 2 つのスコープは、Thread ネットワークによって指定されたプレフィックスに対応します。Link-Local のプレフィックスは fe80::/16、Mesh-Local のプレフィックスは fd00::/8 です。
ユニキャスト
単一の Thread デバイスを識別する複数の IPv6 ユニキャスト アドレスがあります。それぞれ、スコープとユースケースに基づいて異なる機能があります。
各タイプについて詳しく説明する前に、ルーティング ロケータ(RLOC)と呼ばれる一般的なタイプについて詳しく見ていきましょう。RLOC は、ネットワーク トポロジ内の位置に基づいて Thread インターフェースを識別します。
ルーティング ロケータの生成方法
すべてのデバイスにルーター ID と子 ID が割り当てられます。各親はすべての子のテーブルを保持します。このテーブルの組み合わせにより、トポロジ内のデバイスが一意に識別されます。たとえば、次のトポロジでハイライト表示されているノードについて考えてみましょう。メッシュ エクステンダ(五角形)の数字はルーター ID で、エンドデバイス(円)の数字は子 ID です。
各子機のルーター ID は、親機(メッシュ エクステンダ)に対応しています。メッシュ エクステンダは子ではないため、メッシュ エクステンダの子 ID は常に 0 です。これらの値は、Thread ネットワーク内の各デバイスで一意であり、RLOC の最後の 16 ビットを表す RLOC16 の作成に使用されます。
たとえば、左上のノード(ルーター ID = 1、子 ID = 1)の RLOC16 は次のように計算されます。
RLOC16 はインターフェース ID(IID)の一部であり、IPv6 アドレスの最後の 64 ビットに対応します。一部の IID は、一部のタイプの Thread インターフェースを識別するために使用できます。たとえば、RLOC の IID は常に次の形式になります。
0000:00ff:fe00:RLOC16
IID は、メッシュローカル プレフィックスと組み合わされて RLOC になります。たとえば、Mesh-Local Prefix が fde5:8dba:82e1:1::/64 の場合、RLOC16 = 0x401 のノードの RLOC は次のようになります。
この同じロジックを使用して、上記のサンプル トポロジでハイライト表示されているすべてのノードの RLOC を決定できます。
ただし、RLOC はトポロジ内のノードの場所に基づいているため、トポロジが変更されるとノードの RLOC も変更される可能性があります。
たとえば、ノード 0x400 が Thread ネットワークから削除されたとします。ノード 0x401 と 0x402 は、異なるメッシュ エクステンダへの新しいリンクを確立します。その結果、それぞれに新しい RLOC16 と RLOC が割り当てられます。
ユニキャスト アドレスの種類
RLOC は、Thread デバイスが持つことができる多くの IPv6 ユニキャスト アドレスの 1 つにすぎません。もう 1 つのアドレス カテゴリはエンドポイント識別子(EID)と呼ばれ、Thread ネットワーク パーティション内の一意の Thread インターフェースを識別します。EID は Thread ネットワーク トポロジとは独立しています。
一般的なユニキャスト タイプについて、以下で詳しく説明します。
リンクローカル アドレス(LLA) |
|
|---|---|
| 単一の無線伝送で到達可能な Thread インターフェースを識別する EID。 | |
| 例 | fe80::54db:881c:3845:57f4 |
| IID | 802.15.4 拡張アドレスに基づく |
| スコープ | リンクローカル |
| 詳細 |
|
Mesh-Local EID(ML-EID) |
|
|---|---|
| ネットワーク トポロジに依存しない Thread インターフェースを識別する EID。同じ Thread パーティション内の Thread インターフェースにアクセスするために使用されます。ユニーク ローカル アドレス(ULA)とも呼ばれます。 | |
| 例 | fde5:8dba:82e1:1:416:993c:8399:35ab |
| IID | 委託完了後にランダムに選択 |
| スコープ | Mesh-Local |
| 詳細 |
|
ルーティング ロケーター(RLOC) |
|
|---|---|
| ネットワーク トポロジ内の位置に基づいて、Thread インターフェースを識別します。 | |
| 例 | fde5:8dba:82e1:1::ff:fe00:1001 |
| IID | 0000:00ff:fe00:RLOC16 |
| スコープ | Mesh-Local |
| 詳細 |
|
エニーキャスト ロケーター(ALOC) |
|
|---|---|
| 宛先の RLOC が不明な場合に、RLOC ルックアップを介して Thread インターフェースを識別します。 | |
| 例 | fde5:8dba:82e1:1::ff:fe00:fc01 |
| IID | 0000:00ff:fe00:fcXX |
| スコープ | Mesh-Local |
| 詳細 |
|
グローバル ユニキャスト アドレス(GUA) |
|
|---|---|
| Thread ネットワークを超えてグローバル スコープで Thread インターフェースを識別する EID。 | |
| 例 | 2000::54db:881c:3845:57f4 |
| IID |
|
| スコープ | グローバル |
| 詳細 |
|
マルチキャスト
マルチキャストは、複数のデバイスに一度に情報を伝達するために使用されます。Thread ネットワークでは、スコープに応じて、異なるデバイス グループでマルチキャストを使用するために特定のアドレスが予約されています。
| IPv6 アドレス | スコープ | お届け先住所: |
|---|---|---|
ff02::1 |
リンクローカル | すべての FTD と MED |
ff02::2 |
リンクローカル | すべての FTD |
ff03::1 |
Mesh-Local | すべての FTD と MED |
ff03::2 |
Mesh-Local | すべての FTD |
上記のマルチキャスト テーブルには、スリーピー エンドデバイス(SED)が受信者として含まれていないことに気づくかもしれません。代わりに、Thread は、SED を含むすべての Thread ノードに使用されるリンクローカルおよびレルムローカル スコープのユニキャスト プレフィックスベースの IPv6 マルチキャスト アドレスを定義します。これらのマルチキャスト アドレスは、ユニキャストの Mesh-Local プレフィックス(ユニキャスト プレフィックス ベースの IPv6 マルチキャスト アドレスの詳細については、RFC 3306 を参照)に基づいて構築されているため、Thread ネットワークによって異なります。
Thread デバイスでは、すでにリストされているもの以外の任意のスコープもサポートされています。
エニーキャスト
エニーキャストは、宛先の RLOC が不明な場合に、トラフィックを Thread インターフェースにルーティングするために使用されます。エニーキャスト ロケータ(ALOC)は、Thread パーティション内の複数のインターフェースの場所を特定します。ALOC の最後の 16 ビット(ALOC16)は 0xfcXX の形式で、ALOC のタイプを表します。
たとえば、0xfc01 と 0xfc0f の間の ALOC16 は DHCPv6 エージェント用に予約されています。特定の DHCPv6 エージェント RLOC が不明な場合(ネットワーク トポロジが変更された場合など)、DHCPv6 エージェント ALOC にメッセージを送信して RLOC を取得できます。
Thread は次の ALOC16 値を定義します。
| ALOC16 | タイプ |
|---|---|
0xfc00 |
リーダー |
0xfc01~0xfc0f |
DHCPv6 エージェント |
0xfc10~0xfc2f |
サービス |
0xfc30~0xfc37 |
コミッショナー |
0xfc40~0xfc4e |
近隣探索エージェント |
0xfc38 – 0xfc3f0xfc4f – 0xfcff |
予約済み |
内容のまとめ
学習した内容:
- Thread ネットワークは、Link-Local、Mesh-Local、Global の 3 つのスコープで構成されます。
- Thread デバイスには複数のユニキャスト IPv6 アドレスがあります。
- RLOC は、Thread ネットワーク内のデバイスの位置を表します。
- ML-EID はパーティション内の Thread デバイスに固有であり、アプリケーションで使用する必要があります
- Thread はマルチキャストを使用してノードのグループにデータを転送します
- 宛先の RLOC が不明な場合、Thread はエニーキャストを使用する
Thread の IPv6 アドレス指定について詳しくは、Thread 仕様のセクション 5.2 と 5.3 をご覧ください。
理解度をチェックしましょう
ff03::2 マルチキャスト アドレスをサブスクライブします。このことから、デバイスについて何がわかりますか?ff03::2 マルチキャスト アドレスをサブスクライブするのは、Full Thread Device のみです。これは Mesh-Local スコープで行います。