Поделиться через


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

Многие приложения, такие как Microsoft Internet Обозреватель и 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-адрес
  • IP-адрес 6to4
  • IPv4-адрес
  • Адрес Teredo

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

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

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