- 05/31/2018
- 2 minutos para ler
- >
- s
- v
- m
Esta seção descreve as melhores práticas para a portabilidade de uma aplicação de transmissão IPv6 para as capacidades de multicast disponíveis com Windows Sockets.
Comparando IPv4 para IPv6
A consideração mais notável ao se preparar para portar uma aplicação de difusão IPv4 para IPv6 é esta: IPv6 não tem nenhum conceito implementado de broadcast. Ao invés disso, IPv6 usa multicast.
Multicast para IPv6 pode imitar as capacidades de transmissão tradicionais encontradas no IPv4. Definir a opção de socket IPV6_ADD_MEMBERSHIP com o endereço IPv6 definido para o escopo link-local todos os endereços de nós (FF02::1) é equivalente à transmissão em endereços de transmissão IPv4 usando a opção de socket SO_BROADCAST. Este endereço é às vezes chamado de grupo multicast de todos os nós. Para aplicações que simplesmente querem emulação de broadcast para IPv6, esse enfoque é operacionalmente equivalente. Uma diferença notável com IPv6, no entanto, é que os multicasts nos endereços de grupos 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 aplicações devem usar a opção de socket IPV6_ADD_MEMBERSHIP para permitir a recepção de multicast de qualquer fonte, incluindo o endereço do grupo de multicast de todos os nós.
Nota
Em IPv6, a seleção da interface é especificada na estrutura de argumentos passada para a opção de socket multicast ou IOCTL.
Mas para transmissões mais ricas, mais robustas, mais seletivas e mais gerenciáveis para múltiplos hosts, os desenvolvedores de aplicações devem considerar a mudança para um modelo multicast.
Movendo para Multicast
Com multicast, os programadores de aplicações podem escolher seletivamente um par fonte/grupo particular, possibilitando um modelo de recepção seletiva. O Multicast Listener Discovery (MLD) em IPv6 e a versão 3 do Internet Group Management Protocol (IGMPv3) em programação de multicast com suporte a IPv4. Além disso, o multicast permite que as aplicações bloqueiem (ou desbloqueiem) especificamente os emissores dentro de um grupo, protegendo ainda mais as aplicações de emissores desonestos. Esta capacidade está disponível para IPv4 (requer IGMPv3) assim como IPv6 (requer MLDv2).
Existem dois cenários principais para programadores de aplicações usando multicast: aqueles que portam de aplicações de transmissão IPv4 (ou multicast) para IPv6, e aqueles que criam novas aplicações IPv6 multicast.
Para a portabilidade de aplicações existentes, existem duas opções para mudar para multicast IPv6: as que utilizam opções de socket e as que utilizam IOCTLs.
- O uso de opções de socket é uma abordagem baseada em mudanças, que permite aos desenvolvedores mudar as propriedades do socket conforme necessário (como bloquear ou desbloquear um remetente, adicionar uma nova fonte, e assim por diante). Esta abordagem é mais intuitiva e a abordagem recomendada. Para mais informações sobre a abordagem baseada em mudanças na programação de multicast, veja MLD e IGMP Usando Windows Sockets.
- Usar IOCTLs é uma abordagem baseada no estado final, pois permite aos desenvolvedores fornecer um estado de socket totalmente configurado, incluindo listas de inclusão e exclusão, com uma chamada. Para mais informações sobre a abordagem baseada no estado final, veja Final-State-Based Multicast Programming.
Para aqueles que criam novas aplicações multicast IPv6, a prática recomendada é usar opções de socket, em vez de usar IOCTLs.
Existe uma outra abordagem para criar aplicações multicast com IPv6, e isso implica usar a função WSAJoinLeaf. Embora a utilização da função WSAJoinLeaf não seja a prática recomendada, existem situações que podem ditar a sua utilização. Por exemplo, uma desvantagem na utilização de opções de socket no Windows Server 2003 e anteriores é que são específicas para a versão IP. Nestas versões antigas do Windows, as diferentes opções de soquetes devem ser para IPv6 e IPv4. No Windows Vista e posteriores, são suportadas novas opções de soquetes que podem ser usadas tanto com IPv4 como com IPv6. A função WSAJoinLeaf, pelo contrário, é agnóstica da versão IP e do protocolo, pelo que pode ser uma abordagem útil para construir uma aplicação que deve funcionar com múltiplas versões IP no Windows Server 2003 e versões anteriores. A utilização da função WSAJoinLeaf pode ser mais adequada em determinadas situações em que o agnosticismo de protocolo e de versão IP é necessário.