¿Por qué se usa Dijkstra para el enrutamiento de estado de enlace y Bellman-Ford para el enrutamiento de vector de distancia? ¿Por qué no usar lo mismo?

Gracias por A2A

Respuesta corta:

El enrutamiento de estado de enlace (LSR) usa ancho de banda y retraso, mientras que el enrutamiento por vector de distancia (DVR) usa conteos de saltos para asignar valores a los bordes y los valores de estas cosas no pueden ser negativos.

El LSR se usa generalmente en redes más grandes en las que se requieren algoritmos más rápidos y robustos, como Dijkstra. La principal desventaja de usar el algoritmo Bellman-Ford en una red más grande es “Count to Infinity”, que se produce cuando un enrutador se apaga y sabemos que las posibilidades de esto son muy altas en redes más grandes.

Dijkstra no se puede usar en DVR porque requiere una base de datos completa de toda la topología de la red (o área). Los protocolos de DVR no llevan eso. [1]

Respuesta larga:

Enrutamiento de estado de enlace:
Tomado de: Página en nptel.ac.in

Enrutamiento de estado de enlace:
El enrutamiento por vector de distancia se utilizó en ARPANET hasta 1979, cuando fue
reemplazado por enrutamiento de estado de enlace. Dos problemas principales causaron su desaparición. Primero, dado que la métrica de retraso era la longitud de la cola, no tuvo en cuenta el ancho de banda de la línea al elegir las rutas. Inicialmente, todas las líneas tenían 56 kbps, por lo que el ancho de banda de la línea no era un problema, pero después de que algunas líneas se actualizaron a 230 kbps y otras a 1.544 Mbps, no tomar en cuenta el ancho de banda fue un problema importante. Por supuesto, habría sido posible cambiar la métrica de retraso para tener en cuenta el ancho de banda de la línea, pero también existía un segundo problema, a saber, el algoritmo a menudo tardaba demasiado en converger, incluso con trucos como el horizonte dividido. Por estas razones, fue reemplazado por un algoritmo completamente nuevo que ahora se denomina enrutamiento de estado de enlace. Las variantes de enrutamiento de estado de enlace ahora se usan ampliamente. La idea detrás del enrutamiento del estado del enlace es simple y puede expresarse en cinco partes.
Cada enrutador debe hacer lo siguiente:
1. Descubra a sus vecinos y conozca sus direcciones de red.
2. Mida el retraso o el costo para cada uno de sus vecinos.
3. Construya un paquete contando todo lo que acaba de aprender.
4. Envíe este paquete a todos los otros enrutadores.
5. Calcule la ruta más corta a cualquier otro enrutador.

Este también me pareció interesante, está aquí: Protocolos de enrutamiento de estado de enlace

Protocolos de enrutamiento de estado de enlace:
La información disponible para un enrutador de vector de distancia se ha comparado con la información disponible de una señal de tráfico. Los protocolos de enrutamiento de estado de enlace son como una hoja de ruta. Un enrutador de estado de enlace no puede ser engañado tan fácilmente para tomar malas decisiones de enrutamiento, ya que tiene una imagen completa de la red. La razón es que, a diferencia del enfoque de enrutamiento por rumor del vector de distancia, los enrutadores de estado de enlace tienen información de primera mano de todos sus enrutadores pares. Cada enrutador genera información sobre sí mismo, sus enlaces directamente conectados y el estado de esos enlaces (de ahí el nombre). Esta información se transmite de enrutador a enrutador, cada enrutador hace una copia, pero nunca la cambia. El objetivo final es que cada enrutador tenga información idéntica sobre la red interna, y cada enrutador calculará independientemente sus mejores rutas.
Los protocolos de estado de enlace, a veces llamados primero la ruta más corta o protocolos de bases de datos distribuidas , se basan en un algoritmo conocido de la teoría de gráficos, el algoritmo de ruta más corta de EW Dijkstra.

Aunque los protocolos de estado de enlace se consideran más complejos que los protocolos de vector de distancia, la funcionalidad básica no es compleja en absoluto:

  1. Cada enrutador establece una relación, una adyacencia, con cada uno de sus vecinos.
  2. Cada enrutador envía anuncios de estado de enlace (LSA), algunos
  3. Cada enrutador almacena una copia de todos los LSA que ha visto en una base de datos. Si todo funciona bien, las bases de datos en todos los enrutadores deben ser idénticas.
  4. La base de datos topológica completa, también llamada base de datos de estado de enlace , describe un gráfico de la red interna. Usando el algoritmo Dijkstra, cada enrutador calcula la ruta más corta a cada red e ingresa esta información en la tabla de rutas.

