Back to index

# A Loop-Free Extended Bellman-Ford Routing Protocol Without Bouncing Effect

Cheng, Riley, and Kumar

One-line summary: Routing loops and counting-to-infinity behaviors are possible with distance-vector routing; this paper shows how to eliminate them, with minimal performance hit for the routers.

## Overview/Main Points

• Standard algorithm: Bellman-Ford distance vector routing. Each node maintains the shortest distance to all destinations through all of its neighbors. From time to time, each node creates a vector containing the shortest distance to each destination, and sends this vector to its neighbors. Upon receiving a vector from a neighbor, a node updates its minimum distances to all destinations via this neighbor.
• Bad behavior: routing loops. Imagine: A,B,C are connected in a triangle. A's preferred route to C is via B; B's is direct. Now the B->C link fails; B will see that A is advertising a route to C, and so B's new preferred route to C will be via A. So we get the routing loop A->B->A->B->... if A tries to send a packet to C. (Each time a distance vector update is performed, A's and B's perceived distance to C increases; once that perceived distance becomes greater than the weight on the A->C link, the routing loop will fix itself.)
• Bad behavior: counting-to-infinity. Imagine: the A->C link fails before the routing loop fixes itself. Now A's and B's perceived distance to C will increase forever, and the routing loop will never go away.
• Underlying problem: routes can end up going in loops.
• Naive fix: when sending a distance vector update, include the full path to a destination along with that destination's minimum distance. Now when you update your minimum distances based on vectors from neighbors, make sure you don't update in a way that introduces loops.
• Disadvantage: naive fix requires significantly increased communication and memory costs.
• Enhancement: instead of storing the entire (best) path to a destination, just store the penultimate hop in that path. Now you can recover the entire (implicit) path to a destination just by tracing the chain of penultimate hops (e.g. find the penultimate hop, then look at the route to that penultimate hop and find that one that immediately precedes it, etc.); in this way, you can still avoid loops when updating. Gives much better performance.
• Problem: update algorithm becomes incorrect. Imagine: imagine implicit path A->B->C->D->E; now if route B->C changes, then can screw up the longer path. The (bad) end result is that the implicit path to a destination may no longer match the true best distance you have to that destination. They include a small fix to the algorithm to avoid this badness; I don't entirely understand it, but I don't think it's crucial.
• Performance: not much worse than standard Bellman-Ford; can even require less work & communication from the routers. And avoid routing loops or counting-to-infinity. (But can have temporary routing loops if you're unlucky enough to have two separate links fail nearly instantaneously, though this is much less likely in practice, I'd expect.)

## Relevance

A better algorithm for distance-vector routing. Routing loops really do happen quite often; assymetric routing should only make them worse, I'd expect.

## Flaws

All theory; no implementation. Also, distance-vector routing is inherently painful in large networks.
Back to index