<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" []>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc tocdepth="2"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="no" ?>
<rfc category="info" docName="draft-ietf-babel-applicability-04"
     ipr="trust200902">
<front>
<title abbrev="Babel Protocol Applicability">Applicability of the Babel
routing protocol</title>
<author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek">
<organization>IRIF, University of Paris-Diderot</organization>
<address>
<postal>
<street>Case 7014</street>
<city>75205 Paris Cedex 13</city>
<region></region>
<code></code>
<country>France</country>
</postal>
<email>jch@irif.fr</email>
</address>
</author>

<date day="23" month="October" year="2018"/>

<abstract>
<t>Babel is a routing protocol based on the distance-vector algorithm
augmented with mechanisms for loop avoidance and starvation avoidance.  In
this document, we argue that there exist niches where Babel is useful and
that are not adequately served by more mature protocols.</t>
</abstract>

</front>

<middle>

<section title="Introduction and background">

<t>Babel <xref target="RFC6126bis"/> is a routing protocol based on the
familiar distance-vector algorithm (sometimes known as distributed
Bellman-Ford) augmented with mechanisms for loop avoidance (there is no
"counting to infinity") and starvation avoidance.  In this document, we
argue that there exist niches where Babel is useful and that are not
adequately served by more mature protocols such as OSPF
<xref target="RFC5340"/> and IS-IS <xref target="RFC1195"/>.</t>

<section title="Technical overview of the Babel protocol">

<t>At its core, Babel is a distance-vector protocol based on the
distributed Bellman-Ford algorithm, similar in principle to RIP
<xref target="RFC2453"/>, but with two important extensions: provisions for
sensing of neighbour reachability, bidirectional reachability and link
quality, and support for multiple address families (e.g., IPv6 and IPv4)
in a single protocol instance.</t>

<t>Algorithms of this class are simple to understand and simple to
implement, but unfortunately they do not work very well &mdash; they
suffer from "counting to infinity", a case of pathologically slow
convergence in some topologies after a link failure.  Babel uses a mechanism
pioneered by EIGRP <xref target="DUAL"/> <xref target="RFC7868"/>, known
as "feasibility", which avoids routing loops and therefore makes counting
to infinity impossible.</t>

<t>Feasibility is a conservative mechanism, one that not only avoids all
looping routes but also rejects some loop-free routes.  Thus, it can lead
to a situation known as "starvation", where a router rejects all routes to
a given destination, even those that are loop-free.  In order to recover
from starvation, Babel uses a mechanism pioneered by DSDV <xref
target="DSDV"/> and known as "sequenced routes".  In Babel, this mechanism
is generalised to deal with prefixes of arbitrary length and routes
announced at multiple points in a single routing domain (DSDV was a pure
mesh protocol, and only dealt with host routes).</t>

<t>In DSDV, the sequenced routes algorithm is slow to react to
a starvation episode.  In Babel, starvation recovery is accelerated by
using explicit requests (known as "seqno requests" in the protocol) that
signal a starvation episode and cause a new sequenced route to be
propagated in a timely manner.  In the absence of packet loss, this
mechanism is provably complete and clears the starvation in time
proportional to the diameter of the network, at the cost of some
additional signalling traffic.</t>

</section>

</section>

<section title="Properties of the Babel protocol">

<t>In this section, we describe the properties of the Babel protocol as
well as its known limitations.</t>

<section title="Simplicity and implementability">

<t>Babel is a conceptually simple protocol.  It consists of a familiar
algorithm (distributed Bellman-Ford) augmented with three simple and
well-defined mechanisms (feasibility, sequenced routes and explicit
requests).  Given a sufficiently friendly audience, the principles behind
Babel can be explained in 15 minutes, and a full description of the
protocol can be done in 52 minutes (one microcentury).</t>

<t>An important consequence is that Babel is easy to implement.  At the
time of writing, there exist four independent implementations, including
one that was reportedly written and debugged in just two nights.</t>

