Hoy se me antojó escribir un post de esos que no sirven para nada pero entretienen. Vamos a hacer el cálculo manual de redirección en redes tomando como base una IP local y un CIDR (Classless Inter-Domain Routing). A partir de estos datos obtendremos la máscara de red, el network ID y la broadcast IP. Vamos a ello.
Tomemos como ejemplo la IP local 172.14.15.16 y el CIDR /17. Primero trabajaremos con la IP y luego con el CIDR. El primer paso es convertir cada octeto de la IP en su valor binario. Para ello, desde nuestra terminal, trabajaremos con los siguientes comandos:
Echo "obase=2; 172" | bc → 10101100 Echo "obase=2; 14" | bc → 00001100 Echo "obase=2; 15" | bc → 00001111 Echo "obase=2; 16" | bc → 00010000
Ahora vamos con el CIDR /17 que lo que quiere decir es que los primeros 17 bits corresponden a la parte de red (1) y los 15 bits restantes corresponden al host (0). Siendo así, nuestro CIDR quedaría:
11111111.11111111.10000000.00000000 Bits de red (17). Bits de host (15).
Con los valores binarios de nuestro CIDR obtendremos la máscara de red. Vamos a la terminal pero ahora, en lugar de usar obase usaremos ibase. La cosa quedaría así:
Echo "ibase=2; 11111111" | bc → 255 Echo "ibase=2; 11111111" | bc → 255 Echo "ibase=2; 10000000" | bc → 128 Echo "ibase=2; 00000000" | bc → 0
Ya tenemos la máscara de red que para el ejemplo es: 255.255.128.0. A continuación calcularemos el network ID. Para ello usaremos la IP en binario y el CIDR en binario. Preste atención:
10101100.00001110.00001111.00010000 → IP en binario. 11111111.11111111.10000000.00000000 → CIDR en binario. - - - - - - - - - - - - - - - - - - 10101100.00001110.00000000.00000000 → Resultado.
Lo que hicimos fue enfrentar los dos valores y asignarle un valor a la coincidencia. Si conciden en 1 el valor es 1 y si no coinciden el valor es 0. Para obtener los octetos decimales de la network ID repetimos el proceso con ibase.
Echo "ibase=2; 10101100" | bc → 172 Echo "ibase=2; 00001110" | bc → 14 Echo "ibase=2; 00000000" | bc → 0 Echo "ibase=2; 00000000" | bc → 0
Ahí tenemos nuestra network ID: 172.14.0.0. El paso final será calcular la broadcast IP. Para ello, usaremos como referencia el CIDR /17 pero usaremos los primeros 17 bits de la IP y los 15 bits correspondientes al host los tornaremos en 1. Así quedaría el binario de nuestra broadcast:
10101100.00001110.01111111.11111111 17 bits de la ip. 15 bits de host.
Ese sería el binario de nuestra broadcast IP. Ahora volvemos a hacer el procedimiento con ibase para transformar los binarios:
Echo "ibase=2; 10101100" | bc → 172 Echo "ibase=2; 00001110" | bc → 14 Echo "ibase=2; 01111111" | bc → 127 Echo "ibase=2; 11111111" | bc → 255
Nuestra broadcast IP es entonces 172.14.127.255. Con esto terminamos el cálculo de redirección. Los datos finales son:
172.14.15.16 → IP 255.255.128.0 → Máscara de red. 172.14.0.0 → Network ID. 172.14.127.255 → Broadcast IP.
Ah, y si se quieren evitar tanta calculo pendejo lo que pueden hacer es instalar ipcalc. En sistemas GNU/Linux de base Debian con sudo apt install ipcalc y en macOS con brew install ipcalc. La herramienta les hace lo mismo pero automatizado como se ve en la siguiente imagen:

Yo les dije que el post no servía pa’ un carajo pero esos ejercicios me entretienen cuando estoy aburrido. Hasta la próxima.
