Провідні нулі в адресі IPv4; чи це ні-ні за згодою або стандартом?


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

Я також знайшов наступні статті, які обговорювали це явище:

Пінг і FTP Розв'язати IP-адресу з провідним нульовим як вісім

Ведення нулів у IP-адресі може призвести до неправильної маршрутизації

Чи IP адреси з і без провідних нулів однакові?

Чи існує документація для пропуску нулів в пунктирному десятковому форматі адрес IPV4?


Дякуємо за редагування посилання. Зазвичай я вважаю за краще мати повний текст URL-адреси під назвою, але я не зміг зробити це, і тоді я не міг би мати більше 2 посилань, так що дійсно прибрали питання.
YetAnotherRandomUser

Зрештою, все це зводиться до реалізації парсера, тому більшість систем це подобається, але деякі не можуть .... реалізація стандартів завжди така.
Frank Thomas

Відповіді:


5

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

Це є причиною, чому зазвичай виключаються нулі; адреса може бути неоднозначною. "010.010.010.010" може бути в приватному діапазоні, але також може бути відомим DNS-сервером Google на рівні "8.8.8.8". Цифри, які починаються з одного нуля і не містять цифр 8 або 9, часто інтерпретуються як вісімкові.


На який RFC ви маєте на увазі?
YetAnotherRandomUser

1
@allanonmage - У використаному контексті. Єдиною можливістю є RFC, що охоплює IPv4
Ramhound

1
RFC 791, точніше.
Marcks Thomas

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 тут .


На деяких системах вони можуть тлумачитися по-різному, тому їх слід уникати: superuser.com/a/857618/27205
Radu Maris


0

Давайте повернемося назад, коли деякі з нас були піонерами світу Інтернету і дивилися на це з реальної історичної точки зору.

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

Що це означає: Більшість людей, які перебували в конфігурації маршрутизаторів у 80-х - 1990-х роках, ніколи не думали про те, що IP-адреси відображаються як: 192.168.001.010 Зрештою, заповнення провідними нулями найчастіше було обов'язковим і ніколи, коли-небудь, і я сумніваюся, що більшість інших користувачів дійсно зіткнулися з маршрутизатором, брандмауером, IP-вузлом будь-якого типу, який запитував Octal чисел.

І так ...

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 + адрес, скажімо, і ви хотіли, щоб переглянути їх в порядку, заповнення ваш друг.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.