P2P

P2P (Peer-to-Peer) — сетевая архитектура, где каждый узел одновременно и клиент, и сервер. Нет централизованного координатора: узлы находят друг друга, обмениваются данными, поддерживают структуру сети совместно.

Классификация

ТипКак ищут peersПример
Чисто P2PЧерез DHT, gossipBitTorrent DHT, IPFS, Gnutella
ГибридЦентральный tracker + прямые соединенияBitTorrent (traditional), Napster
FederatedСерверы федерируются, клиенты подключаются к своемуMatrix, Mastodon, Email
SupernodeЧасть узлов особая, координируетSkype (старый), KaZaA

Ключевые задачи P2P

  1. Peer discovery — как найти другие узлы. Bootstrap-серверы, DHT, mDNS (в LAN), UPnP, PEX (peer exchange).
  2. NAT traversal — как соединиться если оба за NAT. Через STUN (узнать внешний IP), TURN (relay), hole punching, ICE (в WebRTC).
  3. Роутинг — как передать данные к нужному узлу, не зная всех. Kademlia, Chord, gossip protocols.
  4. Аутентификация — как узнать что peer — тот кем представляется. Public-key криптография, WoT.
  5. Целостность — как убедиться что данные не подменены. Хэши, Merkle-деревья, подписи.

Знаменитые P2P-системы

P2P vs client-server

P2PClient-server
МасштабируемостьС ростом узлов растут ресурсыСервер узкое горло
ОтказоустойчивостьНет single point of failureУпал сервер — упал сервис
МодерацияСложноЦентральный админ
ПриватностьРазные модели, вариативноСервер видит всё
LatencyПлохо предсказуемаяСтабильная
Ресурсы клиентаТратит upload/CPUМинимальный

Проблемы P2P

См. также