web-dev-qa-db-fra.com

Qu'est-ce qui peut provoquer le comptage à l'infini dans l'algorithme de Bellman-Ford

D'après ce que je peux comprendre, le comptage à l'infini se produit lorsqu'un routeur alimente une ancienne information qui continue à se propager à travers le réseau vers l'infini. D'après ce que j'ai lu, cela peut certainement se produire lorsqu'un lien est supprimé.

enter image description here

Ainsi, dans cet exemple, l’algorithme Bellman-Ford convergera pour chaque routeur, ils auront des entrées les uns pour les autres. R2 saura qu'il peut accéder à R3 pour un coût de 1 et R1 saura qu'il peut se rendre à R3 via R2 pour un coût de 2. 

Si le lien entre R2 et R3 est déconnecté, R2 saura qu'il ne pourra plus accéder à R3 via ce lien et le supprimera de sa table. Avant d’envoyer des mises à jour, il est possible qu’elle reçoive une mise à jour de R1 qui indiquera qu’elle peut se rendre à R3 pour un coût de 2. R2 peut se rendre à R1 avec un coût de 1. R3 via R1 pour un coût de 3. R1 recevra ensuite les mises à jour de R2 plus tard et mettra à jour son coût à 4. Ils continueront ensuite à se fournir mutuellement des informations erronées vers l'infini.

Une chose que j'ai vue mentionner à quelques endroits est qu'il peut y avoir d'autres causes de compter à l'infini autres qu'un simple lien hors connexion, tel que la modification du coût d'un lien. J'ai commencé à réfléchir à cela et d'après ce que je peux en dire, il me semble que le coût d'un lien en augmentation pourrait être à l'origine du problème. Cependant, je ne pense pas que le problème puisse être causé par une réduction des coûts.

Par exemple, dans l'exemple ci-dessus, lorsque l'algorithme converge et que R2 dispose d'une route vers R3 pour un coût de 1, et que R1 dispose d'une route pour R3 via R2 à un coût de 2. Si le coût entre R2 et R3 est augmenté jusqu'à 5. Cela poserait alors le même problème: R2 pourrait obtenir une mise à jour de R1 annonçant un coût de 2, et modifier son coût à 3 via R1, R1 puis modifier son itinéraire via R2 à un coût de 4, etc. Toutefois, si le coût diminue sur une route convergée, cela ne provoquera pas de changement. Est-ce correct? C’est un coût croissant entre les liens qui peut causer le problème, pas un coût décroissant? Y a-t-il d'autres causes possibles? Prendre un routeur hors ligne serait-il la même chose qu'un lien sortant?

13
Cory Gross

Regardez cet exemple:

enter image description here

La table de routage sera:

    R1   R2    R3
R1  0    1     2
R2  1    0     1
R3  2    1     0

Supposons maintenant que la connexion entre R2 et R3 soit perdue (vous pouvez interrompre la ligne ou faire basculer un routeur intermédiaire).

Après une itération d’envoi des informations, vous obtenez le tableau de routage suivant:

    R1   R2    R3
R1  0    1     2
R2  1    0     3
R3  2    3     0

Cela se produit parce que R2, R3 n'est plus connecté, donc R2 "pense" qu'il peut rediriger les paquets vers R3 via R1, qui a un chemin de 2 - il obtiendra donc un chemin de poids 3.

Après une itération supplémentaire, R1 "voit" R2 est plus cher qu'avant, il modifie donc sa table de routage:

    R1   R2    R3
R1  0    1     4
R2  1    0     3
R3  4    3     0

et ainsi de suite, jusqu'à ce qu'ils convergent vers la valeur correcte - mais cela peut prendre beaucoup de temps, surtout si (R1, R3) est cher.
Ceci s'appelle "compter à l'infini" (si w(R1,R3)=infinity et est le seul chemin - il continuera à compter pour toujours).


Notez que lorsqu'un coût entre deux routeurs augmente, vous rencontrez le même problème (supposons que w(R2,R3) atteigne 50 dans l'exemple ci-dessus). La même chose se produira - R2 essaiera d’acheminer vers R3 via R1 sans "réaliser" que cela dépend également de (R2,R3), et vous obtiendrez les mêmes étapes et convergeront dès que vous aurez trouvé le coût correct. 
Toutefois, si le coût diminue - cela ne se produira pas car le nouveau coût est meilleur que le courant - et le routeur R2 conservera le même routage avec un coût réduit, et ne tentera pas de router à travers R1.

25
amit

Selon Wikipedia:

Le protocole RIP utilise la technique de l'inversion de poison pour réduire les risques de formation de boucles et utilise un nombre maximal de sauts pour contrer le problème du «compte à l'infini». Ces mesures évitent la formation de boucles de routage dans certains cas, mais pas dans tous. L'ajout d'un temps de maintien (en refusant les mises à jour d'itinéraire pendant quelques minutes après un retrait d'itinéraire) évite la formation de boucles dans presque tous les cas, mais entraîne une augmentation significative des temps de convergence.

Plus récemment, un certain nombre de protocoles vectoriels de distance sans boucle ont été développés - des exemples notables sont EIGRP, DSDV et Babel. Celles-ci évitent dans tous les cas la formation de boucles, mais souffrent d'une complexité accrue et leur déploiement a été ralenti par le succès des protocoles de routage à état de liens tels que OSPF.

http://en.wikipedia.org/wiki/Distance-vector_routing_protocol#Workarounds_and_solutions

2
Anand Srinivasan

Cela ne reconnaît pas la partie de la question relative à l'algorithme Bellman-Ford, mais il s'agit d'une réponse simplifiée. Voici.

Notez l'image par l'affiche originale. Il y a R1, R2 et R3; représentant les routeurs 1, 2 et 3 respectivement. 

Chaque liaison coûte 1 et chaque saut coûte 1. Pour sauter deux routeurs (exemple: R1 à R3), un coût de 2 est requis.

Chaque routeur assure le suivi des coûts et met à jour les informations. Cependant, s'il existe une valeur manquante (par exemple, un lien manquant entre les routeurs), le nombre de sauts est supprimé et est rempli par un autre routeur lors de la mise à jour des tables de routage.

Exemple:

Si la liaison du routeur 3 avec le routeur 2 est interrompue, le routeur 2 supprime la route de sa table. Le routeur 1 pense toujours qu'il faut deux sauts pour se rendre au routeur 3. Cela est répliqué sur le routeur 2, et maintenant les deux routeurs pensent qu'il faut deux sauts pour se rendre au routeur 3.

Le routeur 1 fait quelques calculs simples: «Si cela me prend un saut pour me rendre au routeur 2 et que le routeur 2 nécessite deux sauts pour arriver au routeur 3, il devrait me falloir trois sauts pour me rendre au routeur 3. Brillant!» Le routeur 2 effectue des calculs similaires et ajoute un saut à son itinéraire, etc. 

Voici comment fonctionne la boucle. 

1

Tenez bas:

  • Lorsque la métrique augmente, retarder la propagation des informations

Limites:

  • Retards de convergence évitement de boucle 
  • Informations de chemin complet dans la publicité de route 
  • Requêtes explicites pour les boucles (par exemple, DUAL) Horizon fractionné 
  • Ne jamais annoncer une destination lors de son prochain bond
    • A ne fait pas de publicité de C à B
  • Poison reverse: Envoie des informations négatives lors de la publicité d'une destination lors de son prochain bond
  • A annonce C à B avec une métrique de
    • Limitation: ne fonctionne que pour les “boucles” de taille 2
0
kosai