インターネット プロトコル バージョン 6 (IPv6) の概要

インターネット プロトコル バージョン 6 (IPv6) は、インターネットのネットワーク層の標準プロトコルのスイートです。 IPv6 は、アドレスの不足、セキュリティ、自動構成、拡張性などに関して、インターネット プロトコル スイートの現在のバージョン (IPv4) が抱える多くの問題を解決するために設計されています。 IPv6 は、インターネットの機能を拡張して、ピア ツー ピア アプリケーションやモバイル アプリケーションなどの新しい種類のアプリケーションを有効にします。 現在の IPv4 プロトコルの主な問題を次に示します。

  • アドレス空間の急減。

    これが、複数のプライベート アドレスを 1 つのパブリック IP アドレスにマップするネットワーク アドレス変換器 (NAT) の使用につながってきました。 このメカニズムによって生じた主な問題は、処理オーバーヘッドとエンド ツー エンドの接続の欠如です。

  • 階層サポートの不足。

    IPv4 固有の定義済みクラス組織により、IPv4 には真の階層サポートが不足しています。 真にネットワーク トポロジをマップする方法で IP アドレスを構成することはできません。 この重大な設計上の欠陥により、IPv4 パケットをインターネット上の任意の場所に配信するために大規模なルーティング テーブルが必要となっています。

  • 複雑なネットワーク構成。

    IPv4 では、アドレスを静的に、または DHCP などの構成プロトコルを使用して割り当てる必要があります。 理想的な状況では、ホストは DHCP インフラストラクチャの管理に依存する必要はありません。 代わりに、ホストが配置されているネットワーク セグメントに基づいてホスト自身で構成できます。

  • 組み込み認証と機密性の不足。

    IPv4 では、交換されるデータの認証または暗号化を提供するメカニズムのサポートは必要ありません。 IPv6 ではこれが変わります。 インターネット プロトコル セキュリティ (IPSec) は、IPv6 のサポート要件です。

新しいプロトコル スイートは、次の基本的な要件を満たす必要があります。

  • 大規模なルーティングと低いオーバーヘッドでのアドレス指定。
  • さまざまな接続状況の自動構成。
  • 組み込み認証と機密性。

IPv6 のアドレス指定

IPv6 では、アドレスの長さは 128 ビットです。 このような大きいアドレス空間の 1 つの理由は、インターネットのトポロジを反映したルーティング ドメインの階層構造に利用可能なアドレスを細分化するためです。 別の理由は、ネットワークにデバイスを接続するネットワーク アダプター (インターフェイス) のアドレスをマップするためです。 IPv6 は、ネットワーク インターフェイス レベルである最下位レベルでアドレスを解決する固有の機能、および自動構成機能を備えています。

テキスト表現

IPv6 アドレスをテキスト文字列として表すために使用する 3 つの従来型形式を次に示します。

  • コロン 16 進数形式:

    これは、n:n:n:n:n:n:n:n という推奨される形式です。 各 n は、アドレスに含まれる 8 つの 16 ビット要素のうちの 1 つの 16 進数値を表します。 (例: 3FFE:FFFF:7654:FEDA:1245:BA98:3210:4562)。

  • 圧縮形式:

    アドレスの長さのために、アドレスが 0 の長い文字列を含むのが一般的です。 これらのアドレスの記述を簡略化するために、0 ブロックの 1 つの連続するシーケンスがダブル コロン記号 (::) で表される圧縮形式を使用します。 この記号は、アドレスで 1 回だけ使用できます。 たとえば、マルチキャスト アドレス FFED:0:0:0:0:BA98:3210:4562 の圧縮形式は FFED::BA98:3210:4562 です。 ユニキャスト アドレス 3FFE:FFFF:0:0:8:800:20C4:0 の圧縮形式は 3FFE:FFFF::8:800:20C4:0 です。 ループバック アドレス 0:0:0:0:0:0:0:1 の圧縮形式は ::1 です。 未指定アドレス 0:0:0:0:0:0:0:0 の圧縮形式は :: です。

  • 混在形式:

    この形式は、IPv4 アドレスと IPv6 アドレスを結合します。 この場合、アドレス形式は n:n:n:n:n:n:d.d.d.d です。ここで、各 n は 6 つの IPv6 上位 16 ビットのアドレス要素の 16 進数値を表し、各 d は、IPv4 アドレスの 10 進数値を表します。

