Porting Broadcast Applications to IPv6

  • 05/31/2018
  • 2 minutes to read
    • s
    • v
    • m
  • このセクションでは、Windows Socket で利用可能なマルチキャスト機能に IPv6 ブロードキャスト アプリケーションを移植するためのベスト プラクティスについて説明します。

    Comparing IPv4 to IPv6

    IPv4 ブロードキャスト アプリケーションを IPv6 に移植する準備をする際に最も注目すべき点は、次の点です。 IPv6 にはブロードキャストの概念が実装されていません。 その代わりに、IPv6 はマルチキャストを使用します。

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

    注意

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

    しかし、複数のホストへのリッチで堅牢、より選択的で管理しやすい送信のために、アプリケーション開発者はマルチキャストモデルへの移行を検討すべきです。

    Moving to Multicast

    マルチキャストでは、アプリケーション プログラマは特定のソース/グループのペアを選択的に選択でき、選択的受信モデルを有効にすることができます。 IPv6 の MLD (Multicast Listener Discovery) および IPv4 の IGMPv3 (Internet Group Management Protocol) バージョン 3 は、マルチキャスト・プログラミングをサポートしています。 さらに、マルチキャストでは、アプリケーションがグループ内の送信者を個別にブロック(またはブロック解除)できるため、不正なブロードキャスティングからアプリケーションをさらに保護することができます。 この機能は、IPv4 (IGMPv3 が必要) および IPv6 (MLDv2 が必要) で利用できます。

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

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

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

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

コメントを残す

メールアドレスが公開されることはありません。