RFC 8965

Applicability of the Babel Routing Protocol

πŸ“… published January 2021, from ietf

Internet Engineering Task Force (IETF) πŸŽ€ Applicability of the Babel Routing Protocol

okay bestie, this is RFC 8965 and it's giving "Babel is for the niches" energy πŸ’…βœ¨

Here's the vibe check on the title block: it's from J. Chroboczek at IRIF, University of Paris-Diderot, dated January 2021 🌸. It's an Informational doc (not a Standards Track thing, so no pressure 🫢), and it's part of the ISSN 2070-1721 series. It doesn't obsolete or update anything, so it's a clean slate 🧚.


Abstract ✨

Okay so the abstract is the TL;DR: Babel is a routing protocol built on the distance-vector algorithm, but it got a glow-up with mechanisms for loop avoidance and starvation avoidance πŸ’–. This doc spotlights a bunch of niches where Babel has been found to be useful and where more mature protocols arguably don't quite hit the spot πŸ¦‹.

Status of This Memo 🌈

Quick heads up: this document is not an Internet Standards Track specification. It's published for informational purposes only πŸ’….

It's a product of the IETF, it represents the consensus of the IETF community, got public review, and was approved for publication by the IESG. Not every IESG-approved doc is a candidate for any level of Internet Standard, so check out Section 2 of RFC 7841 if you want the deets πŸ”₯.

For the current status, errata, and how to give feedback, peep https://www.rfc-editor.org/info/rfc8965 πŸ“.

Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved πŸŽ€.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication. Please read these carefully, bestie, because they spell out your rights and restrictions 🫢. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License ⭐.

Table of Contents πŸ¦‹

1.  Introduction and Background
  1.1.  Technical Overview of the Babel Protocol
2.  Properties of the Babel Protocol
  2.1.  Simplicity and Implementability
  2.2.  Robustness
  2.3.  Extensibility
  2.4.  Limitations
3.  Successful Deployments of Babel
  3.1.  Heterogeneous Networks
  3.2.  Large-Scale Overlay Networks
  3.3.  Pure Mesh Networks
  3.4.  Small Unmanaged Networks
4.  Security Considerations
5.  References
  5.1.  Normative References
  5.2.  Informative References
Acknowledgments
Author's Address

1. Introduction and Background 🧚

Okay so Babel [RFC8966] is a routing protocol built on the familiar distance-vector algorithm (sometimes called distributed Bellman-Ford) πŸ’…. It's got mechanisms for loop avoidance (no "counting to infinity" drama!) and starvation avoidance πŸ”₯. This doc walks through niches where Babel is useful and where more mature protocols like OSPF [RFC5340] and IS-IS [RFC1195] arguably aren't the best fit 🌸.

1.1. Technical Overview of the Babel Protocol πŸ“

So at its core, Babel is a distance-vector protocol using distributed Bellman-Ford, kinda like RIP [RFC2453] but with two major upgrades ✨. First, it senses neighbour reachability, bidirectional reachability, and link quality πŸ‘‘. Second, it supports multiple address families (like IPv6 and IPv4) in one single protocol instance πŸ’–.

These algorithms are simple to understand and simple to implement, but ngl they don't work super well. They suffer from "counting to infinity," which is a pathologically slow convergence in some topologies after a link failure πŸ’€. Babel borrows a mechanism pioneered by EIGRP [DUAL] [RFC7868], called "feasibility," which avoids routing loops and makes counting to infinity impossible πŸ¦‹.

Feasibility is conservative, though. It avoids all looping routes but also rejects some loop-free routes πŸ™ˆ. That can lead to "starvation," where a router rejects every route to a given destination, even the loop-free ones 😭. To recover, Babel uses "sequenced routes," a mechanism pioneered by DSDV [DSDV] 🫢. Babel generalises it to prefixes of arbitrary length and to routes announced at multiple points in one routing domain. (DSDV was a pure mesh protocol and only carried host routes, so this is a big upgrade 🌈.)

In DSDV, the sequenced routes algorithm is slow to react to a starvation episode. In Babel, recovery gets accelerated by explicit requests (called "seqno requests" in the protocol) that signal a starvation episode and make a new sequenced route propagate in a timely manner πŸš€. Without packet loss, this mechanism is provably complete and clears starvation in time proportional to the network's diameter, at the cost of some extra signalling traffic πŸ”₯.

2. Properties of the Babel Protocol πŸ’…

