Яка різниця між 0.0.0.0, 127.0.0.1 та localhost?


271

Я використовую Jekyllі Vagrantна своєму mac. Я виявив, що замість цього Jekyll serverбуде прив'язуватися . Також буде прив’язано до цієї адреси за замовчуванням. Я все ще можу відвідати його через . Але , здається, що для налаштування за замовчуванням (наприклад, 0,0.0,0:10000) потрібен доступ до Інтернету. Я не можу працювати без Інтернету.0.0.0.0:4000127.0.0.1:4000gem serverhttp://localhost:portJekyllJekyll serverЦе маленький клоп?

Я також використовую Vagrant. Я встановив переадресацію портів (8080 => 4000) у Vagrantfile, оскільки я встановлюю Jekyllу Vagrantвіртуальну машину і тестую її під Macintosh. Якщо я використовую налаштування за замовчуванням (0.0.0.0:10000), воно працює. Я можу відвідати його у своєму сафарі з http://localhost:8080. Але якщо немає Інтернету, я не можу прив’язати до 0,0.0,0:10000. Я використовую jekyll server -H 127.0.0.1для того, щоб прив’язати службу до неї 127.0.0.1:4000, тоді я не можу відвідувати її черезhttp://localhost:8080 .

Чи може хтось пояснити різницю між 0.0.0.0, 127.0.0.1 та localhost ? І хтось може пояснити, чому різниця спричинить цю проблему ?


Ця стаття може бути корисною howtogeek.com/225487/…
fangxing

Відповіді:


408

127.0.0.1як правило, IP-адреса, призначена інтерфейсу "циклічний зворотний зв'язок" або лише для локального використання Це "підроблений" мережевий адаптер, який може спілкуватися лише в межах одного хоста. Він часто використовується, коли потрібно, щоб програма, що підтримує мережу, обслуговувала клієнтів лише на одному хості. Процес, який слухає 127.0.0.1для з'єднань, отримуватиме лише локальні з'єднання в цьому сокеті.

"localhost", як правило, ім'я хоста для 127.0.0.1IP-адреси. Зазвичай він встановлюється /etc/hosts(або еквівалент Windows з назвою "господарі" десь під %WINDIR%). Ви можете використовувати його так само, як і будь-яке інше ім'я хоста - спробуйте "ping localhost", щоб побачити, як це вирішується 127.0.0.1.

0.0.0.0має пару різних значень, але в цьому контексті, коли серверу пропонують слухати, 0.0.0.0це означає "слухати через кожен доступний мережевий інтерфейс". Адаптер петлі з IP-адресою 127.0.0.1з точки зору серверного процесу виглядає так само, як і будь-який інший мережевий адаптер на пристрої, тому сервер наказав слухати0.0.0.0 , прийме з'єднання і на цьому інтерфейсі.

Це, сподіваємось, відповідає IP стороні вашого питання. Я не знайомий з Jekyll або Vagrant, але я здогадуюсь, що переадресація вашого порту 8080 => 4000якимось чином пов'язана з певним мережним адаптером, тож це не в дорозі, коли ви локально підключаєтесь до127.0.0.1


Хм, ping localhostздається, працює на Windows , навіть без господарів файлу , що вказує 127.0.0.1на localhost.
Pacerier

Погодьтеся з Pacerier. Принаймні в Windows, localhost поводиться за замовчуванням як
0,0.0.0

5
"Це здебільшого правильно, за винятком опису прив'язки до 0,0.0.0. Це не пов'язує всі доступні мережеві інтерфейси, як ви описали, а скоріше пов'язує з усіма адресами . У TCP стеках це відомо як INADDR_ANY - зі видаленої відповіді від @strangemonad.
Piotr

15

У поточній версії Jekyll вона за замовчуванням дорівнює http://127.0.0.1:10000/ .
Це добре, якщо ви підключені до мережі, але не хочете, щоб хтось інший отримував доступ до вашої програми.

Однак може статися так, що ви хочете побачити, як працює ваша програма на мобільному телефоні або на якомусь іншому ноутбуці / комп’ютері.

У такому випадку ви можете використовувати

jekyll serve --host 0.0.0.0

Це пов'язує вашу програму з хостом та наступним використанням після підключення до неї від іншого хоста

http://host's IP adress/4000 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.