Links
Gnutella – The Basic Ideas
The Protocol
Loging onto Gnutella
1. Find anyone on the gnutella network.
a. How .. anyway you want (probably a cache)
b. There are central servers (one run by limewire and bearshare)
2. Send that person an init packet
a. They send a reply
b. They announce to their neighbors
c. Who reply not to the source, but to the nearest neighbor
i. Slows network
ii. Provides anymity
1. But hops-taken count helps make some guesses
2. Unless the forwarder lies
d. Only reply once
i. Must keep track of duplicate messages
ii.
MessageID is unique,
especially when combined with Host and Port and FunctionID
Searching
Same idea as logging on
You send to neighbors, who send to neighbors, etc
No particular search syntax, so ‘.mp3’ might mean anything
But if bearshare and limewire agree, people will probably notice
Note answer does not come from the possessor of the file
Each servent can point to a unique file on a unique host
Caching
When someone connects, search *.*
Answer querries for them, don’t forward querries
Works
because you can send a reply naming a file on a different servent
How to stop bad servents
Ban neighbors who supply bad data
But bad data will get to you anyway
Propogate bannings
Need a crypto-strong way of establishing ‘trust’
Ping-Pong
Just cache the pongs
Only send pong if not firewalled and willing to accept a new connection
Multiplex pings and demultiplex pongs
only send the best pong
but what’s best??