35 votos

Es válido tener parte de una dirección IPv4 set a cero?

Estoy trabajando en un cambio en una aplicación Java EE que autenticar basado en la dirección IP del usuario utilizando ServletRequest.getRemoteAddr. Almacenamos los rangos de direcciones IP (FROM_IP y TO_IP) en una base de datos y el sistema de autenticar sólo si la dirección IP de un usuario cae en un rango.

Ahora, los probadores han señalado que el dígito 0 (cero) no deben ser permitidas en FROM_IP y TO_IP valores (en cualquier lugar). Tenga en cuenta que esta es una conexión a Internet de la aplicación, y así vamos a obtener sólo las direcciones IP públicas.

Son los probadores de derecho en lo que sugiere que la validación? ¿Por qué no podemos tener cero en el rango de valor como en 167.23.0.1 - 167.23.255.255?

67voto

MikeyB Puntos26178

No, son totalmente incorrectos.

De hecho, esta es una dirección IP válida: 192.168.24.0

Como es 167.23.0.1.

La separación de la dirección IP en el punteado de los segmentos es puramente humana comodidad de visualización. Es mucho más fácil de recordar, 192.168.1.42 de 3232235818.

Lo que importa a los ordenadores es la separación (máscara de red). No es válido tener una dirección de host con la sección de host de la dirección enteramente a 0 o 1.

Así, 192.168.24.0 tan largo como la máscara de red es tal, que algunos bit se establece en la parte de host. Consulte los siguientes cálculos:


michael@challenger:~$ ipcalc 192.168.24.0/16
Address:   192.168.24.0         11000000.10101000. 00011000.00000000
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

En este caso, la dirección de la parte (lado derecho) tiene 2 conjunto de bits. Esta es una dirección de host válido en el 192.168.0.0/16 de subred.


michael@challenger:~$ ipcalc 192.168.24.255/16
Address:   192.168.24.255       11000000.10101000. 00011000.11111111
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

En este caso, la dirección de la parte tiene 10 bits y 6 bits unset. Esta es otra dirección de host válido en la misma subred.


michael@challenger:~$ ipcalc 192.168.24.0/24
Address:   192.168.24.0         11000000.10101000.00011000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.24.0/24      11000000.10101000.00011000. 00000000
HostMin:   192.168.24.1         11000000.10101000.00011000. 00000001
HostMax:   192.168.24.254       11000000.10101000.00011000. 11111110
Broadcast: 192.168.24.255       11000000.10101000.00011000. 11111111
Hosts/Net: 254                   Class C, Private Internet

En este caso, la dirección de la parte tiene cero conjunto de bits. Esta no es una dirección de host válido en el 192.168.24.0/24 red.

15voto

EEAA Puntos66011

A menos que yo estoy entendiendo, sus probadores están equivocados. Direcciones IP válidas sin duda puede tener un 0 en ellos.

11voto

pehrs Puntos6831

En general: No, no importa si hay un 0 en la dirección o no.

Sin embargo, hay un grano de verdad en lo que sus probadores están diciendo. En algunos casos, viejos o rotos equipos de red no funcionará correctamente en direcciones con 0 en el último octests. Esto es debido a la edad classfull reglas de enrutamiento. En Classfull de enrutamiento, puede decirle a la máscara de red desde el primer octeto de la dirección. Si el equipo sigue classfull reglas de enrutamiento, es probable que para manejar un discurso como el 200.100.1.0/16 incorrectamente.

3voto

Lucas Kauffman Puntos14284

Digamos que usted necesita 510 direcciones IP en un rango y su red adress 192.1.1.0, tendría un /23 de subred, de los cuales uno de sus IP del host es una .0 dirección IP, su probadores están mal, si el .0 dirección es una dirección de host. Si usted tiene un /24 red no sería correcto decir que estaba mal.

2voto

Russ Wheeler Puntos173

Para proporcionar una respuesta muy simple: Uno o más ceros en una dirección ip son perfectamente válidos para las direcciones de host como siempre que dichas direcciones no son de la red o la dirección de broadcast.

De red y las direcciones de difusión son las direcciones ip válidas, no son utilizables por los ejércitos.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: