[Babel-users] Sources in the protocol [was: A Babel implementation in Go]

Juliusz Chroboczek jch at irif.fr
Thu May 18 16:14:40 BST 2023


> The only corner of the babel RFC that still scares me are "sources" :)

Then let me lecture a bit :-)

Babel is partly based on the ideas in DSDV, which was a pure mesh
protocol.  In DSDV, there is no distinction between prefix, neighbour and
source: the IP address of a router is used as the destination of packets
and as the identifier for the originator of a route.

Babel aims to be a general-purpose routing protocol, so it needs to deal
with situation where two distinct routers originate the same prefix, and
the protocol needs to be able to distinguish between a single prefix
originated by a single router over different routes:

              - A -
             /     \
    Internet        C
             \     /
              - B -

and two routers independently advertising the same prefix:

  Internet --- A --- C --- B --- Internet

At the wire level, the distinction is made by the "Router-ID" field that
is associated with announcements: the originating router is identified by
the Router-ID.  The « source » is the data structure that stores
per-Router-ID data.  The terminology makes sense (at least to me): if two
routes are originated by the same router, they have the same source.

So what are sources used for?  They are the mechanism that allows us to
avoid having synchronised clocks and still avoid loops in most cases.
Seqnos are maintained per-source, which means that two distinct routers
that advertise the same prefix do not need to synchronise their seqnos,
they can increase them independently.  (That was not the case in DSDV,
which assumed synchronised counters.)  And while we do not avoid loops in
all cases, we are assured that we break them in at most the time required
for an announcement to go around the loop once.

-- Juliusz



More information about the Babel-users mailing list