Что такое P2P и как устроена одноранговая сеть

P2P, или одноранговая сеть, работает без центрального сервера: каждый участник и скачивает данные, и раздаёт их другим.

Показываем, как так устроены торренты, DHT и видеозвонки в браузере, чем P2P отличается от модели «клиент-сервер» и что это слово значит в банках.

В конце рабочий пример сети из двух пиров на Python.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3046 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3700 экспертных мнений Подписаться на Телеграм-канал
Обложка: Что такое P2P и как устроена одноранговая сеть

P2P (peer-to-peer, «равный к равному») — это одноранговая сеть, в которой каждый компьютер одновременно и просит данные, и раздаёт их другим. Центрального сервера, через который идёт весь обмен, нет: участники соединяются напрямую. Так работают торренты, видеозвонки в браузере и сеть биткоина.

В банках и на криптобиржах тем же словом называют сделки между людьми без посредника. Это другое значение, о нём отдельный раздел ниже. Если вы пришли за сетями, начните с того, как устроены сетевые протоколы: P2P работает поверх них.

CheckroiCheckroiПодборка курсов по сетевому администрированию40 курсов • 18 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Что такое P2P простыми словами

Рой соединяет ноутбуки в одноранговую сеть

Представьте библиотеку, где книги хранятся не в одном здании, а дома у читателей. Каждый держит у себя несколько книг и даёт их соседям, а взамен берёт то, чего у него нет. Здание библиотеки не нужно, и если один читатель уехал, книги остаются у других.

Так выглядит одноранговая сеть. Каждого участника называют пиром (peer) или узлом.

Совет по архитектуре интернета (IAB) в документе RFC 5694 2009 года считает систему P2P, если её элементы делят свои ресурсы и каждый из них и предоставляет услуги другим, и запрашивает их у других.

Из этого определения следует простой тест. Если почти все участники только скачивают, а раздаёт один, перед вами обычная схема «клиент-сервер», даже если её называют P2P.

Чем P2P отличается от модели «клиент-сервер»

Когда вы открываете сайт, ваш браузер (клиент) просит страницу у сервера, и сервер её отдаёт. Клиенты между собой не общаются. В одноранговой сети роли не закреплены.

Клиент-сервер P2P
Кто хранит данные сервер сами участники
Кто раздаёт только сервер каждый, у кого есть нужный кусок
Что будет, если главный узел выключится сервис недоступен сеть работает, пока живы другие пиры
Нагрузка при росте числа пользователей растёт на сервере новые участники приносят свои ресурсы
Кто управляет владелец сервера правила протокола
Примеры сайты, почта, онлайн-банк BitTorrent, звонки через WebRTC, биткоин

Подробно о том, как устроен обмен между клиентом и сервером, рассказывает статья про модель OSI. P2P живёт на верхних уровнях этой модели и использует те же TCP и UDP.

Как работает одноранговая сеть

У новичка в P2P-сети три задачи: найти хотя бы одного соседа, узнать, у кого лежат нужные данные, и забрать их. Вот как это решают на примере торрента.

  1. Вход в сеть. Программа знает несколько адресов заранее или получает их от трекера. Связавшись с одним пиром, она узнаёт от него про других.
  2. Поиск данных. По спецификации торрент-протокола (BEP 3) файл описан в .torrent-файле, это словарь с длиной кусков и хешем SHA-1 каждого куска. Трекер подсказывает, у кого есть этот файл.
  3. Скачивание кусками. Файл делится на части, и программа берёт разные части у разных пиров одновременно. Поэтому чем больше людей качает популярный файл, тем быстрее он скачивается.
  4. Проверка. Каждый кусок сверяется с хешем из .torrent-файла. Испорченный или подменённый кусок не пройдёт проверку и будет скачан заново.
  5. Раздача. Как только у вас появился кусок, вы сами начинаете отдавать его другим. Так протокол и задуман: когда несколько человек одновременно качают один файл, они загружают его друг другу.

В жаргоне торрентов тех, у кого файл уже целиком, называют сидами, а тех, кто ещё качает, личами или пирами.

Почему два домашних компьютера не видят друг друга

