Spookware (cg2) index | The miscinfo page | SpookShare
Although napster uses a p2p (peer-to-peer) model for actually transferring files, it uses a client-server model for searches. To use napster, you must have a username and password. You then connect to a central server, and tell it the locations of all your files. When someone searches for a file, he sends the search request to the central server, which looks through its own database using a standard algorithm to find all matching files. It then sends the filenames and URLs back to the client, who can then download directly from the machine storing a file.
Then there's opennap. Supposedly it fixes some of the problems, but I don't know much about it.
The main purpose of the Gnutella network is to search for files - actual transfers are left up to http (though most of the time Gnutella clients act as http servers). To use Gnutella, you must run a Gnutella servent (client+server), and connect it to one or more other gnutella servents. You can then find out addresses of other Gnutella servents. To do a search, you send the search request to the servents you're connected to. They send you the results they know about (usually only on their own machine), and forward the search to each of their neighbors, who send the results back to your neighbor, who sends it back to you, and so on, until the search request's TTL (time to live) runs out. You can then use http to download the file directly from the machine which it is on.
Freenet does not do the same job as Gnutella. The freenet network only transfers files, whereas Gnutella and Napster's main job is to search for files. To get a file off freenet, you must know the "key" of the file, which you will get by conventional means (web pages, scribbled on a napkin during lunch, etc.). Once you know the key, you give it to one of your neighbors (note ONE neighbor, not all, as is done with Gnutella search requests). If they have a file with that key, they send it to you. If not, they forward the request to one of their neighbors. When/if someone gets the request who actually has the file (before ttl runs out, of course), they send the file not directly back to the person who originated the request, but back through the chain of nodes which the request came through. This makes it harder to trace where files are going to/from. Also, the file is stored on every node it passes through, and old files which are not requested often are thrown out. This makes files which are more popular more readily available.
Spookshare is the distributed search protocol which I am hoping to create. It will run entirely over http. I am also hoping that the clients will be able to speek gnutellish (and maybe freeneteese), so that they can access the resources of those networks, as well.