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


234

Я розумію, що 127.0.0.1 вказує на localhostтак само, як і на 0.0.0.0 (виправте мене, якщо я помиляюся). Отже, яка різниця між 127.0.0.1 та 0.0.0.0?


1
Вас може зацікавити ця дискусія про помилку відстеження помилок Chrome про те, як обробляти 0.0.0.0введення адреси.
Джеремі Бенкс

6
У більшості конфігурацій сервера 0,0.0.0 означає, слухайте ВСІ адреси! Це зробить ваш сервер доступним в Інтернеті. Якщо ви зробите це для якогось локального сервера без будь-якого захисту (він слухає лише на localhost, правда?), Це погано. Не робіть цього!
Йозеф

56
Відповідайте на запитання буквально, різниця полягає 2130706433.
Шаз

2
@Маст о, ти один із людей, які налаштовують цілком небезпечну систему, бо брандмауер все це виправить? Зазвичай ці системи потім можна знайти за допомогою shodan.io : 3 Наступний рівень цього мислення - "ми повністю можемо використовувати 5-річну установку WordPress. У нас є WAF". Я нікому не рекомендую ніколи йти цим шляхом!
Йозеф

2
@Shaz Я хотів би підтримати ваш коментар, але оскільки він наразі в 42, я не можу змусити себе це зробити ...
Jenny D

Відповіді:


221

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

  • 127.0.0.1 - це адреса зворотного зв'язку (також відомий як localhost).

  • 0.0.0.0 це нерутальна мета-адреса, що використовується для позначення недійсної, невідомої або непридатної цілі (немає конкретного заповнювача адреси адреси).

    У контексті запису маршруту він зазвичай означає маршрут за замовчуванням.

    У контексті серверів 0,0.0.0 означає "всі адреси IPv4 на локальній машині". Якщо хост має дві ip адреси, 192.168.1.1 та 10.1.2.1, а сервер, який працює на хості, прослуховує на 0.0.0.0, він буде доступний для обох цих IP-адрес.


Що таке IP-адреса 127.0.0.1?

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

Ця ж умова визначена і для комп'ютерів, які підтримують IPv6-адресування, використовуючи конотацію :: 1. Встановлення з'єднання за допомогою адреси 127.0.0.1 - найпоширеніша практика; однак, використовуючи будь-яку IP-адресу в діапазоні 127 . . * буде працювати тим самим чи подібним чином. Конструкція циклічного зворотного зв'язку дає комп'ютеру або пристрою, здатному мережу, можливість перевірити або встановити IP-стек на машині.

Джерело: 127.0.0.1 - у чому його використання та чому це важливо?


Спеціальні адреси

Мережі класу А класу 127 присвоюється функція "зворотного звороту", тобто дейтаграма, що надсилається протоколом вищого рівня на мережеву адресу 127, повинна повертатися назад всередині хоста. Жодна дейтаграма, "надіслана" за мережевою адресою 127, ніколи не повинна з’являтися в будь-якій мережі.

Джерело: Номери мережі


Якщо це цілий клас А, який сенс у інших довільних значеннях за останні три октети?

Призначення діапазону зворотного зв'язку - тестування реалізації протоколу TCP / IP на хості. Оскільки нижні шари мають коротке замикання, пересилання на адресу зворотного зв'язку дозволяє ефективно перевіряти вищі шари (IP та вище) без шансу проявитись проблеми на нижніх шарах. 127.0.0.1 - адреса, яка найчастіше використовується для тестування.

Джерело: Зарезервовані IP-адреси, Loopback та приватні адреси

Для отримання додаткової інформації дивіться https://askubuntu.com питання Що таке пристрій для зворотного зв'язку та як ним користуватися? і чому IP-адреса із зворотним зв'язком від 127.0.0.1 до 127.255.255.254? .


Що таке IP-адреса 0.0.0.0?

"0.0.0.0" - синтаксис дійсної адреси. Таким чином, він повинен розбиратись як дійсний там, де очікується IP-адреса в традиційній точково-десятковій нотації. Після розбору та перетворення його в працюючу числову форму, то його значення визначає, що буде далі.

Значення "нуль" має особливе значення. Отже, він "дійсний", але має значення, яке може бути невідповідним (і таким чином трактуватися як недійсне) для певних обставин. Це в основному заповнювач місця "без конкретної адреси". Для таких речей, як прив'язка адреси мережевих з'єднань, результатом може бути призначення присвоєння відповідної адреси інтерфейсу. Якщо ви використовуєте його для налаштування інтерфейсу, він може замість нього видалити адресу. Це залежить від контексту використання для визначення того, що насправді робить "жодна конкретна адреса".

