Just spotted an interesting message on Frost that I though might be of
interest to those on this list.

Simon

I just noticed that the "Status for X" in the "Routing Table Status" in
"Node Status Interface" in the Web Interface contains an estimator for the
node X's probability of DNF (pDNF) as a function of key. Presumably this
information is used by NGRouting (why else would it be there ?).

Now, consider how Frost works. It requests guessable keys. However, a large
proportion of these requests, possibly even most of them, result in DNF -
not because the node is incabable of finding this type of data, but simply
because no one has yet inserted any data under that key.

So Frost causes the node to try dozens of nonexistent keys. Furthermore, it
seems that Frost and FUQID are AFAIK the only applications which work well
in the current Freenet - Freesites simply aren't comfortably browsable at
this stage. Also, FUQID is used a lot less than Frost (because, to get the
URI for download, you typically have to use Frost). So, basically, the main
source for traffick nowadays is Frost.

Now then, consider what all this means. I'm assuming that the keys Frost
uses are, in their crypted form (which Freenet uses internally), distributed
about evenly in keyspace (a reasonable assumption, since if it was
otherwise, it wouldn't be a particularly good crypt algorithm). Also assume
that the node tries to route to the "best" node, that is, each request is
likely to get forwarded to whatever node in the routing table is calculated
to be likely to get us the data fastest.

Since Frost requests for nonexistant keys, whatever node such a request gets
routed to is unable to find the data (since the key doesn't exist), and is
thus rated a little lower for this particular key. The more key requests it
gets, the lower it gets rated (since the pDNF rises). Eventually, it goes
beneath the next-best node, which, being the best node now, gets the
impossible-to-fill requests and, failing to fulfill them, gets rated down.

Following this course to it's logical conclusion, it would seem that all the
nodes in the routing table will start to look the same to our node -
whenever one of them starts to look better, it gets graded down by the flood
of requests for nonexisting keys. This will happen whether you are running
Frost or not, since most of the traffick passing by your node is Frost
traffick. Since each node looks alike, it's impossible to make sensible
routing choices between them, and all routing is completely random - which
is equivalent to no routing at all.

Of course, the reality isn't this grim. Some Frost requests actually manage
to fetch new messages, FUQID downloads existing files, and some patient
souls still browse the Freesites. All this provides Fred with legitimate
routing information - but, as long as the majority (or a large percentage)
of requests in Freenet are for nonexisting keys, they will generate "routing
noise", obscuring under it the legitimate routing info and thereby severely
disturbing the network (not unlike the white noise in radio drowning out the
voice).

The old routing didn't have this problem. Only successes were counted, not
failures. Therefore most queries being for nonexistent keys wasn't a problem
- they never affected routing information. The NGRouting, however, uses pDNF
in it's internal calculations and is therefore extremely vulnerable for such
queries.

I see five possible ways to solve the problem:

1) Everyone stops using Frost - obvious, but unlikely and wouldn't really
solve the problem (weakness in Freenet), just cut the symptoms.

2) Radical changes in how Frost operates - again unlikely, and again
wouldn't solve the problem.

3) Increase other traffick - if the majority of requests in the network are
for existing keys, the disturbance caused by Frost will be smaller (the
"good" information will drown it out). The freesites might be such an
application since a link going nowhere is most likley an error from the
makers part. Unfortunately, the freesites aren't really in a usable
condition currently. Furthermore, since edition sites usually contain a link
and an activelink image to a future edition, and since that edition isn't
inserted yet, they also procude some nonlegitimate routing info. And again,
wouldn't solve the real problem.

4) Drop pDNF from NGRouting calculations - would solve the problem, for
Frost and any other application which might cause this. Might make NGRouting
less effective. I recommend trying this and seeing how it affects the
situation - the effect should be instantenous, and it can allways be added
back with little hassle.

5) Increase the size and time to last of failure tables a lot - this would
cause failed traffick to be stopped on it's tracks, lessening it's effect on
routing. Unfortunately, it would hinder Frost considerably, since a key
that's failed now doesn't neccessarily stay failed for very long (someone
might be inserting a new message this very minute...). It would also hinder
other messaging system type programs.


The point number 4 should be the easiest to test, since any changes to the
local node should get immediate results. Could someone out there please test
this (I can't code Java well, and couldn't even figure out where the routing
calculations are made, much less how to change the formulas :( ) ?

If you think I'm wrong, please explain why.


_______________________________________________
Devl mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to