</section>

<section title="Robustness">

<t>The fairly strong properties of the Babel protocol (convergence, loop
avoidance, starvation avoidance) rely on some rather weak properties of
the network and the metric being used.  The most significant are:
<list style="symbols">
<t>causality: a control message is not received before it has been sent
(more precisely, the "happens-before" relation is acyclic);</t>
<t>strict monotonicity of the metric: for any metric M and link cost C,
&nbsp;&lt;&nbsp;C&nbsp;+&nbsp;M;</t>
<t>left-distributivity of the metric: for any metrics M and M' and cost C,
if M&nbsp;&le;&nbsp;M', then
C&nbsp;+&nbsp;M&nbsp;&le;&nbsp;C&nbsp;+&nbsp;M'.</t>
</list>
In particular, Babel does not assume a reliable transport, it does not
assume ordered delivery, it does not assume that communication is
transitive, and it does not require that the metric be discrete
(continuous metrics are possible, reflecting for example packet loss
rates).  This is in contrast to link-state routing protocols such as OSPF
<xref target="RFC5340"/> or IS-IS <xref target="RFC1195"/>, which
incorporate a reliable flooding algorithm and make stronger requirements
on the underlying network and metric.</t>

<t>These weak requirements make Babel a robust protocol:
<list style="symbols">
<t>robust with respect to bugs: an implementation bug does most likely
not violate the properties on which Babel relies; in our (extensive)
experience, bugs tend to slow down convergence or cause sub-optimal
routing, but do not cause the network to collapse;</t>
<t>robust with respect to unusual networks: an unusual network
(non-transitive links, unstable metrics, etc.) does most likely not
violate the assumptions of the protocol;</t>
<t>robust with respect to novel metrics: no matter how strange your
metric (continuous, constantly fluctuating, etc.), it does most likely
not violate the assumptions of the protocol.</t>
</list></t>

<t>These robustness properties have important consequences for the
applicability of the protocol: Babel works (more or less efficiently) in
a wide range of circumstances where traditional routing protocols give up.</t>

</section>

<section title="Extensibility">

<t>Babel's packet format has a number of features that make the protocol
extensible (see Appendix&nbsp;C of <xref target="RFC6126bis"/>), and
a number of extensions have been designed to make Babel work better in
situations that were not envisioned when the protocol was initially
designed.  The ease of extensibility is not an accident, but a consequence
of the design of the protocol: it is reasonably easy to check whether
a given extension violates the assumptions on which Babel relies.</t>

<t>All of the extensions designed to date interoperate with the base
protocol and with each other.  This, again, is a consequence of the
protocol design: in order to check the interoperability of two
implementations of Babel, it is enough to verify that the interaction of
the two does not violate the protocol's assumptions.</t>

<t>Notable extensions deployed to date include:
<list style="symbols">
<t>source-specific routing (SADR) <xref target="BABEL-SS"/> allows
forwarding to take a packet's source address into account, thus enabling
a cheap form of multihoming <xref target="SS-ROUTING"/>;</t>
<t>RTT-based routing <xref target="BABEL-RTT"/> minimises link delay,
which is useful in overlay network (where both hop count and packet loss
are poor metrics).</t>
</list>
Some other extensions have been designed, but have not seen deployment
yet (and their usefulness is yet to be demonstrated):
<list style="symbols">
<t>frequency-aware routing <xref target="BABEL-Z"/> aims to minimise radio
interference in wireless networks;</t>
<t>ToS-aware routing <xref target="BABEL-TOS"/> allows routing to take
a packet's ToS marking into account for selected routes without incurring
the full cost of a multi-topology routing protocol.</t>
</list></t>

</section>

<section title="Limitations">

<t>Babel has some undesirable properties that make it suboptimal or even
unusable in some deployments.</t>

<section title="Periodic updates">