Enrutamiento vectorial a distancia:
Forma tomada: Protocolos de enrutamiento por vector de distancia

La mayoría de los protocolos de enrutamiento se dividen en una de dos clases: vector de distancia o estado de enlace .
El nombre del vector de distancia se deriva del hecho de que las rutas se anuncian como vectores de (distancia, dirección), donde la distancia se define en términos de una métrica y la dirección se define en términos del enrutador del siguiente salto. Por ejemplo, “El destino A está a una distancia de 5 saltos en la dirección del enrutador X del siguiente salto”. Como esa afirmación implica, cada enrutador aprende rutas desde las perspectivas de sus enrutadores vecinos y luego anuncia las rutas desde su propia perspectiva. Debido a que cada enrutador depende de sus vecinos para obtener información, que los vecinos a su vez pueden haber aprendido de sus vecinos, y así sucesivamente, el enrutamiento de vector de distancia a veces se denomina “enrutamiento por rumor”.

Características comunes:
Un protocolo de enrutamiento de vector de distancia típico utiliza un algoritmo de enrutamiento en el que los enrutadores envían periódicamente actualizaciones de enrutamiento a todos los vecinos transmitiendo sus tablas de rutas completas.

Junto con lo anterior:
1. Cada enrutador mantiene una tabla:
Destino, costo estimado, enlace, conteo de saltos, retraso de tiempo en ms, longitud de la cola, etc.
2. Actualizado mediante el intercambio de información entre el enrutador – ICMP

Algoritmo de Dijkstra:
Tomado de: el algoritmo de Dijkstra

El algoritmo de Dijkstra, concebido por el científico informático Edsger Dijkstra en 1956 y publicado en 1959, es un algoritmo de búsqueda de gráficos que resuelve el problema de la ruta más corta de una sola fuente para un gráfico con costos de ruta de borde no negativos, produciendo un árbol de ruta más corta. Este algoritmo se usa a menudo en el enrutamiento y como una subrutina en otros algoritmos gráficos.

Para un vértice fuente (nodo) dado en el gráfico, el algoritmo encuentra la ruta con el costo más bajo (es decir, la ruta más corta) entre ese vértice y todos los demás vértices. También se puede usar para encontrar los costos de las rutas más cortas desde un único vértice a un único vértice de destino deteniendo el algoritmo una vez que se ha determinado la ruta más corta al vértice de destino. Por ejemplo, si los vértices del gráfico representan ciudades y los costos del camino de borde representan distancias de conducción entre pares de ciudades conectadas por una carretera directa, el algoritmo de Dijkstra se puede usar para encontrar la ruta más corta entre una ciudad y todas las demás ciudades. Como resultado, el algoritmo de ruta más corta se usa ampliamente en protocolos de enrutamiento de red, especialmente IS-IS y OSPF (Open Shortest Path First).

Ilustración de la búsqueda del algoritmo de Dijkstra para encontrar la ruta desde un nodo de inicio (abajo a la izquierda, rojo) hasta un nodo objetivo (arriba a la derecha, verde) en un problema de planificación de movimiento del robot. Los nodos abiertos representan el conjunto “tentativo”. Los nodos rellenos son visitados, con un color que representa la distancia: cuanto más verde, más lejos. Los nodos en todas las diferentes direcciones se exploran de manera uniforme, apareciendo como un frente de onda circular más o menos, ya que el algoritmo de Dijkstra usa una heurística idénticamente igual a 0:

Algoritmo:

Selecciona el vértice no visitado con la distancia más baja, calcula la distancia a través de él a cada vecino no visitado y actualiza la distancia del vecino si es más pequeño. Mark visitó (configurado en rojo) cuando terminó con los vecinos.

Algoritmo de Bellman-Ford:
Tomado de: algoritmo Bellman – Ford

El algoritmo Bellman-Ford es un algoritmo que calcula las rutas más cortas desde un vértice de origen único a todos los otros vértices en un dígrafo ponderado. Es más lento que el algoritmo de Dijkstra para el mismo problema, pero más versátil, ya que es capaz de manejar gráficos en los que algunos de los pesos de los bordes son números negativos. El algoritmo generalmente lleva el nombre de dos de sus desarrolladores, Richard Bellman y Lester Ford, Jr., quienes lo publicaron en 1958 y 1956, respectivamente; sin embargo, Edward F. Moore también publicó el mismo algoritmo en 1957, y por esta razón también a veces se le llama algoritmo Bellman-Ford-Moore.

Los pesos de borde negativos se encuentran en varias aplicaciones de gráficos, de ahí la utilidad de este algoritmo. Si un gráfico contiene un “ciclo negativo” (es decir, un ciclo cuyos bordes suman un valor negativo) al que se puede acceder desde la fuente, entonces no hay una ruta más barata: cualquier ruta puede volverse más barata con una caminata más alrededor del ciclo negativo. En tal caso, el algoritmo Bellman-Ford puede detectar ciclos negativos e informar su existencia.

Algoritmo:
Bellman – Ford se basa en el principio de relajación, en el que una aproximación a la distancia correcta se reemplaza gradualmente por valores más precisos hasta llegar a la solución óptima. En ambos algoritmos, la distancia aproximada a cada vértice es siempre una sobreestimación de la distancia real, y se reemplaza por el mínimo de su valor anterior con la longitud de una ruta recién encontrada. Sin embargo, el algoritmo de Dijkstra selecciona con avidez el nodo de peso mínimo que aún no se ha procesado, y realiza este proceso de relajación en todos sus bordes salientes; por el contrario, el algoritmo Bellman-Ford simplemente relaja todos los bordes y hace esto | V | -1 veces, donde | V | es el número de vértices en el gráfico. En cada una de estas repeticiones, aumenta el número de vértices con distancias calculadas correctamente, de lo que se deduce que eventualmente todos los vértices tendrán sus distancias correctas. Este método permite aplicar el algoritmo Bellman-Ford a una clase de entradas más amplia que Dijkstra.

Ahora, aquí hay algunos puntos importantes tomados de las fuentes mencionadas anteriormente:
En LSR, cada nodo envía el mapa completo de toda la red a todos los demás nodos de la red, mientras que en DVR cada nodo envía un vector de distancia, es decir (distancia, vector), solo a sus nodos vecinos. Ahora, en el caso de LSR, siempre que haya un cambio en la conectividad entre un nodo y sus vecinos, se vuelve a calcular el mensaje de estado de enlace que proporciona información sobre los vecinos, y luego se inunda a través de la red, mientras que en DVR el cambio solo se envía a los vecinos debido a se produce este conteo hasta el infinito (esta es la principal desventaja del algoritmo Bellman-Ford).

Cuenta hasta el infinito [2]:

Supongamos que todos los nodos acaban de iniciarse como se muestra en la figura (a). Inicialmente no existen rutas como se muestra por los puntos. La figura solo explica las rutas de A. A recibe una actualización de enrutamiento de B y A se entera de que está a solo 1 salto de distancia, por lo que se ingresa en la tabla de enrutamiento de A. B aprende una ruta a C en este mismo turno a partir de la actualización de C. Incluye esto en su próxima actualización de A y, por lo tanto, A aprende que C está a 1 salto de distancia de B. Por lo tanto, la actualización se realiza en A que C está a 2 saltos de distancia (A a B + B a C). Del mismo modo, A aprende que D es de 2 saltos de B y E es de 3 saltos, de las actualizaciones posteriores. Así, A aprende las rutas a cada nodo.

Ahora suponga que A se apaga. El enlace AB se corta. La métrica se ha convertido en infinito. En esta situación, cuando B recibe una actualización de C, se da cuenta de que hay una ruta a A a través de C y, por lo tanto, actualiza su tabla de enrutamiento (B a C + C a A). Este cambio se refleja en la próxima actualización de B. C actualiza su enlace a A (A a B + B a C) y así sucesivamente. Como se puede ver, la métrica seguirá aumentando y continuará hasta el infinito, y de ahí el nombre ‘Cuenta hasta el infinito’. ¡El problema surge porque B no se da cuenta de que el camino hacia A que C anunció pasa a través de B mismo!

Para resolver esto, se define el conteo máximo de saltos que introduce su primera desventaja (redes grandes). Las técnicas como horizonte dividido y horizonte dividido con veneno inverso también se utilizan para eliminar este problema

Pero el algoritmo de Dijkstra también es mucho más rápido que Bellman-Ford.

El algoritmo Dijkstra no se puede usar en DVR porque el algoritmo necesita una base de datos de toda la red que no es transportada por DVR.

