IPv4

y VLSM

Featured image

Cuando escribe una carta, debe especificar la dirección del destinatario en el sobre antes de enviarla. De manera similar, Internet usa su esquema de direccionamiento para entregar paquetes al destino correcto.

Cualquier host en una red informática, ya sea una red privada o Internet, se identifica mediante una dirección IP única.

Identificador

La gran mayoría de las redes ejecutan IP versión 4 (IPv4).

Una dirección IPv4 consta de cuatro bytes u octetos; un byte consta de 8 bits.

Identificador

Con 8 bits puede representar hasta 28 valores diferentes de 0 a 255.

Esto no significa que pueda asignar direcciones desde 0.0.0.0 hasta 255.255.255.255 a un host. Algunas direcciones están reservadas para fines especiales. Por ejemplo, algunos intervalos reservados son:

Intervalo de red Uso
0.0.0.0 - 0.255.255.255 Representa a la red.
127.0.0.0 - 127.255.255.255 Representa el local host. (el computador)
192.168.0.0 - 192.168.255.255 Reservado para redes privadas.

Máscara de red

Para identificar completamente un host, también necesita conocer su red. Para hacer eso, necesitará una dirección IP y una máscara de red o máscara de subred. Con un par de IP/máscara de red, puede identificar la parte de la red y la parte del host de una dirección IP.

Dirección IP Máscara de red
192.168.5.100 255.255.255.0

Encontrar dirección subred

Para encontrar la parte de la red, debe realizar una operación AND bit a bit entre la máscara de red y la dirección IP. Por ejemplo:

172.16.45.14/30

Si queremos podemos identificar su máscara de red a través de la tabla de máscaras de red. O bien calcularlo por nuestra cuenta:

Tabla de apoyo

27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1
Primero contaremos los 30 bits del prefijo que se determinarán como 1's y completamos con 0's hasta completar los 32 bits que componen una dirección IPv4.

11111111 11111111 11111111 11111100

Ahora de izquierda a derecha transformaremos a decimal este binario de octeto a octeto, tomando como referencia la tabla de apoyo de arriba e iniciando por el primer octeto.

1) 11111111

1+2+4+8+16+32+64+128 = 255

Como tenemos 3 iguales no es necesario repetir el procedimiento.

4) 11111100

4+8+16+32+64+128 = 252

Por lo que nos quedaría como máscara de red 255.255.255.252

Ahora que vimos como calcular una máscara de red teniendo el prefijo, pasamos a resolver el problema:

Nos quedamos con el binario inicial:

11111111 11111111 11111111 11111100

y ahora calculamos el binario de la dirección IP 172.16.45.14, dividiendo por 2 hasta que el resultado sea igual a 0:

172

172:2=86    86:2=43    43:2=21    21:2=10    10:2=5    5:2=2    2:2=1    1:2=0
0           0          1          1          0         1        0        1

Lo que daría como resultado 10101100. Ahora continuamos con el siguiente octeto:

16

16:2=8    8:2=4    4:2=2    2:2=1    1:2=0
0         0        0        0        1

En este caso nos daría 10000, pero como siempre hay que respetar que deben ser 8 bits completamos con 0’s al inicio pues no cambia en nada el binario, entonces quedaría 00010000. Seguimos con el siguiente:

45

45:2=22    22:2=11    11:2=5    5:2=2    2:2=1    1:2=0
1          0          1         1        0        1

Pasa lo mismo que en el caso anterior entonces completamos con 0’s al inicio, lo que daría como resultado 00101101. Finalizando con el último octeto:

14

14:2=7    7:2=3    3:2=1    1:2=0
0         1        1        1

Lo daría como resultado 00001110.

Ahora juntamos los resultados y le realizamos la operación AND con el resultado de la máscara de subred:

A B A AND B
0 0 0
0 1 0
1 0 0
1 1 1
11111111 11111111 11111111 11111100 
10101100 00010000 00101101 00001110
___________________________________

10101100 00010000 00101101 00001100

Y ahora para finalizar transformamos este binario a decimal octeto a octeto ayudándose de la tabla de apoyo de más arriba, recordando de que si es un 0 no se cuenta y también que se inicia con el 20 desde la izquierda del binario:

4+8+32+128 = 172

16 = 16

1+4+8+32 = 45

4+8 = 12

Por lo que nos daría como dirección subred de la dirección 172.16.45.14/30 -> 172.16.45.12

Parte del host en notación decimal

Si queremos encontrar parte del host en notación decimal debemos a la máscara de red aplicar la operación NOT y luego realizar la operación AND con la dirección IP dada, manteniendo el ejemplo anterior sería de la siguiente forma:

A ¬A
0 1
1 0
172.16.45.14/30

Máscara de red: 11111111 11111111 11111111 11111100

Le aplicamos la operación NOT lo que daría como resultado
00000000 00000000 00000000 00000011

Ahora le realizamos un AND con el binario que obtuvimos anteriormente de la dirección la IP:

10101100 00010000 00101101 00001110
00000000 00000000 00000000 00000011
___________________________________

00000000 00000000 00000000 00000010

Finalmente pasamos a decimal este binario -> 0 0 0 2

Por lo tanto la parte del host en notación decimal de la dirección IPv4 172.16.45.14/30 es 0.0.0.2 y agregar que podemos obtener la cantidad de direcciones que contiene la red, pues 2 se eleva a la cantidad de bits obtenidos, en este caso son 2, o sea 22 = 4 direcciones diferentes.

Hosts y subredes

En las direcciones de red siempre hay algunas especiales las cuales son las direcciones de red y la dirección broadcast, reduciendo así en 2 el número de hosts en una red determinada. Esto se usa para mantener la compatibilidad con equipos antiguos. Pero la pregunta es ¿qué es la dirección broadcast?, pues es aquella dirección IP que permite la transmisión de datos a una multitud de nodos receptores contenidos en una misma subred y de forma simultánea. La dirección de broadcast de cierta de dirección IP, será la dirección más alta de la sub red que incluya dicha dirección IP. Pero para saber esta dirección tenemos que calcular el rango de direcciones de red disponibles, por ejemplo:

Dirección IPv4: 192.168.114.32/27

Binario de prefijo o CIDR: 11111111.11111111.11111111.11100000

Para encontrar las direcciones disponibles simplemente se eleva por la cantidad de 0 del binario del CIDR en este caso 5.

En síntesis las direcciones disponibles para la dirección IPv4 dada es 25 = 32 direcciones(Hosts). Otra forma de verlo es como se vio en el ejemplo anterior a este. Ahora para obtener la cantidad de hosts simplemente a lo anterior le restamos la dirección broadcast y la dirección de red reservada, es decir, 32 - 2 = 30 hosts. Y para obtener la cantidad de subredes por subred es necesario entender que la subred ID es la parte sobrante del host, en este caso se concentra en el octeto 4 (11100000), en el cual son los 1’s del binario, por lo tanto sería 23 = 8 subredes que proporciona esta dirección. Ahora si nos piden las subredes válidas, pues al resultado se le resta por el motivo anteriormente mencionado 2, el resultado quedaría 8 - 2 = 6 subredes válidas.

Dirección utilizable y broadcast

Del ejemplo anterior tenemos los siguientes datos:

Direccion IPv4: 192.168.114.32/27
Hosts = 32
Hosts válidos = 30
Subredes totales = 8
Subredes válidas = 6

Ahora para obtener el host o dirección utilizable inicial será el valor siguiente de la dirección IPv4. Al hacer ese movimiento gastamos un host válido por lo tanto nos quedarán 29 que se lo sumamos a la dirección inicial para que nos quede como resultado el host utilizable final. La dirección siguiente a este último será el broadcast pues ya estaba reservado su host anteriormente. En síntesis quedaría lo siguiente:

Dirección IP Máscara de subred Host utilizable inicial Host utilizable final Dirección IP de broadcast
192.168.114.32 255.255.128.0 192.168.114.33 192.168.114.62 192.168.114.63

Obtener máscara de red con clases

Con subredes

Si tenemos como información la clase y la dirección de subredes que se necesitan crear pues basta con ayudarnos de la tabla de clases y de la siguiente tabla:

27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1

Pues hay que encontrar la potencia base 2 más cercana a la cantidad de subredes que dan, siempre que sea la potencia mayor que la cantidad de subredes. Por ejemplo:

Si necesitamos crear 10 subredes, la cual se trabaja en una dirección clase C. De esto obtener la máscara de subred que deberá utilizar este procedimiento.

Pues si obtenemos los datos de la tabla de clases nos daría que la forma de la máscara de clase C sería de la forma 255.255.255.X, pues desconocemos de momento el último valor.

Ahora buscamos el valor más cercano a 10 en una potencia en base 2, y este sería 24 = 16 > 10 subredes, entonces cumple con lo dicho anteriormente. Teniendo esto completamos la forma binaria de la máscara clase C que falta (X) con tantos 1’s como diga el exponente, en este caso 4:

11111111.11111111.11111111.[1111]0000

Una vez obtenido esto lo pasamos a su forma decimal:

Solo se pasa a decimal el último octeto, pues los octetos anteriores ya los conocemos:

11110000 = 128+64+32+16 = 240

Quedando como respuesta -> 255.255.255.240

Con hosts

Si tenemos como información los hosts y la clase, se hace muy parecido a lo anterior solo que en este caso se completa con tanto 0’s como diga el exponente. Por ejemplo:

Si tenemos asignado una dirección clase B, con una red que soporte como máximo 459 hosts por subred. De esto obtener la máscara de subred que deberá utilizar este procedimiento.

Extrayendo de la tabla de clases, el caso de la clase B, nos quedaría una máscara de subred de la forma 255.255.X.Y, pues desconocemos el valor de X.

212 211 210 29 28 27 26 25 24 23 22 21 20
4096 2048 1024 512 256 128 64 32 16 8 4 2 1

Ahora buscamos el valor en potencia base 2 más cercano a la cantidad de hosts dado, siempre que la potencia sea mayor que la cantidad de hosts. En este caso la potencia más cercana será 29 = 512 > 459, entonces cumple con lo dicho anteriormente. Teniendo esto completamos con 0’s en su forma binaria:

11111111.11111111.1111111[0.00000000]

Una vez obtenido esto lo pasamos a su forma decimal:

Solo se pasa a decimal el tercer octeto, pues los octetos anteriores ya los conocemos y el último claramente será 0:

11111110 = 128+64+32+16+8+4+2 = 254

Quedando como respuesta -> 255.255.254.0

Con subredes y hosts

Ahora que pasa si piden que una red esté dividida por X subredes y que tenga Y hosts por subred. Por ejemplo:

Si tenemos una red dividida por 8 subredes de una clase B, que pretende tener 2500 hosts por subred. De esto obtener la máscara de subred que deberá utilizar este procedimiento.

Aquí lo recomendable es centrarse en los hosts pues hacemos aquí el mismo procedimiento anteriormente mostrado, quedando 212 = 4096 > 2500 y que la forma de la clase B es 255.255.X1.X2, entonces simplemente completamos el binario con los 0’s correspondientes:

11111111.11111111.1111[0000.00000000]

Una vez obtenido esto lo pasamos a su forma decimal:

Solo se pasa a decimal el tercer octeto, pues los octetos anteriores ya los conocemos y el último claramente será 0:

11110000 = 128+64+32+16 = 240

Quedando como respuesta -> 255.255.240.0

Recordar también que de esto se puede obtener el cálculo de las subredes válidas que se obtiene del binario de la máscara y es 24 - 2 = 14 subredes válidas.

Los procedimientos realizados acá también se conocen como préstamos de bits(en los binarios).

VLSM

VLSM permite dividir un espacio de red en partes desiguales, es decir, la mascara de subred de una dirección IP variara según la cantidad de bits que se tomen prestados para una subred especifica, se conoce también como división de subredes en subredes. Para realizar esto se pueden seguir una serie de pasos que ayudan a facilitar el procedimiento:

  1. Se ordenan de mayor a menor los hosts dados.

  2. Detectar cuantos bits se necesitan por hosts. Esto se calcula buscando la potencia base 2 que sea mayor a la cantidad de hosts dada. Y los bits que se necesitan lo marcará el exponente de esta potencia.

  3. A la potencia obtenida anteriormente le restamos 2 y obtenemos los hosts válidos del rango de red.

  4. Ahora se comienza anotando la dirección de inicio que es la que dan por defecto.

  5. Para obtener la máscara de red de la dirección actual, al total de bits se le resta la cantidad de bits que necesitas para X hosts. Eso te dará el CIDR correspondiente a la dirección en que estás. Luego pasas el binario obtenido a decimal y eso te da como resultado la máscara de red.

  6. Anotamos el primer rango válido sumando 1 al cuarto octeto de la dirección de inicio. Anteriormente obtuvimos los hosts máximos que marcan el rango de red, entonces estos se lo sumamos, restando 1 que es el broadcast al primer rango válido y obtenemos el último rango válido. El último octeto puede llegar hasta 254, pues el limite lo llevaría el broadcast que es 255. Y continuamos con los saltos en el tercer octeto, que se obtiene restando 256 [0-255] con el último octeto que no esté en 0 de la máscara de red. Ese proceso se realiza hasta que el cuarto octeto del rango IP deje de dar mayor que 254.

  7. Finalmente el broadcast de cada red es la suma de el último valor del rango IP con 1, al cuarto octeto.

También puede guiarse con una calculadora VLSM programada en Python por ejemplo o incluso programarla usted mismo en el lenguaje que desee.