<t>The main mechanisms used by Babel to reconverge after a topology change
are reactive: triggered updates, triggered retractions and explicit
requests.  However, in the presence of heavy packet loss, Babel relies on
periodic updates to clear pathologies.  This reliance on periodic updates
makes Babel unsuitable in at least two kinds of deployments:
<list style="symbols">
<t>large, stable networks: since Babel sends periodic updates even in the
absence of topology changes, in well-managed, large, stable networks the
amount of control traffic will be reduced by using a protocol that uses
a reliable transport (such as OSPF, IS-IS or EIGRP);</t>
<t>low-power networks: the periodic updates use up battery power even when
there are no topology changes and no user traffic, which makes Babel
wasteful in low-power networks.</t>
</list></t>

</section>

<section title="Full routing table">

<t>While there exist techniques that allow a Babel speaker to function
with a partial routing table (e.g., by learning just a default route or,
more generally, performing route aggregation), 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 preferable to use a protocol that was designed from the outset to
work with a partial routing table (such as AODVv2 <xref target="AODVv2"/>,
RPL <xref target="RFC6550"/> or LOADng <xref target="LOADng"/>).</t>

</section>

<section title="Slow aggregation">

<t>Babel's loop-avoidance mechanism relies on making a route unreachable
after a retraction until all neighbours have been guaranteed to have acted
upon the retraction, even in the presence of packet loss.  Unless the
optional algorithm described in Section 3.5.5 of <xref target="RFC6126bis"/>
is implemented, this entails that a node is unreachable for a few minutes
after the most specific route to it has been retracted.  This delay may
make Babel slow to recover from a topology change in networks that perform
automatic route aggregation.</t>

</section>

</section>

</section>

<section title="Successful deployments of Babel">

<t>In this section, we give a few examples of environments where Babel has
been successfully deployed.</t>

<section title="Hybrid networks">

<t>Babel is able to deal with both classical, prefix-based
("Internet-style") routing and flat ("mesh-style") routing over
non-transitive link technologies.  Because of that, it has seen a number
of succesful deployments in medium-sized hybrid networks, networks that
combine a wired, aggregated backbone with meshy wireless bits at the edges.
No other routing protocol known to us is similarly robust and efficient in
this particular kind of topology.</t>

<t>Efficient operation in hybrid networks requires the implementation to
distinguish wired and wireless links, and to perform link quality
estimation on wireless links.</t>

</section>
<section title="Large scale overlay networks">

<t>The algorithms used by Babel (loop avoidance, hysteresis, delayed
updates) allow it to remain stable and efficient in the presence of
unstable metrics, even in the presence of a feedback loop.  For this
reason, it has been successfully deployed in large scale overlay networks,
built out of thousands of tunnels spanning continents, where it is used
with a metric computed from links' latencies.</t>

<t>This particular application depends on the extension for RTT-sensitive
routing <xref target="DELAY-BASED"/>.</t>

</section>

<section title="Pure mesh networks">

<t>While Babel is a general-purpose routing protocol, it has been
repeatedly shown to be competitive with dedicated routing protocols for
wireless mesh networks <xref target="REAL-WORLD"/> <xref
target="BRIDGING-LAYERS"/>.  Although this particular niche is already
served by a number of mature protocols, notably OLSR-ETX and OLSRv2 <xref
target="RFC7181"/> (equipped e.g.&nbsp;with the DAT metric <xref
target="RFC7779"/>), Babel has seen a moderate amount of successful
deployment in pure mesh networks.</t>

</section>

<section title="Small unmanaged networks">

<t>Because of its small size and simple configuration, Babel has been
deployed in small, unmanaged networks (e.g., home and small office
networks), where it serves as a more efficient replacement for RIP
<xref target="RFC2453"/>, over which it has two significant advantages: the
ability to route multiple address families (IPv6 and IPv4) in a single
protocol instance, and good support for using wireless links for
transit.</t>

</section>

</section>