El algoritmo de Dijkstra no funciona en bordes negativos, mientras que el algoritmo Bellman-Ford funciona en bordes negativos. LSR usa ancho de banda y tiempo de retraso y algunos otros factores, estos factores no pueden ser negativos, mientras que DVR usa el conteo de saltos y la longitud de la cola y algunos otros factores, estos tampoco pueden ser negativos por razones obvias.

Conclusión:
DVR no lleva la base de datos de topología de red completa, debido a esto Dijkstra no se puede usar en DVR.

En redes más grandes, las posibilidades de falla de un enrutador son altas debido a que este algoritmo de Bellman-Ford no se puede usar en redes más grandes porque tiene la desventaja de contar hasta el infinito.

El LSR generalmente se usa en redes más grandes y el algoritmo Bellman-Ford es más lento que el algoritmo Dijkstra, por lo tanto, este es otro problema del algoritmo Bellman-Ford debido a que no se puede usar en redes más grandes.

Espero que hayas recibido tu respuesta.

Referencias
[1] La respuesta de Tony Li al algoritmo Dijkstra ¿Se puede utilizar para el enrutamiento de vector de distancia?
[2] La respuesta de Siddharth Sheth a ¿Cómo funcionan el algoritmo de Bellman-Ford y el algoritmo de Dijkstra de manera diferente en los protocolos de enrutamiento?

¿De qué bordes negativos estás hablando?
¿Qué tipo de mal funcionamiento?
Como estás hablando de la capa de transporte, es bastante comprensible que hayas leído sobre la capa de red.
Y supongo que dado que ha leído sobre la capa de red, tiene poco conocimiento sobre los paquetes de datos. Lo consideraré más tarde.
Dado que ha planteado el punto de mal funcionamiento, permítame darle una pequeña idea sobre el problema de enrutamiento TCP / IP: –

  • Si no puede llegar a un host de destino, considere:

1. Si recibe un mensaje de error de Red inalcanzable, asegúrese de que se haya definido una ruta al host de la puerta de enlace y que sea correcta. Verifique esto usando el comando netstat -r para listar las tablas de enrutamiento del núcleo.

2. Si recibe un mensaje de error Sin ruta al host, verifique que la interfaz de red local esté activa emitiendo el comando ifconfig interface_name. La salida indica si la interfaz está activa o no. Use el comando ping para tratar de llegar a otro host en su red. 127.0.0.1 es la dirección de su red doméstica, por lo que cada vez que hace ping 127.0.0.1, le dice si está conectado a la ruta o no. Además, el servicio al que desea acceder utiliza ping y luego la dirección web para averiguar la ruta de rastreo y el problema, si corresponde. También puede verificar los registros de su módem para verificar la conexión.

  • Si recibe un mensaje de error de Tiempo de espera de conexión:

1. Verifique que la puerta de enlace local esté activa usando el comando ping con el nombre o la dirección de Internet de la puerta de enlace

2. Asegúrese de que se haya definido una ruta al host de la puerta de enlace y que sea correcta. Verifique esto usando el comando netstat -r para listar las tablas de enrutamiento del núcleo.

3. Asegúrese de que el host con el que desea comunicarse tenga una entrada de la tabla de enrutamiento en su máquina.

  • El otro problema que persiste es cuando su conexión queda inactiva, use el comando keepalive para mantener la conexión.

Los otros problemas de conexión también se pueden resolver asegurándose de que el host y las puertas de enlace de prueba.

Ahora, has escrito que el Algoritmo de Dijkstra no puede funcionar en el borde negativo, sí, está bien. Correcto, pero de nuevo no tiene sentido usar el algoritmo de Dijkstra aquí ya que Bellman Ford es más eficiente que el Algoritmo de Dijkstra.

Por lo tanto, se puede decir que ambos algoritmos de enrutamiento pueden usar el algoritmo de Bellman Ford.

¿Bien vale?
No.

Ahora, considere ambos algoritmos de enrutamiento.

Protocolo de enrutamiento de estado de enlace: –

El protocolo de estado de enlace lo realizan todos los nodos de conmutación en la red (es decir, nodos que están preparados para reenviar paquetes; en Internet, estos se denominan enrutadores). El concepto básico del enrutamiento de estado de enlace es que cada nodo construye un mapa de la conectividad a la red, en forma de gráfico, que muestra qué nodos están conectados a qué otros nodos. Luego, cada nodo calcula de forma independiente la siguiente mejor ruta lógica desde él hasta cada destino posible en la red.