У контексті запису маршруту він зазвичай означає маршрут за замовчуванням . Це відбувається в результаті більшої кількості маски адреси, яка вибирає біти для порівняння. Маска "0.0.0.0" не вибирає біт, тому порівняння завжди буде успішним. Отже, коли такий маршрут налаштований, пакети завжди є десь (якщо вони налаштовані з дійсним пунктом призначення).

У деяких випадках просто "0" також буде працювати і мати такий же ефект. Але це не гарантується. Форма "0.0.0.0" - це стандартний спосіб сказати "немає конкретної адреси" (в IPv6, тобто ":: 0" або просто "::").

Джерело: Яке значення IP-адреси 0.0.0.0


У версії 4 Інтернет-протоколу адреса 0.0.0.0 - це мета-адреса, що не використовується маршрутизацією, яка використовується для позначення недійсної, невідомої або непридатної цілі. Для надання особливого значення інакше недостовірним фрагментам даних є додаток внутрішньодіапазонної сигналізації.

У контексті серверів 0,0.0.0 означає "всі адреси IPv4 на локальній машині". Якщо хост має дві ip адреси, 192.168.1.1 та 10.1.2.1, а сервер, який працює на хості, прослуховує на 0.0.0.0, він буде доступний для обох цих IP-адрес.

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

Використання включає:

  • Адреса, яку хост вважає власною, коли ще не була призначена адреса. Наприклад, при відправці початкового пакета DHCPDISCOVER при використанні DHCP.
  • Адреса, яку хост призначає собі, коли запит адреси через DHCP не вдався, за умови, що IP стек хоста підтримує це. Це використання було замінено механізмом APIPA в сучасних операційних системах.
  • Спосіб вказати "взагалі будь-який IPv4-хост". Він використовується таким чином при визначенні маршруту за замовчуванням.
  • Спосіб чітко вказати, що ціль недоступна. 1
  • Спосіб визначення "взагалі будь-якої адреси IPv4". Він використовується таким чином при налаштуванні серверів (тобто при прив'язці прослуховувань розеток). Це відомо програмістам TCP як INADDR_ANY. (bind (2) пов'язує адреси, а не інтерфейси.)

У IPv6 адреса "всі нулі" записується як "::".

Джерело: 0.0.0.0


Відкриття / запит DHCP

Коли клієнт завантажується вперше, він, як кажуть, перебуває у стані ініціалізації та передає повідомлення DHCPDISCOVER у локальній фізичній підмережі через порт 67 протоколу користувача Datagram (UDP) (сервер BootP). Оскільки клієнт не може дізнатися підмережу, до якої він належить, DHCPDISCOVER - це трансляція всіх підмереж (IP-адреса призначення 255.255.255.255) з вихідною IP-адресою 0,0.0.0. IP-адреса джерела - 0,0.0,0, оскільки клієнт не має налаштованої IP-адреси.Якщо DHCP-сервер існує в цій локальній підмережі і налаштований і працює правильно, DHCP-сервер почує трансляцію та відповість повідомленням DHCPOFFER. Якщо DHCP-сервера не існує в локальній підмережі, у цій локальній підмережі повинен бути агент реле DHCP / BootP для пересилання повідомлення DHCPDISCOVER на підмережу, що містить DHCP-сервер.

Цей ретрансляційний агент може бути або виділеним хостом (наприклад, Microsoft Windows Server), або маршрутизатором (наприклад, маршрутизатором Cisco, налаштованим на IP-інтерпретатори рівня оператора).

...

Після того, як клієнт отримує DHCPOFFER, він відповідає на повідомлення DHCPREQUEST, вказуючи намір про прийняття параметрів у DHCPOFFER, і переходить у стан запиту. Клієнт може отримувати кілька повідомлень DHCPOFFER, по одному від кожного сервера DHCP, який отримав оригінальне повідомлення DHCPDISCOVER. Клієнт вибирає один DHCPOFFER і відповідає лише на той DHCP-сервер, негайно відхиляючи всі інші повідомлення DHCPOFFER. Клієнт ідентифікує обраний сервер, заповнивши поле параметра Ідентифікатор сервера IP-адресою сервера DHCP. DHCPREQUEST - це також трансляція, тому всі сервери DHCP, які надіслали DHCPOFFER, побачать DHCPREQUEST, і кожен буде знати, прийнятий чи відхилений його DHCPOFFER. Будь-які додаткові параметри конфігурації, необхідні клієнту, будуть включені в поле параметрів повідомлення DHCPREQUEST.Незважаючи на те, що клієнту було запропоновано IP-адресу, він надішле повідомлення DHCPREQUEST з вихідною IP-адресою 0,0.0.0. Наразі клієнт ще не отримав підтвердження того, що ясно використовувати IP-адресу.

