В чем разница между 127.0.0.1 и 0.0.0.0?

235

Я понимаю, что 127.0.0.1 указывает на то же самое localhost, что и 0.0.0.0 (поправьте меня, если я ошибаюсь). Итак, в чем разница между 127.0.0.1 и 0.0.0.0?

Сагник Саркар
источник
1
Возможно, вас заинтересует обсуждение в Chrome bug tracker о том, как обрабатывать 0.0.0.0ввод адреса.
Джереми Бэнкс
6
В большинстве конфигураций сервера 0.0.0.0 означает, слушайте ВСЕ адреса! Это сделает ваш сервер доступным в интернете. Если вы делаете это для какого-то локального сервера без какой-либо защиты (он только прослушивает localhost, верно?), Это плохо. Не делай этого!
Йозеф
56
Ответь на свой вопрос буквально, разница есть 2130706433.
Shaz
2
@ О, ты один из тех, кто настроил совершенно небезопасную систему, потому что брандмауэр все это исправит? Обычно эти системы затем можно найти с помощью shodan.io : 3 Следующий уровень этого мышления - «мы полностью можем использовать 5-летнюю установку WordPress, мы получили WAF». Я не рекомендую никому идти по этому пути, никогда!
Йозеф
2
@Shaz Я бы хотел поднять ваш комментарий, но так как сейчас 42, я не могу заставить себя сделать это ...
Дженни Д

Ответы:

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), также называемый «локальный хост». Этот адрес используется для установления 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 Reserved, 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 протокола пользовательских дейтаграмм (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 или корпоративных сетях.


Маршрут по умолчанию

Этот документ объясняет, как настроить маршрут по умолчанию или шлюз последней инстанции. Эти IP-команды используются:

  • ip default-gateway

  • ip default-network

  • и ip route 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 default-network, использование статического маршрута до 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 интернет-протокола адрес 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локальной сети)
Ник Т
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 Вы путаете адрес трансляции с loopback. Обратная петля - 0.0.0.0, которая, как описано выше, прослушивает все локальные адреса. Трансляция (простым способом) - это 255 сетей, которые «транслируют» на все адреса в этой сети.
Desorder
Это неполно - многие операционные системы фактически позволяют подключаться к 0.0.0.0, который затем ведет себя как адрес обратной связи.
Гравитация
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 даже не является недоступным или не маршрутизируемым адресом, он не имеет смысла в контексте, где ожидается адрес .

Вы можете использовать джокер 0.0.0.0 в тех случаях, когда адрес может быть предоставлен по желанию , что означает, что мне все равно .

Например, когда вы активно открываете TCP-соединение с каким-либо TCP-сервером (TCP-сервер создается с помощью пассивного открытия TCP), вам необходимо указать адрес TCP-сервера (IP и номер порта), и вы можете при желании выбрать местный адрес. (Поскольку ваш сокет не является сокетом сервера, никто не может открыть соединение с ним, и адрес на вашей стороне соединения обычно не очень важен.)

bindСистемный вызов используется для выбора адреса локального сокета TCP. Передаваемые данные на bindсамом деле представляют собой набор ограничений: ограничение на IP-адрес, ограничение на TCP-порт. Обычная текстовая запись - это IP: порт. 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.

curiousguy
источник
Когда я набрал в браузере случайный адрес, начинающийся с 127 (например, 127.16.23.42), он не подключался к localhost.
WhoKnows
@whoKnows Конечно. localhost - 127.0.0.1, а не 127.16.23.42.
любопытный парень
Понимаю. Таким образом, 127.0.0.1 означает localhost, но 127.xyz может означать локальный компьютер, если он был настроен таким образом?
знает
2
@whoKnows No: 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, веб-сервер по одному адресу не может быть найден по другому адресу.
любопытный парень
6

Обычно вы используете bind-адрес 0.0.0.0 для разрешения соединений из внешних сетей и источников. Многие серверы, такие как MySQL, обычно связываются с 127.0.0.1, разрешая только петлевые соединения, требуя от администратора изменить его на 0.0.0.0 для включения внешнего подключения.

Марек Бейда
источник