Первоначально в файлообменных P2P-сетях использовался централизованный подход, при котором существовало несколько выделенных узлов или серверов, например система Napster. В настоящее время во всех крупных сетях применяется так называемый P2P-подход в «чистом виде», т.е. данные сети построены на основе протоколов, позволяющих сети автономно функционировать без серверов.
Сеть P2P представляет собой множество узлов, составляющих единую систему и взаимодействующих друг с другом по протоколам P2P сетей, которые и определяют логическое построение сети, способы подключения узлов, алгоритмы поиска и методы взаимодействия пользователей в сети, получения данных и хранения необходимой информации. Протоколами определяются форматы сообщений, последовательность запросов и ответов на них другими узлами, коррекция ошибок, маршрутизация, отключение узлов от сети.
P2P относятся к прикладному уровню сетевых протоколов и являются наложенной сетью, использующей транспортные протоколы стека TCP/IP — TCP или UDP. Протоколу P2P посвящено несколько основополагающих документов сети Интернет — RFC (в частности, последний датируется 2008 годом — RFC 5128 State of Peer-to-Peer (P2P) Communication across Network Address Translators).
Понятие «клиент» или клиентской программы в P2P сетях обозначает программу, обеспечивающую работу узла, эта программа также является реализацией протокола, лежащее в основе той или иной P2P сети.
Популярность P2P сетей связана с некоторыми особенностями технологии одноранговых сетей:
· децентрализация,
· распределенность,
· самоорганизуемость
Благодаря этим особенностям P2P сети имеют такие преимущества как простота, отказоустойчивость (в отличие от подхода клиент-сервер, где при проблемах с сервером – работа всей сети нарушается), дешевизна реализации сети, масштабируемость, достижение колоссальных мощностей сети, высокая скорость копирования файлов.
Рис. 2. Распределение трафика Интернет по протоколам (а) и между P2P-сетями (б) (данные по Германии, 2007 г.)
Следует отметить следующие типы файлообменных сетей:
Наиболее популярными файлообменными сетями являются Bittorrent, eDonkey2000, Gnutella2, Gnutella.
Протокол BitTorrent – пиринговый сетевой протокол обмена данными, созданный Брэмом Коэном. Протокол впервые представлен общественности 2 июля 2001 года, когда программист Брэм Коэн опубликовал его первую реализацию на языке Python. Принципиальное отличие BitTorrent сетей от других пиринговых сетей: направленность на распространение крупных файлов и частично децентрализованная структура сети.
В службе Napster (до ее закрытия) использовалось централизованное управление для получения списка подключенных компьютеров и их списка предоставляемых файлов, но так как обмен файлами происходил непосредственно без участия центрального сервера данная сеть также являлась peer-to-peer сетью. В сетях FastTrack и eDonkey подобных серверов нет, и архитектура сети предполагает максимальную децентрализацию.
1. Для инициализации компьютера в BitTorrent сети клиент обращается к серверу, так назваемому трекеру(tracker), который предоставляет информацию о доступных для скачивания файлах, а также выводит статистическую и маршрутную информацию об узлах сети. Для соединения клиента с трекером используется протокол TCP. Входящий порт трекера: 6969.
2. Для того чтобы опубликовать файл, программа разделяет его на части и создает файл метаданных с расширением .torrent, содержащий информацию об имени файла, его размере и тд, хэш-коды сегментов (контрольные суммы, по умолчанию размером 256 КВ) и URL трекера. Первый узел, опубликовавший файл, называется распространителем (seedеr).
3. Для того чтобы получить искомый файл, клиент должен загрузить набор данных с расширением .torrent – файл метаданных. Перед началом скачивания клиентская программа подсоединяется к серверу по протоколу TCP, сообщает ему хеш-сумму запрашиваемого файла и свой адрес, в ответ клиент получает от сервера адреса других клиентов сети, раздающих или скачивающих искомый файл. Клиентская программа в процессе получения информации периодически информирует сервер о ходе процесса скачивания, а также получает обновлённый список адресов.
4. Клиенты в сети устанавливают соединение по протоколу TCP (входящие порты клиентов: 6881—6889), между клиентами происходит обмен сегментами файлов, при этом трекер в данном процессе не участвует, сервер регулярно обновляет информацию о клиентах участвующих в обмене информацией, и другую статистическую информацию. Для копирования сегмента, клиент посылает запрос и в случае, если второй клиент готов передавать сегмент, то первый клиент получает этот сегмент. Клиентская программа выполняет проверку контрольной суммы сегмента и оповещает всех присоединённых пиров о наличии у него данного сегмента. Клиент контролирует целостность каждого сегмента. Для этого он использует контрольные суммы (хэш-суммы SHA1 - Secure Hash Algorithm 1 — алгоритм криптографического хеширования, описанный в RFC 3174.). Данная функция препятствует возникновению в сети битых сегментов и как следствие поврежденных файлов.
5. Клиенты периодически информируют трекер об изменениях в состоянии закачек и обновляют списки IP-адресов.
Рис.3 Принцип работы BitTorrent
Более подробная информация - в спецификации протокола.
Архитектура BitTorrent предполагает пиринговый обмен с использованием центрального tracker-сервера для учета статистики. Трекер(tracker-сервер) — специализированный сервер, работающий по протоколу HTTP. На трекере хранятся следующая информация:
В соответствии со стандартом имена файлов на трекере не хранятся, по хеш-суммам узнать имя файла нельзя. На практике во многих случаях сервер кроме своей основной функции выполняет также функцию веб-сервера. В этом случае трекер хранит файлы метаданных, а также описания распространяемых файлов, статистику закачек, текущее количество подключённых пиров и пр.
При копировании сегментов файла с компьютера первоначального владельца другими клиентами, пользователи получают возможность копировать фрагменты этого файла у пользователей уже скачавших его. В то же время протокол BitTorrent требует фиксирования каждой такой загрузки на tracker-сервере, даже если сервер распространителя в транзакции не участвует.
Архитектура BitTorrent не дает возможности определить число клиентов, участвующих в пиринговой сети, так как о количестве загрузок определенного файла может знать только владелец tracker-сервера.
В новых версиях протокола были разработаны бестрекерные (trackerless) системы. В основе работы таких лежит протокол Kademlia. В бестрекерные системах сервер доступен децентрализовано, в форме распределённой хеш-таблицы на клиентах.
· µTorrent;
· BitComet;
· Anatomic P2P;
· BitSpirit;
µTorrent | Anatomic P2P | BitComet | BitSpirit | |
Бесплатный | + | + | + | - |
Открытые исходные тексты | - | + | - | - |
Windows | + | + | + | + |
Linux | - | + | - | - |
Mac OS X | + | + | - | - |
Русский язык интерфейса | + | - | + | + |
Наличие встроенного трекера | + | - | - | - |
Шифрование соединений | + | - | + | - |
Режим Super-seeding | + | + | - | + |
UPnP переадресация | + | + | + | + |
NAT переадресация | + | - | + | - |
Поддержка DHT | + | - | + | + |
Обмен пирами | + | - | + | - |
Предварительный просмотр загружаемого медиа | - | - | + | + |
Ограничение скорости передачи данных для каждого торрента | + | - | + | + |
Поддержка приоритетов | + | - | - | + |
Блокировка отдельных пиров | + | - | + | - |
Выборочная загрузка файлов из торрентов | + | - | + | + |
Поиск торрентов | + | - | + | + |
Получение торрентов через RSS-загрузчик | + | - | - | - |
Удаленное управление через web-интерфейс | + | - | - | - |
Автоматическое обновление продукта | + | - | + | + |
Сеть EDonkey2000(eDonkey, eD2k) – пиринговая файлообменная сеть, появившаяся в 2000 году. Базируется на основе сетевого протокола прикладного уровня MFTP(Multisource File Transfer Protocol).