В чем разница между 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
— 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, вы можете указать любое имя.


-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.