Re: Questions regarding Mojito

[email protected] Sat, 8 Aug 2009 23:09:33 +0000 (UTC)
Newsgroups gmane.network.gnutella.devel
Organization Home, Grenoble, France
Message-ID <[email protected]>
Quoting garethdanielsmith <[email protected]> from ml.gnutella.dev-forum:
:I would be grateful if anyone could help me increase my understanding of the Mojito DHT.
:
:My questions are as follows:
:
:* Must security tokens always be 4 bytes long? That there is a length field
:suggests otherwise, but my tests have shown that limewire only accepts 4 byte
:ones.

Yes, in theory in could be anything.

Gtk-gnutella will accept whatever length you put in there, even 0 (meaning no
security token) but emits 4-byte tokens.

:* What is the meaning of contact instance ids? My guess is the number of times
:that the node/contact has been restarted or lost and regained connectivity.

I was never able to figure out what it meant and never got any clarification
on that field, so gtk-gnutella simply ignores this field and puts "1" in there.

:* What is the meaning of request_load on Find Value Responses. It seems to be
:some measure of the popularity of the specified key, but what is its purpose, and
:should it respect any invariants?

Gtk-gnutella computes the exponential moving average of "FETCH" requests for a
given key, with a smoothing factor of 0.25.  The number of requests during one
minute is buffered and the EMA is updated each minute.

What a key is "loaded" (value set to 5.0 in gtk-gnutella), then STORE requests for
that key are going to get the following error codes:

	STORE_SC_LOADED if the key is not also full
	STORE_SC_FULL_LOADED if the key is both full and loaded.

See also:

	http://groups.yahoo.com/group/the_gdf/message/23498
	http://groups.yahoo.com/group/the_gdf/message/23502

for a complete definition of the used STORE status codes in gtk-gnutella.

:* What are the meanings of versions on:
:   - Messages? I guess the protocol version.

Yes.

:   - Contacts? Protocol version again?

Yes, their advertised protocol version.

:   - DHT Values? Some sort of *version tag* for the value?

No, this defines the *format* of the DHT value.  It's a version number for that
specific DHT value.

:* What is the meaning of secondary keys? Currently I am making the following
:assumptions regarding them:
:   - secondary keys are node-local and can be calculated arbitrarily, but consistently.
:   - If no secondary keys are sent on a Find Value Request, then all secondary
:keys are to be considered.
:   - No more values should be stored for a single kuid than the number such that
:all values can have either the value or the secondary key sent back within a
:single Find Value Response message.

The secondary key is the KUID of the publisher of a given value.  Since more than
one publisher can submit values under a given Kademlia key (primary key), a given
value can be uniquely index by the tuple (primary key, secondary key).

This means a given publisher can only publish ONE value of a given type for each key.

Raphael