Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

IPv6 アドレス指定

GitHub でソースを見る

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

スコープ

OT スコープ

スレッド ネットワークには、ユニキャスト アドレス指定のための 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 です。

OT RLOC トポロジ

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

たとえば、左上のノード(Router ID = 1、Child ID = 1)の RLOC16 の計算方法は次のとおりです。

OT RLOC16

RLOC16 はインターフェース識別子(IID)の一部であり、IPv6 アドレスの最後の 64 ビットに対応します。一部の IID は、特定のタイプのスレッド インターフェースの識別に使用できます。たとえば、RLOC の IID は常に次の形式になります。

0000:00ff:fe00:RLOC16

IID をメッシュ ローカル プレフィックスと組み合わせると、RLOC になります。たとえば、fde5:8dba:82e1:1::/64 のメッシュ ローカル プレフィックスを使用する場合、RLOC16 = 0x401 のノードの RLOC は次のようになります。

OT ロック

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

住所が指定された OT トポロジ

ただし、RLOC はトポロジ内のノードのロケーションに基づくため、トポロジが変更されるとノードの RLOC が変更される可能性があります。

たとえば、ノード 0x400 が Thread ネットワークから削除されているとします。ノード 0x4010x402 が異なる Router への新しいリンクを確立し、その結果、それぞれ新しい RLOC16 と RLOC が割り当てられます。

変更後の OT トポロジ

Unicast タイプのアドレス

RLOC は、Thread デバイスに設定できる IPv6 ユニキャスト アドレスのひとつにすぎません。アドレスの別のカテゴリはエンドポイント識別子(EID)と呼ばれ、Thread ネットワーク パーティション内の一意の Thread インターフェースを識別します。EID は、スレッド ネットワーク トポロジから独立しています。

一般的なユニキャスト タイプについて、以下で詳しく説明します。

単一の無線送信で到達可能な Thread インターフェースを識別する EID。
fe80::54db:881c:3845:57f4
IID802.15.4 Extended Address に基づく
スコープリンクローカル
詳細
  • ネイバーの検出、リンクの設定、ルーティング情報の交換に使用します
  • ルーティング可能なアドレスではありません
  • 接頭辞は常に fe80::/16 になります

メッシュのローカル EID(ML-EID)

ネットワーク トポロジから独立して Thread インターフェースを識別する EID。同じ Thread パーティション内の Thread インターフェースにアクセスするために使用されます。一意のローカル アドレス(ULA)とも呼ばれます。
fde5:8dba:82e1:1:416:993c:8399:35ab
IIDコミッショニングが完了した後にランダムに選択
スコープメッシュローカル
詳細
  • トポロジが変化しても変化しない
  • アプリケーションで使用する必要がある
  • 常に接頭辞 fd00::/8 が付きます

Routing Locator(RLOC)

ネットワーク トポロジ内の場所に基づいて、Thread インターフェースを識別します。
fde5:8dba:82e1:1::ff:fe00:1001
IID0000:00ff:fe00:RLOC16
スコープメッシュローカル
詳細
  • デバイスがネットワークに接続されると生成されます
  • Thread ネットワーク内で IPv6 データグラムを配信する場合
  • トポロジの変化に応じた変更
  • 通常はアプリケーションで使用されない

エニーキャスト ロケーター(ALOC)

宛先の RLOC が不明な場合、RLOC ルックアップを介してスレッド インターフェースを識別します。
fde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
スコープメッシュローカル
詳細
  • fcXX = ALOC 宛先。適切な RLOC を検索します。
  • 通常はアプリケーションで使用されない

グローバル ユニキャスト アドレス(GUA)

Thread ネットワークを超えるグローバル スコープで Thread インターフェースを識別する EID。
2000::54db:881c:3845:57f4
IID
  • SLAAC - デバイス自体によってランダムに割り当てられます
  • DHCP - DHCPv6 サーバーによって割り当てられます
  • 手動 - アプリケーション レイヤによって割り当て済み