<section title="IANA Considerations">

<t>This document requires no IANA actions.  [RFC Editor: please remove this
section before publication.]</t>

</section>

<section title="Security Considerations">

<t>As is the case in all distance-vector routing protocols, a Babel
speaker receives reachability information from its neighbours, which by
default is trusted.  A number of attacks are possible if this information
is not suitably protected, either by a lower-layer mechanism or by an
extension to the protocol itself (e.g.&nbsp;<xref target="RFC7298"/>).</t>

<t>Implementors and deployers must be aware of the insecure nature of the
base protocol, and must take suitable measures to ensure that the protocol
is deployed as securely as required by the application.</t>

</section>

</middle>

<back>

<references title="Normative References">
<reference anchor="RFC6126bis"><front>
<title>The Babel Routing Protocol</title>
<author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"/>
<author fullname="David Schinazi" initials="D." surname="Schinazi"/>
<date month="October" year="2017"/>
</front>
<seriesInfo name="Internet Draft" value="draft-ietf-babel-rfc6126bis-04"/>
</reference>
</references>

<references title="Informational References">

<reference anchor="DELAY-BASED" target="http://arxiv.org/abs/1403.3488"><front>
<title>A delay-based routing metric</title>
<author fullname="Baptiste Jonglez" initials="B." surname="Jonglez"/>
<author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"/>
<date month="March" year="2014"/>
</front>
</reference>

<reference anchor="RFC2453">
<front>
<title>RIP Version 2</title>
<author initials="G." surname="Malkin" fullname="G. Malkin">
<organization/>
</author>
<date year="1998" month="November"/>
</front>
<seriesInfo name="STD" value="56"/>
<seriesInfo name="RFC" value="2453"/>
</reference>

<reference anchor="RFC7181">
<front>
<title>
The Optimized Link State Routing Protocol Version 2
</title>
<author initials="T." surname="Clausen" fullname="T. Clausen">
<organization/>
</author>
<author initials="C." surname="Dearlove" fullname="C. Dearlove">
<organization/>
</author>
<author initials="P." surname="Jacquet" fullname="P. Jacquet">
<organization/>
</author>
<author initials="U." surname="Herberg" fullname="U. Herberg">
<organization/>
</author>
<date year="2014" month="April"/>
</front>
<seriesInfo name="RFC" value="7181"/>
</reference>

<reference anchor="RFC7779">
<front>
<title>
Directional Airtime Metric Based on Packet Sequence Numbers for Optimized Link State Routing Version 2 (OLSRv2)
</title>
<author initials="H." surname="Rogge" fullname="H. Rogge">
<organization/>
</author>
<author initials="E." surname="Baccelli" fullname="E. Baccelli">
<organization/>
</author>
<date year="2016" month="April"/>
</front>
<seriesInfo name="RFC" value="7779"/>
<seriesInfo name="DOI" value="10.17487/RFC7779"/>
</reference>

<reference anchor="RFC5340">
<front>
<title>OSPF for IPv6</title>
<author initials="R." surname="Coltun" fullname="R. Coltun"/>
<author initials="D." surname="Ferguson" fullname="D. Ferguson"/>
<author initials="J." surname="Moy" fullname="J. Moy"/>
<author initials="A." surname="Lindem" fullname="A. Lindem"/>
<date year="2008" month="July"/>
</front>
<seriesInfo name="RFC" value="5340"/>
</reference>

<reference anchor="DUAL"><front>
<title>Loop-Free Routing Using Diffusing Computations</title>
<author fullname="J. J. Garcia Luna Aceves"
        initials="J. J." surname="Garcia Luna Aceves"/>
<date month="February" year="1993"/>
</front>
<seriesInfo name="IEEE/ACM Transactions on Networking" value="1:1"/>
</reference>