Большинство домашних устройств сидит за роутером с NAT: снаружи у всей квартиры один адрес, и входящее соединение роутер не знает, кому отдать. Это главная техническая проблема P2P.

Решение: служебный сервер помогает пирам узнать свои внешние адреса и «пробить» роутеры навстречу друг другу. В браузерах для этого есть технологии ICE, STUN и TURN, и спецификация WebRTC ставит подключение к удалённым пирам через них первым пунктом в списке того, что она описывает. Если пробить NAT не вышло, трафик идёт через TURN-сервер, и связь перестаёт быть прямой.

Какие порты при этом открываются и чем TCP отличается от UDP, мы разбирали в статье про порты компьютера.

CheckroiCheckroiПодборка курсов для системных администраторов132 курса • 31 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→ Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Виды P2P-сетей

Главный вопрос любой одноранговой сети: как узнать, у кого лежат данные. RFC 5694 делит сети по тому, где хранится этот указатель (индекс).

Вид индекса Как устроен Пример из документа IAB Слабое место
Централизованный центральный сервер знает, что лежит у каждого пира Napster выключили сервер, и поиск остановился
Локальный каждый пир знает только свои данные, запрос рассылается соседям ранняя Gnutella (до версии 0.4) запросы множатся и забивают сеть
Распределённый указатели разложены по многим узлам по строгому правилу сети на распределённых хеш-таблицах (DHT) сложнее в реализации и отладке

Гибридные сети

Сеть с центральным индексом документ IAB относит к гибридным: таким системам для работы нужен центральный узел. «Чистая» P2P-сеть, по тому же документу, продолжает работать, даже если из неё убрать любой отдельный пир.

Торрент с трекером как раз гибридный. Поэтому в торрент-протокол добавили режим без трекера.

DHT: как найти файл без центрального сервера

В BEP 5 описана распределённая хеш-таблица, которая хранит контакты пиров для торрентов «без трекера». Она основана на алгоритме Kademlia и работает поверх UDP.

  • У каждого узла есть случайный 160-битный идентификатор из того же пространства, что и хеши торрентов.
  • Расстояние между узлом и торрентом считается операцией XOR над их идентификаторами.
  • Сведения о том, кто раздаёт торрент, хранят узлы с идентификаторами, «ближайшими» к его хешу.

Благодаря этому любой узел за несколько шагов находит нужных соседей, а единого сервера, который можно выключить, нет.

Где используют P2P сегодня

Изометрическая схема: файл собирается из кусков от разных компьютеров

Одноранговая архитектура давно вышла за пределы обмена файлами. Вот где она работает прямо сейчас.

  • Обмен файлами. Торрент-клиенты. Им раздают дистрибутивы Linux, игровые обновления, открытые датасеты.
  • Видеозвонки в браузере. По спецификации W3C объект RTCPeerConnection позволяет приложению установить одноранговую связь с другим браузером. Звонок, где собеседников двое, часто идёт напрямую между ними.
  • Блокчейн. Статья Сатоши Накамото так и называется: «Bitcoin: A Peer-to-Peer Electronic Cash System». Узлы сети хранят копию общего реестра и пересылают друг другу новые записи. Чем занимаются люди, которые пишут код для таких сетей, рассказано в материале о блокчейн-разработчике.
  • Хранение данных. IPFS описывает себя как набор открытых протоколов на идеях адресации по содержимому и одноранговых сетей. Файл ищут по отпечатку его содержимого, а не по адресу сервера.
  • Локальная сеть без сервера. Несколько компьютеров в офисе или дома обмениваются папками и принтером напрямую. В Windows для разработчиков есть целый набор API: Microsoft в документации определяет одноранговую сеть как бессерверную технологию, которая позволяет устройствам совместно использовать ресурсы и обмениваться данными напрямую.

Простая P2P-сеть на Python

Чтобы почувствовать идею, соберите сеть из двух пиров. Каждый из них одновременно слушает свой порт, как сервер, и подключается к соседу, как клиент. Код использует только стандартную библиотеку, работа с соединениями построена на сокетах, о которых есть отдельная статья: что такое сокет.

import socket
import threading
import time


