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

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

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

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

 снимок экрана netstat -an output

197 голосов | спросил Jichao 25 +03002009-10-25T10:22:06+03:00312009bEurope/MoscowSun, 25 Oct 2009 10:22:06 +0300 2009, 10:22:06

5 ответов


137

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

ответил Lee B 25 +03002009-10-25T11:55:26+03:00312009bEurope/MoscowSun, 25 Oct 2009 11:55:26 +0300 2009, 11:55:26
74

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

ответил slubman 25 +03002009-10-25T10:33:30+03:00312009bEurope/MoscowSun, 25 Oct 2009 10:33:30 +0300 2009, 10:33:30
36

IP-адрес 0.0.0.0 может иметь очень разные значения, в зависимости от того, где он используется.

  • Это не действительный адрес, который должен быть дан фактическому сетевому интерфейсу, а также любой другой адрес в подсети 0.0.0.0/8 (т.е. любой адрес, начинающийся с 0.).
  • Он не может использоваться в качестве исходного адреса для любого IP-пакета, если это не происходит, когда компьютер по-прежнему не знает свой собственный IP-адрес и пытается его приобрести (классический пример: DHCP).
  • Если используется в таблице маршрутизации, он идентифицирует шлюз по умолчанию; маршрут до 0.0.0.0 является стандартным, то есть тот, который используется, когда нет более определенного маршрута, доступного для адреса назначения.
  • Наконец, когда вы видите на выходе команды netstat (что вы просили), это означает, что данный сокет прослушивает все доступные IP-адреса, которые имеет компьютер; когда компьютер имеет более одного IP-адреса, сокет может быть привязан только к определенной паре адресов и портов или к портам и адресам all ; если вы видите там IP-адрес, это означает, что сокет прослушивает только этот порт и этот конкретный адрес; если вы видите 0.0.0.0, это означает, что он прослушивает этот порт на адресах all на компьютере, включая loopback one (127.0.0.1 ).
ответил Massimo 12 AM000000100000004531 2011, 10:45:45
24

Ответ Ли Б справедлив, но вот некоторые релевантные 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, немедленно получает на нем. Это не так, что петлевая сеть «ссылается» на ваш собственный хост ... это больше похоже на то, что у вас есть сегмент мини-сети на вашем хосте, что устройства, процессы и сокеты могут открываться и подключаться.

ответил kce 12 AM000000100000001231 2011, 10:20:12
3

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

ответил Hải Phong 28 WedEurope/Moscow2016-12-28T13:28:00+03:00Europe/Moscow12bEurope/MoscowWed, 28 Dec 2016 13:28:00 +0300 2016, 13:28:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132