0.0.0.0 является действительным IP-адресом? - PullRequest
53 голосов
/ 07 сентября 2010

Является ли 0.0.0.0 действительным IP-адресом? Я хочу, чтобы моя программа могла сохранять его в качестве указания на то, что ни один адрес не используется, но это не сработает, если он действительно действителен.

Ответы [ 10 ]

47 голосов
/ 07 сентября 2010

Это действительно , поскольку оно содержит четыре октета, каждый в диапазоне от 0 до 255 включительно. Однако это не пригодный для использования в качестве реального IP-адреса.

RFC1700 (a) утверждает, что 0.0.0.0/8 (0.<anything>.<anything>.<anything>) зарезервирован только в качестве адреса источника. Вы можете оказаться в ситуации, когда кажется, что у вас есть этот адрес, но это обычно потому, что вам не был назначен какой-либо адрес (например, по DHCP).

См. Также Запись в Википедии по IPv4 .


(a) Хотя этот RFC в настоящее время считается устаревшим, он все еще корректен с точки зрения данного поведения. Его замена, https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml,, по-прежнему содержит тот же текст с подробным использованием адреса 0.0.0.0.

7 голосов
/ 07 сентября 2010

0.0.0.0 используется для привязки всех интерфейсов IPv4.Так что это специальное значение, как 127.0.0.1.

7 голосов
/ 07 сентября 2010

Да, это IP-адрес , но он зарезервирован.

0.0.0.0 / 8 - Адреса в этом блоке относятся к исходным хостам на "this" сеть. Адрес 0.0.0.0/32 может быть использован в качестве исходного адреса для этого хост в этой сети; другие адреса в пределах 0.0.0.0/8 могут использоваться для обратитесь к указанным хостам в этой сети

6 голосов
/ 01 сентября 2015

Давайте посмотрим на вопрос, задаваемый здесь ОП.

Является ли 0.0.0.0 действительным IP-адресом?

Да.Технически это действительный IP-адрес, а в других ответах описывается множество его вариантов (я не собираюсь публиковать здесь wikipedia ссылки ... или, может быть, я так).

Как таковой, я считаю, ответ Паксдиабло выше является наиболее правильным, но давайте также посмотрим на контекст вашего вопроса.

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

Это полностью зависит от вашего варианта использования.Учитывая, что это форум программистов, давайте рассмотрим эту перспективу.

Если ваше программное обеспечение хранит реальные интернет-адреса - местоположения серверов, посетителей вашего сайта, сайты репликации / зеркалирования или резервного копирования, веб-службы или серверы баз данных и т. Д.- тогда это будет совершенно справедливо.Ни одному компьютеру в Интернете никогда не будет назначен этот адрес, и при этом он никогда не будет преобразован в действительное соединение.

Если, с другой стороны, вы пишете прошивку брандмауэра или маршрутизатора, этот адрес приобретает особое значение;маршрут по умолчанию, принять любой источник / пункт назначения IP, заблокировать все IP источник / пункт назначения, сквозной контроль и т. д., как указано всеми остальными.Однако позвольте мне отметить, что если вы программируете на этом уровне, у вас должно быть достаточно хорошее понимание сетевых протоколов, чтобы не нужно было задавать этот вопрос в первую очередь.

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

3 голосов
/ 07 сентября 2010

Зарезервирован как маршрут по умолчанию адрес.

Обычно это можно увидеть через ipconfig, когда вам не назначен адрес.

1 голос
/ 07 июня 2019

Как уже упоминалось в других ответах, 0.0.0.0 является допустимым и допустимым для некоторых целей IP-адресом.

Если все значения в диапазоне являются допустимыми значениями, то все элементы флага, которые вы хотите определить, должны исходить изгде-нибудь еще.В противном случае вы будете перегружать допустимое значение значением флага, и при использовании перегруженного значения будет невозможно на 100% определить, предназначалось ли допустимое значение или значение флага.Это приведет к ошибкам, которые должны быть устранены с учетом коэффициента, который может быть дорогостоящим.

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

По совпадению, я сейчас работаю над системой (не основанной на Ethernet / IP), где длина кадра ограничена примерно 40байт.Поскольку байт может представлять длины от 0 до 255 байтов, а максимальная длина составляет 40 байтов, я могу использовать некоторые из неиспользуемых, иначе говоря, недопустимых значений (от 252 до 255), для представления элементов флага.Эти внутриполосные флаги в порядке, потому что нет перегрузки.

1 голос
/ 07 сентября 2010

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

0 голосов
/ 21 ноября 2014

Выполнение сетевого запроса Whois также может привести к весьма полезным выводам.
Пример:
http://whois.arin.net/rest/nets;q=0.0.0.0?showDetails=true

Комментарий: адрес 0.0.0.0 может использоваться только в качестве адреса исходящего пакета, когда компьютер узнает, какой IP-адрес он должен использовать. Он никогда не используется в качестве адреса назначения. Адреса, начинающиеся с "0." иногда используются для трансляции на напрямую подключенные устройства.

0 голосов
/ 25 мая 2011

конечно, это так. однако он не будет действительным для одного хоста в сети. это находится в диапазоне вещания для локальной сети. читай здесь: http://tools.ietf.org/html/rfc1700

0 голосов
/ 07 сентября 2010

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

РЕДАКТИРОВАТЬ: хорошо, он зарезервирован для маршрута по умолчанию, но он все еще действителен.

...