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
fuente
Respuestas:
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.
fuente
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í .
fuente
0.0.0.0/8 está reservado para la red local (ver RFC 6890 o para una lectura más fácil https://en.wikipedia.org/wiki/IPv4#Special-use_addresses ).
Por lo tanto, cualquier dirección que comience con 0 es válida, pero no es la dirección IP de una máquina en particular.
fuente
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...
¿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.
^ 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:
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.
fuente