Cálculo de redirección en redes

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:


Redirección en redes


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

Temas: G33ks, GNU / Linux, macOS
J. Inversor

Escrito por:J. Inversor Otros posts del autor

Privacidad no es secretismo. Secretismo es cuando quieres que algo no se sepa. Privacidad es el inalienable derecho que todos tenemos de revelarnos selectivamente al mundo.