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