This section covers the properties of Babel as well as its known limitations πŸŽ€.

2.1. Simplicity and Implementability 🌸

Babel is conceptually simple 🧚. It's a familiar algorithm (distributed Bellman-Ford) with three simple, well-defined mechanisms layered on top: feasibility, sequenced routes, and explicit requests ✨. With a sufficiently friendly audience, the principles can be explained in 15 minutes, and a full description takes 52 minutes (one microcentury) 😭.

Because of that, Babel is easy to implement πŸ’–. At the time of writing, there were four independent, interoperable implementations, including one reportedly written and debugged in just two nights πŸ‘‘.

2.2. Robustness πŸ¦‹

Babel's fairly strong properties (convergence, loop avoidance, and starvation avoidance) rely on some reasonably weak properties of the network and the metric 🌈. The most significant are:

  • causality: the "happens-before" relation is acyclic (basically, a control message isn't received before it's been sent) πŸ“.
  • strict monotonicity of the metric: for any metric M and link cost C, M < C + M (so cycles have a strictly positive metric) πŸ’œ.
  • left-distributivity of the metric: for any metrics M and M' and cost C, if M <= M', then C + M <= C + M' (so a good choice made by a neighbour B of a node A is also a good choice for A) ✨.

Check out [METAROUTING] for more on these properties and their consequences 🫢.

Babel doesn't assume a reliable transport, doesn't assume ordered delivery, doesn't assume communication is transitive, and doesn't require the metric to be discrete (continuous metrics are possible, like ones reflecting packet loss rates) πŸ¦‹. This is in contrast to link-state protocols like OSPF [RFC5340] or IS-IS [RFC1195], which use a reliable flooding algorithm and make stronger requirements on the network and metric πŸ‘‘.

These weak requirements make Babel a robust protocol πŸ’ͺ:

  • robust with respect to unusual networks: an unusual network (non-transitive links, unstable link costs, etc.) is likely not to violate the protocol's assumptions 🌸.
  • robust with respect to novel metrics: an unusual metric (continuous, constantly fluctuating, etc.) is likely not to violate the protocol's assumptions 🌈.

Section 3 has examples of successful Babel deployments that show these properties in action πŸŽ€.

These robustness properties matter a lot for applicability: Babel works (more or less efficiently) in a range of situations where traditional routing protocols don't work well, or at all 😭πŸ”₯.

2.3. Extensibility 🧚

Babel's packet format has a bunch of features that make the protocol extensible (see Appendix D of [RFC8966]) πŸ’–. A number of extensions have been designed to make Babel work better in situations nobody envisioned when it was first designed ✨. The ease of extensibility isn't an accident, it's a consequence of the design: it's reasonably easy to check whether a given extension violates the assumptions Babel relies on πŸ‘‘.

All the extensions designed so far interoperate with the base protocol and with each other πŸ¦‹. Again, that's the design at work: to check that two extensions are interoperable, you only need to verify that their interaction doesn't violate the base protocol's assumptions 🌈.

Notable extensions deployed so far include:

  • source-specific routing (also known as Source-Address Dependent Routing, SADR) [BABEL-SS], which lets forwarding take a packet's source address into account, enabling a cheap form of multihoming [SS-ROUTING] πŸ“.
  • RTT-based routing [BABEL-RTT], which minimises link delay. That's useful in overlay networks, where both hop count and packet loss are poor metrics πŸ’œ.

Some other extensions have been designed but haven't seen production deployment (their usefulness is yet to be demonstrated) πŸ™ˆ:

  • frequency-aware routing [BABEL-Z] aims to minimise radio interference in wireless networks πŸ“‘.
  • ToS-aware routing [BABEL-TOS] lets routing take a packet's Type of Service (ToS) marking into account for selected routes, without the full cost of a multi-topology routing protocol ✨.

2.4. Limitations πŸ’€

Babel has some undesirable properties that make it suboptimal, or even unusable, in some deployments 😭.

2.4.1. Periodic Updates 🌸

Babel reconverges after a topology change mainly through reactive mechanisms: triggered updates, triggered retractions, and explicit requests πŸ¦‹. However, Babel relies on periodic updates to clear pathologies after a mobility event or in the presence of heavy packet loss πŸ™ˆ. That makes Babel unsuitable in at least two kinds of environments πŸ’€:

  • large, stable networks: since Babel sends periodic updates even without topology changes, well-managed, large, stable networks will see less control traffic with a protocol that uses a reliable transport (such as OSPF, IS-IS, or EIGRP) πŸ‘‘.
  • low-power networks: the periodic updates burn battery even when there are no topology changes and no user traffic, which makes Babel wasteful in low-power networks πŸ”‹.

