El increíble viaje de los paquetes de datos desde un centro de datos hasta tu dispositivo constituye la columna vertebral de Internet. Este flujo de datos está gobernado para lograr una transferencia eficiente de los datos. Es evidente a partir de esta animación que gobernar los datos desde la fuente hasta el destino a través de una red tan complicada no es una tarea fácil. Todo este proceso de flujo eficiente de datos desde la fuente hasta su destino se conoce como enrutamiento.
Intentemos entender el enrutamiento mediante una analogía. Imagina una situación en la que intentas llegar a casa desde tu oficina. Las carreteras están llenas de tráfico. En esta situación, consultas las condiciones de la carretera y del tráfico en Google Maps. Basándote en la situación del tráfico y las condiciones de la carretera, tomas el camino más fácil para llegar a casa. De manera similar, en el enrutamiento, las decisiones sobre los movimientos de los paquetes se toman según el estado de la red, y un dispositivo llamado router toma estas decisiones lógicas de datos.
El propósito principal de tener una configuración de router es encontrar el camino más eficiente a través del cual los paquetes puedan transferirse desde la fuente hasta el destino utilizando algoritmos muy sofisticados. El router toma la decisión de a través de qué router o dispositivo debe enviarse el paquete actual. Este procedimiento se repite hasta que el paquete finalmente llega al destino.
Tipos de enrutamiento
El enrutamiento se puede dividir en dos categorías: enrutamiento estático y enrutamiento dinámico. En el enrutamiento estático, todas las rutas se configuran manualmente en un router. Por lo tanto, si hay algún cambio en la red, no habrá cambios en la ruta a menos que alguien lo corrija manualmente.
En el enrutamiento dinámico, las rutas se establecen mediante software de acuerdo con el estado actual de la red. Los cambios en la red, como fallos de enlace, cambios en el tráfico y cambios en el costo, se actualizarán en cada paso de tiempo discreto, y en función de esta información, se decidirán nuevas rutas en cada paso de tiempo. El enrutamiento dinámico se prefiere sobre el enrutamiento estático porque los routers se actualizan automáticamente según los cambios en la red.
Algoritmo de enrutamiento: Link State
Ahora aprendamos sobre uno de los algoritmos de enrutamiento dinámico más populares: el algoritmo de estado de enlace (Link State).
El algoritmo de estado de enlace consta de dos partes: flooding confiable y el algoritmo de camino más corto de Dijkstra.
En primer lugar, entendamos el algoritmo de camino más corto de Dijkstra, desarrollado por el famoso científico de la computación holandés Edsger Dijkstra en 1956. Supongamos que tenemos esta red, en la que se muestran los costos entre cada nodo. El desafío es encontrar el camino más corto de un nodo a otro.
El algoritmo de Dijkstra produce una tabla como resultado, y utilizando esa tabla, podemos determinar el camino más corto en una red. Esta tabla se genera para el vértice «a», y utilizando esta tabla, puedes predecir el camino más corto a cualquier otro punto que desees. Para el camino más corto al punto «i», solo revisa el vértice anterior desde este Vértice, revisa su vértice anterior y así sucesivamente hasta que llegues a «a».
Esta tabla se genera utilizando un método iterativo con valores iniciales de distancia más corta como infinito. Por falta de tiempo, solo estamos animando el procedimiento utilizado para generar este algoritmo.
Después del final de la iteración, obtenemos la tabla de enrutamiento como resultado.
Ahora, veamos la primera parte del algoritmo de estado de enlace: el flooding confiable. Puedes haber notado que para ejecutar perfectamente el algoritmo de Dijkstra, cada router debe tener la información de la topología completa. Este es el primer paso en el enrutamiento de estado de enlace. La información de vecindad de un router se conoce como su «link state» (estado de enlace). Esta información puede ser la dirección IP del enrutador vecino, el costo de los enlaces vecinos, la salud de los enlaces, etc.
Los pequeños paquetes que contienen esta información de vecindad se conocen como «link state packets» (paquetes de estado de enlace). Como se menciona en el nombre, debemos inundar precisamente cada router con los estados de enlace de todos los demás routers de la topología. Esto es muy similar a cómo se propaga el chisme en un salón de clases de un estudiante a otro hasta que todos lo saben.
Inicialmente, cada router conoce su propio estado de enlace para esta pequeña red. A pasa su paquete de estado de enlace a sus vecinos, B pasa el paquete a sus vecinos, y así sucesivamente. De esta manera, todos los nodos tendrán la información completa de los estados de enlace de la topología. Con esta información de paquetes, todos los nodos crean o actualizan una tabla de enrutamiento y aplican el algoritmo de camino más corto de Dijkstra para enviar el paquete. Sin embargo, el flooding no es tan simple.
Considera un escenario en el que tres nodos, A, B y C, están interconectados. A envía información de estado de enlace a B y C, de manera similar C envía información a B, y B envía información a C nuevamente, y el proceso continúa en un bucle. Esto se conoce como problema de looping. Por lo tanto, en un escenario ideal, querrías que el nodo reciba esta información solo una vez. ¿Cómo superar el problema del looping? Cada paquete se asigna un ID único.
Cuando B recibe este paquete con su ID único desde A y C, no lo envía nuevamente a C. Después de la operación de flooding, cada nodo ejecuta de manera independiente el algoritmo de camino más corto de Dijkstra para determinar el camino más corto desde sí mismo hacia otros nodos en la red.
El algoritmo que vimos se implementa en una red con la ayuda de protocolos. Aplicar la operación de flooding a la red global completa es una tarea casi imposible. El algoritmo de enrutamiento de estado de enlace se conoce como OSPF. En OSPF, la red completa se divide en varias áreas locales. También se crea un área central que comparte al menos un enrutador de las áreas locales. De esta manera, se crean algunos enrutadores fronterizos.
Puedes ver que todas las áreas locales están conectadas al área central a través de estos enrutadores fronterizos. En OSPF, la operación de flooding ocurre dentro de cada área local, no de forma global. Si los paquetes de una área local necesitan viajar a otra área local, tienen que pasar por el área central.
Esto se ilustra claramente en esta animación. Si los paquetes de datos tienen que fluir desde el área 2 hasta el área 3, tienen que pasar por el área central, no directamente. Esta estructura reduce la complejidad de la operación al reducir el tamaño de la tabla de enrutamiento y también ayuda en la escalabilidad de la red.
Esperamos que este artículo te haya brindado una buena visión general sobre el funcionamiento del enrutamiento. ¡Gracias!