Peer-to-peer (or P2P) networks, are used to share a large set of resources where each node (peer) contains only a subset of the resources. All nodes are responsible for both the upload and download of the resources.
Multiple nodes will contain the same resources and when one node requests a resource, it may be downloaded (seeded) from multiple nodes at the same time.
Where does it come from?
Though the concept was much older, the architecture became popular with the advent of Napster (in 1999), the filesharing service that got into trouble because it was used for sharing illegal music and video copies.
When should you use it?
How does it work?
There are two aspects to be considered. The first is: how do the nodes know that the others exist?
The other aspect is resource discovery: how does one node know where to find a resource?
Common implementation techniques