Windows ソケットを使用した MLD と IGMP
Windows ソケットを使用すると、ソケット オプションと IOCTL を使用して、IPv6 上のマルチキャスト リスナー検出 (MLD) と IPv4 上のインターネット グループ管理プロトコル (IGMP) をマルチキャスト アプリケーションに対して有効にします。 このページでは、マルチキャスト プログラミングを有効にするソケット オプションと、その使用方法について説明します。 各ソケット オプションの定義については、「 ソケット オプション」 ページを参照してください。
マルチキャスト プログラミングに IOCTL を使用する方法については、このセクションで後述する 「Final-State-Based Multicast Programming 」を参照してください。
Windows Vista 以降では、IPv6 アドレスと IPv4 アドレスをサポートするマルチキャスト プログラミングに一連のソケット オプションを使用できます。 これらのソケット オプションは IP に依存せず、IPv6 と IPv4 の両方で使用できます。 IPv6 では、これらのソケット オプションでは MLDv2 が使用されます。 IPv4 では、これらのソケット オプションで IGMPv3 が使用されます。 これらの IP に依存しないオプションは、Windows Vista 以降でのマルチキャスト プログラミングに推奨されるソケット オプションです。 Windows ソケットでは、次のソケット オプションが使用されます。
ソケット オプション | 引数の型 |
---|---|
MCAST_BLOCK_SOURCE | GROUP_SOURCE_REQ 構造体 |
MCAST_JOIN_GROUP | GROUP_REQ 構造体 |
MCAST_JOIN_SOURCE_GROUP | GROUP_SOURCE_REQ 構造体 |
MCAST_LEAVE_GROUP | GROUP_REQ 構造体 |
MCAST_LEAVE_SOURCE_GROUP | GROUP_SOURCE_REQ 構造体 |
MCAST_UNBLOCK_SOURCE | GROUP_SOURCE_REQ 構造体 |
IPv6 のみのアドレスをサポートするマルチキャスト プログラミングでは、一連のソケット オプションを使用できます。 これらのソケット オプションでは、MLDv1 または MLDv2 が使用されます。 使用される MLD のバージョンは、Windows のバージョンによって異なります。 MLDv2 は、Windows Vista 以降でサポートされています。 Windows ソケットでは、次のソケット オプションが使用されます。
ソケット オプション | 引数の型 |
---|---|
IPV6_ADD_MEMBERSHIP | ipv6_mreq 構造体 |
IPV6_DROP_MEMBERSHIP | ipv6_mreq 構造体 |
IPv4 のみのアドレスをサポートするマルチキャスト プログラミングでは、一連のソケット オプションを使用できます。 これらのソケット オプションでは、IGMPv3 または IGMPv2 が使用されます。 使用される IGMP のバージョンは、Windows のバージョンによって異なります。 IGMPv3 は、Windows Vista 以降でサポートされています。 Windows ソケットでは、次のソケット オプションが使用されます。
ソケット オプション | 引数の型 |
---|---|
IP_ADD_MEMBERSHIP | ip_mreq 構造体 |
IP_ADD_SOURCE_MEMBERSHIP | ip_mreq_source 構造体 |
IP_BLOCK_SOURCE | ip_mreq_source 構造体 |
IP_DROP_MEMBERSHIP | ip_mreq 構造体 |
IP_DROP_SOURCE_MEMBERSHIP | ip_mreq_source 構造体 |
IP_UNBLOCK_SOURCE | ip_mreq_source 構造体 |
IGMPv3 が使用可能な場合、ルータはフィルタリングを処理できるため、IP_ADD_SOURCE_MEMBERSHIP、IP_BLOCK_SOURCE、IP_DROP_SOURCE_MEMBERSHIP、およびIP_UNBLOCK_SOURCEオプションがより効率的に処理されます。 IGMPv2 のみが使用可能な場合、ホストはフィルター処理を処理する必要があります。
ほとんどのアプリケーションが該当する可能性が高いカテゴリは、any-source と controlled-source の 2 つのカテゴリがあります。
- すべてのソース アプリケーションは既定ですべてのソースを受け入れるため、必要に応じて個々のソースをオフにすることができます。 任意のソース アプリケーションの例として、すべての受信者が参加できるようにするビデオ電話会議があります。
- ソース制御 アプリケーションでは、インターネットラジオ局や注目すべきイベントのブロードキャストなど、特定のリストにソースを制限します。 ソケット オプションを使用するプロセスは、それぞれ若干異なります。
Windows Vista 以降では、任意のソース アプリケーションに次の手順が適用されます。
- グループに参加するには、MCAST_JOIN_GROUPを使用します。
- 必要に応じて、MCAST_BLOCK_SOURCEを使用して特定のソースをオフにします。
- 必要に応じて、MCAST_UNBLOCK_SOURCEを使用してブロックされたソースを再度許可します。
- グループを離れる には、MCAST_LEAVE_GROUP を使用します。
Windows Vista 以降では、次の手順がソース制御アプリケーションに適用されます。
- 各グループ/ソース ペアを結合するには、 MCAST_JOIN_SOURCE_GROUP を使用します。
- MCAST_LEAVE_SOURCE_GROUPを使用して各グループ/ソースから離れるか、同じグループ アドレスがすべてのソースで使用されている場合は、MCAST_LEAVE_GROUPを使用してすべてのソースを残します。
次の手順は、任意のソース アプリケーションに適用されます。
- IP_ADD_MEMBERSHIPを使用してグループに参加します (IPv6 のIPV6_ADD_MEMBERSHIP)。
- 必要に応じて、IP_BLOCK_SOURCEを使用して特定のソースをオフにします。
- 必要に応じて、IP_UNBLOCK_SOURCEを使用してブロックされたソースを再度許可します。
- IP_DROP_MEMBERSHIPを使用してグループを終了します (IPv6 の場合はIPV6_DROP_MEMBERSHIP)。
次の手順は、ソース制御アプリケーションに適用されます。
- 各グループ/ソース ペアを結合するには、 IP_ADD_SOURCE_MEMBERSHIP を使用します。
- すべてのソースで同じグループ アドレスが使用されている場合は、 IP_DROP_SOURCE_MEMBERSHIP を使用して各グループ/ソースを残すか、 IP_DROP_MEMBERSHIP を使用してすべてのソースを残します。
これらのソケット オプションを設定する順序には、規則が関連付けられています。 マルチキャスト ソケット オプションの詳細とトラブルシューティングについては、「 マルチキャスト ソケット オプションの動作」を参照してください。