2.4.2. Full Routing Table πŸŽ€

Okay so there are techniques that let a Babel speaker work with a partial routing table (like learning just a default route or doing route aggregation) 🧚. But Babel is designed around the assumption that every router has a full routing table πŸ’–. In networks where some nodes are too constrained to hold a full routing table, it might be better to use a protocol designed from the start for partial tables, like AODV [RFC3561], RPL [RFC6550], or LOADng [LOADng] ✨.


To be continued in part 2 πŸ«ΆπŸ’–

2.4.3. Slow Aggregation ✨

okay so babel's loop-avoidance trick is kinda clever 🧠 when a route gets retracted, the node makes it unreachable until every neighbour is guaranteed to have heard about it, even if some packets got lost along the way πŸ“¦πŸ’¨ unless you've implemented the second algorithm from Section 3.5.5 of [RFC8966], this means a node can stay unreachable for a few minutes after its most specific route gets retracted 😭 and in networks that do automatic route aggregation, that makes babel slow to bounce back after a topology change πŸ₯²

3. Successful Deployments of Babel 🌸

this section is the glow-up montage πŸ’… it shows a few places where babel has been successfully deployed, so you can see it actually works out in the wild πŸ¦‹

3.1. Heterogeneous Networks 🌈

okay this one is so cool bestie 🫢 babel handles both classic prefix-based ("Internet-style") routing and flat ("mesh-style") routing over non-transitive link technologies πŸ•ΈοΈ like traditional distance-vector protocols, it can carry prefixes of any length, suppress redundant announcements with split-horizon where that applies, and it can be configured to filter out redundant announcements (manual aggregation) πŸ’– and like specialised mesh protocols, babel doesn't assume by default that links are transitive or symmetric, it can dynamically compute metrics from an estimate of link quality, and it carries huge piles of host routes efficiently by leaving out common prefixes πŸ“

because of all that, babel has had a bunch of successful deployments in medium-sized heterogeneous networks, the kind that mix a wired, aggregated backbone with meshy wireless bits at the edges πŸŽ€

efficient operation in heterogeneous networks requires the implementation to distinguish between wired and wireless links, and to perform link quality estimation on wireless links. πŸ”₯

3.2. Large-Scale Overlay Networks 🧚

the algorithms babel uses (loop avoidance, hysteresis, delayed updates) let it stay stable even when metrics are unstable, even with a feedback loop going on πŸ”„ that's why it's been successfully deployed in large-scale overlay networks built out of thousands of tunnels spanning continents 🌍 where it uses a metric computed from links' latencies ⏱️

this particular application depends on the extension for RTT-sensitive routing [DELAY-BASED] πŸ’œ

3.3. Pure Mesh Networks πŸ¦‹

babel is a general-purpose routing protocol, and it's been shown to be competitive with dedicated routing protocols for wireless mesh networks [REAL-WORLD] [BRIDGING-LAYERS] πŸ‘‘ that said, this niche already has a bunch of mature protocols, notably the Optimized Link State Routing Protocol with Expected Transmission Count (OLSR-ETX) and OLSRv2 (OLSR Version 2) [RFC7181] (equipped e.g., with the Directional Airtime (DAT) metric [RFC7779]) πŸ™ˆ but babel still picked up a moderate amount of successful deployment in pure mesh networks ✨

3.4. Small Unmanaged Networks 🏠

because babel is small and simple to configure, it's been deployed in small, unmanaged networks (e.g., home and small office networks) 🏑 where it works as a more efficient replacement for RIP [RFC2453] πŸ’… and it has two big advantages over RIP: it can route multiple address families (IPv6 and IPv4) in a single protocol instance, and it has good support for using wireless links for transit πŸ“‘

4. Security Considerations πŸ”

okay this part is serious bestie, so listen up 🫢 like all distance-vector routing protocols, a babel speaker receives reachability information from its neighbours, and by default every node in the routing domain trusts that information 😬

at the time of writing, babel is usually run over a network that's secured either at the physical layer (e.g., physically protecting Ethernet sockets) or at the link layer (using a protocol such as Wi-Fi Protected Access 2 (WPA2)) πŸ”’ if babel is being run over an unprotected network, then the routing traffic needs to be protected using a sufficiently strong cryptographic mechanism 🚨

