4

Пинг до 0.0.0.0 отвечает от 127.0.0.1 . Тем не менее, если я отключаю локальную петлю и сохраняю другой интерфейс с другим ip, то ping 0.0.0.0 выдает ошибку

$ping 0.0.0.0 connect: Invalid argument

Разве 0.0.0.0 не должен прослушивать все интерфейсы? Итак, в основном, как именно привязка 0.0.0.0 работает с точки зрения сети? Как ping 0.0.0.0 работает только для обратной связи, а не для другого интерфейса?

  • Обновление Я прочитал его в другом месте и получил аналогичный ответ здесь (вы не можете пинг 0.0.0.0).
[anshup@s2 ~]$ ping 0.0.0.0 PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.010 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.009 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.009 ms
^C
--- 0.0.0.0 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2551ms
rtt min/avg/max/mdev =
0.009/0.009/0.010/0.002 ms

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

2 ответа2

17

0.0.0.0/0 - это не адрес, а сетевой идентификатор (используется для маршрутизации и означает «все сети»). как таковой, вы не можете пинговать его. если вы хотите пропинговать каждую систему, вы должны использовать 255.255.255.255 . Каждая сеть имеет два специальных адреса, Identity и Broadcast, обычно на .0 и .255 соответственно.

например, в сети 192.168.5.0/24 , идентификатор = 192.168.5.0 и широковещание = 192.168.5.255 . первый хост - 192.168.5.1 , а последний - 192.168.5.254 . обратите внимание, что ни один хост не может использовать идентификатор или широковещательный адрес в качестве своего собственного IP-адреса.

шлюз по умолчанию для хоста по определению является маршрутом, который вы используете для достижения всех неизвестных сетей, поэтому 0.0.0.0/0 - это просто ссылка на все сети.

Редактировать: причина, по которой петля отвечает, - неопределенное поведение, не указанное в RFC1700. Согласно RFC, адрес, начинающийся с 0 (когда он выражен в десятичном формате), никогда не разрешается в качестве пункта назначения (только в качестве источника широковещательного пакета), поэтому автор вашего сетевого стека выбирает ответ по шлейфу.

Когда я пытаюсь пропинговать 0.0.0.0 из командной строки Win7/powershell, я просто получаю сообщение «PING: передача не удалась». Общий провал. так что это явно поведение, специфичное для данного стека ОС, или, возможно, даже для драйвера. Если вы предоставите свою ОС, мы сможем найти больше, но она не ответит ни на какие значимые вопросы, поскольку ее поведение при реализации не регулируется сетевыми стандартами. Я предполагаю, что ваша ОС просто совмещает все недействительные адреса как адреса 127.x.y.z .

1

В версии 4 интернет-протокола адрес 0.0.0.0 является не маршрутизируемым мета-адресом, используемым для обозначения недопустимой, неизвестной или неприменимой цели.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .