Cómo calcular la máscara de dirección y la máscara de subred

El propósito fundamental del enmascaramiento de subred es permitir que los dispositivos de red determinen rápida y fácilmente si una dirección determinada se encuentra o no dentro de una subred determinada. Este cálculo debe realizarse para cada paquete que enruta un dispositivo de red, por lo que queremos que este cálculo sea lo más simple posible para el dispositivo.

Hacemos esto imponiendo una jerarquía de subredes en el rango de direcciones de más de 4 mil millones del espacio de direcciones IPv4. Recuerde que una dirección IPv4 tiene 32 bits de longitud y, por lo tanto, puede escribirse como un número binario de 32 dígitos. Una subred “/ n “, donde n es cualquier número entre 0 y 32, inclusive, se define como todas las direcciones que tienen el mismo prefijo de n bits cuando la dirección se escribe en binario. Cuanto más grande es n , más pequeña es la subred. Solo hay una subred de 0 bits y especifica toda la Internet. Esta especificación de subred particular se usa todo el tiempo para especificar la “ruta predeterminada”, porque una máscara de subred de 0/0 coincide con cada dirección. La máscara de subred más pequeña posible es a / 32, que coincide exactamente con una dirección. (Alguien aparecerá aquí y señalará que la subred más pequeña posible es en realidad un / 30, pero estamos hablando de enmascaramiento de subred aquí y es posible e incluso a veces útil usar máscaras de subred / 31 o / 32, incluso si estas en realidad no defino subredes enrutables. Pero estoy divagando.) El número de direcciones en una subred de n bits es 2 ^ (32-n); la máscara de subred de cero bits coincide con 4.294.967.296 direcciones (toda la Internet), mientras que cada máscara de subred de 32 bits coincide exactamente con 1 (y hay 4.294.967.296 posibles máscaras de este tipo).

La clave aquí es comprender que una subred está completamente definida por su longitud (de 0 a 32 inclusive) y por el prefijo de n bits que comparten todas las direcciones que la componen. Por lo general, escribimos un prefijo escribiendo la primera dirección en el rango que coincide; es decir, la dirección que comienza con este prefijo y luego se rellena con ceros a 32 bits. (Explicaremos por qué usamos ceros para el relleno más adelante). Entonces, tomemos el ejemplo en su pregunta, 130.1.2.0/23. 130.1.2.0, en binario, es 1000 0010 0000 0001 0000 0010 0000 0000. (Lo he escrito con espacios cada cuarto dígito para mayor claridad; esto es tradicional al escribir números binarios). Reescribamos esto con los primeros 23 bits en negrita para mayor claridad: 1000 0010 0000 0001 0000 001 0 0000 0000. Hay nueve bits que no están en negrita; esos bits no son parte de la dirección de red porque se enmascararán cuando la dirección de red se use realmente. Tenga en cuenta también que 23 más 9 es 32. Esta dirección, cuando se usa con la máscara adecuada (que trataremos a continuación), coincidirá con cualquier dirección que comience con esos 23 bits. Hay 9 bits que no están en la dirección, por lo que hay 2 ^ 9 = 512 direcciones en esta subred.

Entonces, ¿cómo subdividir esta subred en cuatro subredes iguales más pequeñas? Comencemos dividiéndolo en dos subredes iguales más pequeñas, ya que esto es más fácil de explicar, y una vez que sepa cómo dividir por dos, dividir por cuatro solo requiere hacer la división por dos dos veces. Divide una subred por la mitad aumentando su longitud de prefijo por 1. Esto agrega un bit al prefijo que debe coincidir. Hay exactamente dos opciones posibles para este bit: 0 y 1. Entonces, una de las subredes que esto crea tiene un 0 en este bit recién agregado, y la otra tiene un 1, siendo esas las dos únicas opciones posibles. Entonces, si divide 130.1.2.0/23 por la mitad, la primera subred tiene la dirección 1000 0010 0000 0001 0000 001 0 0000 0000 y la segunda tiene la dirección 1000 0010 0000 0001 0000 001 1 0000 0000. (He subrayado el nuevo bit en ambas direcciones para mayor claridad). Convertido de nuevo a decimal, estos son 130.1.2.0/24 y 130.1.3.0/24.

Ahora dividamos esta primera subred por la mitad nuevamente. Esto produce 1000 0010 0000 0001 0000 001 0 0 000 0000, que es 130.1.2.0/25, y 1000 0010 0000 0001 0000 001 0 1 000 0000, que es 130.1.2.128/25. Y aquí está el punto donde la mayoría de las personas se pierden. Quieren saber de dónde vino el “128”. En este caso, 128 es básicamente “la mitad”: es exactamente la mitad de 256, que es uno más grande que el número más grande que se puede representar en 8 bits. Del mismo modo, 64 es “un cuarto” y 192 es “tres cuartos”.