...

Розмова клієнт-сервер для отримання клієнтом DHCP-адреси, де клієнт і сервер DHCP проживають у одній підмережі

Введіть тут опис зображення

Джерело: Розуміння та усунення несправностей DHCP в Catalyst Switch або Enterprise Networks


Маршрут за замовчуванням

Цей документ пояснює, як налаштувати маршрут за замовчуванням або крайній шлюз. Ці команди IP використовуються:

  • ip-шлюз за замовчуванням

  • ip за замовчуванням

  • і ip маршрут 0.0.0.0 0.0.0.0

ip маршрут 0.0.0.0 0.0.0.0

Створення статичного маршруту до мережі 0.0.0.0 0.0.0.0 - це ще один спосіб встановлення на маршрутизаторі крайнього шлюзу. Як і в ip-мережевій команді ip, використання статичного маршруту до 0.0.0.0 не залежить від протоколів маршрутизації. Однак ip маршрутизація повинна бути включена на маршрутизаторі.

Примітка: IGRP не розуміє маршрут до 0,0.0.0. Отже, він не може поширювати маршрути за замовчуванням, створені за допомогою команди ip route 0.0.0.0 0.0.0.0. Використовуйте команду ip default network, щоб IGRP розповсюджував маршрут за замовчуванням.

Джерело: Налаштування шлюзу останньої інстанції за допомогою команд IP


3
У контексті серверів 0,0.0.0 означає "всі адреси IPv4 на локальній машині". Якщо хост має дві ip адреси, 192.168.1.1 та 10.1.2.1, а сервер, який працює на хості, прослуховує на 0.0.0.0, він буде доступний для обох цих IP-адрес. - це зробив це для мене
Рафаель Ейн

112

Вони не однакові.

127.0.0.1 є частиною мережі 127/8, яка зарезервована і вказує на той самий комп'ютер.

0.0.0.0 - це спеціальна IP-адреса, яка означає різні речі залежно від контексту.

У версії 4 протоколу Internet, адреса 0.0.0.0 - це мета-адреса, що не використовується маршрутизацією, яка використовується для позначення недійсної, невідомої або непридатної цілі. Для надання особливого значення інакше недостовірним фрагментам даних є додаток внутрішньодіапазонної сигналізації.

Можливо, ви помилилися 0.0.0.0 для 127.0.0.1, подивившись на netstat і побачивши, що місцева адреса прослуховується як 0.0.0.0, але це інший спосіб, коли використовується 0.0.0.0.

У контексті серверів 0,0.0.0 означає "всі адреси IPv4 на локальній машині". Якщо хост має дві ip адреси, 192.168.1.1 та 10.1.2.1, а сервер, який працює на хості, прослуховує на 0.0.0.0, він буде доступний для обох цих IP-адрес.

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

https://en.wikipedia.org/wiki/0.0.0.0


0.0.0.0може також іноді вказувати трансляцію, що означає всі комп'ютери в мережі.
Джеймс Мерц

8
@KronoS Я думав, що трансляції - це на кшталт 255.255.255.255(або більш реально щось на зразок 192.168.1.255локальної мережі)
Nick T

1
@NickT Ах ви праві :A special definition exists for the IP broadcast address 255.255.255.255. It is the broadcast address of the zero network or 0.0.0.0, which in Internet Protocol standards stands for this network, i.e. the local network. Transmission to this address is limited by definition, in that it is never forwarded by the routers connecting the local network to other networks.
Джеймс Мерц

@KronoS Ви переплутаєте додавача трансляції із зворотним зв'язком. Коефіцієнт зворотного зв'язку становить 0,0,0,0, який, як описано вище, слухає всі локальні адреси. Трансляція (простий спосіб) - це 255 мереж, які "транслюються" на всі адреси в цій мережі.
Дезард

Це неповно - багато операційних систем насправді дозволяють вам підключитися до 0.0.0.0, який потім веде себе як адреса петлі.
grawity

