Файлообменная сеть

Файлообменная сеть - совокупное название сетей для совместного использования файлов.

Часто в основе файлообменных сетей лежат одноранговые компьютерные сети, основанные на равноправии тех, кто участвует в обмене файлами, то есть каждый участник одновременно является и клиентом, и сервером


1. Принципы работы

Основные принципы работы файлообмена заключаются в следующем:

  • пользователь скачивает программу к себе на компьютер;
  • дает доступ другим пользователем части своих ресурсов (этот процесс называется "расшаривания", англ. sharing )
  • в каждой такой программе присутствует поиск, который ищет ресурсы, выложенные на компьютерах других пользователей для свободного скачивания. Любой пользователь, используя поиск, может найти на компьютере любого другого пользователя те ресурсы, которые он изложил в свободный доступ, и бесплатно скачать их. А поскольку количество пользователей таких файлообменных программ исчисляется сотнями тысяч, а иногда даже миллионами, пользователь наверняка найдет файл, интересующей его.

Эта технология получила название P2P (pear to pear), в приблизительном переводе - децентрализованная.


2. Типы организации файлообменных сетей

2.1. Централизованные сети

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

Преимуществом такой сети является относительная простота ее программирования и небольшой объем служебной информации, передаваемой на серверы. Закрытие сетей Napster и WINMX показало ненадежность централизованных файлообменных сетей. Серверы индексаций могут быть отключены по разным причинам (технический сбой, разорение компании, им владеет, судебное решение). В таком случае сеть перестает функционировать. К централизованных сетей относится Direct Connect.


2.2. Децентрализованные сети

Децентрализованные файлообменные сети функционируют без серверов индексаций. Хотя объем служебной информации, передаваемой в них больше, надежность их гораздо выше. Пока не существует способа насильно остановить функционирование такой сети. К децентрализованных сетей относятся Gnutella, Overnet, Kad.

Впервые термин peer-to-peer (P2P) был использован в 1984 компанией IBM при разработке сетевой архитектуры для динамической маршрутизации трафика через компьютерные сети с произвольной топологией (Advanced Peer to Peer Networking).


2.3. Частично децентрализованные (гибридные) сети

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

3. Обзор популярных сетей

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

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

По некоторым данным, на 2008 в Интернете более половины всего трафика приходилось на трафик файлообменных P2P-сетей, а размеры самых крупных из них перевалили за отметку в 1 млн одновременно работающих узлов, разделяющих петабайт (1015 байт) информации. Общее количество зарегистрированных участников файлообменных сетей P2P во всем мире составляет около 100 млн.

Сеть P2P - это множество узлов ( компьютеров, смартфонов и т.п.), которые объединены в единую систему и взаимодействующих посредством протокола P2P, который обеспечивает возможность создания и функционирования сети равноправных узлов.

Среди файлообменных сетей по количеству узлов лидируют такие сети, как Bittorrent, eDonkey2000, Gnutella2, Gnutella.


3.1. Bittorrent

С целью инициализации узла в сети Bittorrent клиентская программа обращается к серверу (tracker), предоставляющему информацию о файлах, доступных для копирования, а также статистическую и маршрутную информацию об узлах сети. Сервер и после инициализации помогает узлам взаимодействовать друг с другом, хотя последние версии клиентских программ требуют наличия серверов только на стадии инициализации.

Если узел "хочет" опубликовать файл, то программа разделяет этот файл на части и создает файл метаданных (torrent file) с информацией о частях файла, расположение их и - опционально - сервера, который будет поддерживать распространение этого файла. Первый узел, опубликовавший фото, называется распространителем (seedеr). Узел, желающий скопировать файл, при копировании сам становится распространителем по принципу: сколько копирую я, столько разрешаю скопировать с меня.

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

В сети BitTorrent используются протоколы Bittorrent и BitTorrent Azureus DHT. Последний основан на модифицированном протоколе Kademlia и используется для обеспечения работы с файлами метаданных, не привязанными к серверам, для децентрализованного поиска ресурса по ID и присваивания ресурсам комментариев и рейтинга. Вместо BitTorrent Azureus DHT некоторые клиенты поддерживают аналогичный ему по функциональности протокол BitTorrent Mainline DHT.

Распространенные клиентские программы - это Azureus, BitTorrent_client, μTorrent, BitSpirit, BitComet, BitTornado, MLDonkey.


3.2. Gnutella, Gnutella2

Gnutella - одна из первых пиринговых сетей, создана в 2000 году. Она функционирует до сих пор, хотя из-за серьезных недостатков алгоритма пользователи в настоящее время считают лучшую сеть Gnutella2.

