Share via


Portabilidade de aplicativos de difusão para IPv6

Esta seção descreve as práticas recomendadas para portar um aplicativo de difusão IPv6 para os recursos multicast disponíveis com o Windows Sockets.

Comparando IPv4 com IPv6

A consideração mais notável ao se preparar para portar um aplicativo de difusão IPv4 para IPv6 é a seguinte: O IPv6 não tem nenhum conceito implementado de difusão. Em vez disso, o IPv6 usa multicast.

Multicast para IPv6 pode emular recursos de difusão tradicionais encontrados no IPv4. Definir a opção de soquete IPV6_ADD_MEMBERSHIP com o endereço IPv6 definido como o endereço de todos os nós do escopo local do link (FF02::1) é equivalente à transmissão em endereços de transmissão IPv4 usando a opção de soquete SO_BROADCAST . Às vezes, esse endereço é chamado de grupo multicast de todos os nós. Para aplicativos que simplesmente desejam a emulação de difusão para IPv6, essa abordagem é operacionalmente equivalente. Uma diferença notável com IPv6, no entanto, é que os multicasts no endereço do grupo multicast de todos os nós não são recebidos por padrão (as transmissões IPv4 são recebidas por padrão). Os programadores de aplicativos devem usar a opção de soquete IPV6_ADD_MEMBERSHIP para habilitar a recepção multicast de qualquer fonte, incluindo o endereço do grupo multicast de todos os nós.

Observação

No IPv6, a seleção de interface é especificada na estrutura do argumento passada para a opção de soquete multicast ou IOCTL.

 

Mas para transmissões mais avançadas, mais robustas, mais seletivas e mais gerenciáveis para vários hosts, os desenvolvedores de aplicativos devem considerar a mudança para um modelo multicast.

Movendo para Multicast

Com o multicast, os programadores de aplicativos podem escolher seletivamente um par de origem/grupo específico, habilitando um modelo de recepção seletivo. O MLD (Multicast Listener Discovery) no IPv6 e a versão 3 do Protocolo de Gerenciamento de Grupo da Internet (IGMPv3) no IPv4 dão suporte à programação multicast. Além disso, o multicast permite que os aplicativos bloqueiem especificamente (ou desbloqueiem) remetentes dentro de um grupo, protegendo ainda mais os aplicativos de emissoras não autorizadas. Essa funcionalidade está disponível para IPv4 (requer IGMPv3), bem como IPv6 (requer MLDv2).

Há dois cenários principais para programadores de aplicativos que usam multicast: aqueles que fazem a portabilidade de aplicativos de difusão IPv4 (ou multicast) para IPv6 e aqueles que criam novos aplicativos multicast IPv6.

Para portar aplicativos existentes, há duas opções para migrar para multicast IPv6: usar opções de soquete e usar IOCTLs.

  • O uso de opções de soquete é uma abordagem baseada em alterações, que permite que os desenvolvedores alterem as propriedades do soquete conforme necessário (como bloquear ou desbloquear um remetente, adicionar uma nova fonte e assim por diante). Essa abordagem é mais intuitiva e recomendada. Para obter mais informações sobre a abordagem baseada em alterações para programação multicast, consulte MLD e IGMP Usando Windows Sockets.
  • O uso de IOCTLs é uma abordagem baseada em estado final, pois permite que os desenvolvedores forneçam um estado de soquete totalmente configurado, incluindo listas de inclusão e exclusão, com uma chamada. Para obter mais informações sobre a abordagem baseada em estado final, consulte Programação multicast baseada em estado final.

Para aqueles que criam aplicativos multicast IPv6, a prática recomendada é usar opções de soquete, em vez de usar IOCTLs.

Há uma outra abordagem para criar aplicativos multicast com IPv6 e isso envolve o uso da função WSAJoinLeaf . Embora o uso da função WSAJoinLeaf não seja a prática recomendada, há situações que podem ditar seu uso. Por exemplo, uma desvantagem de usar opções de soquete no Windows Server 2003 e anterior é que elas são específicas da versão ip. Nessas versões mais antigas do Windows, diferentes opções de soquetes devem ser para IPv6 e IPv4. No Windows Vista e posterior, há suporte para novas opções de soquete que podem ser usadas com IPv4 e IPv6. A função WSAJoinLeaf , por outro lado, é independente de versão de IP e protocolo e, portanto, pode ser uma abordagem útil para criar um aplicativo que deve funcionar com várias versões de IP no Windows Server 2003 e versões anteriores. O uso da função WSAJoinLeaf pode ser mais apropriado em determinadas situações em que o protocolo e o agnosticismo de versão ip são necessários.