class Peer:
    def __init__(self, name, port):
        self.name = name
        self.port = port
        self.files = {}

    def serve(self):
        srv = socket.socket()
        srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        srv.bind(("127.0.0.1", self.port))
        srv.listen()
        while True:
            conn, _ = srv.accept()
            wanted = conn.recv(1024).decode()
            conn.sendall(self.files.get(wanted, "нет такого файла").encode())
            conn.close()

    def ask(self, port, filename):
        with socket.create_connection(("127.0.0.1", port)) as s:
            s.sendall(filename.encode())
            return s.recv(1024).decode()


anna = Peer("Анна", 9001)
boris = Peer("Борис", 9002)
anna.files["рецепт.txt"] = "Блины: мука, молоко, яйца"
boris.files["план.txt"] = "Суббота: дача"

for p in (anna, boris):
    threading.Thread(target=p.serve, daemon=True).start()
time.sleep(0.2)

print("Борис получил от Анны:", boris.ask(9001, "рецепт.txt"))
print("Анна получила от Бориса:", anna.ask(9002, "план.txt"))

Запустите файл командой python3 peer.py. Вывод будет таким:

Борис получил от Анны: Блины: мука, молоко, яйца
Анна получила от Бориса: Суббота: дача

Здесь нет главного узла: Анна раздаёт Борису, Борис раздаёт Анне. Чего не хватает до настоящей сети:

  • поиска соседей, сейчас порты прописаны вручную;
  • индекса, который подскажет, у кого лежит нужный файл;
  • деления больших файлов на куски и проверки хешей;
  • шифрования и обхода NAT.

Каждый пункт из этого списка тянет на отдельную тему, и все они встречаются в работе сетевого инженера.

CheckroiCheckroiПодборка курсов по Python567 курсов • 51 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Что часто путают с P2P

Вокруг слова накопилось несколько устойчивых путаниц. Разберём четыре самых частых.

P2P и торрент

Торрент остаётся самым известным примером одноранговой сети, но не единственным. Видеозвонок через WebRTC тоже P2P, хотя никаких .torrent-файлов в нём нет.

Обратное тоже верно: торрент с трекером не «чистая» P2P-сеть. Без трекера и без DHT новые участники не найдут друг друга.

P2P и блокчейн

Блокчейн использует одноранговую сеть как транспорт: узлы пересылают друг другу транзакции и блоки. Но сам блокчейн описывает, как вести общий реестр, который нельзя тихо переписать.

Торрент-сеть реестра не ведёт, а у закрытого корпоративного блокчейна узлы бывают известны заранее и подключаются по списку.

Децентрализованная и распределённая сеть

Эти слова часто ставят рядом, но смысл у них разный:

  • распределённая система разносит данные и вычисления по многим машинам, при этом у неё может быть один владелец, как у облака крупной компании;
  • децентрализованная не зависит от одного владельца или узла: решения принимают правила протокола, а не администратор.

Одноранговая сеть почти всегда распределённая. Децентрализованной её делает отсутствие центрального узла, без которого сервис встаёт.

P2P и анонимность

Прямое соединение означает, что собеседник видит ваш адрес. Поэтому обычная P2P-сеть не прячет участников, а скорее наоборот: список пиров, которые раздают файл, может получить любой, кто к нему подключился.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Плюсы и минусы P2P

Рой доволен: сеть из компьютеров работает

У одноранговой архитектуры есть сильные стороны, но и цена у неё заметная.

Плюсы Минусы
Нет единой точки отказа: сеть живёт, пока есть участники Нет гарантии, что редкий файл кто-то раздаёт прямо сейчас
Популярные данные качаются быстрее, потому что источников больше Ваш IP-адрес видят все, с кем вы соединяетесь
Владельцу сервиса не нужно платить за мощные серверы и канал Сложно удалить или исправить данные, которые уже разошлись по узлам
Трудно заблокировать или выключить одним действием Нужно бороться с NAT, ботами и пирами, которые только качают

В том же документе IAB есть оговорка про ресурсы: общее потребление клиент-серверной системы обычно ниже, чем у P2P. Экономит P2P деньги владельца сервиса, а не электричество всей сети.

P2P и безопасность

