IPv6 アドレス指定

GitHub でソースを見る

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

スコープ

OT スコープ

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 です。

OT RLOC トポロジ

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

たとえば、左上のノード(Router ID = 1 と子 ID = 1)の RLOC16 は次のように計算されます。

OT RLOC16

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

ユニキャスト アドレスタイプ

RLOC は、Thread デバイスが持つ可能性のある IPv6 ユニキャスト アドレスの一つにすぎません。アドレスのもう 1 つのカテゴリはエンドポイント識別子(EID)です。エンドポイント識別子は Thread ネットワーク パーティション内の固有の Thread インターフェースを識別します。EID は、Thread ネットワーク トポロジから独立しています。

一般的なユニキャスト タイプの詳細は以下のとおりです。

単一の無線伝送で到達可能なスレッド インターフェースを識別する EID。
サンプルfe80::54db:881c:3845:57f4
インドネシア802.15.4 拡張アドレスに基づく
スコープリンクローカル
詳細
  • ネイバーの検出、リンクの設定、ルーティング情報の交換に使用されます
  • ルーティング可能なアドレスではない
  • 接頭辞 fe80::/16 は必ず付きます

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

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

ルーティング ロケーター(RLOC)

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

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

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

Global Unicast Address(GUA)

スレッド ネットワーク以外のグローバル スコープでスレッド インターフェースを識別する EID。
サンプル2000::54db:881c:3845:57f4
インドネシア
  • SLAAC - デバイス自体によってランダムに割り当てられる
  • DHCP - DHCPv6 サーバーによって割り当てられます。
  • 手動 — アプリケーション レイヤが割り当て
スコープGlobal
詳細
  • パブリック IPv6 アドレス
  • 接頭辞 2000::/3 は必ず付きます

マルチキャスト

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

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

Thread は、次の ALOC16 値を定義します。

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

まとめ

学習した内容:

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

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

理解度をチェックする

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