Сегодняшняя сессия вопросов и ответов приходит к нам благодаря SuperUser - подразделению Stack Exchange, основанной на сообществах сайтам Q & A.
Вопрос
SuperUser reader Diogo хочет знать, почему команда ping обрабатывает локальный хост и локальный IP-адрес по-разному, когда на первый взгляд они выглядят одинаково:
Using cmd and ping on Windows gave me the following results:
Pinging “localhost”:
I mean, I’m pinging the same interface, the same machine and the same address. Why do I get such different results?
Очевидно, что есть какая-то разница, но что именно происходит, когда вы переключаетесь между ними?
Ответ
Докладчик SuperUser Том Вейсман предлагает следующее понимание тонких различий между ними:
You are not pinging the same interface, without any physical interfaces you still have a “local host”.
Your
localhost
используется для обозначения вашего компьютера с его «внутреннего» IP-адреса, а не с любых «внешних» IP-адресов вашего компьютера. Таким образом, пакеты ping не проходят через любой физический сетевой интерфейс; только через интерфейс обратной связи виртуального цикла, который напрямую отправляет пакеты из порта в порт без каких-либо физических перелетов.
Вы все еще можете удивиться, почему
localhost
разрешает
::1
в то время как традиционно мы ожидаем, что он решит адрес IPv4
127.0.0.1
Обратите внимание, что
.localhost
традиционно является TLD (см. RFC 2606), который указывает на обратный IP-адрес петли (для IPv4, см. RFC 3330, особенно 127.0.0.0/8).
Глядя вверх
localhost
с помощью
nslookup
дает нам:
nslookup localhost
… Name: localhost Addresses:::1 127.0.0.1
Таким образом, Windows предпочитает использовать IPv6 loop back IP-адрес
::1
(см. RFC 2373), поскольку он указан первым.
Итак, откуда это взялось, давайте посмотрим на файл hosts.
type %WINDIR%System32DriversEtcHosts
… # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost #::1 localhost …
Хм, нам нужно посмотреть настройки DNS в Windows.
В этой статье в KB рассказывается о настройке, которая влияет на то, что предпочитает Windows, выделено жирным шрифтом:
-
В редакторе реестра найдите и выберите следующий подраздел реестра:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip6Parameters
-
Дважды щелкните DisabledComponents, чтобы изменить запись DisabledComponents. Примечание. Если запись DisabledComponents недоступна, вы должны ее создать. Для этого выполните следующие действия:
- В меню «Правка» выберите «Создать», а затем «Значение DWORD (32-бит)».
- Введите DisabledComponents и нажмите клавишу ВВОД.
- Дважды щелкните параметр «Отключенные компоненты».
-
Введите любое одно из следующих значений в поле Значение: для настройки протокола IPv6 в нужное состояние и затем нажмите кнопку ОК:
-
Тип
0
для включения всех компонентов IPv6. (Настройка по умолчанию Windows)
-
Тип
0xffffffff
для отключения всех компонентов IPv6, за исключением интерфейса loopback IPv6. Это значение также позволяет Windows предпочитать использование протокола IP версии 4 (IPv4) по протоколу IPv6 путем изменения записей в таблице политик префикса. Для получения дополнительной информации см. Выбор источника и адреса назначения.
-
Тип
0x20
чтобы предпочесть IPv4 через IPv6, изменив записи в таблице политик префикса.
-
Тип
0x10
для отключения IPv6 на всех непереходных интерфейсах (как в интерфейсах LAN, так и в режиме Point-to-Point Protocol [PPP]).
-
Тип
0x01
для отключения IPv6 на всех туннельных интерфейсах. К ним относятся Intra-Site Automatic Tunnel Addressing Protocol (ISATAP), 6to4 и Teredo.
-
Тип
0x11
для отключения всех интерфейсов IPv6, за исключением интерфейса loopback IPv6.
- Перезагрузите компьютер, чтобы этот параметр вступил в силу.
Что это за таблица политик префикса?
netsh interface ipv6 show prefixpolicies
(или же
prefixpolicy
на более ранних версиях)
Precedence Label Prefix ---------- ----- -------------------------------- 50 0::1/128 45 13 fc00::/7 40 1::/0 10 4::ffff:0:0/96 7 14 2002::/16 5 5 2001::/32 1 11 fec0::/10 1 12 3ffe::/16 1 10::/96
В этой таблице определяется, какие префиксы имеют приоритет над другими префиксами во время разрешения DNS.
Ах, поэтому, используя этот КБ, мы могли бы добавить здесь записи, которые означают, что IPv4 имеет более высокий приоритет, чем IPv6.
Замечания: Нет причин переопределять это поведение, если у вас нет проблем с совместимостью. Изменение этого параметра на нашем Windows Server сломало наш почтовый сервер, поэтому его следует обрабатывать с осторожностью …
Нам ничего больше, чем подробный и информативный ответ со связанными вспомогательными документами. Очевидно, что локальный хост и локальный IP-адрес являются отдельными объектами, обслуживают разные цели, и теперь мы все знаем почему.
Есть что добавить к объяснению? Звучит в комментариях. Хотите узнать больше ответов от других пользователей Windows? Посмотрите здесь полную дискуссионную тему.