Sumarizando
rutas (a bajo nivel)
Fecha: 21 de septiembre del 2020
Escenario
En este laboratorio se intenta deducir como es la lógica para calcular una
ruta sumarizada en base a varias rutas, cosa
que es relativamente fácil para un humano (que estudió networking).
Pero hay algunos pasos que los hacemos “automáticamente”, y quería hallar
cuales son los mecanismos involucrados
para determinar la red y máscara de dicha sumarización.
Para ello hay que bajar bien abajo, a la lógica de Boole, y allá vamos…
1.- Ejemplo de sumarización “for
dummies”:
Teniendo las rutas 192.168.200.0/24 y 192.168.216.0/24 (estos rangos son
para hacer el ejercicio un poco mas simple)
debemos encontrar una ruta resumida, o sea, una única ruta que incluya a ambas.
Paso 1:
Pasamos a binario el 3er octeto, ya que los dos primeros coinciden y el
cuarto es irrelevante:
200: 11001000
216: 11011000
Paso 2:
Buscamos bits en común, de izquierda a derecha:
200: 11001000
216: 11011000
Si bien existen mas de 3 bits en común, debemos entender que lo importante
es la continuidad de los mismos, y siempre
de izquierda a derecha, tal como actúa la máscara de subred.
Paso 3:
Buscamos el valor de red y la máscara que aplica al 3er octeto:
110XXXXX red = 128+64+0=192 máscara = 128+64+32=224 ( o
también si incluimos los tres octetos es 8+8+3=
/19).
| | |
| | 32
| 64
128
Por lo tanto, la red sumarizada es 192.168.192.0/19
De manera más gráfica:
2.- Resumen:
Para un humano hallar una ruta sumarizada le lleva 3 (simples) pasos.
3.- Entendiendo mecanismos
implícitos:
Llamamos mecanismos implícitos a aquellos que damos por sentado como
naturales o automáticos, pero que involucran muchos más
pasos de los que asumimos.
4.- Escenario a bajo nivel de la
sumarización:
Dado el ejercicio anterior podemos llevarlo a mecanismos (supuestamente)
más simples tales como lógica de boole (en mi caso, que no
se programar) aunque también se podría realizar o escribir un algoritmo en casi
cualquier lenguaje de programación.
Podemos ver que es bastante simple, se realiza una comparación bit a bit y
obtenemos un resultado: 1 coincide, 0 no coincide.
Ahora recordemos que debemos leerlo de izquierda a derecha y dejar de
comparar cuando no exista una coincidencia, y luego contar
los bits que queden en 1 antes de llegar a un 0 (en este ejemplo es 111 (estos
tres bits de orden superior en 1 es 224 en decimal).
4.1.- Leyendo bit a bit:
Para esto vamos a necesitar algo que compare bit a bit, se me ocurrió
utilizar un shift register (es el vertical a la izquierda) con el valor
00000001 y desplazarlo a 00000010, 00000100, etc..
con esto tendremos una muestra bit a bit.
Podemos apreciar que el bit de 1 está conectado al bit de 128, el 2 a 64,
etc...para poder contar los bits de izquierda a
derecha.
Podemos ver que la secuencia en la salida del contador es 00000001 = 1 , 00000010 = 2 y 00000011 = 3
En el cuarto muestreo, al no coincidir el 4to bit con el comparador XNOR,
el AND tendrá un 0 en su entrada, y por lo tanto un 0 en
su salida, esto activa un 1 en la salida de la compuerta NOT que cumple la
fución de finalizar el muestreo, quedando en 3 la salida
del contador de bits coincidentes.
0 0 0
0 0 0
1 1 => 2 + 1 = 3 Lógica AND
4.2.- El cuadro completo:
Una vez que la comparación es negativa, se activan los reset de los shift
register, se disparan los latch para “memorizar”
los valores obtenidos (y eventualmente copiarlos a memoria).
Podemos ver que se incluyó un temporizador (delay) para darnos tiempo entre
el reset del shift register y el reset del latch
y no perder el valor obtenido. Pero a los motivos del ejercicio el resultado
ya lo tenemos.
Por simplicidad, en este circuito no se detalla como es la carga del nuevo
byte, ni de los bytes/octetos anteriores, u otra ruta
a comparar para seguir sumarizando, solo estudiamos la lógica de la
comparación de rutas.
5.- Segundo Resumen:
Afortunadamente la mente entrenada hace estos cálculos casi
instantáneamente. Fin del resumen.
6.- Sumarización en los routers:
Cuando estudiamos enrutamiento, por ejemplo vemos que EIGRP auto sumariza
en routers que se encuentran en el borde de
segmentos de diferentes clases, pero esta sumarización es classfull (/8 para
direcciones de clase A, /16 para B y /24 para C).
También se puede utilizar el comando summary-address en una interface
determinada, pero debemos calcular y escribir un
valor de red y máscara para completar el comando.
En el gráfico podemos ver las diferencias entre la autosumarización y sumarizar
“a pata”, para esto último debemos pasar por
los procesos de comparación de bits este laboratorio.
(2020) Come
together
Rosario, Argentina