Thread がネットワーク内の各デバイスを識別する方法と、互いに通信するために使用するアドレスタイプについて考えてみましょう。
スコープ

スレッド ネットワークには、ユニキャスト アドレス指定のための 3 つのスコープがあります。
- リンクローカル - 1 回の無線送信ですべてのインターフェースに到達可能
- メッシュローカル - 同じスレッド ネットワーク内で到達可能なすべてのインターフェース
- グローバル - Thread ネットワークの外部からアクセス可能なすべてのインターフェース
最初の 2 つのスコープは、Thread ネットワークで指定されたプレフィックスに対応します。Link-Local の接頭辞は fe80::/16
で、Mesh-Local の接頭辞は fd00::/8
です。
ユニキャスト
単一の Thread デバイスを識別する IPv6 ユニキャスト アドレスは複数あります。 それぞれ、スコープとユースケースに応じて異なる機能を持ちます。
各タイプについて詳しく説明する前に、ルーティング ロケータ(RLOC)と呼ばれる一般的なタイプについて詳しく説明します。RLOC は、ネットワーク トポロジ内の場所に基づいて Thread インターフェースを識別します。
ルーティング ロケータの生成方法
すべてのデバイスにルーター ID と子 ID が割り当てられます。各 Router はすべての子のテーブルを維持し、その組み合わせによってトポロジ内でデバイスを一意に識別します。たとえば、次のトポロジでハイライト表示されているノードについて考えてみましょう。ここで、Router 番号(五角形)の番号は Router ID で、エンドデバイスの番号(円)は子 ID です。

各子ルーターの ID は親(ルーター)に対応します。Router は子ではないため、Router の子 ID は常に 0 になります。これらの値を合わせて Thread ネットワークのデバイスごとに一意であり、RLOC の最後の 16 ビットを表す RLOC16 を作成するために使用されます。
たとえば、左上のノード(Router ID = 1、Child ID = 1)の RLOC16 の計算方法は次のとおりです。

RLOC16 はインターフェース識別子(IID)の一部であり、IPv6 アドレスの最後の 64 ビットに対応します。一部の IID は、特定のタイプのスレッド インターフェースの識別に使用できます。たとえば、RLOC の IID は常に次の形式になります。
0000:00ff:fe00:RLOC16
IID をメッシュ ローカル プレフィックスと組み合わせると、RLOC になります。たとえば、fde5:8dba:82e1:1::/64
のメッシュ ローカル プレフィックスを使用する場合、RLOC16 = 0x401
のノードの RLOC は次のようになります。

これと同じロジックを使用して、上記のサンプル トポロジでハイライト表示されているすべてのノードの RLOC を決定できます。

ただし、RLOC はトポロジ内のノードのロケーションに基づくため、トポロジが変更されるとノードの RLOC が変更される可能性があります。
たとえば、ノード 0x400
が Thread ネットワークから削除されているとします。ノード 0x401
と 0x402
が異なる Router への新しいリンクを確立し、その結果、それぞれ新しい RLOC16 と RLOC が割り当てられます。

