Яка різниця між IP-адресами 0.0.0.0 та 127.0.0.1?


220

Я знаю, що 127.0.0.1 ~ 127.255.255.254 - це IP-адреси з циклічною зворотністю для більшості сучасних операційних систем, і ці IP-адреси можна використовувати для позначення власного комп'ютера.

Але що таке 0,0.0,0? Здається, це стосується і локального комп’ютера, тож яка різниця ?

Чи можете ви пояснити такі IP-з'єднання для мене:

скріншот netstat - вихід


6
Також погляньте на це питання, оскільки воно містить детальну інформацію про те, що таке 0.0.0.0 (а ні): serverfault.com/questions/228629/…
Еллі Кессельман,

Сучасна операційна система використовувала б ::1як зворотну адресу.
kasperd

Відповіді:


157

Єдине, що ви не говорите "всі адреси повинні мати доступ" - це робиться у вашому брандмауері та / або серверному програмному забезпеченні та / або інших шарах безпеки, таких як tcpwrappers.

0,0.0.0 в цьому контексті означає "всі IP-адреси на локальній машині" (насправді, ймовірно, "всі IPv4 адреси на локальній машині"). Отже, якщо ваша машина веб-сервера має дві IP-адреси, 192.168.1.1 та 10.1.2.1, і ви дозволяєте демону веб-сервера на зразок apache прослуховувати на 0.0.0.0, він буде доступний для обох цих IP-адрес. Але лише до того, що може зв’язатися з тими IP-адресами та веб-портами.

Зауважте, що в іншому контексті (маршрутизація) 0,0.0,0 зазвичай означає маршрут за замовчуванням (маршрут до "решти" Інтернету, окрім маршрутів у вашій локальній мережі тощо).


значить, ви маєте на увазі, що розетка веб-сервера пов'язана з будь-якими доступними адресами, коли вона прослуховується на 0.0.0.0?
onmyway133

0.0.0.0означає маршрут за замовчуванням, лише якщо він супроводжується префіксом /0(або 0.0.0.0
мережевою

Зауважимо: якщо якийсь процес прослуховує 0.0.0.0, він буде доступний за IP-адресами всіх мережевих інтерфейсів машини, які включають в себе налаштовану на даний момент адресу заднього інтерфейсу циклу. Але якщо процес прослуховує лише на порту <portNumber> адреси зворотного зв'язку, наприклад, 127.0.0.1, і процес доступний лише з тієї ж машини , орієнтуючись точно на 127.0.0.1: <portNumber> . Спробуйте цей інструмент пітона для гри!
Габ 是 好人

77

Коли служба прослуховується на 0.0.0.0, це означає, що служба прослуховує всі налаштовані мережеві інтерфейси, при прослуховуванні на 127.0.0.1 служба прив’язана лише до інтерфейсу зворотного зв'язку (доступний лише на локальній машині)


38

IP-адреса 0.0.0.0може мати дуже різні значення, залежно від місця її використання.

  • Це неправдива адреса, яку потрібно надати фактичному мережевому інтерфейсу, поряд з будь-якою іншою адресою в підмережі 0.0.0.0/8 (тобто будь-яку адресу, що починається з 0.).
  • Він не може бути використаний в якості вихідної адреси в будь-якому IP-пакеті, якщо це не відбувається, коли комп'ютер все ще не знає власної IP-адреси і намагається придбати її (класичний приклад: DHCP).
  • Якщо використовується в таблиці маршрутизації, він визначає шлюз за замовчуванням; маршрут до 0,0.0,0 є типовим, тобто маршрутом, який використовується, коли для адреси призначення немає більш конкретного маршруту.
  • Нарешті, коли ви бачите у висновку netstatкоманди (що саме ви просили), це означає, що даний сокет прослуховує всі наявні IP-адреси, які має комп'ютер; коли комп'ютер має більше однієї IP-адреси, сокет може бути прив'язаний лише до певної адреси та пари портів, або до порту та всіх адрес; якщо ви бачите там IP-адресу, це означає, що сокет прослуховує тільки на цьому порту та конкретну адресу; якщо ви бачите 0.0.0.0, це означає, що він прослуховує цей порт на всіх адресах машини, включаючи циклічний зворотній зв'язок ( 127.0.0.1).

3
Що це означає, якщо згорнувшись 0.0.0.0? Чи справді Curl контактує та надсилає запит через доступні інтерфейси? Звідки він знає, який інтерфейс є правильним? Я розумію, як сервер може прослуховувати всі інтерфейси, але який механізм має клієнт запитувати всі інтерфейси, наприклад, коли я роблю curl 0.0.0.0 або curl [::].
CMCDragonkai

1
ОС, швидше за все, заблокує вас у цьому, оскільки це не має сенсу лише з точки зору мереж. При спробі роботи ping 0.0.0.0в системі Windows з'являється повідомлення про помилку.
Массімо

curl 0.0.0.0поступається connection refusedна Arch Linux. ping 0.0.0.0з іншого боку, здається псевдонімом, для ping 127.0.0.1якого працює чудово.
Маттіас Браун

@MatthiasBraun connection refusedможе бути через те, що за замовчуванням спробуйте підключитися до порту 80 / tcp. Спробуйте знайти відкриті порти з , nmap -sV localhostа потім в протягом , наприклад , якщо 631 / TCP: curl 0.0.0.0:631.
Пабло А

27

Відповідь Лі Б прямо на те, але ось деякі відповідні RFC на випадок, коли вам це цікаво.

0,0.0,0:

З розділу RFC1122 , розділ 3.1.2.3:

Тепер ми підсумовуємо важливі спеціальні випадки для IP-адрес класів A, B і C, використовуючи наступні позначення для IP-адреси:

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

Просто це "цей хост у цій мережі" ... як зазначено у відповіді Лі Б, це перекладається на всі доступні IP адреси вашого хоста. Хостинг сервісу на 0.0.0.0 автоматично розмістить цю послугу у кожному адресованому інтерфейсі.

127.0.0.1:

З RFC5735 :

127.0.0.0/8 - Цей блок призначений для використання як адреса зворотного зв'язку з хостом в Інтернеті. Данаграма, що надсилається протоколом вищого рівня на адресу в будь-якій точці цього блоку, повертається всередину хоста. Зазвичай це реалізується, використовуючи лише 127.0.0.1/32 для зворотного зв'язку. Як описано в [RFC1122], Розділ 3.2.1.3, адреси в усьому блоці 127.0.0.0/8 не можуть законно відображатися в будь-якій мережі.

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


4

Простіше кажучи: прослуховування на 0.0.0.0 означає прослуховування з будь-якого місця, що має мережевий доступ до цього комп’ютера, наприклад, з цього самого комп’ютера, з локальної мережі або з Інтернету, а слухати на 127.0.0.1 означає лише слухати з цього самого комп’ютера

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