In the case of a P2P application, applications don’t always run on the server.
- Arbitrary end systems directly communicate with one another
- Peers request service from other peers, which provide service to other peers
- Self scalable ⇒ new peers bring in new service capacity and service demands
- Peers are intermittently connected and change IP addresses
- e.g. BitTorrent, streaming, VoiP
File Distribution Time
In a client-server application, server must sequentially upload $N$ copies of a given file.
- $F/u_s$ for one copy, $NF/u_s$ for $N$ copies
Each client must also download the file, bottlenecked by slowest client download
- Slowest client download time: $F/d_{min}$, where $d_{min}$ = min client download time
Time to distribute file $F$ to $N$ clients with client-server approach is thus given by:
$$
D_{c-s} \geq \max\{NF/u_s, F/d_{min}\}
$$
- Note this increases linearly in $N$

In P2P system, main difference is that clients as aggregate can combine sharing capacity:
- Time to send single copy from server is $F/u_s$
- Slowest client download time is $F/d_{min}$
- Clients as aggregate must download $NF$ bits, but max upload rate is (limiting max download rate) is $u_s + \sum_{u_i}$