Я знаю, что 127.0.0.1 ~ 127.255.255.254 - это IP-адреса обратной связи для большинства современных операционных систем, и эти IP-адреса могут использоваться для обозначения нашего собственного компьютера.
Но что это за 0.0.0.0? Кажется, это также относится к локальному компьютеру, так что разница?
И не могли бы вы объяснить мне следующие IP-соединения:
Единственное, что вы не говорите «все адреса должны иметь доступ» - это делается в вашем брандмауэре (ах) и / или серверном программном обеспечении и / или других уровнях безопасности, таких как 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, это означает, что служба прослушивает все настроенные сетевые интерфейсы, при прослушивании 127.0.0.1 служба привязана только к интерфейсу обратной петли (доступно только на локальном компьютере).
IP-адрес 0.0.0.0
может иметь очень разное значение в зависимости от того, где оно используется.
0.
).netstat
команда (это то, что вы просили), это означает, что данный сокет прослушивает все доступные IP-адреса, которые есть у компьютера; когда у компьютера более одного IP-адреса, сокет может быть привязан только к определенной паре адресов и портов или к порту и все адреса; если вы видите там IP-адрес, это означает, что сокет прослушивает только этот порт и этот конкретный адрес; Если ты видишь 0.0.0.0
, это означает, что он прослушивает этот порт на все адреса машины, включая петлевой (127.0.0.1
).Ответ Ли Б правильный, но вот несколько соответствующих 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-интерфейса внутри самого хоста, независимо от того, как выглядят остальные настройки сети, если таковые имеются. Любой трафик, отправленный на устройство обратной связи, немедленно принимается на него. Дело не в том, что кольцевая сеть «обращается» к вашему собственному хосту ... это больше похоже на то, что у вас есть мини-сегмент сети на вашем хосте, который устройства, процессы и сокеты могут открываться и подключаться.
Проще говоря: прослушивание на 0.0.0.0 означает прослушивание из любого места, где есть сетевой доступ к этому компьютеру, например, с этого самого компьютера, из локальной сети или из Интернета, а прослушивание на 127.0.0.1 означает прослушивание только с этого самого компьютера.