Ceros iniciales en la dirección IPv4; ¿Es eso un no-no por convención o norma?

3

Enseño una clase sobre un producto de software que mi empresa elabora y encuentro que los estudiantes frecuentemente agregan ceros a una página de configuración para que el software se conecte a nuestro hardware. Los ceros iniciales son problemáticos en nuestro software, así es como y por qué surge esto.

Siempre expliqué que los ceros iniciales estaban en contra del pensamiento "estándar", eso es lo que me habían enseñado. Cuando estaba enviando el informe de errores por la cadena a mi departamento de ingeniería, no pude encontrar una fuente autorizada para esto (es decir, "El Estándar"), pero sí encontré información interesante y relacionada.

¿Los ceros iniciales son malos debido a una convención o van en contra del estándar?

Esto fue lo más cercano que pude encontrar a un estándar para no usar ceros iniciales, pero es un borrador caducado de algún tipo:

Representación textual de direcciones IPv4 e IPv6

En la sección correspondiente, dice:

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

También encontré los siguientes artículos discutiendo el fenómeno:

Ping y FTP resuelven dirección IP con cero inicial como octal

Los ceros iniciales en la dirección IP pueden dar como resultado un enrutamiento incorrecto

¿Son las direcciones IP con y sin ceros iniciales iguales?

¿Existe alguna documentación para omitir ceros en la notación decimal con puntos de las direcciones IPV4?

YetAnotherRandomUser
fuente
Gracias por la edición de enlaces. Normalmente, prefiero tener el texto completo de la URL debajo del título, pero no pude hacerlo, y luego no pude tener más de 2 enlaces, por lo que realmente aclaré la pregunta.
YetAnotherRandomUser
Al final, todo se reduce a la implementación del analizador, por lo que a la mayoría de los sistemas les debería gustar, pero algunos no ... las implementaciones de estándares siempre son así.
Frank Thomas

Respuestas:

5

No existe un estándar que exija que una dirección IPv4 se exprese de cierta manera. Es decir, el RFC no especifica uno y los formatos múltiples son de uso generalizado. Más comúnmente, verá cuatro octetos como números decimales, pero también puede ver un solo número hexadecimal de 8 dígitos o incluso un solo número decimal usado en su lugar. Aunque los números octales no son comunes, muchas implementaciones también los aceptan.

Esta es la razón por la cual usualmente se evitan los ceros iniciales; La dirección podría ser ambigua. '010.010.010.010' podría estar en un rango privado, pero también podría ser el famoso servidor DNS de Google en '8.8.8.8'. Los números que comienzan con un cero inicial y no contienen los dígitos 8 o 9 a menudo se interpretan como octales.

Marcks Thomas
fuente
¿A qué RFC te refieres?
YetAnotherRandomUser
1
@allanonmage - En el contexto utilizado. La única posibilidad sería la RFC que cubre IPv4.
Ramhound
1
RFC 791, para ser exactos.
Marcks Thomas
1

Idealmente, no debería importar, ya que cuando se divide en binario / hexadecimal / lo que sea, los ceros iniciales no deberían afectar el resultado final.

Ejemplo: 192.168.1.1 a binario
192 = 11000000
168 = 10101000
1 = 00000001
1 = 00000001

Es exactamente el mismo que 192.168.001.001.
192 = 11000000
168 = 10101000
001 = 00000001
001 = 00000001

Ver una respuesta anterior de SU aquí .

kazoni
fuente
En algunos sistemas pueden interpretarse de manera diferente, por lo que deben evitarse: superusuario.com/a/857618/27205
Radu Maris
0

Volvamos al pasado cuando algunos de nosotros fuimos pioneros en el mundo de Internet y veamos esto desde un punto de vista histórico real.

Dato histórico: muchos, si no la mayoría de los enrutadores iniciales, requieren este formato exacto para las entradas de direcciones IP: xxx.xxx.xxx.xxx

Lo que esto significa: la mayoría de las personas que estuvieron en la década de 1980 y 1990 configurando los enrutadores nunca pensaron en ver las direcciones IP mostradas como: 192.168.001.010 Después de todo, el relleno con ceros a la izquierda era casi siempre obligatorio y nunca, nunca, lo he hecho. y dudo que la mayoría de los demás se hayan encontrado con un enrutador, firewall, host de IP de cualquier tipo que haya solicitado números octales.

Y entonces...

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

¿Por qué usar el relleno ahora cuando casi el año 2020, cuando la mayoría de los sistemas aceptan 1-3 caracteres de base 10 en cada octeto en lugar de la vieja escuela 3? Puedo pensar en una razón que encuentro frecuentemente:

Una lista ordenada de direcciones IP en Excel.

10.1.1.1
10.100.254.50
10.16.2.3
10.3.129.44
10.3.2.50

^ así es como Excel ordenaría estas direcciones (¡no ordenadas numéricamente!)

Pero si tiene una lista grande de direcciones IP y desea ordenarlas: use ceros de relleno para que Excel proporcione esta lista ordenada:

010.001.001.001
010.003.002.050
010.003.129.044
010.016.002.003
010.100.254.050

Ahora, si esta lista tuviera más de 300 direcciones, digamos, y quisiera verlas en orden, el relleno es su amigo.

Además, si están en una base de datos y se usó una ordenación de cadenas para ordenar la lista, el relleno también es su amigo.

shaggy1966
fuente