[p2p-hackers] part 2: proxying and introduction: the two fundamental operations of emergent networks

coderman coderman at mindspring.com
Sun Sep 16 12:31:01 UTC 2001

zooko at zooko.com wrote:
> ...
> 128 bytes for addressing information (could do with less, but let's be a bit
> pessimistic), 128 bytes for crypto information (could do with less, again), and
> let's just say 256 bytes for local reputation (i.e. what you know about that
> other node, how it performs, etc.) for a nice round number of 512 bytes per
> counterparty.  (Note: if you really wanted to squeeze I believe you could get
> this down to 20 bytes for crypto and addressing, and maybe 20 bytes for local
> reputation for a total of 40 bytes per counterparty, but let's be pessimistic
> while writing on the back of this particular envelope...)
> ...
> Here is a quick recap of the reasons why
> introduction is vitally important to emergent networks:
> ...
> 3. If you are going to implement transitive, automatic Introduction in order to
>    have robust, automatic joining of the network, then why not use it?  e.g.:
>   a. You already use it to go from 1 neighbors to K neighbors (where K is the
>    minimum number of neighbors that you need to be part of the network), then
>    why not use it to go from K neighbors to M neighbors, where M is a higher
>    number for greater efficiency in some cases.
>   b. Use automatic transitive introduction to dynamically heal and optimize the
>    network.
> 4. Introduction may make for more efficient networks than proxying in some
>    cases (those cases where higher degree of connectivity is better).
>   a. One such case seems to be when the total number of nodes on the entire
>    network is sufficiently small, which the current state of Mojo Nation.

A few thoughts:  I am building a system that uses no proxying (well, proxying is
not a required feature of the network, although it can be used at a single level
of indirection) and relies exclusively on transitive introduction as you call it,
and reputation to organize peers within the network.

This has the effect that a) like you mention, you are continually healing and 
optimizing the organization/topology of the network, and b) This network uses
an extremely high level of direct connectivity, with the exact amount of
connectedness determined by each peer on an individual basis based on factors
such as bandwidth, memory, user preference, etc.

Now, regarding Original Introduction :  I am still working on a good way to do
this, and it is rather hard to come up with something general and robust.  I
have decided to make this bootstrapping available in a few specific ways:

1. By default, there is a defaulty page (or pages) that can be queried to grab
   a few initial hosts.  Once these are obtained, the transitive introduction
   process is primed, and this method should never be required again.

2. Manually enter a friends node address.  Again, this kicks off the transitive
   introduction, so this should only be required once.

3. Scanning subnets for nodes.  I dont really like this method, so I will
   probably avoid this at all costs, unless someone impresses upon me the 
   dire need for it.

Transitive introduction in my case consists of querying the highest quality
peers for a set of their higher quality peers.

In gnutella, this transitive introduction consisted of watching host address
fly through the network, and connecting to any number of them as desired.

Are there additional ways of transitive introduction that have not been widely
discussed yet?  In particular I am curious how FastTrack implements this.

Obviously central servers should be avoided, but the decentralized options appear
rather limited off hand.

More information about the P2p-hackers mailing list