at the time of writing, two such mechanisms have been defined. πŸ’€

Message Authentication Code (MAC) authentication for Babel (Babel-MAC) [RFC8967] is a simple, easy-to-implement mechanism 🌷 it only guarantees authenticity, integrity, and replay protection of the routing traffic, and it only supports symmetric keying with a small number of keys (typically just one or two) πŸ”‘ Babel-DTLS [RFC8968] is a more complex mechanism 🧩 it requires some minor changes to a typical Babel implementation and depends on a DTLS stack being available, but it inherits all of the features of DTLS, notably confidentiality, optional replay protection, and the ability to use asymmetric keys πŸ¦„

due to its simplicity, babel-MAC should be the preferred security mechanism in most deployments, with Babel-DTLS available for networks that require its additional features πŸ’–

also, the information a mobile Babel node announces to the whole routing domain is often enough to figure out a mobile node's physical location with reasonable precision πŸ“ so babel might be unapplicable in scenarios where a node's location is considered confidential πŸ™ˆ


5. References πŸ“š

5.1. Normative References πŸŽ€

[RFC8966]  Chroboczek, J. and D. Schinazi, "The Babel Routing
           Protocol", RFC 8966, DOI 10.17487/RFC8966, January 2021,
           <https://www.rfc-editor.org/info/rfc8966>.

5.2. Informative References 🌈

[BABEL-RTT]
           Jonglez, B. and J. Chroboczek, "Delay-based Metric
           Extension for the Babel Routing Protocol", Work in
           Progress, Internet-Draft, draft-jonglez-babel-rtt-
           extension-02, 11 March 2019, <https://tools.ietf.org/html/
           draft-jonglez-babel-rtt-extension-02>.

[BABEL-SS] Boutier, M. and J. Chroboczek, "Source-Specific Routing in
           Babel", Work in Progress, Internet-Draft, draft-ietf-
           babel-source-specific-07, 28 October 2020,
           <https://tools.ietf.org/html/draft-ietf-babel-source-
           specific-07>.

[BABEL-TOS]
           Chouasne, G. and J. Chroboczek, "TOS-Specific Routing in
           Babel", Work in Progress, Internet-Draft, draft-chouasne-
           babel-tos-specific-00, 3 July 2017,
           <https://tools.ietf.org/html/draft-chouasne-babel-tos-
           specific-00>.

[BABEL-Z]  Chroboczek, J., "Diversity Routing for the Babel Routing
           Protocol", Work in Progress, Internet-Draft, draft-
           chroboczek-babel-diversity-routing-01, 15 February 2016,
           <https://tools.ietf.org/html/draft-chroboczek-babel-
           diversity-routing-01>.

[BRIDGING-LAYERS]
           Murray, D., Dixon, M., and T. Koziniec, "An Experimental
           Comparison of Routing Protocols in Multi Hop Ad Hoc
           Networks", In Proceedings of ATNAC,
           DOI 10.1109/ATNAC.2010.5680190, October 2010,
           <https://doi.org/10.1109/ATNAC.2010.5680190>.

[DELAY-BASED]
           Jonglez, B., Boutier, M., and J. Chroboczek, "A delay-
           based routing metric", March 2014,
           <http://arxiv.org/abs/1403.3488>.

[DSDV]     Perkins, C. and P. Bhagwat, "Highly Dynamic Destination-
           Sequenced Distance-Vector Routing (DSDV) for Mobile
           Computers", ACM SIGCOMM '94: Proceedings of the Conference
           on Communications Architectures, Protocols and
           Applications, pp. 234-244, DOI 10.1145/190314.190336,
           October 1994, <https://doi.org/10.1145/190314.190336>.

[DUAL]     Garcia-Luna-Aceves, J. J., "Loop-Free Routing Using
           Diffusing Computations", IEEE/ACM Transactions on
           Networking, Volume 1, Issue 1, DOI 10.1109/90.222913,
           February 1993, <https://doi.org/10.1109/90.222913>.

[LOADng]   Clausen, T. H., Verdiere, A. C. D., Yi, J., Niktash, A.,
           Igarashi, Y., Satoh, H., Herberg, U., Lavenu, C., Lys, T.,
           and J. Dean, "The Lightweight On-demand Ad hoc Distance-
           vector Routing Protocol - Next Generation (LOADng)", Work
           in Progress, Internet-Draft, draft-clausen-lln-loadng-15,
           4 July 2016,
           <https://tools.ietf.org/html/draft-clausen-lln-loadng-15>.

