[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [minion-cvs] Improve documentation



[cc'ing minion-dev]

On Mon, 2003-02-03 at 22:16, Lucky Green wrote:
> Nick,
> Before you write any more IPv4-specific code, allow me to please
> re-pitch you on supporting IPv6...

(BTW, none of the code I commited there was IPv4-specific)

The reason I haven't done IPv6 support is that it complicates path
selection a lot.  If anybody can come with a (demonstrably!) good path
selection algorithm that works with a mixed IPv4/IPv6 network, I'd be a
lot keener to do IPv6.

For everybody's reference, here's the problem:
======================================================
Assumptions:
  1) all nodes have outgoing IPv4 support, either directly or by the
0::FFFF:1.2.3.4 addresses.
  2) only some nodes have outgoing IPv6 support
  3) only some nodes have incoming IPv4 support.
  4) only some nodes have incoming IPv6 support.  If a node has incoming
IPv6 support, it has outgoing IPv6 support.

Possible assumption:
  5) If a node has outgoing IPv6 support, it has incoming IPv6 support,
because IPv6 addresses are so plentiful.  (????)

Consequences:
  The network topology is no longer a clique.  Every node can deliver to
nodes with IPv4 addresses, but only nodes with outgoing IPv6 support can
deliver _directly_ to nodes with IPv6 addresses but not IPv4 addresses.
  Thus, our older path selection algorithm (choose nodes at random
without replacement) no longer works; a node with only an IPv6 address
_must_ be preceded by a node with outgoing IPv6 support.  This can bias
the path selection algorithm.

Challenge:
  There are 3 classes of nodes:
     Class A (only IPv4 support)
     Class B (IPv6 and IPv4 support, no incoming IPv4 address)
     Class C (IPv6 and IPv4 support, with an incoming IPv4 address)

  Class A can deliver messages to A and C.
  Class B can deliver messages to B and C.
  Class C can deliver messages to A, B, and C.

  Create a path selection algorithm that chooses a random path from a
set of known servers from classes A, B, and C.  Analyze it, and show
that it doesn't compromise anonymity.
======================================================

-- 
Nick Mathewson <nickm@alum.mit.edu>