Peer-to-peer technology refers to a class of applications that take advantage of the resources available at the edges of the Internet. These resources can either be computing power, storage space, content, bandwidth or human presence.
Peer-to-peer applications have proven to be important for many tasks such as distributed computation (e.g. Seti@Home, Genome@Home), content distribution (e.g. e-Mule, BitTorrent) and communication and collaboration (e.g. Jabber/XMPP, Lotus Sametime).
One of the biggest challenges of peer-to-peer applications is the lookup problem, i.e. how to address the resources available in the network. Some lookup techniques are: centralized search (e.g. Napster), flooding (e.g. Gnutella), Distributed Hash Table (e.g. CAN , CHORD), semantic routing (e.g. Edutella, GridVine), social routing (e.g. Bouillon, WiredReach) and publish/subscribe (e.g. Siena, Scribe).
Among the main advantages of peer-to-peer technology are robustness, scalability and easiness of use. Bringing the user's personal computer closer to the heart of the Internet makes the whole sharing process much easier.