Recebendo tráfego solicitado pelo Teredo
Muitos aplicativos como o Microsoft Internet Explorer e o Microsoft Outlook só iniciam conexões com a Internet. Para esses aplicativos, o Teredo pode fornecer conectividade perfeita por IPv6 na ausência de outras interfaces IPv6. Além disso, o tráfego solicitado pode ser recebido pela Interface teredo nas plataformas anteriores do Microsoft Windows XP com Service Pack 2 (SP2) e Windows Server 2003.
A documentação a seguir explica como esses aplicativos obtêm conectividade e as circunstâncias em que o Teredo é usado.
Obtendo um endereço de destino
Um aplicativo tenta obter o endereço de destino usando vários métodos, como DNS (Sistema de Nomes de Domínio) ou PNRP (Protocolo de Resolução de Nomes de Par). É possível que o aplicativo obtenha vários endereços IP IPv4 e IPv6 usando esses métodos. As APIs típicas usadas para obter endereços IP incluem a API GetHostByName do Windows XP e o novo GetAddrInfo da API do Windows Vista. Por exemplo, usar a API GetAddrInfo com o parâmetro ai_family definido como AF_INET6, pois a dica addrinfo/protocol permite que o usuário consulte servidores DNS para endereços IPv6 especificamente. A API DnsQuery com o tipo DNS_TYPE_AAAA também pode ser usada para consultar os servidores DNS para registros AAAA.
Estabelecer uma conexão
Uma conexão estabelecida com o Teredo é descrita como "perfeita" porque é tratada como qualquer outra conexão IPv6. A programação de um aplicativo não requer consideração especial para ser capaz de utilizar a interface Teredo. Quando uma conexão é estabelecida entre interfaces teredo, um roteador de retransmissão, típico de 6to4 e outras interfaces nativas, não é necessário. No entanto, o Teredo foi projetado como uma tecnologia de transição de último recurso para conectividade IPv6.
Observação
O Teredo não será utilizado se o nome do host fornecido for resolvido apenas para endereços IPv4.
Quando um aplicativo tenta se conectar a um destino usando endereços IPv6, o seguinte ocorrerá:
O aplicativo obtém uma lista de endereços IPv6 chamando a API GetAdaptersAddresses . A pilha do Windows Vista retorna uma lista de todas as interfaces com base na ordem de classificação especificada no RFC 3484. Como resultado, as interfaces IPv6 e 6to4 IPv6 serão listadas antes da interface do Teredo. No entanto, quando a conectividade IPv6 ou 6to4 nativa não estiver disponível, o Teredo será a única interface compatível com IPv6 listada.
É importante lembrar que um aplicativo pode usar qualquer interface fornecida pela pilha do Windows Vista, no entanto, a ordenação da lista de interfaces retornada geralmente resultará na tentativa de Teredo por último.
Antes de o Windows Vista tentar uma conexão pela interface do Teredo, o sistema operacional garante que o endereço IPv6 tenha se estabilizado. Isso é feito automaticamente para conexões de saída e não é uma consideração crucial para um aplicativo. Caso o aplicativo seja necessário para garantir a estabilidade do endereço, a API NotifyStableUnicastIpAddressTable poderá ser chamada para garantir que o endereço Teredo seja estável.
Uma interface teredo tentará se conectar a outra interface do Teredo no destino. Se uma interface Teredo não estiver presente, uma conexão será estabelecida com um endereço de destino nativo ou 6to4 por meio de uma retransmissão específica do host.
Também é possível que aplicativos que iniciam conexões com a Internet recebam tráfego não solicitado. Para obter mais detalhes, consulte Recebendo tráfego não solicitado sobre Teredo.
Usando a API WSAConnectByName
Ao chamar a API WSAConnectByName, é possível que um aplicativo se conecte a um nome de destino em vez de especificar o endereço IP exato. A pilha do Windows Vista prefere IPv6 em vez de IPv4 e, como resultado, todas as tentativas de conexão serão feitas em endereços IPv6 primeiro.
Chamar a API WSAConnectByName classificará todos os endereços IP de destino obtidos na seguinte ordem:
- Endereço IPv6 nativo
- endereço IP 6to4
- Endereço IPv4
- Endereço teredo
Depois que os endereços de destino são classificados internamente, uma conexão com o destino é tentada com base na melhor rota disponível no host local para o endereço de destino. Conforme indicado pela ordem dos endereços classificados, se o nome de destino for resolvido para um endereço IPv4 e Teredo, o endereço IPv4 será usado para estabelecer a conexão.
A API WSAConnectByName funciona internamente para encontrar a melhor correspondência entre endereços. Essa tentativa se baseia nas rotas disponíveis no host local e nos endereços de destino.
Devido à ausência atual de retransmissões teredo na Internet, é improvável que as conexões com endereços IPv6 nativos tenham êxito na interface do Teredo. Se WSAConnectByName for chamado, o Windows Vista não emitirá consultas AAAA quando Teredo for a única interface compatível com IPv6 disponível. Isso garante que os endereços IPv6 nativos não sejam obtidos como um destino e que as conexões sejam tentadas por IPv4, que tem a maior chance de sucesso. Para obter endereços IPv6 quando Teredo for a única interface compatível com IPv6, um aplicativo deve usar explicitamente a API DnsQuery para registros AAAA.