У чому різниця між Locahost і локальною IP-адресою?

Якщо ви багато працюєте по мережі, налаштовуєте мережеві програми і серверні інструменти або просто цікаві, ви, ймовірно, помітили, що між локальним вузлом і локальною 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, виділеної жирним шрифтом:

  1. У редакторі реєстру знайдіть і клацніть наступний розділ реєстру:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters

  1. Двічі клацніть DisabledComponents, щоб змінити запис DisabledComponents. Примітка. Якщо запис DisabledComponents недоступний, його необхідно створити. Для цього виконайте такі дії:
    1. У меню «Правка» виберіть «Створити» та натисніть «Значення DWORD (32-розрядне)».
    2. Введіть DisabledComponents і натисніть клавішу ВВІД.
    3. Двічі клацніть DisabledComponents.
  2. Введіть будь-яке з наступних значень у поле "Значення: дані ", щоб налаштувати протокол 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.
  3. Перезавантажте комп'ютер, щоб цей параметр набув чинності.

Що це за таблиця префіксів політики?

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? Ознайомтеся з повною гілкою обговорення тут.

COM_SPPAGEBUILDER_NO_ITEMS_FOUND