P2P
P2P (Peer-to-Peer) — сетевая архитектура, где каждый узел одновременно и клиент, и сервер. Нет централизованного координатора: узлы находят друг друга, обмениваются данными, поддерживают структуру сети совместно.
Классификация
| Тип | Как ищут peers | Пример |
|---|---|---|
| Чисто P2P | Через DHT, gossip | BitTorrent DHT, IPFS, Gnutella |
| Гибрид | Центральный tracker + прямые соединения | BitTorrent (traditional), Napster |
| Federated | Серверы федерируются, клиенты подключаются к своему | Matrix, Mastodon, Email |
| Supernode | Часть узлов особая, координирует | Skype (старый), KaZaA |
Ключевые задачи P2P
- Peer discovery — как найти другие узлы. Bootstrap-серверы, DHT, mDNS (в LAN), UPnP, PEX (peer exchange).
- NAT traversal — как соединиться если оба за NAT. Через STUN (узнать внешний IP), TURN (relay), hole punching, ICE (в WebRTC).
- Роутинг — как передать данные к нужному узлу, не зная всех. Kademlia, Chord, gossip protocols.
- Аутентификация — как узнать что peer — тот кем представляется. Public-key криптография, WoT.
- Целостность — как убедиться что данные не подменены. Хэши, Merkle-деревья, подписи.
Знаменитые P2P-системы
- Napster (1999) — первое массовое P2P, центральный индекс. Умер по суду.
- Gnutella, Freenet, eDonkey, KaZaA — 2000-е файлообмен.
- BitTorrent — до сих пор жив.
- Skype (до Microsoft) — VoIP через P2P с supernodes.
- Bitcoin и все криптовалюты — P2P-сеть блокчейна.
- IPFS, libp2p — современная P2P-инфраструктура.
- Mastodon, Matrix, Nostr — federated messaging.
- Tor, I2P — P2P-оверлеи для анонимности.
P2P vs client-server
| P2P | Client-server | |
|---|---|---|
| Масштабируемость | С ростом узлов растут ресурсы | Сервер узкое горло |
| Отказоустойчивость | Нет single point of failure | Упал сервер — упал сервис |
| Модерация | Сложно | Центральный админ |
| Приватность | Разные модели, вариативно | Сервер видит всё |
| Latency | Плохо предсказуемая | Стабильная |
| Ресурсы клиента | Тратит upload/CPU | Минимальный |
Проблемы P2P
- Freeriding — узлы качают, но не отдают. BitTorrent-tit-for-tat решает частично.
- Sybil атаки — атакующий создаёт много фиктивных узлов чтобы влиять на решения. Защита: PoW, PoS, доверенные каналы.
- Eclipse-атаки — окружить узел вражескими peer-ами и изолировать.
- Poisoning — раздавать битые файлы под правильным именем.
- Регулятивно. Многие юрисдикции ограничивают P2P (авторские права).