Jaka jest różnica między 127.0.0.1 a localhost

157

Zakładając, że w .../hosts:

127.0.0.1 localhost

Co, jeśli w ogóle, są rzeczywiste różnice między używaniem 127.0.0.1i localhostjako nazwy serwera, zwłaszcza gdy uderzenie procesy uruchomione lokalnie, które są nasłuchiwania połączeń?

Czeski
źródło
15
Można powiedzieć, że localhostjest niezależny od protokołu, zarówno IPv4, jak i IPv6 będą działać.
Steve-o

Odpowiedzi:

122

Cóż, najprawdopodobniej różnicą jest to, że trzeba jeszcze zrobić rzeczywiste odnośnika z localhostgdzieś.

Jeśli używasz 127.0.0.1, (inteligentne) oprogramowanie po prostu zamieni go bezpośrednio na adres IP i użyje go. Niektóre implementacje gethostbynamewykrywają format z kropkami (i przypuszczalnie równoważny format IPv6) i w ogóle nie sprawdzają.

W przeciwnym razie nazwa musi zostać rozwiązana. I nie ma gwarancji, że twój hostsplik zostanie faktycznie użyty do tej rozdzielczości (najpierw lub w ogóle), więc localhostmoże stać się zupełnie innym adresem IP.

Rozumiem przez to, że w niektórych systemach hostsmożna ominąć plik lokalny . Te host.confkontrole plików to na Linux (i wielu innych Uniksach).

paxdiablo
źródło
6
Główna różnica polega na tym, że połączenie można nawiązać przez gniazdo domeny Unix, jak podano tutaj: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
/etc/nsswitch.confwybiera, czy hostslub DNS jest używany jako pierwszy do wyszukiwania hosta, jeśli działa nss.
Mark Lakata,
@DonViegues To jest zły projekt MySQL i IMO. Zobaczy localhost i spróbuje użyć gniazda unix zamiast łączyć się za pomocą adresu IP, ale dla 127.0.0.1 używa tylko adresu IP.
Arman Ordookhani
@ArmanOrdookhani AFAIK, jeśli łączysz się ze zdalnym hostem przez SSH, a stamtąd do MySQL (jak tunel SSH, aby dotrzeć do serwera MySQL), musisz użyć 127.0.0.1, ponieważ całość przechodzi przez TC / IP. Ale jeśli 2 procesy działające na tej samej maszynie chcą się połączyć, localhost (gniazdo unix) jest szybsze / ma narzut. Dzięki!
Don Viegues
1
@DonViegues Tak, masz rację, gniazdo unixowe ma mniejszy narzut niż TCP / IP. Chciałem tylko wspomnieć, że to zachowanie jest specyficzne dla MySQL, a nie dotyczy poziomu systemu operacyjnego lub sieci.
Arman Ordookhani
36

Wikipedia dobrze to podsumowuje:

W nowoczesnych systemach komputerowych localhost jako nazwa hosta tłumaczy się na adres IPv4 w bloku sieciowym 127.0.0.0/8 (pętla zwrotna), zwykle 127.0.0.1 lub :: 1 w IPv6.

Jedyną różnicą jest to, że szukałby w DNS systemu, na który się localhostrozwiązuje. To wyszukiwanie jest naprawdę szybkie. Na przykład, aby dostać się do stackoverflow.comCiebie, wpisałeś to w pasku adresu (lub skorzystałeś ze wskazanego tutaj bookmarkletu). Tak czy inaczej, dostałeś się tutaj przez nazwę hosta. localhostzapewnia podobną funkcjonalność.

Ryan Bigg
źródło
11
To jest naprawdę ważne. localhost może rozpoznać adres IPv6, podczas gdy 127.0.0.1 nie. Używanie localhost w systemie obsługującym tylko protokół IPv6 może działać, podczas gdy 127.0.0.1 nie będzie działać, ponieważ IPv4 nie jest dostępny.
Erwin Jansen
32

niektóre aplikacje będą traktować „localhost” specjalnie. klient mysql potraktuje localhost jako żądanie połączenia się z lokalnym gniazdem domeny unix zamiast używać tcp do łączenia się z serwerem na 127.0.0.1. Może to być szybsze i może znajdować się w innej strefie uwierzytelniania.

Nie znam innych aplikacji, które traktują localhost inaczej niż 127.0.0.1, ale prawdopodobnie są.

Wayne Walker
źródło
8

Cóż, przez IP jest szybszy.

Zasadniczo, gdy dzwonisz według nazwy serwera, jest on konwertowany na oryginalny adres IP.

Ale zapamiętanie adresu IP byłoby trudne, z tego powodu nazwa domeny została utworzona.

Osobiście używam http://localhostzamiast http://127.0.0.1lub http://username.

Maska
źródło
localhost jest szybszy, nie używa TCP / IP
Don Viegues
@Don Viegues - to, co mówisz, jest sprzeczne z innymi odpowiedziami w tym wątku. Czy możesz rozwinąć?
Dikla
Tak, skopiuję i wkleję inny mój komentarz: główna różnica polega na tym, że połączenie można nawiązać za pośrednictwem gniazda domeny Unix, jak podano tutaj: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
5
@DonViegues, który jest specyficzny dla MySQL, który obsługuje localhostw specjalny sposób . Inne aplikacje prawdopodobnie nadal będą wyszukiwać localhost.
William Denniss
0

Nie ma nic innego. Jeden jest łatwiejszy do zapamiętania niż drugi. Ogólnie rzecz biorąc, definiuje się nazwę, która ma być skojarzona z adresem IP. Nie musisz określać localhost dla 127.0.0.1, możesz podać dowolną nazwę.

d_ethier
źródło
-3

Główną różnicą jest to, że połączenie można nawiązać przez gniazdo domeny Unix, jak podano tutaj: localhost vs. 127.0.0.1

Don Viegues
źródło
6
Odpowiedź, którą łączysz, to szczególny przypadek specyficzny dla MySQL, nie ma on zastosowania ogólnie. en.wikipedia.org/wiki/Localhost#Special_cases
William Denniss