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


Локальные IPv6-адреса канала и локальные адреса сети

Локальные адреса канала IPv6 и локальные адреса сайта называются адресами с заданной областью. API Сокетов Windows (Winsock) поддерживает элемент sin6_scope_id в структуре sockaddr_in6 для использования с адресами с заданной областью. Для локальных адресов канала IPv6 (префикс fe80::/10) элементом sin6_scope_id в структуре sockaddr_in6 является номер интерфейса. Для локальных адресов сайта IPv6 (префикс fec0::/10) элемент sin6_scope_id в структуре sockaddr_in6 является идентификатором сайта.

Ниже приведен пример локального IPv6-адреса канала в интерфейсе 5.

fe80::208:74ff:feda:625c%5

Следующая команда доступна в Windows XP с пакетом обновления 1 (SP1) и более поздних версий для запроса и настройки протокола IPv6 на локальном компьютере:

Изменения конфигурации, внесенные с помощью команд Netsh.exe, являются постоянными и не теряются при перезагрузке компьютера или протокола IPv6.

До Выпуска Windows XP с пакетом обновления 1 (SP1) конфигурация IPv6 и управление ими использовали несколько старых программ командной строки (Net.exe, Ipv6.exe и Ipsec6.exe) для настройки IPv6 и управления ими. При использовании этих старых средств изменения IPv6 не являются постоянными и теряются при перезагрузке компьютера или протокола IPv6. Эти старые программы командной строки поддерживаются только в Windows XP.

В Windows XP с пакетом обновления 1 (SP1) следующая команда отображает список интерфейсов IPv6 на локальном компьютере, включая индекс интерфейса, имя интерфейса и другие свойства интерфейса.

netsh interface ipv6 show interface

В Windows XP с пакетом обновления 1 (SP1) следующая команда изменит идентификатор сайта, связанный с индексом интерфейса.

netsh interface ipv6 set interface <InterfaceIndex or Name> siteid=value

В Windows XP следующая старая команда также изменяет идентификатор сайта, связанный с локальным адресом сайта, на 3.

ipv6 rtu fec0::/10 3

Если вы отправляете адрес с заданной областью или подключаетесь к нему, то элемент sin6_scope_id в структуре sockaddr_in6 можно оставить неуказанным (ноль), который представляет неоднозначный адрес с заданной областью. Например, следующий локальный адрес ссылки является неоднозначным:

fe80::10

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

Неоднозначные адреса с заданной областью

Если вы отправляете адрес или подключаетесь к адресу с заданной областью и не указали член sin6_scope_id в структуре sockaddr_in6 , адрес с заданной областью является неоднозначным. Чтобы устранить эту проблему, протокол IPv6 сначала определяет, привязан ли сокет к исходному адресу. Если это так, связанный исходный адрес устраняет неоднозначность, предоставляя номер интерфейса или идентификатор сайта.

Если вы отправляете адрес или подключаетесь к нему и не указали sin6_scope_id член или не привязали исходный адрес, то протокол IPv6 проверяет таблицу маршрутизации. Например, следующая команда отобразит таблицу маршрутизации IPv6 на локальном компьютере:

netsh interface ipv6 show route

No   Manual   256  fe80::/64      13  Local Area Connection
No   Manual   256  fe80::/64      14  Wireless Network Connection

Это означает, что локальные адреса ссылок по умолчанию обрабатываются как локальные ссылки на интерфейсы 13 и 14.

Неоднозначность возникает, когда на локальном компьютере есть несколько сетевых адаптеров. Например, приведенная выше команда netsh указывает на наличие двух сетевых интерфейсов (подключение по локальной сети и беспроводное сетевое подключение). Если приложение указывает локальный адрес целевой связи (например, fe80::10) без идентификатора область, неясно, какой адаптер следует использовать для отправки пакета. Не иметь идентификатор область при отправке пакета может только локальной одноадресной рассылки (fe80::/64) или многоадресной рассылки по область каналу (ff00::/8).

Обнаружение окружения

Если вы не указали элемент sin6_scope_id в структуре sockaddr_in6 , не привязали исходный адрес и не указали маршрут для локальных адресов ссылок, протокол IPv6 попытается выполнить обнаружение соседей, чтобы разрешить локальный адрес целевой связи. Для отправляемого пакета используется один интерфейс. Этот первый опробованный интерфейс считается наиболее предпочтительным. Если обнаружению соседей не удается разрешить локальный адрес ссылки в интерфейсе, отправляемый пакет удаляется, и система запоминает, что локальный адрес целевой связи недоступен через этот интерфейс. Для следующего пакета, который будет отправлен в одинаковых условиях, для обнаружения соседей используется другой интерфейс. Этот процесс продолжается через каждый из интерфейсов на локальном компьютере для каждого нового пакета, пока обнаружение соседей не ответит на локальный адрес целевой ссылки или все возможные интерфейсы не будут опробованы и не выполнены сбоем. Каждый раз, когда попытка разрешить соседа завершается сбоем, для этого соседа удаляется один интерфейс.

Если локальный адрес целевой связи разрешается, этот интерфейс используется для отправки текущего пакета. Этот интерфейс также используется для любых последующих пакетов с неоднозначной областью действия, которые отправляются на тот же локальный адрес назначения связи.

Если обнаружению соседей не удается разрешить локальный адрес целевой связи во всех интерфейсах, система пытается отправить пакет на наиболее предпочтительный интерфейс (первый попробованный интерфейс). Сетевой стек продолжает пытаться разрешить локальный адрес целевого канала в наиболее предпочтительном интерфейсе. Через некоторое время после сбоя обнаружения соседей на всех интерфейсах сетевой стек снова перезапустит процесс и попытается разрешить локальный адрес целевого канала на всех интерфейсах. В настоящее время этот интервал времени при повторной попытке обнаружения соседей на всех интерфейсах составляет 60 секунд. Однако этот интервал времени может измениться в версиях Windows и не должен приниматься приложением.

Примечание

Если приложение привязывает тот же локальный адрес ссылки к другому интерфейсу после того, как обнаружение соседей разрешило локальный адрес ссылки, это не переопределит интерфейс с локальным адресом назначения связи, возвращенным обнаружением соседей.

 

Дополнительные сведения об обнаружении соседей для IP-адреса версии 6 см. в статье RFC4861 , опубликованной IETF.

Префиксы сайтов IPv6

Ipv6.exe

Netsh.exe

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