[METAROUTING]
           Griffin, T. G. and J. L. Sobrinho, "Metarouting", ACM
           SIGCOMM Computer Communication Review, Volume 35, Issue 4,
           DOI 10.1145/1090191.1080094, August 2005,
           <https://doi.org/10.1145/1090191.1080094>.

[REAL-WORLD]
           Abolhasan, M., Hagelstein, B., and J. C.-P. Wang, "Real-
           world performance of current proactive multi-hop mesh
           protocols", 15th Asia-Pacific Conference on
           Communications, DOI 10.1109/APCC.2009.5375690, October
           2009, <https://doi.org/10.1109/APCC.2009.5375690>.

[RFC1195]  Callon, R., "Use of OSI IS-IS for routing in TCP/IP and
           dual environments", RFC 1195, DOI 10.17487/RFC1195,
           December 1990, <https://www.rfc-editor.org/info/rfc1195>.

[RFC2453]  Malkin, G., "RIP Version 2", STD 56, RFC 2453,
           DOI 10.17487/RFC2453, November 1998,
           <https://www.rfc-editor.org/info/rfc2453>.

[RFC3561]  Perkins, C., Belding-Royer, E., and S. Das, "Ad hoc On-
           Demand Distance Vector (AODV) Routing", RFC 3561,
           DOI 10.17487/RFC3561, July 2003,
           <https://www.rfc-editor.org/info/rfc3561>.

[RFC5340]  Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF
           for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008,
           <https://www.rfc-editor.org/info/rfc5340>.

[RFC6550]  Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J.,
           Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur,
           JP., and R. Alexander, "RPL: IPv6 Routing Protocol for
           Low-Power and Lossy Networks", RFC 6550,
           DOI 10.17487/RFC6550, March 2012,
           <https://www.rfc-editor.org/info/rfc6550>.

[RFC7181]  Clausen, T., Dearlove, C., Jacquet, P., and U. Herberg,
           "The Optimized Link State Routing Protocol Version 2",
           RFC 7181, DOI 10.17487/RFC7181, April 2014,
           <https://www.rfc-editor.org/info/rfc7181>.

[RFC7779]  Rogge, H. and E. Baccelli, "Directional Airtime Metric
           Based on Packet Sequence Numbers for Optimized Link State
           Routing Version 2 (OLSRv2)", RFC 7779,
           DOI 10.17487/RFC7779, April 2016,
           <https://www.rfc-editor.org/info/rfc7779>.

[RFC7868]  Savage, D., Ng, J., Moore, S., Slice, D., Paluch, P., and
           R. White, "Cisco's Enhanced Interior Gateway Routing
           Protocol (EIGRP)", RFC 7868, DOI 10.17487/RFC7868, May
           2016, <https://www.rfc-editor.org/info/rfc7868>.

[RFC8967]  DΓ΄, C., Kolodziejak, W., and J. Chroboczek, "MAC
           Authentication for the Babel Routing Protocol", RFC 8967,
           DOI 10.17487/RFC8967, January 2021,
           <https://www.rfc-editor.org/info/rfc8967>.

[RFC8968]  DΓ©cimo, A., Schinazi, D., and J. Chroboczek, "Babel
           Routing Protocol over Datagram Transport Layer Security",
           RFC 8968, DOI 10.17487/RFC8968, January 2021,
           <https://www.rfc-editor.org/info/rfc8968>.

[SS-ROUTING]
           Boutier, M. and J. Chroboczek, "Source-specific routing",
           In Proceedings of the IFIP Networking Conference,
           DOI 10.1109/IFIPNetworking.2015.7145305, May 2015,
           <http://arxiv.org/pdf/1403.0445>.

Acknowledgments ✨

Okay, big thank-you time 🫢 The author is so grateful to Jean-Paul Smetz and Alexander Vainshtein for their input on this document. Literally couldn't have done it without them πŸ’œ


Author's Address πŸŽ€

Here's where to find the author, Juliusz Chroboczek πŸ¦‹

Juliusz Chroboczek
IRIF, University of Paris-Diderot
Case 7014
75205 Paris CEDEX 13
France

Email: jch@irif.fr
πŸ“¦ where this page comes from