¿Por qué no se pueden usar todos los ceros en la parte del host de la dirección IP para un host?

21

Sé que si tengo una red, 83.23.159.0/24entonces tengo 254 direcciones IP de host utilizables porque:

83.23.159.0      (in binary: host portion all zeros) is the subnet address
83.23.159.1-254  are host addresses
83.23.159.255    (in binary: host portion all ones) is the broadcast address

Entiendo el uso de una dirección de difusión, pero no entiendo para qué se utiliza la dirección de subred. No puedo ver ninguna razón por la cual la dirección de destino de un paquete IP se establecería en la dirección de subred, entonces, ¿por qué la subred misma necesita una dirección si nunca va a ser el punto final para un flujo de IP de AN? Para mí, parece un desperdicio no permitir que esta dirección se use como dirección de host.

Para resumir, mis preguntas son:

  1. ¿Se ha configurado alguna vez el destino de un paquete IP en la dirección IP de subred?
  2. En caso afirmativo, ¿en qué casos y por qué?
  3. Si no, ¿por qué no liberar esa dirección para que la use cualquier host?
Grezzo
fuente
2
ifconfigno se queja cuando configura la dirección de host de una red 24 a 0 o 255. Simplemente intente usarla.
ott--
2
Yo si. Parece funcionar para un .0. Pero podría romper el software anterior. .255 también funcionará si no utiliza ningún protocolo que requiera difusión. Supongo que puede configurarlo si configura manualmente las tablas ARP con direcciones permanentes en todas las computadoras, pero ¡qué asco!
Hennes
posible duplicado de ¿Cómo funciona la subred IPv4?
John Gardeniers
1
No estoy de acuerdo con eso John. Lo volví a verificar y no aborda la pregunta específica que se hizo. Lo cual es más bien un caso de borde.
Hennes
1
Esta pregunta ahora también se hace en un nuevo sitio de ingeniería de redes. Esas respuestas (en http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address ) tienen información que aún no se encuentra en las publicaciones de Server Fault .
Hennes

Respuestas:

12

¿Se ha configurado alguna vez el destino de un paquete IP en la dirección IP de subred?

Sí. Es una IP válida, por lo que se puede usar.

En caso afirmativo, ¿en qué casos y por qué?

Es simplemente una de las 255 IP utilizables en un / 24

Si no, ¿por qué no liberar esa dirección para que la use cualquier host?

Si tiene hardware antiguo , entonces debe verificar si usa la primera o la última dirección como dirección de red. (.0 o .255 para redes con máscara FF.FF.FF.00)

Esto hace que sea un buen hábito omitir esa IP. Y los hábitos aprendidos hace mucho tiempo son difíciles de ignorar.

Y las personas que no conocen el fondo no lo usan "porque otros tampoco lo usan, por lo que debe estar mal usarlo" o porque no se dan cuenta de que "0" puede ser un primer número.

[Editar] Grezzo acaba de probarlo en Windows XP, donde la GUI de la red de Windows 'útilmente' impidió esta configuración. Windows 7 tiene el mismo comportamiento. Luego lo probé en un host que no es de Windows donde simplemente funciona. Si utiliza Windows, es posible que deba configurar su red manualmente a través de IPconfig para configurarla en todos los ceros.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[Editar 2]

Cuanto más trabajo con esto, más me confundo.

Rfc4632: el enrutamiento entre dominios sin clase no parece prohibirlo, pero tampoco lo permite explícitamente.

Esta publicación de ServerFault menciona: "Por razones históricas, muchos sistemas operativos tratan la primera dirección como una transmisión. Por ejemplo, hacer ping a xxx0 desde OS X, Linux y Solaris en mi red local (/ 24) obtiene respuestas. Windows no le permite hacer ping. la primera dirección de forma predeterminada, pero es posible que pueda habilitarla usando el método SetIPUseZeroBroadcast WMI. Me pregunto si podría salirse con la suya usando .0 como una dirección de host en una red de todo Windows ". .

Es la misma pregunta, pero no una respuesta.

La dirección de red también se usa en las tablas de enrutamiento. Pero no veo por qué no funcionaría debido a eso. La misma notación en las tablas de enrutamiento se enrutaría a la red correcta. Una vez en la red correcta, llegaría a una PC con IP 0.

(Todo esto para un 192.168.1 / 24.
Si utilizó 192.168.0 / 23, entonces 192.168.1.0 sería un valor válido y seguro en el medio del rango)

[Editar 3]

Un enlace más a la misma pregunta. Parece algo popular en el intercambio de pila:

/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address

Y un pensamiento:

Destination_IP es probablemente Y editado con el mástil de red (una operación rápida en hardware) antes de ser comparado con las entradas en las tablas de enrutamiento. Pero:

(Una IP semialeatoria) 192.168.0.42 Y 255.255.255.0 producirían 192.168.0.0
Pero 192.168.0.0 Y 255.255.255.0 también producirían 192.168.0.0


[Edición 4: mucho después de que se escribió esta respuesta, es posible que deba volver a escribir toda la publicación debido a esta nueva información ]

RFC923 establece en la página 3 que:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Citando a @ylearn en nuestro sitio de ingeniería de redes

Creo que la primera documentación de eso proviene de RFC950 que hace referencia a RFC943 (que obsoleto RFC923 arriba pero usa el mismo idioma para direcciones especiales):

     It is useful to preserve and extend the interpretation of these
     special addresses in subnetted networks.  This means the values
     of all zeros and all ones in the subnet field should not be
     assigned to actual (physical) subnets.
Hennes
fuente
Entonces, para aclarar, ¿está diciendo que xxx0 / 24 es una dirección IP válida para un host? Si eso es así, ¿por qué (cuando intento configurar mi dirección IP en 192.168.1.0 con una máscara de red de 255.255.255.0) Windows XP dice " La combinación de la dirección IP y la máscara de subred no es válida. Todos los bits en el la parte de la dirección de host de la dirección IP se establece en 0. Ingrese una combinación válida de dirección IP y máscara de subred. "
Grezzo
3
Windows está mal (O dicho con menos fuerza: Windows es demasiado cuidadoso para trabajar con cualquier combinación de sistemas). Acabo de probar esto en mi sistema Windows 7 y recibí el mismo error que usted. Instalé un sistema limpio de FreeBSD y lo probé donde simplemente funciona. (Agregaré eso a la publicación)
Hennes
Gracias, has sido de gran ayuda. Solo quería agregar que la GUI en OS X tampoco te permitirá hacerlo, pero apuesto que ifconfig lo haría. No puedo entender por qué la respuesta de m0ntassar tiene más votos, ni siquiera intenta responder a mi pregunta. Una cosa más; cuando dice " Si tiene hardware antiguo, entonces debe verificar si usa la primera o la última dirección como dirección de red ", ¿se refiere a la dirección de transmisión ?
Grezzo
Sí, me refería a la dirección de transmisión. Maldición, ¿dónde está el botón "editar comentario anterior a 5 minutos"?
Hennes
Dulce, acabo de intentar hacer ping a .0 y .255, ambas veces mi PS3 respondió (todo lo demás es inalámbrico, así que supongo que es por eso que llegó primero) desde .65 para confirmar que en mi red ambos se usan para transmisión, que es por qué (normalmente) no deberíamos usar tampoco para una dirección de host real.
Grezzo
15

Una dirección con una porción de host totalmente cero se refiere a la red misma, en lugar de a cualquier host en particular.

Históricamente, esta dirección de host cero ha servido como una dirección de transmisión alternativa, y los dispositivos aún responden de esa manera.

Entonces, tengo que estar en desacuerdo con algunas otras respuestas: no, cero no es una dirección de host perfectamente utilizable. Si necesita más de 254 direcciones, debe crear una subred más grande.

Mira, mi enrutador Linksys, cuya dirección .1responde a pings de .0. (La máscara de red es 255.255.255.0, por lo que el último octeto corresponde al número de host).

webserver:~# ping  192.168.1.0
Do you want to ping broadcast? Then -b
webserver:~# ping -b 192.168.1.0
WARNING: pinging broadcast address
PING 192.168.1.0 (192.168.1.0) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.812 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.819 ms

Si asignara la .0dirección a algún host, no podría hacer ping sin que el enrutador interviniera con sus respuestas también. Y como puede ver, algunas herramientas como la versión de ese enrutador se pingtratan 0como una transmisión.

Puede doblar las reglas, si está dispuesto a parchear todas las pilas de protocolos y otro software que se ve afectado por dicha flexión. De lo contrario, se adhieren a las reglas.

Caso en punto.

Trabajé en una compañía que diseñó un nodo de red construido en un chasis de 14 ranuras, ejecutando numerosas imágenes independientes del sistema operativo en varios tipos de tarjetas, todas comunicadas a través de una placa posterior. Hubo una configuración de red sobre el plano posterior con una convención que 127.X.0.Yes la dirección IP interna del nodo Y en la ranura X, todos numerados del 1.

Básicamente, subdividimos la dirección de bucle invertido para nuestros propios fines. Para que funcione, tuvimos que parchear el kernel de Linux aquí y allá, y IIRC, un poco de espacio de usuario.

Dado que esa red solo se usó dentro de la caja, y la mayoría de los programas que requieren loopback usan la 127.0.*red (y de hecho la dirección específica 127.0.0.1) que continuó funcionando normalmente, todo fue genial.

