> Having these two protocols knowing nothing about each other and each
> others' state is potential source of problems.

I've thought about it some more (warm showers increase the flow of blood
to my brain), and I've realised that this is an important point, and one
that is close to my research interests.  So please let me ramble some more.

Given a distributed system (such as, say, a network of IS-IS nodes, or
a network of Kademlia nodes, or a network of HNCP + Babel nodes), in
transitory situtations the different states will temporarily be
inconsistent.  For example, the LS databases of OSPF nodes will
temporarily desynchronise, a node will leave the Kademlia network without
notifying its neighbours, or HNCP and Babel will have different ideas
about an adjacency being up or down.  I believe this is a law of nature --
but I haven't been able to find the theorem that says that.

(Aside: I'm positive there's a theorem that says that distributed consensus
cannot be achieved by a symmetric, deterministic algorithm, but
disappointingly enough this doesn't apply to networking protocols which use
random backoff (non-deterministic) or break ties by picking the larger
node-id (broken symmetry).  End of aside.)

It is generally considered ungentlemanly to attempt to change the laws of
nature, so people have taken two approaches to work around the problem:

  (1) minimise the time window during which nodes are desynchronised;
  (2) minimise the consequences of desynchronisation.

To give an example of approach (1), link-state routing protocols have been
carefully engineered to reflood in a timely and reliable manner -- this
aims to minimise the time during which the network is pushing packets in
the wrong direction.  Examples of (2) include Kademlia, which is designed
to survive large numbers of broken nodes (our measurements indicate that
40 to 60% of nodes in the BitTorrent DHT are broken), and protocols such
as EIGRP, DSDV or Babel, which are designed to keep pushing packets in the
right direction following loop-free paths even during reconvergence.

Note that the two approaches are not exclusive -- just because Kademlia
can deal with broken nodes doesn't mean we should be encouraging
brokenness, and just because Babel is loop-avoiding doesn't mean we should
be slowing down its convergence.  (I am not aware of any work about
transient behaviour of link-state protocols, perhaps the OLSR community
has done something related?)

I don't think it has ever been stated explicitly, but my view is that (2)
is what we are doing with HNCP + Babel: allowing the two protocols to
transiently have different ideas about adjacencies, and making sure that
nothing important breaks when that happens.  Of course, just because
nothing breaks doesn't mean that it's a desirable situation, so adding
(optional) mechanisms to minimise the likelihood of this happening is
something we should be considering.  I'm not sure that Henning's
suggestion is worth the implementation cost, however.

-- Juliusz

_______________________________________________
homenet mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/homenet

Reply via email to