アドレスの種類

アドレスの先頭のビットは、特定の IPv6 アドレスの種類を定義します。 これらの先頭のビットを含む可変長のフィールドは、フォーマット プレフィックス (FP) と呼ばれます。

IPv6 ユニキャスト アドレスは、2 つの部分に分かれています。 最初の部分には、アドレス プレフィックスが含まれており、2 番目の部分にはインターフェイス識別子が含まれています。 IPv6 アドレス/プレフィックスの組み合わせを表現するための簡潔な方法は、ipv6 アドレス/プレフィックス長です。

64 ビットのプレフィックスを使用するアドレスの例を次に示します。

3FFE:FFFF:0:CD30:0:0:0:0/64

この例のプレフィックスは 3FFE:FFFF:0:CD30 です。 アドレスは、3FFE:FFFF:0:CD30::/64 のように圧縮形式で書き込むこともできます。

IPv6 では、次のアドレスの種類を定義します。

  • ユニキャスト アドレス:

    1 つのインターフェイスの識別子。 このアドレスに送信されるパケットは、識別されたインターフェイスに配信されます。 ユニキャスト アドレスは、上位のオクテットによってマルチキャスト アドレスと区別されます。 マルチキャスト アドレスの上位のオクテットには、FF の 16 進数値があります。 このオクテットの他のすべての値は、ユニキャスト アドレスであることを示します。 ユニキャスト アドレスの種類を次に示します。

    • リンクローカル アドレス:

      これらのアドレスは 1 つのリンクで使用され、形式は FE80::*InterfaceID* です。 リンク ローカル アドレスは、自動アドレス構成、近隣探索、またはルーターが存在しない場合に、リンク上のノード間で使用されます。 リンク ローカル アドレスは、主に起動時に、システムが大きい範囲のアドレスをまだ取得していないときに使用されます。

    • サイトローカル アドレス:

    これらのアドレスは、1 つのサイトで使用され、形式は FEC0::*SubnetID*:*InterfaceID* です。 サイト ローカル アドレスは、グローバル プレフィックスが必要ないサイト内でのアドレス指定に使用されます。

    • グローバル IPv6 ユニキャスト アドレス:

    これらのアドレスは、インターネット経由で使用可能であり、形式は *GlobalRoutingPrefix*::*SubnetID*:*InterfaceID* です。

  • マルチキャスト アドレス:

    (通常は別々のノードに属する) インターフェイスのセットの識別子。 このアドレスに送信されるパケットは、アドレスで識別されたすべてのインターフェイスに配信されます。 マルチキャスト アドレスの種類は、IPv4 ブロードキャスト アドレスよりも優先されます。

  • エニーキャスト アドレス:

    (通常は別々のノードに属する) インターフェイスのセットの識別子。 このアドレスに送信されるパケットは、アドレスで識別された 1 つのインターフェイスのみに配信されます。 これは、ルーティング メトリックで識別される最も近いインターフェイスです。 エニーキャスト アドレスは、ユニキャスト アドレス空間からが取得されるため、構文的に区別できません。 アドレス指定されたインターフェイスは、構成の機能として、ユニキャスト アドレスとエニーキャスト アドレスの区別を実行します。

一般に、ノードは常にリンク ローカル アドレスを持ちます。 サイト ローカル アドレスおよび 1 つまたは複数のグローバル アドレスを持つ場合があります。

IPv6 ルーティング

柔軟なルーティング メカニズムは、IPv6 の利点です。 過去と現在の IPv4 ネットワーク ID の割り当て方法のため、インターネット バックボーン上にあるルーターは、大きなルーティング テーブルを保持する必要があります。 これらのルーターは、インターネット上の任意のノードに送られる可能性のあるパケットを転送するために、すべてのルートを知っている必要があります。 アドレスを集計する機能により、IPv6 では、柔軟なアドレス指定が可能であり、ルーティング テーブルのサイズを大幅に縮小することができます。 この新しいアドレス指定アーキテクチャでは、中間のルーターは、ネットワークのローカル部分だけを追跡すれば、メッセージを適切に転送できます。

近隣探索

"近隣探索" によって次のような機能が提供されます。

  • ルーター検出: これにより、ホストはローカル ルーターを識別できます。
  • アドレス解決: これにより、ノードが対応する次ホップ アドレスのリンク層アドレス (アドレス解決プロトコル (ARP) の代替) を解決することができます。
  • アドレスの自動構成: これにより、ホストが、サイト ローカル アドレスおよびグローバル アドレスを自動的に構成することができます。

