TEMA 5: Encaminamiento
5.1 Introducción
Podemos definir encaminamiento como un proceso mediante el cual
tratamos de encontrar un camino entre dos puntos de la red: el nodo origen
y el nodo destino. El objetivo que se persigue es encontrar las mejores
rutas entre pares de nodos j-k.
| a) Mejor Ruta. |
Por mejor ruta se entiende aquella que cumple
alguna de estas condiciones:
-
presenta el menor retardo medio de transito,
-
consigue mantener acotado el retardo entre pares de nodos de la red (Tjk<To),
-
consigue ofrecer altas cadencias efectivas independientemente del retardo
medio de transito
-
ofrezca el menor coste.
|
| b) Métrica
de la Red. |
Citaremos dos de ellas:
-
Numero de saltos (canales) necesarios para ir de un nodo a otro. No se
comporta de forma óptima, pero si ofrece buenos resultados, y es
empleada con bastante frecuencia.. La distancia (valor que se asocia a
cada canal) es igual a 1 para todos los canales.
-
Retardo de Transito entre nodos vecinos. En este caso la distancia se expresa
en unidades de tiempo (p.e ms), y no es constante a lo largo del tiempo
sino que depende del trafico que soporta el canal.
|
Algunos de los problemas con los que
nos encontramos a la hora de encaminar son:
-
La carga de los enlaces no va a ser constante (es decir, el mejor camino
no siempre será el mismo), al igual que la tasa de generación
de mensajes. El encaminamiento busca el camino óptimo, pero como
el tráfico varía con el tiempo, el camino óptimo también
dependerá del instante en que se observa la red.
-
Hay que tener en cuenta los cambios en la topología de la red (hay
nodos que se caen, o se añaden, o se quitan, etc).
-
Existen recursos limitados, no pudiendose cursar todos los paquetes a infinita
velocidad.
-
Asincronía, en el sentido de que no hay un momento determinado para
que ocurran las cosas (un nodo transmite cuando le llega información,
y esto sucede a su vez cuando el usuario decide mandarla).
Por tanto, el encaminamiento
debe proveer a la red de mecanismos para que ésta sepa reaccionar
ante
situaciones como:
-
Variabilidad del tráfico: se han de evitar las congestiones
de la red.
-
Variaciones topológicas, como las mencionadas arriba: caídas
de enlaces, caídas de nodos, altas y bajas ...
-
Cambios en la QoS (Quality of Service): a veces se pide un
servicio donde no importa el retardo y sí un alto throughput,
y viceversa.
La nomeclatura que utilizaremos es la
siguiente:
-
Algoritmo de encaminamiento: método para calcular la mejor
ruta para llegar de un sitio a otro. La mejor ruta podrá calcularse
en función de los 'costes', retardos, distancia...
-
Protocolo de encaminamiento: es la manera que tienen los nodos de
intercambiar la información de encaminamiento (probablemente generada
por el algoritmo). Los protocolos serán los encargados de ocultar
la red y comprobar que las condiciones de encaminamiento impuestas se verifican
siempre.
-
Decisión de encaminamiento:
Nos centraremos en redes de conmutación de paquetes, tanto
en modo datagrama como en modo circuito virtual:
-
Red en modo circuito virtual: Si la red funciona en modo circuito
virtual generalmente se establece una ruta que no cambia durante el tiempo
de vida de ese circuito virtual, ya que esto es lo más sencillo
para preservar el orden de los paquetes. El encaminamiento se decide
por sesión y no se cambia a menos que sea imprescindible, es decir
existen restricciones de cara a no cambiar el encaminamiento en la sesión
(ej. caída de un enlace). Cuando eso ocurre se busca inmediatamente
otra ruta, pero este cambio al tardar en propagarse por la red, al tardar
los nodos en enterarse, se puede manifestar en los sistemas finales de
tres formas:
-
no se manifiesta
-
se pierde información
-
se pierde la sesión.
-
Red en modo datagrama: Como en este caso no debe garantizarse el
ordenamiento final de los paquetes, en una red funcionando en modo datagrama
se puede cambiar el criterio de encaminamiento por cada paquete que se
ha de cursar (Esto da origen a menor numero de problemas).
Los requisitos
del algoritmo de encaminamiento son:
-
Corrección: Se ha de entregar la información correctamente.
Es algo obvio: queremos que el paquete llegue precisamente al nodo al que
lo mandamos.
-
Simplicidad: debe aportar soluciones sencillas. Esto es útil
para redes reales (grandes) y los protocolos mas simples son los que en
la actualidad tienden a imponerse (p.e. RIP: Routing Interconexion Protocol).
-
Robustez: El algoritmo ha de ser insensible a inestabilidades del
sistema. Estas inestabilidades son, por ejemplo, caidas de nodos, etc,
que han de ser previstas de antemano.
-
Estabilidad (convergencia): Es muy importante que se cumpla.
El procedimiento debe converger antes de que la red cambie de estado (caída
de nodo, alta de usuario, etc.). Cuando esto ocurre, se recalculan de nuevo
las rutas, debiendo los nodos llevar a cabo acciones coherentes que conduzcan
a situaciones estables.
-
Equidad (justicia): Debe tratar a todos los usuarios de la
misma manera.
-
Trazabilidad (gestionabilidad): Supone tener información
(trazas) de lo que ha hecho la red para que en el caso de que ocurran "cosas
raras" sea posible corregirlas.
-
Escalabilidad: Tengo que tener un comportamiento optimo sea cual
sea el numero de nodos ( incluso si este aumenta mucho).
5.2 Métodos de Encaminamiento
5.2.1 Conceptos Básicos
Veamos la estructura general de un nodo de conmutación de paquetes,
lo cual nos valdrá para hacer una posterior claseficación
de los métodos de encaminamiento atendiendo a la forma en la que
los nodos recogen y distribuyen la información que les llega de
la red y a otros factores:

-
FIB (Forward Information Base): Es la tabla
de encaminamiento que se consulta para hacer el reenvío de los
paquetes generados por los usuarios (los PDU representan estos paquetes).
-
RIB (Routing Information Base): Tabla que
almacena las distancias a los nodos. Es la base de información de
encaminamiento que se consulta para decidir y formar la FIB. La
información de la RIB se consigue mediante interacción
con el entorno local de cada nodo (cada nodo observa sus enlaces)
y mediante la recepción de R-PDUs d e información
de control procedentes de otros nodos vecinos que informan del conocimiento
que estos nodos tienen sobre el estado de la red. A su vez, con la información
obtenida por la
RIB, ésta manda PDUs de control para
informar del conocimiento del estado de la red que el nodo tiene a los
demás nodos.
-
LOCAL: Información del entorno local del nodo. Contiene la
información de lo que el nodo ve (memoria disponible, enlaces locales,
etc.), más la que hay que proporcionarle.
-
R-PDU (Routing-PDU): Información
de control entre nodos. Son paquete de control, los cuales mandan
otros nodos con información sobre la red (no son datos). Por ejemplo,
se manda información de que el nodo sigue activo, y también
las distancias a otros nodos (vector de distancias).
-
PDU (Protocol Data Unit): Unidad fundamental
de intercambio de información para un nivel determinado (a veces
se indica explícitamente el nivel poniendo N-PDU, o PDU de nivel
N), como nivel de enlace, red, etc. Son llamados también tramas.
Básicamente, es funcionamiento es el siguiente: A partir de la RIB,
se utiliza el algoritmo de encaminamiento para calcular la FIB, y cuando
una PDU llega al nodo, se consulta esta FIB.
Ejemplo:
Tabla de Encaminamiento del NODO D:
| Destino |
Next |
Coste |
| A |
E |
9 |
| B |
C |
7 |
| C |
C |
2 |
| D |
D |
0 |
| E |
E |
5 |
| F |
E |
6 |
El numero que aparece junto a los enlaces representa el 'coste' o 'distancia'
de los mismos, que puede ser constante o variable.
Llamarémos METRICA a la magnitud o medida a optimizar
(retardo, ancho de banda, coste económico, etc).
5.2.2
Clasificación de los Métodos de Encaminamiento
1.- En función de donde se decide encaminar:
-
Fijado en el origen (Source Routing): son los sistemas
finales los que fijan la ruta que ha de seguir cada paquete. Para ello,
cada paquete lleva un campo que especifica su ruta(campo RI: Routing
Information), y los nodos sólo se dedican a reenviar los paquetes
por esas rutas ya especificadas. Así pues, son los sistemas finales
los que tienen las tablas de encaminamiento y no se hace necesaria la consulta
o existencia de tablas de encaminamiento en los nodos intermedios. Este
tipo de encaminamiento suele ser típico de las redes de IBM.
-
Salto a salto (Hop by Hop): los nodos, sabiendo donde está
el destino, conocen sólo el siguiente salto a realizar.
2.- En función de la adaptabilidad:
-
No adaptables (estáticos):
-
Estáticos: Las tablas de encaminamiento de los nodos
se configuran de forma manual y permanecen inalterables hasta que no se
vuelve a actuar sobre ellas. La adaptación a cambios es nula. Tanto
la recogida como la distribución de información se realiza
por gestión (se realiza de manera externa a la red), sin ocupar
capacidad de red. El calculo de ruta se realiza off-line (en una maquina
especifica),y las rutas pueden ser las optimas al no estar sometido al
requisito de tiempo real. Este tipo de encaminamiento es el optimo para
topologias en los que solo hay una posibilidad de encaminamiento (topologia
en estrella).
-
Q-Estáticos: Este encaminamiento, es igual que el
estático pero en vez de dar una sola ruta fija, se dan además
varias alternativas en caso de que la principal no funcione, de ahí
que tenga una adaptabilidad reducida.
Comparación entre ambos:
| |
Fijado en Origen |
Salto a Salto |
| Conocimiento |
Los sistemas finales
han de tener un conocimiento completo de la red |
SIMPLICIDAD: Los nodos han de tener un conocimiento parcial de la red
(saber qué rutas son las mejores) |
| Complejidad |
Recae toda en los sistemas finales |
En los sistemas intermedios ya que son los que tienen que encaminar |
| Problemas de Bucles |
No hay bucles: el sistema final fija la ruta (ROBUSTEZ). |
Sí pueden ocurrir: no se tiene una visión completa de
la red (INCONSISTENCIA) |
-
Adaptables (dinámicos):
-
Centralizados: En este tipo de encaminamiento, todos los
nodos son iguales salvo el nodo central. Los nodos envían al central
información de control a cerca de sus vecinos (R-PDUs).
El nodo central será el que se encargue de recoger esta información
para hacer la FIB de cada nodo, es decir, el nodo central
decide la tabla de encaminamiento de cada nodo en función de la
información de control que éstos le mandan. El inconveniente
de este metodo es que consumimos recursos de la red, y además, se
harian necesaria rutas alternativas para comunicarse con el nodo central,
ya que estos métodos es que dejarían de funcionar con la
caída de éste.
-
Aislados: No se tiene en cuenta la información de
los otros nodos a la hora de encaminar. Se basa en que cada vez que un
nodo recibe un paquete que tiene que reenviar (porque no es para él)
lo reenvía por todos los enlaces salvo por el que le llegó.
Son muy útiles para enviar información de emergencia. Destacan
dos métodos de encaminamiento aislados:
-
Algoritmo de inundación: Ver
anexo 1.
-
Algoritmo de aprendizaje hacia atrás(Backward Learning):
Ver anexo 2.
-
Algoritmo de la patata caliente
("Hot
Potatoe").
-
Distribuídos: Son los más
utilizados. En este tipo de encaminamiento todos los nodos son iguales,
todos envían y reciben información de control y todos calculan,
a partir de su RIB (base de información de encaminamiento)
sus tablas de encaminamiento. La adaptación a cambios es optima
siempre y cuando estos sean notificados. Hay dos familias de procedimientos
distribuídos:
5.2.2.1 Vector de Distancias
Cada nodo informa a sus nodos vecinos de todas las distancias
conocidas por él, mediante vectores de distancias (de
longitud variable según los nodos conocidos). El vector de distancias
es un vector de longitud variable que contiene un par (nodo:distancia al
nodo) por cada nodo conocido por el nodo que lo envia, por ejemplo (A:0;B:1;D:1)
que dice que el nodo que lo manda dista "0" de A,"1" de B
y
"1" de D, y de los demás no sabe nada (ésta es la
forma en la que un nodo dice lo que sabe en cada momento). El nodo solo
conoce la distancia a los distintos nodos de la red pero no conoce la topologia.
Estos vectores de distancia se envían periódicamente y cada
vez que varíe su vector de distancias. Veamos el siguiente ejemplo:

El vector de distancias de A sería:

Este vector de distancias de A llega al nodo B, el cual lo utiliza para
actualizar el suyo:

Este VDB pasa al nodo A, el cual actualiza el suyo,
etc.
Al cabo de un tiempo, se estabiliza la información de cada nodo,
es decir, sus vectores de distancia quedan constantes aún sin dejar
de enviarse información periódicamente.
Con todos los vectores recibidos, cada nodo monta su tabla
de encaminamiento ya que al final conoce qué nodo vecino tiene
la menor distancia al destino del paquete, pues se lo han dicho con el
vector de distancias.
El envío de vectores de distancia entre nodos tiene lugar en
el plano de control.
Si no se sabe a donde enviar un paquete, se descarta.
Ventajas del método:
-
Muy sencillo.
-
Muy robusto (gracias al envío periódico de información)
-
Consumo de memoria bajo: cada nodo sólo ha de almacenar distancias
con el resto de los nodos.
(NOTA: los nodos no tienen información topologica de la red completa,
es decir, pueden conocer la distancia a nodos lejanos, pero no donde están).
Inconvenientes del método:
-
Convergencia lenta (los vectores de distancia tardan en estabilizarse).
-
Pueden aparecer bucles.
-
Adaptabilidad a los cambios baja, ya que sólo sabe a quién
tiene que reenviar un paquete, pero no tiene información de la topología.
-
Consumo alto de capacidad: se transmiten vectores cuyo tamaño es
del orden del número de nodos de la red pues cada nodo comunica
a su vecino todas las distancias que conoce
(NOTA: Los bucles
(situación que se da cuando los paquetes pasan más de una
vez por un nodo) ocurren porque los criterios de los nodos no son coherentes,
generalmente debido a que los criterios de encaminamiento o no han convergido
después de un cambio en la ruta de un paquete; cuando por cualquier
causa un paquete sufre un cambio de encaminamiento, la red tarda en adaptarse
a ese cambio pues la noticia del cambio tiene que llegar a todos los nodos.
Es en ese transitorio cuando se pueden dar los bucles, ya que unos nodos
se han adaptado y otros no. El objetivo de los algoritmos de encaminamiento
es detener el curso de los paquetes antes de que se produzcan bucles. Esto
es importante sobre todo cuando se envían los paquete s por varias
rutas simultáneamente (técnicas de inundación, etc...)).
5.2.2.2 Estado de Enlaces
Cada nodo difunde a todos los demás nodos de la red sus distancias
con sus enlaces vecinos, es decir, cada nodo comunica su entorno
local a todos los nodos. Así cada nodo es capaz de conocer la topología
de la red. La clave y dificultad de este metodo es la difusión.
Ventajas del método:
-
Detección de errores más sencilla (si un estado de enlace
es infinito, significa que el nodo ha caído).
-
Convergencia rápida.
-
Alta adaptabilidad a los cambios, ya que los nodos tienen información
de toda la red
-
Menor consumo de capacidad: el tamaño del tráfico enviado
es siempre el mismo independientemente del tamaño de la red.
Inconvenientes del método:
-
Difusión.
-
Consumo de memoria elevado: cada nodo almacena toda la topología
de la red.
5.2.2.3
Comparación de los Métodos de Encaminamiento
| Tipos de Encaminamiento |
Recepción de Información
de Control |
Envío de Información de
Control |
Decisión de encaminamiento (calculo
de FIB) |
Adaptación |
| Estático |
NO |
NO |
OFF-LINE |
NO |
| Q-Estático |
NO |
NO |
OFF-LINE |
Reducida |
| Centralizado |
Nodos -> Nodo Central |
Nodo Central -> Nodos |
Nodo Central |
SI |
| Aislado |
NO |
NO |
-- |
SI |
| Distribuído |
Todos los nodos |
Todos los nodos |
Todos los nodos |
si |
NOTA: En los encaminamientos estático y cuasi-estático
la información necesaria se recoge y envía mediante gestión
(al crear la red y en operaciones de mantenimiento), y los cálculos
de la FIB se realizan off - line (mediante gestión,
es decir en una máquina a parte).
5.3 Algoritmos de Encaminamiento
5.3.0 Introducción
Existen varios tipos de algoritmos de encaminamiento:
-
Algoritmos de camino más corto: Cada nodo decide cuál
es el camino más corto hacia un destino, en función de la
información de control que recibe de otros nodos de la red. Estos
algoritmos minimizan el coste o distancia
de la ruta que une dos nodos cualesquiera. Por ejemplo, si la métrica
utilizada es el número medio de saltos, el algoritmo de camino más
corto será el que minimice este número de saltos entre los
nodos que pretendemos conectar.
En concreto, veremos los algortimos de Dijkstra,
de Floyd - Marshall, de
Bellman
- Ford y de Bellman
- Ford distribuído .
-
algoritmos aislados: Los nodos
no intercambian información de control explícitamente. Podemos
distinguir dos clases de algoritmos para un encaminamiento de este tipo,
que son algoritmos de aprendizaje
y algoritmos de inundación.
Ejemplos concretos de este tipo de algoritmos hay muchos, como el llamado
algoritmo
de Hot Potato,
-
algoritmos de difusión: Permiten hacer
llegar un paquete a todos los nodos de una red. Este procedimiento encuentra
una aplicación directa para un encaminamiento basado en estado
de enlaces, puesto que la información sobre los estados de los
enlaces se difunde a toda la red, y en general, lo que se hará
será mandar paquetes a todos los nodos y marcarlos para deshabilitarlos
si vuelven a pasar (para evitar bucles). Veremos
cuatro
métodos de conseguir la difusión:
-
1er método: consiste en enviar paquetes
a todos los demás nodos (tráfico unicast).
Este método es poco eficiente porque por un mismo nodo pasan varios
paquetes iguales, además de que no elimina el problema de la formación
de bucles.
-
2o método: hace una inundación:
se manda un paquete de un nodo origen a todos los demás. Este tampoco
es un buen método, porque consume muchos recursos y también
puede hacer que aparezcan bucles.
-
3er método: Deshabilitamos algunos enlaces
de forma que todos los nodos estén conectados pero sin bucles. Así,
al inundar se consigue tener muy pocos envíos. Es una solución
bastante usada, aunque la forma de acordar entre todos los nodos de la
red qué enlaces se deshabilitan es complicada.
-
4o método: se hace un reenvío
por ruta hacia atrás (Reverse Path Forwarding). No requiere
calcular el árbol de expansión. Los nodos tienen calculadas
las rutas, y cuando tienen que ayudar a difundir no siempre se hace inundación:
se mira la dirección origen del paquete; si llega por el enlace
que utiliza el nodo para ir al origen inunda; si llega por otra ruta el
nodo considera que el paquete esta dando vueltas y lo descarta.
5.3.1 Notación
Distancia o coste de un canal: es una medida de la calidad de un
enlace en base a la métrica que se haya definido (por ej., para
el método de Gerla es la
sensibilidad al aumento de tráfico; otras veces es coste económico,
probabilidad de error, etc.).
dij es la distancia del enlace entre
dos nodos 'i' y 'j' contiguos. Si no existe enlace entre dichos nodos,
valdrá infinito. Si 'i' es igual a 'j' (se trata del mismo nodo),
esta distancia será nula.
Dij = D[ i,j]
es
la distancia entre dos nodos no contiguos.
P[ i,j] = (K1
= i, ..., Kn = j) es el Path o camino tal
que

"Si P[ i,j] es
un camino mínimo y P[ r,t]
es un subcamino de P[ i,j]
, éste también será mínimo".
5.3.2 Algoritmo de Dijkstra
Es un algoritmo iterativo que debe ejecutarse para todos y cada uno de
los nodos de la red. Este algoritmo, aplicado a un nodo, tiene una complegidad
del orden de N² operaciones, por lo que aplicado a los N nodos de
la red, resultará tener una complejidad del orden de N³ operaciones
(siendo N el número de nodos de la red), por lo que es facil imaginar
que no se trata de un algoritmo eficiente para redes de gran tamaño..
-
Para un nodo 's', calcula el camino más corto con origen 's' y destino
el resto de los nodos de la red (arbol de divergencia).
-
Di es la distancia del camino que va de nodo 's' al
nodo 'i'.
-
P es el conjunto de los nodos que tienen una etiqueta de distancia (Di)
que es permanente.
-
T es el conjunto de los nodos que no están en P.
A cada nodo se le asigna una etiqueta, que es un indicador de la
distancia del nodo origen al nodo en cuestión. Así, se hace
una partición de la red: se crea un conjunto de nodos con
etiqueta
permanente (conjunto P) y un conjunto de nodos con
etiqueta
tentativa (conjunto T), es decir, un conjunto de nodos cuya
etiqueta puede cambiar en las siguientes iteraciones.
Pasos del algoritmo:
1.- PASO 0 (INICIACIÓN):

2.- PASO 1:
-
Encontramos
.
Puede existir empate, es decir, dos caminos igual de cortos, eligiéndose
uno de ellos arbitrariamente o de acuerdo con un criterio marcado (no se
soporta balanceo de carga).
-

-
Si P contiene a todos los nodos, se para. Si no, continuamos con el paso
3:
3.- PASO 2 (ACTUALIZACIÓN):

4.- SALTO AL PASO 1.
Veamos, para mayor claridad del método, un ejemplo:
Tenemos la siguiente red:
Para s = 1: 
(i=4): añadimos nodo 'i' a P. Como P no contiene a todos los
nodos 3, 5 y 6:
Vemos que tenemos empate entre los nodos 2 y 5, luego elegimos uno al
azar: i=2:
Seguimos con (i=5):
Ahora con (i=3):
El arbol final de encaminamiento del nodo 1 al resto de los nodos de
la red queda:
No obtiene directamente las tablas de encaminamiento, sino las distancias
entre nodos (arbol de encaminamiento), las cuales se tendrán que
traducir a unas tablas de encaminamiento en todos los nodos. Para nuestro
ejemplo, en el nodo 1, tendríamos para el caso de encaminamiento
fuente y encaminamiento salto a salto las siguientes tablas, respectivamente:

El algoritmo de Dijkstra puede utilizarse como algoritmo estático
y también como algoritmo dinámico
centralizado, que consistiría en que hubiera un nodo central
al que todos los demás nodos de la red enviaran información
de su estado y del de los enlaces que salen de ese nodo. El nodo central
recalcularía las distancias de todos los canales, aplicaría
el algoritmo de Dijkstra y mandaría las nuevas tablas de encaminamiento
a todos los nodos de la red.
Veamos otro ejemplo (i = 1):

El resultado, por pasos, es el siguiente:
1.- P = {1}; T = {2,3,4,5,6}; D1K
= {0,1,-,4,-,-}
2.- P = {1,2}; T = {3,4,5,6}; D1K
= {0,1,4,4,2,-}
(NOTA: las dos nuevas distancias las conozco a través
del nodo que acabo de incluir en P)
3.- P = {1,2,5}; T = {3,4,6}; D1K
= {0,1,3,3,2,6}
4.- P = {1,2,5,4}; T = {3,6}; D1K
= {0,1,3,3,2,6}
5.- P = {1,2,5,4,3}; T = {6}; D1K
= {0,1,3,3,2,5}
6.- P = {1,2,5,4,3,6}; T = {}; D1K
= {0,1,3,3,2,5}
Luego la mínima distancia del nodo 1 al resto es:
D1K
= {0,1,3,3,2,5}
5.3.3 Algoritmo de Floyd-Marshall
A diferencia del algoritmo anterior (algoritmo
de Dijkstra), que consideraba un nodo origen cada vez, este algoritmo
obtiene la ruta más corta entre todo par de nodos (todos
con todos). Itera sobre el conjunto de nodos que se permiten como nodos
intermedios en los caminos. Empieza con caminos de un solo salto y en cada
paso ve si es mejor la ruta de la iteración anterior o si por el
contrario conviene ir por otro nodo intermedio más(aquél
sobre el cual se itera).
Para ello se construye la matriz D, cuyos elementos, Dij,
son las etiquetas (indicadores de distancia)
de la ruta entre el nodo i y el j. El algoritmo es el siguiente:
es el camino
del nodo 'i' al nodo 'j' pasando por 'n' nodos intermedios.
Pasos del algoritmo:
1.- PASO 0 (INICIACIÓN):

2.- PASO 1 (ITERACIÓN):

En cada paso se ve si es mejor la ruta de la iteración anterior
o si es mejor ir a través del nodo n.
Como ejemplo, para la siguiente red, tendremos la siguiente secuencia
de matrices:

Nota: El nodo 1 es el nodo A de la red, el 2
es el B y así sucesivamente.
La segunda matriz tiene el nodo 1 como nodo intermedio, la tercera
matriz tiene el nodo 2 como nodo intermedio, ... y así hasta
la última matriz que tiene el nodo 5 como nodo intermedio
y da como resultado la matriz de distancias mínimas buscada.
La primera fila de la matriz (distancias del nodo A a todos los
demás) coincidiría con las etiquetas halladas con Dijkstra.
La última matriz es la matriz de distancias buscada, ya
que se han probado todos los nodos intermedios. Hay que tener en cuenta
que el algoritmo da sólo la menor distancia; se debe manejar información
adicional para encontrar tablas de encaminamiento.
La complejidad de este algoritmo es del orden de N3,
igual que para Dijkstra. Para
un encaminamiento distribuído con estado
de enlaces es mejor Dijkstra,
que tiene una menor complejidad para un nodo dado.
5.3.4 Algoritmo de Bellman-Ford
Encuentra la mínima distancia de un nodo dado al resto de los nodos,
y si se lleva información adicional, proporciona las tablas
de encaminamiento, al igual que los anteriores.
Itera sobre el número de saltos, h, es decir, se
busca el mejor camino, el de distancia más
corta, con la restricción de llegar al destino en un número
de saltos h (número de la iteración). No encuentra
las mejores rutas hasta que el algoritmo no se ha ejecutado por completo.
Es decir, consiste fundamentalmente en calcular la distancia de un nodo
(aquel para el cual aplicamos el algoritmo) a los demas sin dar ningún
salto, luego dando uno, etc.
Sea el nodo i aquél para el que queremos encontrar
las mejores rutas al resto de nodos. El algoritmo es el siguiente:
Pasos del algoritmo:
1.- PASO 0 :
n = 0 ('n' es el número de saltos)

2.- PASO 1:

Veamos el siguiente ejemplo con la red:
Tendremos entonces:


(vemos que con un salto, 'cuesta' más llegar al nodo 3 (distancia
5) que con dos saltos (distancia 4))
y paramos,
ya que (n=4) y (n=5) no aportan mejora alguna.
Se prueba dando un salto más. Notar que está permitido
el caso i=j, resultando entonces que no se da un nuevo salto (era mejor
la ruta hallada antes).
Tiene una complejidad del orden de N3 por cada nodo
que realiza el algoritmo, es decir, un orden mayor que Dijkstra.
El interés del algoritmo radica en que se asemeja al de una red
en la que se parte de la ignorancia total de un nodo, en la siguiente iteración
conoce a sus nodos vecinos y así va progresivamente conociendo nodos
más lejanos. Puede verse que esta es la forma de trabajar de un
encaminamiento mediante vector de
distancias. Para ello, necesita ser enunciado de forma distribuída,
de la forma que vemos a continuación.
5.3.5 Algoritmo
de Bellman-Ford Distribuído
Es la base de un algoritmo de vector
de distancias.Se ejecuta para cada nodo i.
Pasos del algoritmo:
1.- PASO 0 :

2.- PASO 1 (ACTUALIZACIÓN): cada cierto tiempo, el nodo 'i'
envía a sus vecinos D(i,j), recibiendo a su vez de todos sus vecinos
'j' los D(j,k). Entonces, el nodo 'i' calcula la distancia de 'i' a 'k'
pasando por 'j':
y realiza la siguiente actualización de su tabla de encaminamiento::

El proceso de actualización se sigue repitiendo: cuando un nodo
i
recibe un vector de distancias de un nodo vecino j, calcula las
distancias a todos los demás nodos k a través del
vecino j, y si es mejor que por el camino anterior se actualiza
la tabla de encaminamiento del nodo
i, ( n(i,k)=j)
y las nuevas distancias D(i,k). Una vez obtenido el nuevo vector de distancias,
i
se lo manda a los demás nodos j para que éstos actualicen
a su vez los suyos.
Pasemos al siguiente ejemplo:

INICIO (nodo A):
Vector distancias de B: D(B,j) = (A,1;B,0;C,4;D,2;E,3)
Este VDB llega a A, el cual actualiza
el suyo:
5.4 Anexo 1: Algoritmos de Inundación
En este algoritmo los nodos no intercambian información de control.
Cuando un paquete llega a un nodo de la red, lo que éste hace es
conmutarlo por todos los puertos de salida sin mirar ninguna tabla de encaminamiento.
De esta forma se asegura que el paquete llegue al destino.
Problema: si la topología presenta bucles el paquete estará
dando vueltas de manera indefinida. Como consecuencia, se consume
capacidad de red ilimitada. Además, llegan paquetes duplicados.
Solución: La solución pasa por limitar la vida
del paquete en la red TTL, es decir,
establecer una caducidad. Cuando se genera un paquete se incluye
en un campo el número máximo de saltos que éste puede
dar. Cada vez que ese paquete es conmutado el campo "número de saltos"
se decrementa en una unidad hasta que sea cero, en cuyo caso los nodos
ya no lo conmutan, sino que lo descartan. De esta manera aseguramos
una existencia limitada de paquete dentro de la red.
Es necesario establecer el valor inicial del contador lo suficientemente
alto como para que el paquete sea capaz de llegar al destino, pero tampoco
excesivamente alto para que no consuma muchos recursos. La decisión
que se adopta es inicializar el contador al número de saltos necesario
para llegar desde cualquier nodo de la red a otro (El valor es el mismo
para todos los paquetes generados, sea cual sea el nodo de la red que lo
haga).
Otra solución es determinar
si un nodo ha conmutado ya ese paquete. En este caso, un nodo origen marca
el paquete generado con un número de secuencia de tal forma que
la unicidad de ese paquete viene dada por el par (origen, secuencia). Cuando
un nodo conmuta un paquete mira en tabla; si ya lo ha conmutado lo
descarta, y si no lo ha conmutado lo introduce en la tabla. Como ventaja
respecto de la solución anterior se consume menos capacidad de red,
pero posee el inconveniente de que la tecnología del nodo es muy
compleja y el tamaño de las tablas puede ser muy grande. Además
esta solución puede dar mayores retardos que la anterior.
Concluyendo, la inundación
es buena si tenemos la red sobredimensionada, ya que no tendríamos
tantas limitaciones en cuanto a ocupación de recursos. En este caso,
la inundación es el algoritmo más robusto y óptimo,
ya que encuentra todas las rutas, entre ellas la mejor.
Por último, queda solucionar el problema de
multiplicidad de paquetes en el nodo destino, pero eso queda para
los niveles superiores de la jerarquía
OSI.
5.5 Anexo 2: Algoritmo de Aprrendizaje
hacia Atrás
Podemos observar que no es completamente
aislado,
ya que hace uso de tablas de encaminamiento.
Son los usados en redes locales.
Cuando llega un paquete a un nodo con destino a otro nodo cualquiera, se
hace lo siguiente:
-
Si no se conoce el nodo destino se inunda y se incrementa el campo
número de saltos dados por el paquete.(al contrario que en inundación,
donde se decrementaba).
-
Si el destino se conoce, se envia el paquete por la ruta que se indica
en las tablas.
El aprendizaje se basa en que partimos de no tener ninguna información
de control, y segun se van produciendo inundaciones se aprende. Cuando
llega un paquete se mira el origen , el puerto a través del que
ha llegado y el número de saltos dados por ese paquete hasta que
ha llegado. Si no teníamos ninguna entrada en la tabla de encaminamiento
con el nodo del que ha llegado o si la teniamos pero con numero de saltos
mayor (mayor distancia) se actualizan las tablas. Para evitar que un paquete
esté dando vueltas eternamente en la red y por lo tanto consuma
recursos innecesariamente, se limita el número de saltos que éste
puede dar.
En principio, cuando todos los nodos hayan aprendido las mejores rutas
se acabará la inundación. Sin embargo, a las entradas se
les asocia un tiempo de vida, que se renueva cada vez que se hace uso de
la entrada. Si transcurrido el tiempo de vida la entrada no ha sido empleada
se borra, volviendo a inundar. Así se logra que la red se adapte
a los cambios.
Problema: la inundación consume recursos indefinidamente
y pueden aparecer bucles. Esto puede evitarse añadiendo un poco
de control: en los paquetes se introduce información sobre el número
de saltos que ha realizado éste (se tiene un contador que se
incrementa en cada salto); cuando este número llega a un valor máximo,
se descarta el paquete. De esta forma podemos cuantificar distancias además
de conocer la conectividad entre dos nodos.
Este tipo de algoritmos es óptimo (consiguen la mejor
ruta, ya que en realidad consiguen todas), siempre que se controle que
no se saturen los enlaces de los nodos.
Estos algoritmos se llaman de Backward Learning, o aprendizaje
hacia atrás, debido a que la forma que tienen de aprender los nodos
es a través de la información que les llega del nodo origen.
Vuelta al Indice de Apuntes
Ver problemas
de este tema.
5.6 Bibliografía
| |
Tanenbaum, Andrew S., Computer Networks, Prentice-Hall,
1996. |
| |
Bertsekas, D. y Gallager, R., Data Networks,
2a edición, Prentice-Hall, 1992. |
| |
Comer, Douglas E., Internetworking with TCP/IP,
3a edición, Volumen 1: Principles, Potocols
and Architectures, Prentice-Hall, 1995. |