Jaka jest różnica między 0.0.0.0, 127.0.0.1 a hostem lokalnym?

271

Używam Jekylli Vagrantna moim komputerze Mac. Znalazłem, że Jekyll serverwiąże się 0.0.0.0:4000zamiast 127.0.0.1:4000. gem serverDomyślnie również powiąże ten adres. Nadal mogę go odwiedzić za pośrednictwem http://localhost:port. Ale dla Jekyll, wydaje się, że domyślne ustawienie (np 0.0.0.0:4000) wymaga dostępu do Internetu. Nie mogę uruchomić Jekyll serverbez Internetu. Czy to mały błąd?

Ja też używam Vagrant. W Vagrantfile ustawiłem przekierowanie portów (8080 => 4000), ponieważ instaluję Jekyllna Vagrantmaszynie wirtualnej i testuję na Macintoshu. Jeśli użyję ustawienia domyślnego (0.0.0.0:4000), to zadziała. Mogę odwiedzić to z mojego safari z http://localhost:8080. Ale jeśli nie ma internetu, nie mogę powiązać z 0.0.0.0:4000. Zamiast tego używam jekyll server -H 127.0.0.1do powiązania usługi 127.0.0.1:4000, a potem nie mogę jej odwiedzić http://localhost:8080.

Czy ktoś może wyjaśnić różnicę między 0.0.0.0, 127.0.0.1 a hostem lokalnym ? I czy ktoś może wyjaśnić, dlaczego różnica spowoduje ten problem ?

Ciel
źródło
Ten artykuł może pomocne howtogeek.com/225487/...
fangxing

Odpowiedzi:

408

127.0.0.1jest zwykle adresem IP przypisanym do „sprzężenia zwrotnego” lub interfejsu lokalnego. Jest to „fałszywa” karta sieciowa, która może komunikować się tylko na tym samym hoście. Jest często używany, gdy chcesz, aby aplikacja sieciowa mogła obsługiwać klientów tylko na tym samym hoście. Proces, który nasłuchuje 127.0.0.1połączeń, będzie odbierał tylko połączenia lokalne na tym gnieździe.

„localhost” jest zwykle nazwą hosta dla 127.0.0.1adresu IP. Zwykle jest ustawiony na /etc/hosts(lub odpowiednik Windows nazwany gdzieś pod %WINDIR%). Możesz go używać tak jak każdą inną nazwę hosta - spróbuj „ping localhost”, aby zobaczyć, jak to rozwiązuje 127.0.0.1.

0.0.0.0ma kilka różnych znaczeń, ale w tym kontekście, gdy serwer ma słuchać 0.0.0.0, oznacza to „słuchaj na każdym dostępnym interfejsie sieciowym”. Adapter pętli zwrotnej z adresem IP 127.0.0.1z perspektywy procesu serwera wygląda tak samo, jak każdy inny adapter sieciowy na komputerze, więc serwer, któremu polecono nasłuchiwać 0.0.0.0, zaakceptuje połączenia również na tym interfejsie.

Mam nadzieję, że odpowiada to po stronie IP twojego pytania. Nie znam Jekylla ani Vagranta, ale zgaduję, że przekierowanie portów 8080 => 4000jest w jakiś sposób powiązane z konkretną kartą sieciową, więc nie jest na ścieżce, kiedy łączysz się lokalnie z127.0.0.1

Kapitan Pedantic
źródło
Hmm, ping localhostwydaje się działać na Windows nawet bez pliku hosts skierowaną 127.0.0.1do localhost.
Pacerier,
Zgadzam się z Pacerier. Przynajmniej w systemie Windows localhost zachowuje się domyślnie jako 0.0.0.0 (nie 127.0.0.1)
drodsou
5
„Jest to w większości poprawne, z wyjątkiem opisu powiązania z 0.0.0.0. Nie wiąże się to z każdym dostępnym interfejsem sieciowym, jak opisano, ale wiąże się ze wszystkimi adresami . W stosach TCP jest to znane jako INADDR_ANY - z usuniętej odpowiedzi of @strangemonad.
Piotr Dobrogost
15

W bieżącej wersji Jekyll domyślnie jest to http://127.0.0.1:4000/ .
Jest to dobre, jeśli masz połączenie z siecią, ale nie chcesz, aby ktokolwiek inny miał dostęp do Twojej aplikacji.

Może się jednak zdarzyć, że chcesz zobaczyć, jak aplikacja działa na telefonie komórkowym lub z innego laptopa / komputera.

W takim przypadku możesz użyć

jekyll serve --host 0.0.0.0

Spowoduje to powiązanie aplikacji z hostem i następne użycie, aby połączyć się z nią z innego hosta

http://host's IP adress/4000 
Sanyam Jain
źródło