Está claramente escrito que cada nodo construye un mapa de conectividad a la red, pero calcula de forma independiente. Entonces, primero calcula luego hacia adelante. En un protocolo de estado de enlace, la única información que se pasa entre los nodos está relacionada con la conectividad .
Entonces, claramente el algoritmo de Bellman Ford es el ganador.

Ahora, considere el enrutamiento de vector de distancia: –

Un protocolo de enrutamiento de vector de distancia requiere que un enrutador informe periódicamente a sus vecinos sobre los cambios de topología. El término vector de distancia se refiere al hecho de que el protocolo manipula vectores (matrices) de distancias a otros nodos en la red.

Por lo tanto, cada vez que se utiliza la topología de la red de distancia, primero informa y verifica todas las redes en su topología (todas las conexiones en una red), funcionando como un paquete que va de una fuente a todas las rutas y cada ruta tiene una red más corta.

Dos métodos que se utilizan son:

  1. Dirección en qué enrutador o interfaz de salida se debe reenviar un paquete.
  2. Distancia desde su destino

    La distancia es principalmente la dirección del próximo salto para la red.

Siempre que se realice periódicamente en un protocolo de vector de distancia donde toda o parte de la tabla de enrutamiento de un enrutador se envía a todos sus vecinos que están configurados para usar el mismo protocolo de enrutamiento de vector de distancia.

Tabla de ruteo:

En las redes de computadoras, una tabla de enrutamiento , o base de información de enrutamiento (RIB) , es una tabla de datos almacenada en un enrutador o una computadora en red que enumera las rutas a destinos de red particulares y, en algunos casos, las métricas (distancias) asociadas con esas rutas. La tabla de enrutamiento contiene información sobre la topología de la red que la rodea inmediatamente.

No conozco los peligros de agregar un dibujo a mano aquí, así que no lo agrego.

Realiza un seguimiento de las rutas, como un mapa, y permite que la puerta de enlace proporcione esta información al nodo que solicita la información.

Por lo tanto, cada vez que la información llega al nuevo enrutador de red, y nuevamente tiene información sobre todos los enrutadores que se descubrirán la próxima vez. Y como has visto, es diferente en función del no. de redes o bucles de enrutamiento que cubre. Entonces, convergen salto por salto. Ver Hop (redes)

Ventajas sobre el enrutamiento de estado de enlace: –

  • no exige un alto nivel de ancho de banda para enviar sus actualizaciones periódicas ya que el tamaño de los paquetes es relativamente pequeño
  • Los protocolos de vector de distancia no requieren una gran cantidad de recursos de CPU o memoria para almacenar los datos de enrutamiento

Desventajas: –

  • Tiempo de convergencia lento
  • bucles de enrutamiento.

Un problema que también se enfrenta es contar hasta el infinito.

Usos: -Debe usar el enrutamiento de vector de distancia cuando la red es simple y plana y no requiere un diseño jerárquico, los administradores no tienen suficiente conocimiento para configurar y solucionar problemas de protocolos de estado de enlace,

Porque las dos categorías de protocolos funcionan de manera diferente:

  • Protocolos de vector de distancia ( RIP, RIPv2, IGRP ) : encuentre la mejor ruta a una red remota en función de la distancia. Cada vez que un paquete pasa por un enrutador, tenemos un salto y la mejor ruta será la más corta, es decir, la que tenga menos saltos. Estos protocolos envían toda la tabla de enrutamiento a todos los vecinos conectados directamente.
  • Protocolos de estado de enlace o primeros protocolos de ruta más corta ( OSPF, IS – IS) : si el enrutador se configura de acuerdo con ellos, crea tres tablas separadas: una que realiza un seguimiento de los vecinos conectados directamente ( tabla de vecinos ), una que determina la topología de toda la red ( tabla de topología ) y una que forma la tabla de enrutamiento real. Los protocolos de estado de enlace saben más sobre la interconexión de redes que los protocolos de vectores de distancia, ya que actualizan los enrutadores sobre el estado de sus propios enlaces.

( Fuente: Todd Lammie, Network + Deluxe Study Guide 2nd ed. , Sibex, 2014 ).

Como puede comprender, la lógica detrás de las dos categorías de protocolos difiere dramáticamente, lo que explica por qué los protocolos de vector de distancia y los protocolos de estado de enlace usan algoritmos diferentes.

En TI, si las cosas se hacen de cierta manera, siempre hay una razón para ello, y lo hacen de esa manera porque funciona (hasta que encuentre algo que funcione mejor de lo que se hizo antes).