ABSTRACT

Peer-to-peer (P2P) networks are distributed systems without any central authority that are used for efficient location of shared resources. Such systems have become very popular for Internet applications in a short period of time. A survey of recent P2P research yields a slew of desirable features for a peerto-peer network such as decentralization, scalability, fault tolerance, self-stabilization, data availability, load balancing, dynamic addition and deletion of peer nodes, efficient and complex query searching, incorporating geography in searches, and exploiting spatial as well as temporal locality in searches.

Early “unstructured” systems, such as Napster,29 Gnutella,17 and Freenet,7 did not support most of these features and were clearly unscalable, either due to the use of a central server (Napster) or to high message complexity from performing searches by flooding the network (Gnutella). These early peer-to-peer systems implemented loose organization protocols that did not guarantee any performance from the network.