Яка різниця між 127.0.0.1 та localhost


157

Якщо припустити, що визначено в .../hosts:

127.0.0.1 localhost

Які, якщо такі є, фактичні відмінності між використанням 127.0.0.1і localhostназвою сервера, особливо при натисканні на локально запущені процеси, які прослуховують з'єднання?


15
Можна сказати localhost, що протокол не залежить, і IPv4, і IPv6 працюватимуть.
Стів-о

Відповіді:


122

Ну, швидше за все , різниця в тому , що ви все ще повинні зробити фактичний пошук в localhostде - то.

Якщо ви використовуєте 127.0.0.1, то (розумне) програмне забезпечення просто перетворить це безпосередньо в IP-адресу та використовуватиме його. Деякі реалізації програми gethostbynameбудуть виявляти пунктирний формат (і, імовірно, еквівалентний формат IPv6) і взагалі не робити пошук.

В іншому випадку назву потрібно вирішити. І немає жодної гарантії, що ваш hostsфайл буде фактично використаний для цієї роздільної здатності (спочатку або взагалі), тому localhostможе стати зовсім іншою IP-адресою.

Я маю на увазі, що в деяких системах локальний hostsфайл можна обійти. У host.confфайл управляє це на Linux (і багато інших Юніксів).


6
Основна відмінність полягає в тому , що з'єднання може бути виконано з допомогою Unix Domain Socket, як зазначено тут: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Дон Viegues

/etc/nsswitch.confвибирає, hostsчи спочатку DNS використовується для пошуку хоста, якщо nss працює.
Марк Лаката

@DonViegues Це специфічний для MySQL і поганий дизайн IMO. Він побачить localhost і намагається використовувати unix-socket замість з'єднання за допомогою IP, але для 127.0.0.1 він просто використовує IP.
Арман Ордухані

@ArmanOrdookhani AFAIK, якщо ви підключаєтесь до віддаленого хоста через SSH, а потім звідти до MySQL (як тунель SSH, щоб дійти до сервера MySQL), ви повинні використовувати 127.0.0.1, оскільки вся справа переходить через TC / IP. Але якщо 2 процеси, що працюють на одній машині, хочуть підключитися, localhost (unix socket) швидше / має надмірні витрати. Дякую!
Дон Вієґес

1
@DonViegues Так, ви маєте рацію, що Unix socket має менші витрати, ніж TCP / IP. Я просто хотів зазначити, що така поведінка характерна для MySQL, а не щось на рівні ОС або мережі.
Арман Ордухані

36

Вікіпедія добре підсумовує це:

У сучасних комп’ютерних системах localhost як ім'я хоста перекладається на адресу IPv4 у чистому блоці 127.0.0.0/8 (циклічний зворот), як правило, 127.0.0.1 або :: 1 в IPv6.

Єдина відмінність полягає в тому, що він би шукав у DNS систему, на яку localhostвирішується. Цей пошук дійсно, дуже швидкий. Наприклад, щоб дістатися до stackoverflow.comвас, набрали його до адресного рядка (або використали закладку, яка вказала тут). Так чи інакше, ви потрапили сюди через ім’я хоста. localhostзабезпечує подібний функціонал.


11
Це насправді важливо. localhost може вирішити адресу IPv6, тоді як 127.0.0.1 не може. Використання localhost лише в системі IPv6 може працювати, тоді як 127.0.0.1 не буде, оскільки IPv4 недоступний.
Ервін Янсен

32

деякі програми стосуватимуться "localhost" спеціально. клієнт mysql буде розглядати localhost як запит на підключення до локального сокета домену unix замість використання tcp для підключення до сервера на 127.0.0.1. Це може бути швидше, а може бути в іншій зоні аутентифікації.

Я не знаю інших програм, які розглядають localhost інакше, ніж 127.0.0.1, але, мабуть, є деякі.


8

Ну, по ІС швидше.

В основному, коли ви телефонуєте за іменем сервера, він перетворюється на вихідний IP.

Але було б складно запам'ятати IP-адресу, з цієї причини було створено доменне ім'я.

Особисто я використовую http://localhostзамість http://127.0.0.1або http://username.


localhost швидший, не використовує TCP / IP
Don Viegues

@Don Viegues - те, що ви говорите, суперечить іншим відповідям у цій темі. Чи можете ви докладно?
Дікла

Так, я скопіюю та вставте інші мої коментарі: Основна відмінність полягає в тому, що підключення можна зробити через Unix Domain Socket, як зазначено тут: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Дон Віґес

5
@DonViegues, специфічні для MySQL, який обробки localhostв особливим чином . Інші програми, ймовірно, все ще шукатимуть localhost.
Вільям Денніс

0

Нічого іншого немає. Одне легше запам’ятати, ніж інше. Як правило, ви визначаєте ім'я для асоціації з IP-адресою. Не потрібно вказувати localhost для 127.0.0.1, ви можете вказати будь-яке ім’я.


-3

Основна відмінність полягає в тому, що з'єднання можна здійснити через Unix Domain Socket, як зазначено тут: localhost vs. 127.0.0.1


6
Відповідь, яку ви зв'язали, - це особливий випадок, характерний для MySQL, але він не застосовується в цілому. en.wikipedia.org/wiki/Localhost#Special_cases
Вільям Денніс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.