On Feb 8, 2008, at 8:36 AM, Matthew Toseland wrote:
> On Wednesday 06 February 2008 20:04, robert at freenetproject.org wrote:
>> Author: robert
>> Date: 2008-02-06 20:04:55 +0000 (Wed, 06 Feb 2008)
>> New Revision: 17609
>>
>> Added:
>> trunk/freenet/src/freenet/node/NetworkIDManager.java
>> Modified:
>> trunk/freenet/src/freenet/node/Node.java
>> trunk/freenet/src/freenet/node/NodeDispatcher.java
>> Log:
>> initial SecretPing implementation (for discussion; untested &
>> disabled)
>>
>> [...]
>> + //This is the node that the ping intends to reach, we will *not*
>> forward it; but we might not respond positively either.
>> +//don't set the completed flag, we might reject it from one peer
>> (too short a path) and accept it from another.
> It's very likely that the long path to a node includes the short
> path, and if
> we try the short path and get rejected, we won't be able to use the
> long
> path.
>
> So it's essential that on this path we don't add the UID to the
> recentlyCompleted set.
You are correct, of course; and that is one motivation for initial
random paths. Whereas this is a local connectivity test (not intended
to go deep into the network), I think that this possible behavior
("clogging the only path back to the node") is actually useful so long
as we don't make any single ping the end-all standard. Plus, this is
the only way to detect wide "bridges" between two subnets (which is a
possible way that a Sybil network could otherwise defeat this
mechanism; by connecting to a chain of people who are all peers).
Keep in mind that this is ping is effectively traveling in a circle.
>> + //Set the completed flag immediately for determining reject loops
>> rather than locking the uid.
>> + node.completed(uid);
>
> Now, this is dangerous. If to get to node A you have to go through
> node B, and
> you go through node B with a short path, then you won't be able to
> go through
> node B with a longer path later on because the UID will be rejected.
No... because the uid will change for "later" ping attempts; unless
you are speaking to the same point as above, or I misunderstand your
poing (or general small world topologies).
> IMHO if you want to find long paths you're going to have to start a
> few hops
> out by random routing for a while.
That is the nature of the "dawnHtl", and to the best of my knowledge
it works and does exactly that.
> I'm still not entirely sure I understand what's going on here: are you
> attempting to show that you can connect to a specific node via a
> specific
> subnetwork?
Well.. we are ultimately trying to determine what is a 'subnetwork',
so technically no; I am attempting to find out if we can reach one
peer through another, but am keeping it general enough so that we
could use it however we want to (HTL/Random start, etc).
>> +if (htl<=0) {
>> + //would be dnf if we were looking for data.
>> + source.sendAsync(DMT.createFNPRejectedLoop(uid), null, 0, null);
>> + break;
>> +}
>
> This is gonna visit an awful lot of nodes then ...
Yes... but since it is never reset, the maximum theoretical is (HTL^2)/
2; ignoring probabilistic decrement. If there are any slow local
nodes, there is a much lower practical cap with the fatal timeout. I
was thinking that we will use a smaller htl than 10, although... if
this request is lightweight enough, even visiting 50/100 nodes would
not be terrible.
--
Robert Hailey
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20080208/d59a6b40/attachment.html>