近隣探索では、次のものを含む IPv6 のインターネット制御メッセージ プロトコル (ICMPv6) メッセージを使用します。

  • ルーター アドバタイズ: 擬似定期的にまたはルーター要請に応じてルーターによって送信されます。 IPv6 ルーターは、ルーター アドバタイズを使用して、その可用性、アドレス プレフィックス、およびその他のパラメーターをアドバタイズします。
  • ルーター要請: ホストによって送信され、リンク上のルーターがルーター アドバタイズをすぐに送信することを要求します。
  • 近隣要請: アドレス解決、重複アドレスの検出、または近隣ノードが到達可能であることを確認するためにノードによって送信されます。
  • 近隣アドバタイズ: 近隣要請に応答するかまたはリンク層アドレスの変更を近隣ノードに通知するために、ノードによって送信されます。
  • リダイレクト: 送信元ノード向けに特定の宛先へのより良い次ホップ アドレスを示すために、ルーターによって送信されます。

IPv6 の自動構成

IPv6 用の 1 つの重要な目標は、ノードのプラグ アンド プレイをサポートすることです。 つまり、IPv6 ネットワークにノードを接続して、それを人間の操作なしに自動的に構成できる必要があります。

自動構成の種類

IPv6 は、次の種類の自動構成をサポートします。

  • ステートフルな自動構成:

    この種類の構成では、ノードのインストールと管理のために IPv6 用動的ホスト構成プロトコル (DHCPv6) サーバーが必要なので、特定のレベルの人間の操作が必要です。 DHCPv6 サーバーは、構成情報を提供するノードのリストを保持します。 また、状態情報も保持するのでサーバーは、各アドレスがどのくらいの時間使用されているか、および再割り当てできるようになるタイミングを知ることができます。

  • ステートレスな自動構成:

    この種類の構成は、小規模な組織や個人に適しています。 この場合、各ホストは、受信したルーター アドバタイズの内容からそのアドレスを決定します。 IEEE EUI-64 標準を使用して、アドレスのネットワーク ID 部分を定義しますが、リンク上のホストアドレスの一意性を前提とすることは合理的です。

アドレスの決定方法に関係なく、ノードは、潜在的なアドレスがローカル リンクに対して一意であることを確認する必要があります。 これは、潜在的なアドレスに近隣要請を送信することによって行われます。 ノードが応答を受信する場合は、アドレスが既に使用されていて別のアドレスを決定する必要があることがわかります。

IPv6 のモビリティ

モバイル デバイスの普及により、新しい要件が導入されています。デバイスが IPv6 インターネット上の場所を任意に変更しても既存の接続を維持できるようにする必要があります。 この機能を提供するために、モバイル ノードに常に到達できるホーム アドレスが割り当てられます。 モバイル ノードが自宅にあるときは、ホーム リンクに接続し、ホーム アドレスを使用します。 モバイル ノードが自宅から離れた場所にあるときは、ホーム エージェント (通常はルーター) が、モバイル ノードと通信相手のノードの間でメッセージを中継します。

IPv6 を無効または有効にする

IPv6 プロトコルを使用するには、IPv6 をサポートしているオペレーティング システムのバージョンを実行していることを確認し、オペレーティング システムとネットワーク クラスが正しく構成されていることを確認してください。

構成手順

次の表に、さまざまな構成を示します。

OS で IPv6 は有効か? コードで IPv6 は有効か? 説明
❌ いいえ ❌ いいえ IPv6 アドレスを解析できます。
❌ いいえ ✔️ はい IPv6 アドレスを解析できます。
✔️ はい ❌ いいえ IPv6 アドレスを解析し、旧式マークが付けられていない名前解決のメソッドを使用して、IPv6 アドレスを解決できます。
✔️ はい ✔️ はい IPv6 アドレスを解析し、旧式マークが付けられているものも含め、すべてのメソッドを使用して IPv6 アドレスを解決できます。

IPv6 は既定で有効になります。 環境変数でこのスイッチを構成するには、DOTNET_SYSTEM_NET_DISABLEIPV6 環境変数を使います。 詳しくは、.NET の環境変数 DOTNET_SYSTEM_NET_DISABLEIPV6 に関する記事をご覧ください。

関連項目