Kaz
fuente
7

en realidad depende de la máscara de red, por ejemplo, para la red 83.23.159.0/23, 83.23.159.0 es una dirección IP perfectamente utilizable

m0ntassar
fuente
3
+1 - 83.23.158.255 también sería una dirección de host válida. Las personas se obsesionan con la regla de no 0 y no 255 sin considerar la máscara de subred.
joeqwerty
1
Soy consciente de que una dirección xxx0 es válida con una máscara de red de menos de / 24, pero tenga en cuenta que en mi pregunta especifiqué una máscara de red / 24, por lo que no ha respondido a mi pregunta. No estaba hablando de todos los 0 o 255 en el último cuarteto / byte, dije todos los 0 o 255 en la "porción de host" de la dirección IP. Esto tiene en cuenta la máscara de red.
Grezzo
2
Respuesta corta de @Grezzo: las cosas que no son CIDR y heredadas se rompen con .0, MS simplemente no lo permite por completo. Pero IPv6 es inminente, ¿por qué preocuparse? ;)
Sammitch
2
Esto no es realmente una respuesta, ya que la pregunta no es realmente acerca de la numerología de notación de puntos, sino sobre el estado / significado de una dirección de host 0 en cualquier subred de ancho.
Kaz
2
No veo por qué esta respuesta tiene tantos votos positivos. 83.23.159.0/23 no es "técnicamente" una red válida. 83.23.159.0 con una máscara 23 es en realidad una ip justo en el medio de la red 83.23.158.0/23. La pregunta no era "por qué no puedo tener .0 al final de la ip", era "por qué no puedo usar la dirección con la parte del host todos ceros". En su ejemplo, la dirección "todos los ceros del host" sería 83.23.158.0. Como se menciona en otras respuestas, esta es históricamente una dirección inutilizable (la "dirección de red") y aunque puede funcionar en algunos sistemas operativos, no es aconsejable intentar usarla.
USD Matt
3

Parece que hay una pequeña confusión aquí con las redes básicas.

El 'hardware antiguo' al que se hace referencia en una de las respuestas no utilizaría la subred IP cero: el uso de la dirección IP xxx0 con una red configurada para un CIDR / 24 o una máscara de subred 255.255.255.0 es un problema completamente diferente.

IP subred cero

  • El hardware más antiguo no usaría la subred IP cero, lo que significa que no usaría la primera subred en un sistema de red de subredes múltiples. Entonces, en una red / 23 o 255.255.254.0, la subred XXX0 y todas sus direcciones no se usarían. Los enrutadores modernos no tienen esta restricción, pero pueden configurarse para usar este antiguo modelo IE, no usar subred cero, si se desea.

Direcciones IP de host utilizables en una subred

  • Redes básicas:
    • Con / 24, es decir, máscara de subred de 255.255.255.0
    • xxx0 está reservado como la dirección de red. Los enrutadores y los protocolos de enrutamiento (EIGRP, RIP2, etc.) utilizan la dirección de red para definir segmentos de red para mover paquetes dentro y a través de los límites de la red.
    • xxx255 está reservado para la dirección de transmisión
    • Es una práctica común usar las direcciones .1 o .254 en los enrutadores para que dejen 253 números de IP utilizables.

Tanto la dirección de red como la dirección de difusión están reservadas y no pueden (según los estándares de red actuales y anteriores) asignarse a un dispositivo. Usar xxx0 para una dirección de host en un sistema / 24 es incorrecto. Incluso si Linux te permite usarlo, no significa que sea correcto, solo significa que Linux piensa que sabes lo que estás haciendo.

Si su sistema le permite asignar xxx0 como una dirección IP4 a un host y parece estar funcionando, es probable que ese host en particular esté recibiendo TODO el tráfico dirigido a CUALQUIER dispositivo en esa red, por lo que su red probablemente no funcione de manera óptima.

TheSteven
fuente
1
Ha dicho " xxx0 está reservado como la dirección de red (piense en ella como dirección global o puntero a toda la subred) ", pero no explicó para qué se usa realmente y, por lo tanto, no explicó por qué no se puede usar para un host
Grezzo
2
Actualicé mi publicación. La conclusión es que asignar la dirección de red a un dispositivo está en contra de las especificaciones y, aunque puede salirse con la suya en una red pequeña, aún corre el riesgo de que si su enrutador recibe una actualización de software (o si cambia los enrutadores) ) que el dispositivo o toda su red pueden dejar de funcionar correctamente.
TheSteven
3

RFC 1122 ("Requisitos para hosts de Internet - Capas de comunicación") lo prohíbe:

No se permite que las direcciones IP tengan el valor 0 o -1 para ninguno de los campos <Número de host>, <Número de red> o <Número de subred>

