Вопрос: В чем разница между IP-адресом 0.0.0.0 и 127.0.0.1?


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

Но что такое 0.0.0.0? Кажется, это также относится к локальному компьютеру, так что разница?

И вы могли бы объяснить мне следующие IP-соединения:

screenshot of netstat -an output


199
2017-10-25 07:22


Источник


Также рассмотрите этот вопрос, так как он дает подробную информацию о том, что 0.0.0.0 (и не является): serverfault.com/questions/228629/... - Ellie Kesselman
Современная операционная система будет использовать ::1 как петлевой адрес. - kasperd


Ответы:


Единственное, что вы не говорите «все адреса должны иметь доступ» - это делается в ваших брандмауэрах и / или серверном программном обеспечении и / или других уровнях безопасности, таких как 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 обычно означает маршрут по умолчанию (маршрут к «остальной части» Интернета, кроме маршрутов в вашей локальной сети и т. Д.).


137
2017-10-25 08:55



поэтому вы подразумеваете, что сокет веб-сервера привязан к любым доступным адресам, когда он прослушивает 0.0.0.0? - onmyway133
0.0.0.0 означает маршрут по умолчанию только если он сопровождается префиксом /0 (или сетевой маске 0.0.0.0) - minmaxavg
Следует отметить: если какой-либо процесс прослушивает 0.0.0.0, он будет доступен по IP-адресам всех сетевых интерфейсов машины, которые включают в себя текущий адрес интерфейса обратной связи цикла. Но если процесс прослушивает только порт <portNumber> адреса loopback, например. 127.0.0.1, а затем процесс доступен только с той же машины от таргетинг точно 127.0.0.1: <portNumber>, Пытаться это инструмент python  играть! - Gab是好人


Когда служба прослушивает 0.0.0.0, это означает, что служба прослушивает все настроенные сетевые интерфейсы, при прослушивании на 127.0.0.1 услуга привязана только к интерфейсу loopback (доступна только на локальном компьютере)


74
2017-10-25 07:33





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).

37
2017-08-12 06:45



Что это значит, если вы скручиваете 0.0.0.0? Является ли завиток фактическим контактом и отправкой запроса через доступные интерфейсы? Как он узнает, какой интерфейс является правильным? Я понимаю, как сервер может прослушивать все интерфейсы, но каков механизм запроса клиента на все интерфейсы, например, когда я скручиваю 0.0.0.0 или curl [::]. - CMCDragonkai
ОС, скорее всего, заблокирует вас от этого, поскольку это не просто имеет смысл с точки зрения сети. Попытка ping 0.0.0.0 в системе Windows появляется сообщение об ошибке. - Massimo
curl 0.0.0.0 доходность connection refusedна Arch Linux. ping 0.0.0.0, с другой стороны, похоже, является псевдонимом для ping 127.0.0.1 который отлично работает. - Matthias Braun
@MatthiasBraun connection refused может быть потому, что curl по умолчанию пытается подключиться к порту 80 / tcp. Попробуйте найти открытые порты с nmap -sV localhost а затем, например, если 631 / tcp: curl 0.0.0.0:631, - Pablo Bianchi


Ответ Ли Б справедлив, но вот некоторые релевантные RFC, если вы заинтересованы.

0.0.0.0:

Из RFC1122, Раздел 3.1.2.3:

Теперь мы суммируем важные частные случаи для классов A, B,               и C IP-адреса, используя следующие обозначения для 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 для loopback. Как описано в [RFC1122], раздел 3.2.1.3, адреса во всем блоке 127.0.0.0/8 не могут быть законно представлены в какой-либо сети в любом месте.

Разница между 0.0.0.0 и адресом loopback 127.0.0.1 заключается в том, что обратный адрес сконструирован так, чтобы обеспечить полностью функционирующий IP-интерфейс внутри самого хоста, независимо от того, как выглядит остальная сетевая настройка, если таковая имеется. Любой трафик, отправленный на устройство loopback, немедленно получает на нем. Это не так, что сеть loopback «ссылается» на ваш собственный хост ... это больше похоже на то, что у вас есть сегмент мини-сети на вашем хосте, что устройства, процессы и сокеты и могут открываться и подключаться.


25
2017-08-12 06:20





Проще говоря: прослушивание на 0.0.0.0 означает прослушивание из любого места, имеющего сетевой доступ к этому компьютеру, например, с этого самого компьютера, из локальной сети или из Интернета, а при прослушивании 127.0.0.1 означает только прослушивание с этого самого компьютера


3
2017-12-28 10:28