使用 Windows 套接字的 MLD 和 IGMP

Windows 套接字通过使用套接字选项和 IOCTL,在 IPv6 上启用多播侦听器发现 (MLD) 和 IPv4 上的 Internet 组管理协议 (IGMP) 。 本页介绍启用多播编程的套接字选项,并说明如何使用它们。 有关每个套接字选项的定义,请参阅 套接字选项 页。

有关使用 IOCTL 进行多播编程的信息,请参阅本节后面的 基于最终状态的多播编程

在 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 的版本。 Windows Vista 及更高版本支持 MLDv2。 Windows 套接字使用以下套接字选项:

套接字选项 参数类型
IPV6_ADD_MEMBERSHIP ipv6_mreq 结构
IPV6_DROP_MEMBERSHIP ipv6_mreq 结构

 

一组套接字选项可用于仅支持 IPv4 地址的多播编程。 这些套接字选项使用 IGMPv3 或 IGMPv2。 使用的 IGMP 版本取决于 Windows 的版本。 Windows Vista 及更高版本支持 IGMPv3。 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 可用,主机必须处理筛选。

大多数应用程序可能分为两个类别:任意源和控制源。

  • 默认情况下,任意源 应用程序接受所有源,允许根据需要关闭单个源。 任何源应用程序的一个示例是允许所有收件人参与的视频电话会议。
  • 受控源 应用程序将源限制为给定列表,例如 Internet 广播电台或重要事件的广播。 每个套接字选项使用过程略有不同。

在 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 离开所有源(如果所有源都使用相同的组地址)。

这些套接字选项的设置顺序具有关联的规则。 有关多播套接字选项的信息和故障排除信息,请参阅 多播套接字选项行为