Unicast タイプのアドレス
RLOC は、Thread デバイスに設定できる IPv6 ユニキャスト アドレスのひとつにすぎません。アドレスの別のカテゴリはエンドポイント識別子(EID)と呼ばれ、Thread ネットワーク パーティション内の一意の Thread インターフェースを識別します。EID は、スレッド ネットワーク トポロジから独立しています。
一般的なユニキャスト タイプについて、以下で詳しく説明します。
リンクローカル アドレス(LLA) |
|
---|---|
単一の無線送信で到達可能な Thread インターフェースを識別する EID。 | |
例 | fe80::54db:881c:3845:57f4 |
IID | 802.15.4 Extended Address に基づく |
スコープ | リンクローカル |
詳細 |
|
メッシュのローカル EID(ML-EID) |
|
---|---|
ネットワーク トポロジから独立して Thread インターフェースを識別する EID。同じ Thread パーティション内の Thread インターフェースにアクセスするために使用されます。一意のローカル アドレス(ULA)とも呼ばれます。 | |
例 | fde5:8dba:82e1:1:416:993c:8399:35ab |
IID | コミッショニングが完了した後にランダムに選択 |
スコープ | メッシュローカル |
詳細 |
|
Routing Locator(RLOC) |
|
---|---|
ネットワーク トポロジ内の場所に基づいて、Thread インターフェースを識別します。 | |
例 | fde5:8dba:82e1:1::ff:fe00:1001 |
IID | 0000:00ff:fe00:RLOC16 |
スコープ | メッシュローカル |
詳細 |
|
エニーキャスト ロケーター(ALOC) |
|
---|---|
宛先の RLOC が不明な場合、RLOC ルックアップを介してスレッド インターフェースを識別します。 | |
例 | fde5:8dba:82e1:1::ff:fe00:fc01 |
IID | 0000:00ff:fe00:fcXX |
スコープ | メッシュローカル |
詳細 |
|
グローバル ユニキャスト アドレス(GUA) |
|
---|---|
Thread ネットワークを超えるグローバル スコープで Thread インターフェースを識別する EID。 | |
例 | 2000::54db:881c:3845:57f4 |
IID |
|
スコープ | 全世界 |
詳細 |
|
マルチキャスト
マルチキャストは、複数のデバイスに情報を一度に伝えるために使用します。Thread ネットワークでは、スコープに応じて、特定のアドレスがさまざまなデバイス グループでマルチキャスト用に予約されます。
IPv6 アドレス | 範囲 | 配送先住所: |
---|---|---|
ff02::1 |
リンクローカル | すべての FTD と MED |
ff02::2 |
リンクローカル | すべての FTD |
ff03::1 |
メッシュローカル | すべての FTD と MED |
ff03::2 |
メッシュローカル | すべての FTD |
上記のマルチキャスト テーブルに、Sleepy End デバイス(SED)が受信者として含まれていないことに気付くかもしれません。Thread では、SED を含む、すべてのスレッドノードに使用されるリンクローカルとレルムローカル スコープのユニキャスト プレフィックス ベースの IPv6 マルチキャスト アドレスが定義されます。これらのマルチキャスト アドレスはスレッド ネットワークによって異なります。これは、ユニキャスト メッシュのローカル プレフィックスに基づいて構築されているためです(ユニキャスト プレフィックス ベースの IPv6 マルチキャスト アドレスの詳細については、RFC 3306 をご覧ください)。
すでにリストされている以外の任意のスコープも、Thread デバイスでサポートされています。
エニーキャスト
宛先の RLOC が不明な場合、エニーキャストはトラフィックを Thread インターフェースにルーティングするために使用されます。エニーキャスト ロケータ(ALOC)は、Thread パーティション内の複数のインターフェースの位置を特定します。ALOC16 と呼ばれる ALOC の最後の 16 ビットは、ALOC のタイプを表す 0xfcXX
の形式になります。
たとえば、0xfc01
と 0xfc0f
の間の ALOC16 は、DHCPv6 エージェント用に予約されています。特定の DHCPv6 エージェントの RLOC が不明な場合(ネットワーク トポロジが変更されたためなど)、DHCPv6 エージェントの ALOC にメッセージを送信して RLOC を取得できます。
Thread は以下の ALOC16 値を定義します。
アロック 16 | タイプ |
---|---|
0xfc00 |
リーダー |
0xfc01 ~0xfc0f |
DHCPv6 エージェント |
0xfc10 ~0xfc2f |
サービス |
0xfc30 ~0xfc37 |
コミッショナー |
0xfc40 ~0xfc4e |
Neighbor Discovery エージェント |
0xfc38 ~0xfc3f 0xfc4f ~0xfcff |
予約済み |
内容のまとめ
学習した内容:
- Thread ネットワークは、リンクローカル、メッシュローカル、グローバルの 3 つのスコープで構成されます。
- スレッド デバイスには複数のユニキャスト IPv6 アドレスがあります。
- RLOC は、Thread ネットワーク内のデバイスの位置を表します。
- ML-EID はパーティション内の Thread デバイスに固有であり、アプリケーションで使用する必要がある
- Thread はマルチキャストを使用して、ノードとルーターのグループにデータを転送する
- 宛先の RLOC が不明な場合、スレッドがエニーキャストを使用する
スレッドの IPv6 アドレス指定の詳細については、スレッド仕様のセクション 5.2 とセクション 5.3 をご覧ください。
理解度をチェックする
ff03::2
マルチキャスト アドレスに登録します。デバイスについてわかることff03::2
マルチキャスト アドレスに登録します。これは Mesh-Local スコープで行われます。