スコープ全世界
詳細
  • パブリック IPv6 アドレス
  • 接頭辞は常に 2000::/3 になります

マルチキャスト

マルチキャストは、複数のデバイスに情報を一度に伝えるために使用します。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 の形式になります。

たとえば、0xfc010xfc0f の間の ALOC16 は、DHCPv6 エージェント用に予約されています。特定の DHCPv6 エージェントの RLOC が不明な場合(ネットワーク トポロジが変更されたためなど)、DHCPv6 エージェントの ALOC にメッセージを送信して RLOC を取得できます。

Thread は以下の ALOC16 値を定義します。

アロック 16 タイプ
0xfc00 リーダー
0xfc010xfc0f DHCPv6 エージェント
0xfc100xfc2f サービス
0xfc300xfc37 コミッショナー
0xfc400xfc4e Neighbor Discovery エージェント
0xfc380xfc3f
0xfc4f0xfcff
予約済み

内容のまとめ

学習した内容:

  • Thread ネットワークは、リンクローカル、メッシュローカル、グローバルの 3 つのスコープで構成されます。
  • スレッド デバイスには複数のユニキャスト IPv6 アドレスがあります。
    • RLOC は、Thread ネットワーク内のデバイスの位置を表します。
    • ML-EID はパーティション内の Thread デバイスに固有であり、アプリケーションで使用する必要がある
  • Thread はマルチキャストを使用して、ノードとルーターのグループにデータを転送する
  • 宛先の RLOC が不明な場合、スレッドがエニーキャストを使用する

スレッドの IPv6 アドレス指定の詳細については、スレッド仕様のセクション 5.2 とセクション 5.3 をご覧ください。

理解度をチェックする

スレッド ネットワークでユニキャスト アドレス指定に使用するスコープはどれですか。
プライベート
不正解です。
インターフェース(ローカル)
不正解です。
リンクローカル
正解です。
サイトローカル
不正解です。
メッシュローカル
正解です。
全世界
正解です。
子 ID が 0 の場合、これは何を意味しますか。
デバイスが子である。
不正解です。
デバイスが REED である。
不正解です。
デバイスがルーターである。
正解です。Router の子 ID は常に 0 です。
スレッド ネットワーク上のノードであるカメラは、新しい RLOC16 と RLOC を受け取ります。次のどのイベントが原因と考えられますか。
誰かがカメラからリモートで画像をダウンロードしました。
不正解です。このイベントは、Thread ネットワークには関係ありません。
ルーターがネットワークから切断された。
正解です。ルーターがネットワークから切断されると、ネットワーク トポロジが変化し、デバイスがルーターに昇格し、新しい RLOC を取得する可能性があります。
カメラがスリープモードになり、ネットワーク トポロジが変更されました。
不正解です。スリープモードになっても、必ずしもデバイスで新しいネットワーク アドレスが返されるわけではありません。
Thread ネットワーク上のデバイスは、ff03::2 マルチキャスト アドレスに登録します。デバイスについてわかること
最小エンドデバイス(MED)です。
不正解です。
フルエンド デバイス(FED)である。
不正解です。(FED である場合とそうでない場合があります)。
ミニマル スレッド デバイス(MTD)です。
不正解です。
フルスレッド デバイス(FTD)です。
正解です。フルスレッド デバイスのみが ff03::2 マルチキャスト アドレスに登録します。これは Mesh-Local スコープで行われます。
ノードとルーターのグループにデータを転送するために、スレッドはどのようなアドレス指定とルーティングを使用していますか。
ユニキャスト
不正解です。
エニーキャスト
不正解です。
マルチキャスト
正解です。
ブロードキャスト
不正解です。
目的のメッセージ受信者の RLOC が不明な場合、スレッド デバイスはどのアドレス指定とルーティングを使用しますか。
ユニキャスト
不正解です。
エニーキャスト
正解です。エニーキャスト デバイスは、デバイスの ALOC に対処することで、RLOC が不明なノードに到達できます。
マルチキャスト
不正解です。
ブロードキャスト
不正解です。