Jaka jest różnica między 0.0.0.0, 127.0.0.1 i localhost?

Używam Jekyll i Vagrant na moim Macu. Okazało się, że {[2] } będzie wiązać się z 0.0.0.0:4000 zamiast 127.0.0.1:4000. Również gem server będzie domyślnie wiązać ten adres. Nadal mogę go odwiedzić przez http://localhost:port. Ale dla Jekyll, wydaje się, że ustawienie domyślne (np. 0.0.0.0:4000) wymaga dostępu do Internetu. Nie mogę uruchomić Jekyll server bez Internetu. czy to mały robak?

Używam również Vagrant. Ustawiłem przekierowanie portów (8080 => 4000) W Vagrantfile, ponieważ zainstalowałem Jekyll w Vagrant virtual machine i Przetestowałem go pod Macintosh. Jeśli używam domyślnego ustawienia (0.0.0.0: 4000), to działa. Mogę go odwiedzić z mojego safari z http://localhost:8080. Ale jeśli nie ma internetu, nie mogę związać się z 0.0.0.0: 4000. Używam jekyll server -H 127.0.0.1, aby powiązać usługę z 127.0.0.1:4000, a następnie nie mogę jej odwiedzić przez http://localhost:8080.

Czy ktoś może wyjaśnić różnicę między 0.0.0.0, 127.0.0.1 i localhost ? A czy ktoś może wyjaśnić, dlaczego różnica spowoduje ten problem?

 186
Author: Ciel, 2013-12-26

2 answers

127.0.0.1 jest zwykle adres IP przypisany do interfejsu" loopback " lub tylko lokalnego. Jest to "fałszywa" Karta sieciowa, która może komunikować się tylko w ramach tego samego hosta. Jest często używany, gdy chcesz, aby aplikacja obsługująca sieć obsługiwała tylko klientów na tym samym hoście. Proces, który nasłuchuje 127.0.0.1 dla połączeń, odbierze tylko połączenia lokalne na tym gnieździe.

"localhost" jest zwykle nazwą hosta dla adresu IP 127.0.0.1. Zazwyczaj ustawia się w /etc/hosts (lub Odpowiednikiem Windows o nazwie "hosts" gdzieś pod %WINDIR%). Możesz użyć go tak jak każdej innej nazwy hosta - spróbuj "ping localhost", aby zobaczyć, jak rozwiązuje się 127.0.0.1.

0.0.0.0 ma kilka różnych znaczeń, ale w tym kontekście, gdy serwer ma słuchać na 0.0.0.0, oznacza to "słuchać na każdym dostępnym interfejsie sieciowym". Adapter loopback z adresem IP 127.0.0.1 z punktu widzenia procesu serwera wygląda jak każda inna karta sieciowa na komputerze, więc serwer polecił listen on 0.0.0.0 również akceptuje połączenia w tym interfejsie.

To mam nadzieję, że odpowie na stronę IP Twojego pytania. Nie znam Jekylla ani Vagranta, ale domyślam się, że przekierowanie portów 8080 => 4000 jest w jakiś sposób powiązane z konkretną kartą sieciową, więc nie jest w ścieżce, gdy łączysz się lokalnie z 127.0.0.1

 278
Author: Captain Pedantic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-08 15:29:27

W aktualnej wersji Jekyll, domyślnie http://127.0.0.1:4000/.
Jest to dobre, jeśli jesteś podłączony do sieci, ale nie chcesz, aby ktokolwiek inny miał dostęp do Twojej aplikacji.

Może się jednak zdarzyć, że chcesz zobaczyć, jak działa Twoja aplikacja na telefonie komórkowym lub innym laptopie / komputerze.

W takim przypadku możesz użyć

jekyll serve --host 0.0.0.0

To wiąże Twoją aplikację z hostem i następnie użyj następującej opcji, aby połączyć się z nim z innego hosta

http://host's IP adress/4000 
 7
Author: Sanyam Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-12 07:22:11