<reference anchor="RFC7868">
<front>
<title>
Cisco's Enhanced Interior Gateway Routing Protocol (EIGRP)
</title>
<author initials="D." surname="Savage" fullname="D. Savage">
<organization/>
</author>
<author initials="J." surname="Ng" fullname="J. Ng">
<organization/>
</author>
<author initials="S." surname="Moore" fullname="S. Moore">
<organization/>
</author>
<author initials="D." surname="Slice" fullname="D. Slice">
<organization/>
</author>
<author initials="P." surname="Paluch" fullname="P. Paluch">
<organization/>
</author>
<author initials="R." surname="White" fullname="R. White">
<organization/>
</author>
<date year="2016" month="May"/>
</front>
<seriesInfo name="RFC" value="7868"/>
<seriesInfo name="DOI" value="10.17487/RFC7868"/>
</reference>

<reference anchor="DSDV"><front>
<title>Highly Dynamic Destination-Sequenced Distance-Vector Routing
  (DSDV) for Mobile Computers</title>
<author fullname="Charles Perkins" initials="C." surname="Perkins"/>
<author fullname="Pravin Bhagwat" initials="P." surname="Bhagwat"/>
<date year="1994"/>
</front>
<seriesInfo name="ACM SIGCOMM'94 Conference on Communications
                  Architectures, Protocols and Applications" value="234-244"/>
</reference>


<reference anchor="RFC1195">
<front>
<title>
Use of OSI IS-IS for routing in TCP/IP and dual environments
</title>
<author initials="R.W." surname="Callon" fullname="R.W. Callon">
<organization/>
</author>
<date year="1990" month="December"/>
</front>
<seriesInfo name="RFC" value="1195"/>
</reference>

<reference anchor='AODVv2'>
<front>
<title>Ad Hoc On-demand Distance Vector Version 2 (AODVv2) Routing</title>
<author initials='C' surname='Perkins' fullname='Charles Perkins'/>
<author initials='S' surname='Ratliff' fullname='Stan Ratliff'/>
<author initials='J' surname='Dowdell' fullname='John Dowdell'/>
<author initials='L' surname='Steenbrink' fullname='Lotte Steenbrink'/>
<author initials='V' surname='Mercieca' fullname='Victoria Mercieca'/>
<date month='May' day='3' year='2016' />
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-manet-aodvv2-16' />
</reference>

<reference anchor="RFC6550">
<front>
<title>
RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks
</title>
<author initials="T." surname="Winter" fullname="T. Winter" role="editor"/>
<author initials="P." surname="Thubert" fullname="P. Thubert" role="editor"/>
<author initials="A." surname="Brandt" fullname="A. Brandt"/>
<author initials="J." surname="Hui" fullname="J. Hui"/>
<author initials="R." surname="Kelsey" fullname="R. Kelsey"/>
<author initials="P." surname="Levis" fullname="P. Levis"/>
<author initials="K." surname="Pister" fullname="K. Pister"/>
<author initials="R." surname="Struik" fullname="R. Struik"/>
<author initials="JP." surname="Vasseur" fullname="JP. Vasseur"/>
<author initials="R." surname="Alexander" fullname="R. Alexander"/>
<date year="2012" month="March"/>
</front>
<seriesInfo name="RFC" value="6550"/>
</reference>

<reference anchor='LOADng'>
<front>
<title>The Lightweight On-demand Ad hoc Distance-vector Routing Protocol - Next Generation (LOADng)</title>
<author initials='T' surname='Clausen' fullname='Thomas Clausen'/>
<author initials='A' surname='Verdiere' fullname='Axel Verdiere'/>
<author initials='J' surname='Yi' fullname='Jiazi Yi'/>
<author initials='A' surname='Niktash' fullname='Afshin Niktash'/>
<author initials='Y' surname='Igarashi' fullname='Yuichi Igarashi'/>
<author initials='H' surname='Satoh' fullname='Hiroki Satoh'/>
<author initials='U' surname='Herberg' fullname='Ulrich Herberg'/>
<author initials='C' surname='Lavenu' fullname='Cedric Lavenu'/>
<author initials='T' surname='Lys' fullname='Thierry Lys'/>
<author initials='J' surname='Dean' fullname='Justin Dean'/>
<date month='January' day='5' year='2017' />
</front>
<seriesInfo name='Internet-Draft' value='draft-clausen-lln-loadng-15' />
</reference>

