Поделиться через


MLD и IGMP с использованием сокетов Windows

Сокеты Windows обеспечивают обнаружение многоадресного прослушивателя (MLD) на IPv6 и протокол управления группами интернета (IGMP) в IPv4 для многоадресных приложений с помощью параметров сокета и ioCTL. На этой странице описываются параметры сокетов, которые позволяют многоадресное программирование, и описывается, как они используются. Определения каждого параметра сокета см. на странице Параметры сокета .

Сведения об использовании 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. 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, узел должен обрабатывать фильтрацию.

Большинство приложений, скорее всего, попадают в две категории: любой источник и контролируемый источник.

  • Приложения с любым исходным кодом принимают все источники по умолчанию, позволяя отключить отдельные источники по мере необходимости. Примером любого исходного приложения является видеоконференция, в которую могут участвовать все получатели.
  • Приложения с управляемым источником ограничивают источники данным списком, например интернет-радиостанцией или трансляцией важных событий. Процесс использования параметров сокета для каждого из них немного отличается.

В 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_ADD_MEMBERSHIP для IPv6).
  • При необходимости используйте IP_BLOCK_SOURCE , чтобы отключить данный источник.
  • При необходимости используйте IP_UNBLOCK_SOURCE , чтобы повторно разрешить заблокированный источник.
  • Используйте IP_DROP_MEMBERSHIP , чтобы покинуть группу (IPV6_DROP_MEMBERSHIP для IPv6).

Следующие действия применяются к приложениям с управляемым исходным кодом.

  • Используйте IP_ADD_SOURCE_MEMBERSHIP для присоединения каждой пары групп и источников.
  • Используйте IP_DROP_SOURCE_MEMBERSHIP , чтобы покинуть каждую группу или источник, или используйте IP_DROP_MEMBERSHIP , чтобы оставить все источники, если один и тот же адрес группы используется всеми источниками.

Порядок, в котором задаются эти параметры сокета, имеет связанные правила. Сведения и сведения об устранении неполадок с параметрами сокета многоадресной рассылки см. в разделе Поведение параметра многоадресной рассылки.