La otra dificultad es descubrir cómo escribir realmente la máscara de subred. La mayoría de las pilas de red no aceptarán la notación “/ n” para una subred; en cambio, quieren un número que normalmente se parece a “255.255.255.0”. Hay una forma sencilla de convertir la notación “/ n” a la notación de tipo “255.255.255.0”. En pocas palabras, escribe un número binario que comienza con n unos y luego termina con 32 n ceros, de modo que todo tiene 32 bits de longitud. Luego, convierte ese número binario de 32 bits en el mismo formato punteado de cuatro partes que usan las direcciones IP. Entonces, una subred / 23 usa una máscara de red de 1111 1111 1111 1111 1111 111 0 0000 0000. Eso es 23 unidades y 9 ceros. En notación “cuadrante decimal punteado”, esto es 255.255.254.0. Del mismo modo, una subred / 25 utiliza una máscara de red de 1111 1111 1111 1111 1111 1111 1 000 0000, o 255.255.255.128. Cualquiera que trabaje en el campo de las redes aprende rápidamente de memoria los equivalentes decimales de 1111 1111 (255), 1111 1110 (254), 1111 1100 (252), 1111 1000 (248), 1111 0000 (240), 1110 0000 (224) , 1100 0000 (192), 1000 0000 (128) y, por supuesto, 0000 0000 (0), porque estas conversiones en particular surgen todo el tiempo al calcular las máscaras de red. Todavía tendrá que hacer muchas conversiones binarias a decimales, y definitivamente ayuda tener memorizadas las potencias de dos hasta al menos 256 (personalmente las he memorizado hasta 262,144, que es 2 ^ 18).

Quizás se pregunte por qué las máscaras de red se escriben de esta manera. Esto se hace para facilitar la rápida determinación de si una dirección coincide con una dirección dada y un par de máscaras. Lo que hace el dispositivo es tomar la dirección dada, digamos 130.1.2.65. Primero realiza un “Y bit a bit” con la máscara de red. Lo que esto hace es poner a cero cualquier bit que no esté en la máscara (ya que bit a bit Y es 1 solo cuando ambos bits involucrados son 1 y 0 en caso contrario). Entonces, cuando hacemos bit a bit Y 130.1.2.65 (1000 0010 0000 0001 0000 0010 0010 0001) con 255.255.254.0 (1111 1111 1111 1111 1111 1110 0000 0000), el resultado es 1000 0010 0000 0001 0000 0010 0000 0000, o (en punto decimal) notación cuádruple) 130.1.2.0. Este resultado se compara con la dirección de red, que notará coincidencias. Si el resultado de esta operación AND a nivel de bits coincide con la dirección de red, entonces la dirección que se está probando cae dentro de la subred. Si no coincide, la dirección no se encuentra dentro de la subred. Esta es la razón por la cual la dirección de red en una subred se escribe con todos ceros en la parte enmascarada, y también por qué la parte de máscara se escribe de esta manera algo irritante. También es la razón por la cual la máscara cero coincide con todo Internet: un bit Y con todos ceros será todo cero, por lo que todo se pone a cero y eso siempre coincide con cero, y es por eso que la máscara todos coincide exactamente con una dirección, porque un bitwise AND with all-ones es una operación sin cambios.

Por cierto, funciona exactamente de la misma manera para IPv6, excepto que en IPv6 las direcciones tienen 128 bits de longitud, en lugar de 32 bits, y se escriben habitualmente en hexadecimal en lugar de decimal. Una vez que comprenda cómo funciona la división en subredes en IPv4, la traducción de los conceptos al mundo más grande pero conceptualmente idéntico de las direcciones IPv6 simplemente implica aprender a hacer matemáticas en hexadecimal. Además, cada pila de IPv6 que he encontrado le permite especificar máscaras con la notación / n (ya que sería cruel hacer que alguien escriba FF: FF: FF: FF: FF: FF: FF: FF :: 0 over y otra vez, cuando / 64 es más corto y más claro).

el número después de la barra diagonal es el número de bits (en la dirección IP) que forman parte de la máscara de subred. El resto de la dirección IP es la máscara de dirección.
Entonces, en su caso, hay 23 bits de máscara de subred.

Normalmente, la máscara de dirección se escribe como una secuencia de uno seguida de ceros, en su caso 11111111 11111111 11111110 00000000, o más concisamente 255.255.254.0

El propósito principal de la máscara de subred es agregar direcciones IP cuando un enrutador debe comunicar a otros enrutadores qué direcciones IP puede ver. Por ejemplo, si una LAN con 8 PC conectadas está conectada a un enrutador, este último debe exponer 8 direcciones IP a sus pares comunicantes. Pero si se eligen cuidadosamente las 8 direcciones IP, puede exponer solo una dirección (la parte de subred), lo que indica implícitamente que todas las direcciones IP que comienzan con esa máscara de subred están en la LAN.

La división en subredes, como la mayoría de las matemáticas, requiere práctica una vez que comprende el concepto y para algunas personas practicar antes de que se entienda el concepto también ayuda. Mi recurso para que la gente practique es el juego de subredes gratuito de Cisco:

Cisco Learning Network Mobile

Eche un vistazo a esta respuesta: la respuesta de Vaibhav Garg a ¿Qué es la subred?
Espero que te ayude a entender las subredes.