В чем разница между 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 (и многие другие юниксов).

paxdiablo
источник
6
Основное отличие состоит в том, что соединение может быть установлено через Unix Domain Socket, как указано здесь: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues,
/etc/nsswitch.confвыбирает, если hostsили DNS используется первым для поиска хоста, если nss работает.
Марк Лаката
@DonViegues Это специфичный для MySQL и плохой дизайн IMO. Он увидит localhost и попытается использовать unix-сокет вместо подключения по IP, но для 127.0.0.1 он просто использует IP.
Арман Ордухани
@ArmanOrdookhani AFAIK, если вы подключаетесь к удаленному хосту через SSH, а затем оттуда к MySQL (например, SSH-туннель для доступа к серверу MySQL), вы должны использовать 127.0.0.1, поскольку все это идет по TC / IP. Но если 2 процесса, запущенных на одной и той же машине, хотят соединиться, localhost (сокет unix) работает быстрее / имеет дополнительные издержки. Спасибо!
Дон Вьегес
1
@DonViegues Да, вы правы, сокет unix имеет меньше накладных расходов, чем TCP / IP. Я просто хотел упомянуть, что это поведение специфично для MySQL, а не для ОС или сетевого уровня.
Арман Ордухани
36

Википедия подытоживает это хорошо:

В современных компьютерных системах localhost в качестве имени хоста преобразуется в IPv4-адрес в сетевом блоке 127.0.0.0/8 (loopback), обычно 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.

Но было бы трудно запомнить IP, по этой причине доменное имя было создано.

Лично я использую http://localhostвместо http://127.0.0.1или http://username.

Маска
источник
localhost работает быстрее, не использует TCP / IP
Don Viegues
@ Дон 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, вы можете указать любое имя.

d_ethier
источник
-3

Основное отличие состоит в том, что соединение может быть установлено через Unix Domain Socket, как указано здесь: localhost vs. 127.0.0.1

Дон Вигес
источник
6
Ответ, на который вы ссылаетесь, является особым случаем, специфичным для MySQL, он вообще не применяется. en.wikipedia.org/wiki/Localhost#Special_cases
Уильям Деннис,