Thread がネットワーク内の各デバイスを識別する方法と、それらが相互通信に使用するアドレスの種類を見てみましょう。
スコープ

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

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

RLOC16 は、IPv6 アドレスの最後の 64 ビットに対応するインターフェース識別子(IID)の一部です。一部の 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 が割り当てられます。

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