<reference anchor="REAL-WORLD"><front>
<title>Real-world performance of current proactive multi-hop mesh
protocols</title>
<author initials="M." surname="Abolhasan"/>
<author initials="B." surname="Hagelstein"/>
<author initials="J. C.-P." surname="Wang"/>
<date year="2009"/>
</front>
<seriesInfo name="Asia-Pacific Conference on Communication" value="2009"/>
</reference>

<reference anchor="BRIDGING-LAYERS"><front> 
<title>An Experimental Comparison of Routing Protocols in Multi Hop Ad Hoc
Networks</title>
<author initials="D." surname="Murray" fullname="David Murray"/>
<author initials="M." surname="Dixon" fullname="Michael Dixon"/>
<author initials="T." surname="Koziniec" fullname="Terry Koziniec"/>
<date year="2010"/>
</front>
<seriesInfo name="Proc. ATNAC" value="2010"/>
</reference>

<reference anchor="RFC7298" target="http://www.rfc-editor.org/info/rfc7298">
<front>
<title>
Babel Hashed Message Authentication Code (HMAC) Cryptographic Authentication
</title>
<author initials="D." surname="Ovsienko" fullname="D. Ovsienko">
<organization/>
</author>
<date year="2014" month="July"/>
</front>
<seriesInfo name="RFC" value="7298"/>
<seriesInfo name="DOI" value="10.17487/RFC7298"/>
</reference>

<reference anchor="BABEL-SS">
<front>
<title>Source-Specific Routing in Babel</title>
<author initials='M' surname='Boutier' fullname='Matthieu Boutier'></author>
<author initials='J' surname='Chroboczek' fullname='Juliusz Chroboczek'></author>
<date day="23" month="October" year="2018"/>
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-babel-source-specific-04'/>
</reference>

<reference anchor="BABEL-RTT">
<front>
<title>Delay-based Metric Extension for the Babel Routing Protocol</title>
<author initials='B' surname='Jonglez' fullname='Baptiste Jonglez'></author>
<author initials='J' surname='Chroboczek' fullname='Juliusz Chroboczek'></author>
<date month='May' day='27' year='2015' />
</front>
<seriesInfo name='Internet-Draft' value='draft-jonglez-babel-rtt-extension-01' />
</reference>

<reference anchor="BABEL-TOS">
<front>
<title>TOS-Specific Routing in Babel</title>
<author fullname="Gwendoline Chouasne" initials="G." surname="Chouasne"/>
<author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"/>
<date day="3" month="July" year="2017"/>
</front>
<seriesInfo name='Internet-Draft' value='draft-chouasne-babel-tos-specific-00'/>
</reference>

<reference anchor="BABEL-Z"><front>
<title>Diversity Routing for the Babel Routing Protocol</title>
<author initials='J' surname='Chroboczek' fullname='Juliusz Chroboczek'></author>
<date month='February' day='15' year='2016' />
</front>
<seriesInfo name='Internet-Draft' value='draft-chroboczek-babel-diversity-routing-01'/>
</reference>

<reference anchor="SS-ROUTING" target="http://arxiv.org/pdf/1403.0445">
<front>
<title>Source-Specific Routing</title>
<author initials="M." surname="Boutier" fullname="Matthieu Boutier"/>
<author initials="J." surname="Chroboczek" fullname="Juliusz Chroboczek"/>
<date year="2014" month="August"/>
</front>
<annotation>In Proc. IFIP Networking 2015.</annotation>
</reference>

</references>

</back>

</rfc>
