Получение запрошенного трафика через Teredo

Многие приложения, такие как Microsoft Internet Explorer и Microsoft Outlook, инициируют только подключения к Интернету. Для этих приложений Teredo может обеспечить простое подключение по протоколу IPv6 в отсутствие других интерфейсов IPv6. Кроме того, запрашиваемый трафик можно получить через интерфейс Teredo на более ранних платформах Microsoft Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003.

В следующей документации объясняется, как эти приложения обеспечивают подключение и при каких обстоятельствах используется Teredo.

Получение адреса назначения

Приложение пытается получить целевой адрес с помощью различных методов, таких как система доменных имен (DNS) или протокол разрешения одноранговых имен (PNRP). Приложение может получить несколько IP-адресов IPv4 и IPv6 с помощью этих методов. Типичные API, используемые для получения IP-адресов, включают API Windows XP GetHostByName и новый API Windows Vista GetAddrInfo. Например, использование API GetAddrInfo с параметром ai_family, заданным для AF_INET6 в качестве подсказки addrinfo/protocol, позволяет пользователю запрашивать DNS-серверы для IPv6-адресов в частности. API DnsQuery с типом DNS_TYPE_AAAA также можно использовать для запроса DNS-серверов для записей AAAA.

Установка подключения

Соединение, установленное с Teredo, описывается как "простое", так как оно обрабатывается как любое другое подключение IPv6. Программирование приложения не требует особого внимания для использования интерфейса Teredo. Если соединение устанавливается между интерфейсами Teredo, ретранслятор, типичный для таких интерфейсов, как 6to4 и другие нативные интерфейсы, не требуется. Тем не менее, Teredo разработан как технология перехода последнего средства для подключения IPv6.

Заметка

Teredo не используется, если указанное имя узла разрешается только для IPv4-адресов.

 

Когда приложение пытается подключиться к месту назначения с помощью IPv6-адресов, произойдет следующее:

  • Приложение получает список адресов IPv6 путем вызова API GetAdaptersAddresses. Стек Windows Vista возвращает список всех интерфейсов на основе порядка сортировки, указанного в RFC 3484. В результате интерфейсы IPv6 и 6to4 IPv6 будут перечислены в списке перед интерфейсом Teredo. Однако при недоступности родного подключения IPv6 или 6to4 Teredo будет единственным интерфейсом с поддержкой IPv6, который будет перечислен.

    Важно помнить, что приложение может использовать любой интерфейс, предоставляемый стеком Windows Vista, однако порядок возвращаемого списка интерфейсов чаще всего приводит к тому, что Teredo пытается использоваться в последнюю очередь.

  • Прежде чем Windows Vista попытается подключиться через интерфейс Teredo, операционная система гарантирует, что IPv6-адрес стабилизировался. Это выполняется автоматически для исходящих подключений и не является важным фактором для приложения. В случае, если приложение требуется для обеспечения стабильности адресов, можно вызвать API NotifyStableUnicastIpAddressTable, чтобы убедиться, что адрес Teredo стабильный.

  • Интерфейс Teredo попытается подключиться к другому интерфейсу Teredo в месте назначения. Если интерфейс Teredo отсутствует, подключение устанавливается через ретранслятор к нативному или 6to4-адресу, специфичному для узла.

Кроме того, приложения, инициирующие подключения к Интернету, также могут получать незапрошенный трафик. Дополнительные сведения см. в разделе Получение неопрошенного трафика через Teredo.

Использование API WSAConnectByName

Вызывая API WSAConnectByName, приложение может подключаться к имени назначения вместо указания точного IP-адреса. Стек Windows Vista предпочитает IPv6 вместо IPv4, и поэтому любые попытки подключения будут сначала выполняться по адресам IPv6.

Вызов API WSAConnectByName будет сортировать все конечные IP-адреса, полученные в следующем порядке:

  • Собственный IPv6-адрес
  • 6to4 IP-адрес
  • IPv4-адрес
  • Адрес Teredo

После того как адреса назначения отсортированы внутри системы, подключение к назначению выполняется на основе оптимального маршрута, доступного на локальном узле для целевого адреса. Как показано в порядке сортировки адресов, если имя назначения разрешается в адреса IPv4 и Teredo, адрес IPv4 будет использоваться для установления соединения.

API WSAConnectByName работает внутри системы, чтобы найти лучшее соответствие между адресами. Эта попытка основана на маршрутах, доступных на локальном узле и адресах назначения.

Из-за отсутствия ретрансляторов Teredo в Интернете подключения к собственным IPv6-адресам вряд ли удастся выполнить через интерфейс Teredo. Если вызывается WSAConnectByName, Windows Vista не выдает запросы AAAA, когда Teredo является единственным доступным интерфейсом IPv6. Это обеспечивает, что нативные IPv6-адреса не используются в качестве адресов назначения, и что подключения выполняются по протоколу IPv4, что обеспечивает наибольшую вероятность успеха. Чтобы получить IPv6-адреса, когда Teredo является единственным интерфейсом с поддержкой IPv6, приложение должно явно использовать API DnsQuery для записей AAAA.