IPv6 アドレス指定

GitHub 上のソースを見る

Thread がネットワーク内の各デバイスをどのように識別し、どのようなタイプのアドレスを使用して相互に通信するかを見てみましょう。

スコープ

OT スコープ

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

OT RLOC トポロジ

各子機のルーター ID は、親機(メッシュ エクステンダ)に対応しています。メッシュ エクステンダは子ではないため、メッシュ エクステンダの子 ID は常に 0 です。これらの値は、Thread ネットワーク内の各デバイスで一意であり、RLOC の最後の 16 ビットを表す RLOC16 の作成に使用されます。

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

OT 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 は次のようになります。

OT RLOC

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

OT トポロジ(アドレス付き)

ただし、RLOC はトポロジ内のノードの場所に基づいているため、トポロジが変更されるとノードの RLOC も変更される可能性があります。

たとえば、ノード 0x400 が Thread ネットワークから削除されたとします。ノード 0x401 と 0x402 は、異なるメッシュ エクステンダへの新しいリンクを確立します。その結果、それぞれに新しい RLOC16 と RLOC が割り当てられます。

変更後の OT トポロジ

ユニキャスト アドレスの種類

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

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

単一の無線伝送で到達可能な Thread インターフェースを識別する EID。
例fe80::54db:881c:3845:57f4
IID802.15.4 拡張アドレスに基づく
スコープリンクローカル
詳細
  • ネイバーの検出、リンクの構成、ルーティング情報の交換に使用
  • ルーティング可能なアドレスではない
  • 常に fe80::/16 の接頭辞が付いています

Mesh-Local EID(ML-EID)

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

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

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

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

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

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

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

マルチキャスト

マルチキャストは、複数のデバイスに一度に情報を伝達するために使用されます。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 – 0xfc3f
0xfc4f – 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 をご覧ください。

理解度をチェックしましょう

Thread ネットワークでユニキャスト アドレス指定に使用される 3 つのスコープはどれですか?
非公開
不正解です。
Interface-Local
不正解です。
リンクローカル
正解です。
サイトローカル
不正解です。
Mesh-Local
正解です。
グローバル
正解です。
デバイスの Child ID が 0 の場合はどういう意味ですか?
デバイスは Child です。
不正解です。
デバイスが Extender-Capable Device である。
惜しいですが、不正解です。
デバイスがメッシュ エクステンダである。
正解です。メッシュ エクステンダの Child ID は常に 0 です。
Thread ネットワークのノードであるカメラは、新しい RLOC16 と RLOC を受け取ります。この問題の原因として考えられるのは、次のうちどれですか?
誰かがカメラから画像をリモートでダウンロードしました。
不正解です。このイベントは Thread ネットワークに影響しません。
メッシュ エクステンダがネットワークから切断された。
正解です。メッシュ エクステンダがネットワークから切断されると、ネットワーク トポロジが変更され、デバイスがメッシュ エクステンダに昇格して新しい RLOC を取得する可能性があります。
カメラがスリープモードに入り、ネットワーク トポロジが変更されました。
不正解です。スリープモードに切り替えても、必ずしもデバイスが新しいネットワーク アドレスを受信するとは限りません。
Thread ネットワーク上のデバイスは、ff03::2 マルチキャスト アドレスをサブスクライブします。このことから、デバイスについて何がわかりますか?
これは最小限のエンドデバイス(MED)です。
不正解です。
これは Full End Device(FED)です。
不正解です。(ヒント: FED の場合もあれば、そうでない場合もあります)。
これは最小限の Thread デバイス(MTD)です。
不正解です。
フル Thread デバイス(FTD)です。
正解です。ff03::2 マルチキャスト アドレスをサブスクライブするのは、Full Thread Device のみです。これは Mesh-Local スコープで行います。
Thread は、ノードのグループにデータを転送するために、どのようなアドレス指定とルーティングを使用しますか?
ユニキャスト
不正解です。
エニーキャスト
不正解です。
マルチキャスト
正解です。
ブロードキャスト
不正解です。
Thread デバイスは、宛先メッセージの RLOC が不明な場合、どのようなアドレス指定とルーティングを使用しますか?
ユニキャスト
不正解です。
エニーキャスト
正解です。エニーキャストでは、デバイスの ALOC を指定することで、RLOC が不明なノードにデバイスが到達できます。
マルチキャスト
不正解です。
ブロードキャスト
不正解です。