Applications like web, e-mail and DNS – all employ client-server architectures with significant reliance on always-on infrastructure servers. However, with a P2P architecture, there is minimal (or no) reliance on always-on infrastructure servers. Instead, pairs of intermittently connected hosts, called peers, communicate directly with each other.
The peers are not owned by a service provider, but are instead desktops and laptops controlled users.
In this section we’ll examine two different applications that are particularly well-suited for P2P designs. The first is file distribution, where the application distributes a file from a single source to a large number of peers. File distribution is a nice place to start our investigation of P2P, as it clearly exposes the self-scalability of P2P architecture. As a specific example for file distribution, we’ll describe the popular BitTorrent system. The second P2P application we’ll examine is a database distributed over a large community of peers. For this application, we’ll explore the concept of a Distributed Hash Table (DHT).