3

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

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

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

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

Текстовое представление адресов 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?

4 ответа4

5

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

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

1

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

Пример: 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 здесь.

0

Давайте вернемся назад, когда некоторые из нас были первопроходцами в мире Интернета, и посмотрим на это с исторической точки зрения.

Исторический факт: многим, если не большинству ранних маршрутизаторов требовался (опять же: требуется) этот точный формат для ввода IP-адреса: xxx.xxx.xxx.xxx

Что это означает: большинство людей, которые были в 1980-х - 1990-х годах настраивали маршрутизаторы, никогда не задумывались о том, чтобы увидеть IP-адреса, показанные как: 192.168.001.010 В конце концов, заполнение ведущими нулями чаще всего было обязательным и никогда, никогда и я сомневаюсь, что большинство других действительно сталкивалось с маршрутизатором, брандмауэром, IP-хостом любого вида, который запрашивал восьмеричные числа.

Так что...

001.001.001.001 = 1.1.1.1
10.001.1.010 = 10.1.1.10  (inconsistently padding only some octets makes me sad)

Зачем использовать заполнение сейчас, когда почти год 2020, когда большинство систем принимают 1-3 базовых 10 символов в каждом октете, а не в старой школе 3? Я могу вспомнить причину, с которой я часто сталкиваюсь:

Сортированный список IP-адресов в Excel.

10.1.1.1
10.100.254.50
10.16.2.3
10.3.129.44
10.3.2.50

^ вот как Excel будет сортировать эти адреса (без нумерации!)

Но если у вас большой список IP-адресов и вы хотите отсортировать их: используйте нули для заполнения, чтобы Excel предоставил этот отсортированный список:

010.001.001.001
010.003.002.050
010.003.129.044
010.016.002.003
010.100.254.050

Теперь, если в этом списке было более 300 адресов, допустим, и вы хотите просмотреть их по порядку, отступ - ваш друг.

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

0

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

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

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