Bryan
fuente
1
Es cierto hasta donde llega. Pero si realmente va a la sección 3.3.6 como se recomienda, obtendrá la explicación completa.
Michael Hampton
@MichaelHampton ¿Porque BSD 4.2 usa 0 como transmisión?
Grezzo
3
@Grezzo Bastante. Estás atrapado con esto porque los 80 simplemente no morirán.
Michael Hampton
0

En realidad, la respuesta es la base de las subredes. La IP "todos ceros" de su subred combinada con la identificación de la red se usa para calcular a dónde debe enviarse el paquete.

En su ejemplo, tiene una subred de 255.255.255.0. Cualquier dispositivo que conozca el protocolo TCP / IP utilizará la máscara de red combinada con la dirección IP para calcular si el paquete está destinado a la red local (realizando una operación AND lógica) o si debe enviarse a través de la puerta de enlace / enrutador.

Así que supongo que la razón por la que no se puede usar IP es porque ya se usa para "definir" los límites de la red junto con la máscara de red por diseño.

Dios
fuente
Usted dice que " Cualquier dispositivo que conozca el protocolo TCP / IP usará la máscara de red combinada con la dirección IP para calcular si el paquete está destinado a la red local (realizando una operación AND lógica) ", pero ANDing 83.23.159.0 con 255.255 .255.0 y ANDing 83.23.159.1 con 255.255.255.0 produce el mismo resultado (83.23.159.0), por lo que usar este cálculo para determinar si está destinado a la red o enrutador aún funciona incluso cuando un host tiene la dirección .0
Grezzo
0

Se solicitó que volviera a publicar mi respuesta de NetworkEngineering , por lo que lo haré con alguna modificación para este sitio.

En RFC919 , hace referencia a la aceptación general de la dirección de red:

However, as a notational convention, we refer to
networks (as opposed to hosts) by using addresses with zero fields.
For example, 36.0.0.0 means "network number 36"

Esto proporciona una convención que debería aclarar nuestra comprensión si alguien mencionara "10.1.2.0" como la red y no como un host en la red.

A partir de ahí, el uso de "0" en una dirección IP se definió en RFC923 y se transfirió en RFC sucesivas:

Special Addresses:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Este ejemplo proporciona un host específico en la red actual (0.0.0.37) usando 0 en las porciones de red de la dirección, pero en realidad no aclara el caso opuesto (0 en la porción de host de la dirección). Sin embargo, como definió "0" como "esto".

En RFC1060, la dirección "0.0.0.0" estaba claramente documentada como "este host en esta red":

     (a)   {0, 0}

        This host on this network.  Can only be used as a source
        address (see note later).

Dado que todos los ceros para la parte del host de la dirección significaban "este host", lógicamente se deduce que no se puede utilizar como una dirección de host.

Volviendo a responder directamente a sus preguntas:

  1. ¿Se ha configurado alguna vez el destino de un paquete IP en la dirección IP de subred?
  2. En caso afirmativo, ¿en qué casos y por qué?
  3. Si no, ¿por qué no liberar esa dirección para que la use cualquier host?

De acuerdo con lo que encuentro en los RFC, esto no debe usarse. Admito que no está tan claramente especificado como me gustaría, pero eso es muy común en muchos estándares. Cuando los estándares son un poco menos firmes en un punto, la industria parece "conformarse" con una interpretación generalmente aceptada.

Además, según el contenido del software de RFC, se puede escribir para suponer que esta dirección se utiliza para direccionar la red y no un host en particular. O incluso más literalmente como una especie de "loopback" (es decir, este host en la red especificada).

Entonces, ¿por qué algunos sistemas operativos permiten claramente su uso? Me imagino que muchas cosas se reducen a tiempo / recursos del desarrollador o nadie realmente pensó en agregar la verificación de validez. La lógica debe ser un poco más complicada que "si termina en 0", ya que una subred más grande (a / 23 o más grande) contendrá una dirección IP válida de .255 y .0 (es decir, 10.1.2.0/23 contiene ambas IP válidas dirección de 10.1.2.255 y 10.1.3.0). Aunque algunas organizaciones también evitan el uso de esas direcciones válidas en subredes más grandes para evitar problemas extraños con el software que no admite correctamente las subredes modernas.

En cuanto a por qué no liberar esa dirección IP, simplemente se reduce a costo / beneficio. Haría falta mucho tiempo y esfuerzo realizar este cambio para recuperar una dirección IP por subred y, en cuántos casos cuando necesite direcciones IP adicionales, ¿será suficiente una sola dirección? Es mucho más fácil agregar una segunda subred o ampliar la subred actual, lo que potencialmente le brinda muchas direcciones para usar en lugar de una sola, sin realizar cambios importantes en ningún software / hardware en su lugar.

Aprender
fuente