Якщо ви багато працюєте по мережі, налаштовуєте мережеві програми і серверні інструменти або просто цікаві, ви, ймовірно, помітили, що між локальним вузлом і локальною IP-адресою є різниця. Читайте далі, щоб дізнатися відмінності.
Сьогоднішня сесія Питань і Відповідей приходить до нас завдяки SuperUser - підрозділу Stack Exchange, об'єднаній групою веб-сайтів питань і відповідей.
Питання
Читач SuperUser Діого хоче знати, чому команда ping по-різному обробляє локальний хост і локальну IP-адресу, коли на перший погляд вони виглядають однаково:
Використання cmd і ping у Windows дало мені такі результати:
Пінгує «localhost»:
Пінг «192.168.0.10» (локальна IP-адреса):
Хіба обидві ситуації не однакові?
Я маю на увазі, я пінгую той же інтерфейс, ту ж машину і ту ж адресу. Чому я отримую такі різні результати?
Очевидно, що є якась різниця, але що саме відбувається, коли ви перемикаєтеся між ними?
Відповідь
Співробітник SuperUser Том Війсман (Tom Wijsman) пропонує наступне розуміння тонких відмінностей між ними:
Ви не пропінгуєте той же інтерфейс, без будь-яких фізичних інтерфейсів у вас все ще є «локальний хост».
Ваш 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 loopback IP address::1 (див. RFC 2373), оскільки він вказаний першим.
Отже, звідки це, давайте подивимося на файл hosts.
type %WINDIR%\System32\Drivers\Etc\Hosts
... # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost #::1 localhost...
Хм, ми повинні подивитися на налаштування DNS Windows.
У цій статті бази знань розповідається про налаштування, що впливає на переваги Windows, виділеної жирним шрифтом:
- У редакторі реєстру знайдіть і клацніть наступний розділ реєстру:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
- Двічі клацніть DisabledComponents, щоб змінити запис DisabledComponents. Примітка. Якщо запис DisabledComponents недоступний, його необхідно створити. Для цього виконайте такі дії:
- У меню «Правка» виберіть «Створити» та натисніть «Значення DWORD (32-розрядне)».
- Введіть DisabledComponents і натисніть клавішу ВВІД.
- Двічі клацніть DisabledComponents.
- Введіть будь-яке з наступних значень у поле "Значення: дані ", щоб налаштувати протокол IPv6 на необхідний стан, і натисніть кнопку" OK ":
- Введіть 0, щоб увімкнути всі компоненти IPv6. (Параметри Windows за замовчуванням)
- Введіть 0xffffffff, щоб вимкнути всі компоненти IPv6, крім петлевого інтерфейсу IPv6. Це значення також налаштовує Windows на використання Інтернет-протоколу версії 4 (IPv4) порівняно з IPv6 шляхом зміни записів у таблиці політик префіксів. Для отримання додаткової інформації див. вибір джерела та адреси призначення.
- Введіть 0x20, щоб віддати перевагу IPv4 порівняно з IPv6, змінивши записи в таблиці політик префіксів.
- Введіть 0x10, щоб вимкнути IPv6 на всіх нетунельних інтерфейсах (як на інтерфейсах LAN, так і на протоколах PPP).
- Введіть 0x01, щоб вимкнути IPv6 на всіх тунельних інтерфейсах. До них належать протокол внутрішньої тунельної автоматичної адресації (ISATAP), 6to4 і Teredo.
- Введіть 0x11, щоб вимкнути всі інтерфейси IPv6, крім інтерфейсу зворотного зв'язку 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.
Тому, використовуючи цей KB, ми могли б додати записи, які означають, що IPv4 має вищий пріоритет, ніж IPv6.
Примітка. Немає причин перевизначати цю поведінку, якщо тільки у вас не виникли проблеми з сумісністю. Зміна цього параметра на нашому Windows Server зламала наш поштовий сервер, тому з ним слід поводитися обережно...
Нам не потрібно більше нічого, крім докладної та інформативної відповіді з пов'язаними допоміжними документами. Очевидно, що локальний хост і локальна IP-адреса є різними об'єктами, служать різним цілям, і тепер ми всі знаємо, чому.
Є що додати до пояснення? Звук вимкнено у коментарях. Хочете дізнатися більше відповідей від інших досвідчених користувачів Stack Exchange? Ознайомтеся з повною гілкою обговорення тут.