Вопрос: Ведущие нули в адресе IPv4; что нет-нет по соглашению или стандарту?


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

Я всегда объяснял, что ведущие нули против «стандартного» мышления - это то, чему меня учили. Когда я отправлял сообщение об ошибке в цепочку к моему инженерному отделу, я не смог найти авторитетный источник для этого (т. Е. «Стандарт»), но я нашел интересную и смежную информацию.

Являются ли ведущие нули плохими из-за соглашения или они противоречат стандарту?

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

Текстовое представление адресов IPv4 и IPv6

В соответствующем разделе говорится:

3 Syntax and Semantics

3.1 IPv4 Dotted Octet Format

   A 32-bit IPv4 address is divided into four octets.  Each octet is
   represented numerically in decimal, using the minimum possible number
   of digits (leading zeroes are not used, except in the case of 0
   itself).  The four encoded octets are given most-significant first,
   separated by period characters.

        IPv4address = d8 "." d8 "." d8 "." d8

        d8          = DIGIT               ; 0-9
                    / %x31-39 DIGIT       ; 10-99
                    / "1" 2DIGIT          ; 100-199
                    / "2" %x30-34 DIGIT   ; 200-249
                    / "25" %x30-35        ; 250-255

Я также нашел следующие статьи, обсуждая это явление:

Ping и FTP разрешают IP-адрес с ведущим нулем в качестве восьмого

Ведущие нули в IP-адресе могут привести к неправильной маршрутизации 

Являются ли IP-адреса с и без ведущих нулей одинаковыми?

Есть ли какая-либо документация для опускания нулей в десятичных десятичных обозначениях адресов IPV4?


2
2018-06-17 16:10


Источник


Спасибо за редактирование ссылок. Обычно я предпочитаю иметь полный текст URL-адреса под заголовком, но я не мог этого сделать, и тогда у меня не могло быть более двух ссылок, поэтому я действительно убирал вопрос. - YetAnotherRandomUser
В конце концов, все сводится к реализации парсера, поэтому большинству систем должно понравиться это хорошо, но некоторые могут не ... Стандартные реализации всегда такие. - Frank Thomas


Ответы:


Нет стандарта, который требует, чтобы адрес IPv4 был определен определенным образом. То есть, RFC не указывает, что один и несколько форматов широко используются. Чаще всего вы увидите четыре октета в виде десятичных чисел, но вы также можете увидеть одно восьмеричное шестнадцатеричное число или даже одно десятичное число. Хотя восьмеричные числа являются необычными, многие реализации также принимают их.

Вот почему обычно избегают ведущих нулей; адрес может быть неоднозначным. «010.010.010.010» может находиться в частном диапазоне, но также может быть известным DNS-сервером Google на уровне «8.8.8.8». Числа, начинающиеся с одного ведущего нуля и не содержащие цифр 8 или 9, часто интерпретируются как восьмеричные.


5
2018-06-17 17:07



К какой RFC вы имеете в виду? - YetAnotherRandomUser
@allanonmage - В контексте используется. Единственной возможностью может быть RFC, который охватывает IPv4 - Ramhound
RFC 791, если быть точным. - Marcks Thomas


В идеале это не имеет значения, так как когда он разбивается на двоичный / шестнадцатеричный / любой, ведущие нули не должны влиять на конечный результат.

Пример: 192.168.1.1 - двоичный
192 = 11000000
168 = 10101000
1 = 00000001
1 = 00000001

Это то же самое, что и 192.168.001.001
192 = 11000000
168 = 10101000
001 = 00000001
001 = 00000001

См. Предыдущий ответ SU Вот,


1
2018-06-17 16:42



В некоторых системах их можно интерпретировать по-разному, поэтому их следует избегать: superuser.com/a/857618/27205 - Radu Maris


0.0.0.0/8 зарезервировано для локальной сети (см. RFC 6890 или для более легкого чтения https://en.wikipedia.org/wiki/IPv4#Special-use_addresses).

Таким образом, любой адрес, начинающийся с 0, действителен, но это не адрес ip конкретной машины.


0
2018-06-17 16:55