ブロードキャスト アプリケーションを IPv6 に移植する

このセクションでは、Windows ソケットで使用できるマルチキャスト機能に IPv6 ブロードキャスト アプリケーションを移植するためのベスト プラクティスについて説明します。

IPv4 と IPv6 の比較

IPv4 ブロードキャスト アプリケーションを IPv6 に移植する準備をする際の最も重要な考慮事項は、IPv6 にブロードキャストの概念が実装されていないことです。 代わりに、IPv6 はマルチキャストを使用します。

IPv6 用マルチキャストでは、IPv4 で見つかった従来のブロードキャスト機能をエミュレートできます。 IPv6 アドレスをリンク ローカル スコープのすべてのノード アドレス (FF02::1) に設定して IPV6_ADD_MEMBERSHIP ソケット オプションを設定することは、SO_BROADCAST ソケット オプションを使用した IPv4 ブロードキャスト アドレスでのブロードキャスト同じです。 このアドレスは、 すべてのノード マルチキャスト グループと呼ばれることもあります。 単に IPv6 のブロードキャスト エミュレーションが必要なアプリケーションの場合、そのアプローチは運用上同等です。 ただし、IPv6 との顕著な違いの 1 つは、すべてのノードのマルチキャスト グループ アドレス上のマルチキャストが既定で受信されないことです (IPv4 ブロードキャストは既定で受信されます)。 アプリケーション プログラマは、IPV6_ADD_MEMBERSHIP ソケット オプションを使用して、すべてのノードのマルチキャスト グループ アドレスを含む任意のソースからのマルチキャスト受信を有効にする必要があります。

注意

IPv6 では、マルチキャスト ソケット オプションまたは IOCTL に渡される引数構造体でインターフェイスの選択が指定されます。

 

ただし、より豊富で堅牢で、より選択的で管理しやすい複数のホストへの転送の場合、アプリケーション開発者はマルチキャスト モデルへの移行を検討する必要があります。

マルチキャストへの移行

マルチキャストを使用すると、アプリケーション プログラマは特定のソースとグループのペアを選択して、選択的受信モデルを有効にすることができます。 IPv6 上のマルチキャスト リスナー検出 (MLD) と IPv4 上のインターネット グループ管理プロトコル (IGMPv3) のバージョン 3 では、マルチキャスト プログラミングがサポートされています。 さらに、マルチキャストを使用すると、アプリケーションはグループ内の送信者を明示的にブロック (またはブロック解除) でき、不正なブロードキャストからアプリケーションをさらに保護できます。 この機能は、IPv4 (IGMPv3 が必要) と IPv6 (MLDv2 が必要) で使用できます。

マルチキャストを使用するアプリケーション プログラマには、IPv4 ブロードキャスト (またはマルチキャスト) アプリケーションから IPv6 への移植と、新しい IPv6 マルチキャスト アプリケーションの作成の 2 つの主なシナリオがあります。

既存のアプリケーションを移植する場合、IPv6 マルチキャストに移行するには、ソケット オプションの使用と IOCTL の使用の 2 つのオプションがあります。

  • ソケット オプションの使用は変更ベースのアプローチであり、開発者は必要に応じてソケット プロパティを変更できます (送信者のブロックやブロック解除、新しいソースの追加など)。 このアプローチは、より直感的で推奨されるアプローチです。 マルチキャスト プログラミングに対する変更ベースのアプローチの詳細については、「 WINDOWS ソケットを使用した MLD と IGMP」を参照してください。
  • IOCTL の使用は最終状態ベースのアプローチです。開発者は、包含リストや除外リストを含む完全に構成されたソケット状態を 1 回の呼び出しで提供できるためです。 最終状態ベースのアプローチの詳細については、「 最終状態ベースのマルチキャスト プログラミング」を参照してください。

新しい IPv6 マルチキャスト アプリケーションを作成する場合は、IOCTL を使用するのではなく、ソケット オプションを使用することをお勧めします。

IPv6 を使用してマルチキャスト アプリケーションを作成するもう 1 つの方法があり、 これには WSAJoinLeaf 関数の使用が必要です。 WSAJoinLeaf 関数を使用することは推奨されませんが、その使用を指示する場合があります。 たとえば、Windows Server 2003 以前でソケット オプションを使用する場合の欠点の 1 つは、IP バージョン固有であるということです。 これらの古いバージョンの Windows では、IPv6 と IPv4 用に異なるソケット オプションが必要です。 Windows Vista 以降では、IPv4 と IPv6 の両方で使用できる新しいソケット オプションがサポートされています。 これに対し、 WSAJoinLeaf 関数は IP バージョンとプロトコルに依存しないため、Windows Server 2003 以前の複数の IP バージョンで動作する必要があるアプリケーションを構築する場合に便利な方法です。 プロトコルと IP バージョンに依存しない特定の状況では、 WSAJoinLeaf 関数を使用する方が適切な場合があります。