In our last episode (it’s been two weeks!), we talked about P’s and Q’s. Now we’ll get down into a few details, and think through what is probably the simplest mechanism ever designed for finding alternate loop free paths through a two connected network: not-via. Let’s use the embedded network as an example.
In this case, we’re trying to protect against A failing (I’ve chosen a simple case to make this entire process easier to understand). To provide this protection, E is configured with an extra IP address on the E1 interface, which is then only advertised towards D (not A). This is called the not-via address, because it is advertised as E not-via A.
When B receives this special update, it will examine its local routes and find out what specific destinations are reachable through E. For each of these routes, it can now install a backup path with a next hop of this specific IP address. Of course, B must tunnel traffic to this not-via address, because it can’t be certain the traffic sent towards the destination beyond E won’t be forwarded back to B itself once it reaches C (for instance).
Not-via is, on the whole, a really clever solution to the problem of finding a tunnel endpoint in the Q space onto which to drop traffic into an alternate path. As with all these solutions, however, there are tradeoffs.
First, you have to know what you’re protecting, and how to protect it. The actual calculation of where to drop the traffic is in the designer’s head, rather than the algorithm itself. If every node in the network were advertising not-via addresses, there are ways to calculate the best place to drop traffic into the Q space without forming a data plane loop, but not-via was rejected by the IETF before the design reached that level of maturity.
The second tradeoff was actually the objection that caused the IETF to reject not-via: each interface on every device in the network must advertise a separate not-via address for every protected neighboring node. The amount of additional state was thought to overshadow the overall usefulness of the scheme. Of course, there are ways to optimize not-via to minimize this effect, but again, the idea was essentially rejected before any serious optimization work was really done.
Finally, not-via dumps the traffic at a point that’s suboptimal in the network. In this small network it doesn’t really matter, but if the ring were a couple of hops longer, of the failure point was B, the traffic can be pulled past the exit point to the tunnel tail end, then released to backtrack along the same path towards the destination.