16

127.0.0.1 - це одна з адрес локального комп'ютера, але будь-яка адреса 127.xyz також є іншою адресою комп'ютера (називається "адреса зворотного зв'язку"), за винятком 127.0.0.0 (підвідмережа зворотного зв'язку) та 127.255.255.255 (адреса широкомовної передачі для підмережа петлі).

127.xyz означає «тут».

0.0.0.0 зовсім інше: 0.0.0.0 - це не адреса нічого , це жарт, як *у оболонці.

Ви не можете надсилати дані до 0.0.0.0 або активно відкривати TCP-з'єднання до 0.0.0.0, оскільки там нічого немає; 0.0.0.0 навіть не є недоступною або не маршрутизованою адресою, це безглуздо в контексті, де очікується адреса .

Ви можете використовувати joker 0.0.0.0 в контекстах, де можна необов'язково вказати адресу , це означає, що мені все одно .

Наприклад, коли ви активно відкриваєте з'єднання TCP з деяким сервером TCP (сервер TCP створюється пасивним відкритим TCP), вам потрібно вказати адресу сервера TCP (IP та номер порту), і ви можете необов'язково вибрати місцева адреса. (Оскільки ваш сокет не є серверним сокетом, ніхто не може відкрити з'єднання до нього, а адреса з вашого боку з'єднання, як правило, не дуже важлива.)

bindСистемний виклик використовується для вибору адреси локального сокета TCP. Передані дані - bindце справді набір обмежень: обмеження на IP-адресу, обмеження на порту TCP. Звичайне текстове позначення - IP: порт. 0,0.0,0 0,0 означає будь-який IP та будь-який порт прийнятний, це нульове обмеження. 0.0.0.0:20 означає, що локальний порт повинен бути 20, будь-який IP прийнятний (0.0.0.0:20 використовується для узгодження FTP-серверів для з'єднання даних в активному режимі).

Підсистема TCP / IP вибере адресу для вашої сторони з'єднання TCP, якщо ви її не вибрали, використовуючи таблицю маршрутизації, виходячи з адреси призначення: локальна адреса сокета TCP буде локальною адресою, пов'язаною з маршрутом, відповідним до адреси призначення.

Раніше я згадував оболонку "метасимвол" *, але сила комбінування мета-символів з такими символами, як *foo*(будь-яке ім'я файлу, що містить "foo") не існує з обмеженнями IP-адреси, це все або нічого: або одна IP-адреса вважається прийнятним або всі адреси є. Логіка не диктує, що так має бути. Ви можете розширити інтерфейс більш насиченою мовою обмежень.

Точність:

Речення 127.xyz означає "тут" не означає, що всі ці адреси однакові. Вони представляють різні "місця" (адреси сокета), всередині локального "комп'ютера", фактично всередині локального стеку IP.

Зауваження: комп’ютер з віртуалізацією (емуляція, апаратна віртуалізація, паравіртуалізація, що ви можете придумати ...) має кілька незалежних стеків IP.


Коли я набрав у своєму браузері випадкову адресу, починаючи з 127 (наприклад, 127.16.23.42), вона не підключилась до localhost.
хтознає

@whoKnows Звичайно. localhost - 127.0.0.1, а не 127.16.23.42.
curiousguy

Я бачу. Отже, 127.0.0.1 означає localhost, але 127.xyz міг би означати локальний комп'ютер, якби він був налаштований таким чином?
хтознає

2
@whoKnows №: 127.xyz належить цьому комп'ютеру для будь-яких xy z. "localhost" - це лише назва для 127.0.0.1, тому забудьте "localhost". Використовуйте -nабо -dпрапор netstatі пов’язані з ними програми для показу числових адрес, а не імен. 127.0.0.1 - не та сама адреса IP, як 127.16.23.42. Таким чином, 127.0.0.1:80 та 127.16.23.42:80 представляють різні адреси кінцевих точок TCP, веб-сервер за однією адресою неможливо знайти за іншою адресою.
curiousguy

6

Зазвичай ви використовуєте bind-адресу 0.0.0.0, щоб дозволити з'єднання із зовнішніх мереж та джерел. Багато серверів, таких як MySQL, зазвичай пов'язуються з 127.0.0.1, дозволяючи лише з'єднання із зворотним зв'язком, вимагаючи від адміністратора змінити його на 0,0.0.0, щоб увімкнути зовнішнє підключення.

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