Sounds promising, but you should whip up a quick simulation first to
confirm that it behaves as expected.

Ian.

On 6/6/07, Matthew Toseland <toad at amphibian.dyndns.org> wrote:
> Recent probe data suggests a theory:
>
> Parts of the network are "rabbit holes" or "dungeons", i.e. sub-networks which
> are only weakly connected to the larger network. These cover a small chunk of
> the keyspace, say 0.36-0.41 (roughly, in the trace I had). A request for 0.5
> got stuck down the rabbit hole. The gateway node at 0.436 was backed off; if
> the request had been able to reach that node, it would have been able to get
> much closer to where it should be. So the request bounced around in the
> dungeon, and eventually DNFed.
>
> What we need is some backtracking. At the moment backtracking only occurs when
> we actually run out of nodes in a pocket i.e. when it is really small. We
> track the best location seen so far on the request (not including dead ends
> i.e. RNFs), and whenever this improves we reset the HTL back to the maximum
> (10); otherwise it is decremented.
>
> It wasn't always this way. What we did at the beginning of 0.7 was
> this: Limit the number of linear hops (HTL) to 10. Only route to a node
> closer to the target than we are (actually I think it was only route to a
> node closer than the best-so-far). The problem with this approach is we'd
> tend to dance around at the beginning, looking for a route, wasting all our
> HTL. So we changed it to the above algorithm. Which does have the advantage
> that we won't run out of hops if we are actually getting closer to the
> target, and we'll have a few hops left over after we reach the best node to
> look around in case there have been short range network changes. The problem
> is, it gets stuck down rabbit holes, because there is essentially no
> backtracking (unless the network is really small).
>
> Both approaches are wrong. But we can have the best of both worlds:
> - The first time on a new node, we always route to the closest node to the
> target, even if it is further away from the target than the best-so-far and
> than this node is. Because the following hop will often be better.
> - When we go say 4 hops without advancing (without best-so-far improving),
> backtrack to the previous node with something like a DNF.
> - This may include the new best-so-far location if any.
> - After a DNF, we will try other nodes, but only if they are closer to the
> target than the node which is rerouting is (or the previous best-so-far if
> this node was the best-so-far when first entered).
> - A normal completion will not cause very much backtracking, because we keep
> the new best-so-far, and many nodes we would visit we have already visited
> (because of the triangles property, and this does seem to happen in
> practice). Having said that, there will be some forking on the way back.
>
> "Fork if closer than this node" is better than "fork if closer than the best
> so far" in simulations on a related project, although there are some
> differences.
>
> Note that dungeons are IMHO inevitable on a true darknet. Also, this should
> not generally increase the linear path length along which data is returned.
> We can probably afford the extra hops since we're not sending data down them.
> One worry is that inserts would send data to all the nodes; we should
> probably limit this. We might also want to have a total nodes visited count,
> with a maximum.
>
>


-- 
Founder and CEO, Thoof Inc
Email: ian at thoof.com
Office: +1 512 524 8934 x 100
Cell: +1 512 422 3588
AIM: ian.clarke at mac.com
Skype: sanity

Reply via email to