9. Chapter 9: Peer-to-peer networks
9.6. Peer-to-Peer Networks: Gnutella
Peer-to-Peer
Networks: Gnutella
- Gnutella history
- 2000: J. Frankel & T. Pepper released Gnutella
- Soon after: many other clients (e.g., Morpheus, Limewire, Bearshare)
- 2001: protocol enhancements, e.g., “ultrapeers”
- Query flooding
- Join: contact a few nodes to become neighbors
- Publish: no need!
- Search: ask neighbors, who ask their neighbors
- Fetch: get file directly from another node

Gnutella:
Query Flooding
- Fully distributed
- Public domain protocol
- Many Gnutella clients implementing protocol
- Overlay network: graph
- Edge between peer X and Y if there’s a TCP connection
- All active peers and edges is overlay net
- Given peer will typically be connected with < 10 overlay neighbors
Gnutella:
Protocol
- Query message sent over existing TCPconnections
- Peers forward Query message
- QueryHit sent over reverse path


Gnutella:
Peer Joining
- Joining peer X must find some other peer in Gnutella network: use list of candidate peers
- X sequentially attempts to make TCP with peers on list until connection setup with Y
- X sends Ping message to Y; Y forwards Ping message.
- All peers receiving Ping message respond with Pong message
- X receives many Pong messages. It can then setup additional TCP connections
Gnutella:
Pros and Cons
- Advantages
- Fully decentralized
- Search cost distributed
- Processing per node permits powerful search semantics
- Disadvantages
- Search scope may be quite large
- Search time may be quite long
- High overhead and nodes come and go often