При подключении клиент получает от узла, с которым ему удалось соединиться, список из пяти активных узлов, им посылается запрос на поиск ресурса по ключевому слову. Узлы ищут у себя на запрос ресурсы и, если не находят их, пересылают запрос активным узлам вверх по "дереву" (топология сети имеет структуру графа типа "дерево"), пока не найдется ресурс или не будет превышено максимальное число шагов. Такой поиск называется размножением запросов (query flooding).

Подобная реализация ведет к экспоненциальному росту числа запросов и соответственно на верхних уровнях ?дерева? может привести к отказу в обслуживании. Чтобы избежать подобной ситуации разработчики усовершенствовали алгоритм, ввели правила, согласно которым запросы могут пересылать вверх по "дереву" только определенные узлы - так называемые выделенные (ultrapeers), другие узлы (leaves) могут лишь запрашивать последние. Была введена система кэширования узлов.

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

Недостатки протокола Gnutella инициировали разработку принципиально новых алгоритмов поиска маршрутов и ресурсов и привели к созданию группы протоколов DHT (Distributed Hash Tables) - в частности, протокола Kademlia, который сейчас широко используется в крупнейших сетях.

Запросы в сети Gnutella пересылаются по TCP или UDP, копирование файлов осуществляется через протокол HTTP. В последнее время появились расширения для клиентских программ, позволяющие копировать файлы по UDP, делать XML -запросы метаинформации о файлах.

В 2003 был создан принципиально новый протокол Gnutella2 и первые клиенты для этого протокола которые одновременно были совместимы с клиентами Gnutella. Согласно ему некоторые узлы становятся концентраторами, остальные являются обычными узлами (leaves).

Каждый обычный узел имеет соединение с одним-двумя концентраторами. А концентратор связан с сотнями обычных узлов и десятками других концентраторов. Каждый узел периодически пересылает концентратору список идентификаторов ключевых слов, по которым можно найти ресурсы, публикуемые данным узлом. Идентификаторы сохраняются в общей таблице на концентраторе.

Когда узел "хочет" найти ресурс, он посылает запрос по ключевому слову своему концентратору, последний либо находит ресурс в своей таблице и возвращает ID узла, обладающего ресурсом, либо возвращает список других концентраторов, которые узел вновь запрашивает по очереди случайным образом. Такой поиск называется поиском с помощью метода блужданий (random walk).

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

Распространенные клиентские программы для Gnutella и Gnutella2: Shareaza, Kiwi, Alpha, Morpheus, Gnucleus, Adagio Pocket G2 (Windows Pocket PC), FileScope, iMesh, MLDonkey.


3.3. EDonkey2000

Сеть EDonkey2000 появилась в 2000 году. Информация о наличии файлов в ней публикуется клиентом на многочисленных серверах в виде ed2k-ссылок, использующих уникальный ID ресурса.

Программное обеспечение доступно для установки любым пользователем. Сервер обеспечивает поиск узлов и информации.

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

Когда клиент сети EDonkey2000 копирует желаемый ресурс, он делает это одновременно из нескольких источников с помощью протокола MFTP (Multisource File Transfer Protocol).

Сейчас информацию о доступных файлах можно получать не только с серверов EDonkey. В 2004 в состав сети EDonkey2000 была интегрирована сеть Overnet - полностью децентрализованная сеть, позволяющая осуществлять взаимодействие между узлами без привязки к серверам, для чего используется DHT-протокол Kademlia.

Распространенной для сети EDonkey2000 клиентской программой с закрытым кодом (версия Pro - платная) является программа eDonkey, однако существует и клиент с открытым программным кодом - eMule, который, кроме сети EDonkey2000, может ввести в действие еще одну сеть P2P - Kad Network (Kademlia) . Клиент eDonkey имеет очень интересное расширение, позволяющее копировать метафайлы. Torrent, которые пользуются большим доверием пользователей, а также применять верификационных информацию по этим метафайлов для работы с файлами собственной сети. При этом если инициализировать загрузку файла, соответствующего метафайла, части файла, доступные в собственной сети EDonkey2000, тоже включаются в список источников для загрузки.

Такая интеграция возможностей разных сетей и дополнительная верификация способствовали развитию сети EDonkey2000. На нее начали переходить пользователи других сетей - например, сети FastTreсk, базирующейся на протоколе FastTreсk, который реализуется, в частности, таким популярным клиентом, как Kazaa.


3.4. Direct Connect

Одной из самых популярных в Украине и России файлообменных сетей является Direct Connect. В этой сети клиенты подключаются к одному или нескольким серверам для поиска файлов, причем серверы не связаны между собой. Информация о файлах, доступ к которым узел "хочет" открыть, отсылается на сервер. Копирование файлов происходит напрямую между узлами, как и в классической P2P-сети.

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