多播编程

多播编程是通过 Windows 套接字启用的。 Windows 套接字支持多播侦听器发现 (MLD) 版本 1 (MLDv1) 和 2 (MLDv2) IPv6 和 Internet 组管理协议版本 2 (IGMPv2) 和 3 (IGMPv3) 通过使用套接字选项或 IOCTL。 本部分介绍 Windows 实现,说明如何使用 Windows 套接字启用多播编程,并提供编程示例来说明其用法。

IGMP 的第二个版本(以下称为 IGMPv2)使主机能够加入和离开在特定网络接口上由 IPv4 多播地址标识的多播组。 Windows 套接字使应用程序能够加入和保留特定套接字上的此类组。 但是,IGMPv2 的一个缺点是,加入 IGMPv2 组的任何 IPv4 源地址都可以传输到所有成员,这可能会淹没该组,使其无法用于需要主要源的传输,例如 Internet 无线电台。 IGMPv2 的问题在于,它无法有选择地选择单个 IPv4 源地址 (甚至) 几个源,并且无法阻止发送方 (,如流氓广播公司或拒绝服务肇事者) 给定多播组。 IGMPv3 解决了这些缺点。

使用 Windows 套接字和 IGMPv3,应用程序可以选择特定的多播 IPv4 源地址和多播组对。 此外,Windows 套接字使开发人员能够有选择地允许给定源/组对中的其他广播者,或使应用程序能够阻止特定的广播者。 Windows Vista 及更高版本支持 IGMPv3。

IPv6 上的 MLD 的第一个版本(称为 MLDv1)与 IGMPv2 非常相似,并且存在相同的限制。 MLDv1 使主机能够加入并保留特定网络接口上的 IPv6 多播地址标识的多播组。 Windows 套接字使应用程序能够加入和保留特定套接字上的此类组。 但是,加入 MLDv1 组的任何 IPv6 源地址都可以传输到所有成员,这可能会淹没该组,使其无法用于需要主源的传输。 MLDv1 的问题在于,它无法选择性地选择单个 IPv6 源地址 (甚至) 几个源,并且无法阻止发送方 (,例如流氓广播公司或给定多播组) 拒绝服务肇事者。 MLDv2 解决了这些缺点。

使用 Windows 套接字和 MLDv2,应用程序可以选择特定的多播 IPv6 源地址和多播组对。 此外,Windows 套接字使开发人员能够有选择地允许给定源/组对中的其他广播者,或使应用程序能够阻止特定的广播者。 WINDOWS Vista 及更高版本支持 MLDv2。

在 Windows 中开发多播应用程序时,应用程序程序员可以采用两种方法。 第一种方法是基于变化的:即使在传输过程中,也根据需要使用套接字选项添加或删除多播源。 第二种方法是基于最终状态:使用 IOCTL 指定源地址和任何包含/排除的地址。 每种方法都是有效的多播做法,但开发人员可能会发现使用套接字选项和基于更改的方法更直观、更灵活。

本部分包含以下页面:

页面标题 说明
使用 Windows 套接字的 MLD 和 IGMP 使用基于更改的编程方法枚举可用于 Windows 套接字编程的多播套接字选项。 定义两个多播应用程序类别。
多播套接字选项行为 提供了一个广泛的表,用于解释按特定顺序调用多播套接字选项的含义和要求。
多播编程示例 演示如何使用套接字选项在 Windows 中启用多播应用程序的编程代码片段。
基于最终状态的多播编程 介绍最终状态方法,以及如何通过 Windows 套接字使用 IOCTL 进行多播编程。
将广播应用程序移植到 IPv6 提供将 IPv4 广播应用程序移植到 IPv6 多播的指南。