Перенос широковещательных приложений в IPv6
В этом разделе описаны рекомендации по переносу широковещательного приложения IPv6 в возможности многоадресной рассылки, доступные с сокетами Windows.
Сравнение IPv4 и IPv6
Наиболее примечательным моментом при подготовке к переносу широковещательного приложения IPv4 в IPv6 является следующее: В IPv6 отсутствует реализованная концепция широковещательного вещания. Вместо этого IPv6 использует многоадресную рассылку.
Многоадресная рассылка для IPv6 может эмулировать традиционные возможности широковещательного вещания, доступные в IPv4. Установка параметра IPV6_ADD_MEMBERSHIP сокета с IPv6-адресом, равным локальному область адреса всех узлов (FF02::1), эквивалентна трансляции по адресам широковещательной рассылки IPv4 с помощью параметра SO_BROADCAST сокета. Этот адрес иногда называется группой многоадресной рассылки для всех узлов. Для приложений, которым требуется эмуляция широковещательной рассылки для IPv6, этот подход является практически эквивалентным. Однако одним из заметных различий с IPv6 является то, что многоадресная рассылка по адресу группы многоадресной рассылки на всех узлах не получается по умолчанию (широковещательные рассылки IPv4 принимаются по умолчанию). Программисты приложений должны использовать параметр сокета IPV6_ADD_MEMBERSHIP, чтобы включить прием многоадресной рассылки из любого источника, включая адрес группы многоадресной рассылки на всех узлах.
Примечание
В IPv6 выбор интерфейса указывается в структуре аргумента, передаваемой параметру многоадресной рассылки или IOCTL.
Но для более богатых, более надежных, более выборочных и управляемых передач на несколько узлов разработчикам приложений следует рассмотреть возможность перехода на модель многоадресной рассылки.
Переход на многоадресную рассылку
Благодаря многоадресной рассылке программисты приложений могут выборочно выбирать определенную пару источника и группы, что позволяет использовать модель выборочного приема. Обнаружение многоадресного прослушивателя (MLD) в IPv6 и версия 3 протокола IGMPv3 в IPv4 поддерживают многоадресное программирование. Кроме того, многоадресная рассылка позволяет приложениям специально блокировать (или разблокировать) отправителей в группе, что еще больше защищает приложения от несанкционированных вещателей. Эта возможность доступна для IPv4 (требуется IGMPv3), а также IPv6 (требуется MLDv2).
Существует два основных сценария для программистов приложений, использующих многоадресную рассылку: перенос из широковещательных (или многоадресных) приложений IPv4 в IPv6 и создание новых многоадресных приложений IPv6.
Для переноса существующих приложений существует два варианта перехода на многоадресную рассылку IPv6: с помощью параметров сокета и ioCTL.
- Использование параметров сокета — это подход, основанный на изменениях, который позволяет разработчикам изменять свойства сокета по мере необходимости (например, блокировать или разблокировать отправителя, добавлять новый источник и т. д.). Это более интуитивно понятный и рекомендуемый подход. Дополнительные сведения о подходе к многоадресной рассылке на основе изменений см. в разделе MLD и IGMP с использованием сокетов Windows.
- Использование ioCTL — это подход на основе окончательного состояния, так как он позволяет разработчикам предоставлять полностью настроенное состояние сокета, включая списки включения и исключения, с помощью одного вызова. Дополнительные сведения о подходе на основе конечного состояния см. в разделе Многоадресное программирование на основе конечного состояния.
Для тех, кто создает новые многоадресные приложения IPv6, рекомендуется использовать параметры сокета, а не ioCTL.
Существует еще один подход к созданию многоадресных приложений с IPv6, который предполагает использование функции WSAJoinLeaf . Хотя использование функции WSAJoinLeaf не рекомендуется, существуют ситуации, которые могут диктовать ее использование. Например, одним из недостатков использования параметров сокета в Windows Server 2003 и более ранних версиях является то, что они зависят от ВЕРСИИ IP. В этих более старых версиях Windows для IPv6 и IPv4 должны быть разные параметры сокетов. В Windows Vista и более поздних версиях поддерживаются новые параметры сокета, которые можно использовать как с IPv4, так и с IPv6. Функция WSAJoinLeaf , напротив, не зависит от ip-версии и протокола, поэтому она может быть полезным подходом для создания приложения, которое должно работать с несколькими ВЕРСИЯми IP в Windows Server 2003 и более ранних версиях. Использование функции WSAJoinLeaf может быть более подходящим в некоторых ситуациях, когда требуется не зависящая от протокола и IP-версии.