Прямое соединение с незнакомыми компьютерами несёт риски, которых нет при работе с сайтом крупной компании.

  • Открытый адрес. Каждый пир видит, с какого IP вы подключились. Это неизбежное свойство прямого обмена.
  • Подменённые файлы. Хеши защищают от порчи при передаче, но не от того, что раздающий изначально выложил программу с вирусом. Скачивайте установщики с сайта разработчика или из раздач, на которые он сам ссылается.
  • Чужой контент. Сама технология нейтральна. Но в торренте вы не только качаете, но и раздаёте, поэтому перед загрузкой фильма или программы проверьте, разрешил ли правообладатель её распространять.
  • Открытые порты. P2P-программа слушает порт на вашем компьютере. Обновляйте её и закрывайте, когда она не нужна.

P2P в банках и на криптобиржах

В финансах P2P (иногда пишут C2C) означает сделку между двумя людьми напрямую, без магазина или брокера в середине. К архитектуре сети это отношения не имеет.

  • P2P-переводы. Так банки называют переводы с карты на карту между физлицами. В России самый заметный пример это Система быстрых платежей: по сообщению Банка России от 28 января 2019 года, она позволяет физлицам мгновенно переводить деньги друг другу по номеру мобильного телефона.
  • P2P-торговля криптовалютой. Раздел биржи, где пользователи продают валюту друг другу, а площадка лишь сводит стороны и держит сделку до оплаты.
  • P2P-кредитование. Займы между людьми через платформу, без банка в роли кредитора.

Если в разговоре звучит «P2P», уточните контекст: программист и трейдер имеют в виду разные вещи.

Где освоить сети системно

Понять, что такое P2P, можно за вечер. Чтобы самому строить и чинить сети, нужны маршрутизация, NAT, сетевая безопасность, мониторинг и практика на настоящем оборудовании. Этим занимается сетевой инженер, путь в профессию разобран в статье как стать сетевым инженером, а смежная роль описана в материале о профессии системного администратора.

Ниже подборка курсов по сетевому администрированию из нашего каталога: сравните программы, цены и формат обучения.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Администрирование ОС Linux
Перейти на сайт курса
SkillboxSkillbox90 157 ₽5556 ₽/мес.3 месяцаОбзор курса
Профессия «Сетевой инженер»
Перейти на сайт курса
НетологияНетология85 800 ₽3575 ₽/мес.12 месяцевОбзор курса
Сетевые технологии
Перейти на сайт курса
MerionMerion21 840 ₽1578 ₽/мес.2 месяцаОбзор курса
Сетевые технологии Huawei
Перейти на сайт курса
MerionMerion11 830 ₽938 ₽/мес.2 месяцаОбзор курса
Системное администрирование и информационные технологии - курс переподготовки
Перейти на сайт курса
АПОК — Академия профессионального образования кадровАПОК32 980 ₽2748 ₽/мес.576 часовОбзор курса

Больше программ — в полном каталоге курсов по сетевому администрированию

Часто задаваемые вопросы

Что значит P2P простыми словами?

P2P (peer-to-peer, «равный к равному») означает сеть, где каждый компьютер одновременно скачивает данные и раздаёт их другим. Центрального сервера, через который идёт весь обмен, нет.

Чем P2P отличается от модели «клиент-сервер»?

В модели «клиент-сервер» данные хранит и раздаёт сервер, а клиенты только запрашивают. В одноранговой сети каждый участник может и запрашивать, и отдавать, поэтому она продолжает работать, когда отдельные узлы отключаются.

P2P и торрент это одно и то же?

Нет. BitTorrent самый известный пример P2P, но по тому же принципу работают видеозвонки через WebRTC, сеть биткоина и IPFS. Подробнее о протоколах, на которых всё это работает, рассказано в статье про сетевые протоколы.

Видят ли другие участники P2P-сети мой IP-адрес?

Да. При прямом соединении собеседник видит адрес, с которого вы подключились, а в торренте список раздающих может получить любой участник раздачи.

Что такое P2P-перевод в банке?

Так банки называют перевод между двумя физлицами, например с карты на карту или через Систему быстрых платежей по номеру телефона. С одноранговыми компьютерными сетями это значение не связано.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!