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

Одна из областей применения технологии пиринговых сетей -- это обмен файлами. Выглядит это так: пользователи сети выкладывают какие-либо файлы в «расшаренную» (англ. share, делиться) папку, т. е. папку, файлы из которой доступны для скачивания другим клиентам. Какой-нибудь другой пользователь сети посылает запрос на поиск какого-либо файла. Программа ищет у клиентов сети файлы, соответствующие запросу, и показывает результат. После этого пользователь может скачать файлы у найденных источников. Современные файлообменные сети позволяют скачивать один файл сразу с нескольких источников (так быстрее и надёжнее). Чтобы убедиться, что этот файл у всех источников одинаковый, производится сравнение не только по названию файла, но и по контрольным суммам или хэшам типа MD4, TTH, SHA-1. Во время скачивания файла пользователем (и после его окончания) этот файл у него могут скачивать и другие клиенты сети, в результате чего особенно популярные файлы могут в итоге быть доступными для скачивания с сотен источников одновременно.

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

В феврале 2006 прекратил работу самый популярный сервер сети eDonkey -- Razorback, а затем прекращена разработка непопулярного коммерческого клиента EDonkey2000. Сама сеть EDonkey2000 продолжает функционировать, т. к. не завязана на конкретные сервера и существует большое количество свободно распространяемых клиентских программ.

Известные децентрализованные и гибридные сети

  • 1) ED2K она-же eDonkey2000 -- сеть централизованного типа, крупнейшая из ныне существующих файлообменных сетей. Поиск выполняют специализированные серверы, связанные между собой. Клиенты самостоятельно обмениваются по протоколу MFTP. Компания MetaMachine разработчики исходной концепции и первого клиента основанного на веб-интерфейсе (Edonkey 2000 v1.4.5)в 2005 году прекратили поддержку этого проекта, однако сеть продолжает функционировать за счет более совершенного и более мощного клиента eMule, который использует механизмы Kademlia для построения децентрализованного сегмента eD2k .
  • 2) Overnet, Kad -- децентрализованные технологии на базе протокола Kademlia, обслуживающие поиск по сети eDonkey2000 (eD2k).
  • 3) BitTorrent -- технология распределённого распространения файлов, как правило, большого объёма. Отличается высокой скоростью и централизованностью. Некоторые BitTorrent клиенты поддерживают DHT и могут работать без центрального сервера (т. н. трекера).
  • 4) Direct Connect -- представляет из себя слабо связанные между собой выделенные сервера для поиска (хабы). Хабы Direct Connect очень удобны для организации файлового обмена в локальных сетях.
  • 5) FastTrack, iMesh -- первоначально была реализована в KaZaA…
  • 6) OpenFT -- открытое продолжение сети FastTrack. Поддерживается клиентами giFT (KCeasy), mlDonkey.
  • 7) Gnutella -- полностью децентрализованная сеть, использующая протокол, разработанный компанией Nullsoft, основанный на HTTP-загрузках. Самоорганизация сети происходит за счет автоматического взаимообмена данными нод-листа между соединенными клиентами. Клиенты: Shareaza , BearShare , LimeWire , Gnucleus, Phex .
  • 8) Gnutella2 -- расширение протокола Gnutella. Основные изменения коснулись только организации системы поиска файлов. Так удалось снизить общую нагрузку на сеть применяя адресную рассылку запросов только тем клиентам у которых находится искомый файл. Также была исключена проблема с ложной инициацией атаки типа UDP-flood . Во всем остальном сеть полностью аналогична Gnutella1 . Основной клиент Shareaza .
  • 9) Ares -- файлообменная сеть для любых файлов.
  • 10) Soulseek -- проприетарный протокол. Весь поиск происходит через центральный сервер, на котором есть бесплатная регистрация и платная подписка (официальный сайт). Клиенты: Soulseek, mlDonkey, SolarSeek.
  • 11) Freenet, GNUnet, Entropy -- анонимные и устойчивые к цензуре файлообменные сети.
  • 12) MP2P (Manolito P2P) -- поддерживается клиентами Blubster, Piolet, RockItNet.
  • 13) NEOnet -- частично-децентрализованая коммерческая сеть на условно-платной основе. Является специфической вспомогательной модификацией протокола DHT при работе в отделенном коммерческом сегменте сети Gnutella1 , поддерживаемом с помощью клиента Morpheus . Свойства криптографической защиты и сетевой анонимности в сети NeoNet не поддерживаются.
  • 14) easy P2P
  • 15) Tesla -- Возможно, содержит MalWare.
  • 16) Filetopia -- потенциально безопасная сеть для обмена самым разным контентом.
  • 17) MUTE -- Клиенты: MFC Mute, Napshare.
  • 18) Nodezilla -- анонимная файлообменная сеть.
  • 19) Peer2Mail -- принципиально это даже не пиринговая сеть, а разновидность ПО позволяющего передавать файлы между двумя хостами (peer-to-peer), используя почтовые сервисы в качестве роутера. Технология передачи файлов основана на инкапсуляции в SMTP-протокол.
  • 20) Ants p2p -- открытая P2P-сеть 3-го поколения повышенной безопасности. Java-клиент.
  • 21) Anthill
  • 22) Rodi -- поддерживает поиск по содержанию файлов. Java-клиент.
  • 23) AppleJuice -- частично децентрализованная сеть (как eDonkey).
  • 24) BeShare -- сеть, ориентированная на BeOS.
  • 25) Jabber -- открытая P2P-технология обмена сообщениями.
  • 26) Skype -- P2P-телефония.
  • 27) JXTA -- стандартизация P2P спецификаций и протоколов http://www.jxta.org
  • 28) KDrive -- глобальный виртуальный диск для обмена файлами с авторизацией и шифрованием.
  • 29) ProxyShare -- новая высокоскоростная сеть с большимми возможностями.
  • 30) ZEPP
  • 31) Acquisition -- сеть и клиент для Mac.
  • 32) RShare -- анонимная открытая P2P-сеть.
  • 33) Marabunta -- альтернативная пиринговая система ориентированная исключительно на предоставление услуг обмена мгновенными сообщениями на общей доске объявлений (P2P-chat) . Программа в основном рассчитана на применение в локальных сетях, и потому не содержит возможностей автообновления нод-листа (его приходится пополнять вручную) . При наличии постоянных IP-адресов реципиентов, может работать и в интернете, однако встроенная функция bootstrap с серверов разработчиков не работоспособна из-за того, что с 2006 года проект практически перестал развиваться. Свойства криптографической защиты и сетевой анонимности в программе не реализованы.
  • 34) SKad или OpenKAD - модификация протокола Kademlia . Полностью децентрализованые сети этого типа создавались преимущественно в Японии. Первым шагом в этом направлении стала программа Winny . Дальнейше развитие этой сети в сторону сетевой анонимности привело к появлению программы Share . И на сегодняшний день существует и третья версия под управлением программы Perfect Dark .
  • 35) К сожалению все три версии сети SKad развивались паралельно и хотя они имеют много общего, но из-за видоизменения процедуры кодирования нод-листа в сторону более жесткого шифрования, они не совместимы между собой. Таким образом все три программы образовали три идентичные сети с разными степенями защищенности.
  • 36) Usenet -- старая добрая глобальная доска объявлений;)
  • 37) Chord
  • 38) Pastry
  • 39) Tapestry или Chimera
  • 40) Groove Virtual Office -- Собственническое ПО от Microsoft.
  • 41) P-Grid -- самоорганизующаяся децентрализованная сеть.
  • 42) P2PTV -- сеть телевизионных каналов.
  • 43) KoffeePhoto -- сеть для обмена фотографиями.

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

Файлообменные сети могут состоять из определенных типов организации, вот некоторые из них:

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

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

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

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

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

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

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

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

Файлообменники могут работать по определенному принципу, некоторые из которых представлены ниже:

  • программа скачивается пользователем на его компьютер;
  • при помощи программы, пользователь открывает другим пользователям доступ к своим ресурсам (процесс часто называют расшариванием);

Данные пункты совершают тысячи пользователей по всему миру. Затем следует приступить к выполнению третьего этапа:

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

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

DC++, eMule , а также самые разнообразные BitTorrent-программы (Azureus, BitComet, µTorrent), FrostWire, LimeWire .

BitTorrent-клиенты в данный момент являются самыми популярными, так как ежедневно их используют миллионы пользователей.

Посредством Интернета можно без труда найти людей со схожими интересами и увлечениями. Если круг онлайн-общения ограничивается несколькими людьми, то обмениваться информацией с ними довольно просто. Это можно делать и по почте, и посредством служб мгновенных сообщений. Но что делать, если нужно постоянно держать связь с десятками, а то и сотнями близких вам по духу людей? Как сообщить им всем, что у вас есть фотографии с последнего концерта Ричи Блэкмора, список билетов на экзамен или последняя версия бесплатного твикера? Не задавать же один и тот же вопрос каждому и ждать, когда вам ответят. Самый лучший способ решения этой проблемы - пиринговые сети (peer-to-peer networks, или "сети с равноправными участниками"). Группа людей, находящихся в такой сети, получает равные права доступа к имеющейся в ней информации, то есть каждый компьютер может быть как клиентом, так и сервером. Каждый из участников такой сети открывает доступ к определенным файлам на своем жестком диске, после чего они заносятся в базу данных и становятся доступными для загрузки всеми пользователями сети. Обмен файлами осуществляется посредством программы, которая называется пиринговым клиентом. Существует множество peer-to-peer-сетей, а клиентов для работы в них еще больше, ведь для одной сети может существовать несколько программ.

Название этого клиента расшифровывается как Direct Connect, то есть прямое соединение от одного пользователя к другому минуя сервер. Процесс подключения к сети DC++ () максимально упрощен: требуется ввести свой ник, почтовый адрес (можно несуществующий) и указать скорость интернет-соединения. В поле Description можно указать любую информацию о себе: интересы, географическое положение - одним словом, все то, что сочтете нужным.

Хабы обычно разбиты по темам: музыка, фильмы, комиксы, игры и т.д. У каждого хаба имеется свой администратор, который устанавливает правила его использования и минимальный объем открытых ресурсов, имея который, можно зайти в систему. Во многих хабах смотрят не только на то, сколькими файлами вы делитесь, но и на то, соответствуют ли они теме хаба. Если вы зашли в хаб, посвященный играм, а открыли доступ к папке Windows, могут и выбросить из системы. Использование хабов имеет и свои преимущества: в такие сообщества могут объединяться участники сети, проживающие в одном регионе. Многие провайдеры взимают гораздо меньшую плату за трафик внутри региона или страны, чем за зарубежный, а в некоторых пакетах внутренний входящий трафик и вовсе бесплатный. Таким образом, можно здорово экономить, загружая все необходимые файлы у пользователей, которые проживают в вашем регионе.

Soulseek

Эта программа ориентирована, прежде всего, на музыкальные файлы. Это не означает, что она не дает возможности загружать и делиться файлами других типов. Однако интересующий вас аудиофайл вы найдете тут с большей вероятностью, чем, скажем, игру или фотографию. Делиться своими ресурсами в Soulseek (сайт) не обязательно, но, как и во всех программах подобного плана, желательно. Дело в том, что, когда вы начинаете загрузку файла у кого-то из пользователей, он видит, кто и что у него качает. И вполне возможно, что он захочет посмотреть, а что же интересного есть у вас. Не обнаружив ни одного открытого ресурса, он может обидеться и занести вас в Ban List, т.е. в список пользователей, которые больше никогда у него ничего не смогут скачать. В программе очень удобно реализованы настройки соединения. Управлять скоростью загрузки можно прямо в окне передачи/приема файлов. Тут же можно определить максимальное количество участников сети, которым можно одновременно передавать файл, а также количество Extra-пользователей. Последние - это те из участников системы, которым не нужно стоять в общей очереди, чтобы получить от вас заветный файл. Вносить пользователей в экстра-список можете только вы сами. Вот так и получается, что все пользователи равны, но некоторые "равнее" других.

Soulseek позволяет обмениваться не только файлами, но и сообщениями. Для этого существует чат, в котором открыто множество комнат по музыкальным интересам. Есть и комнаты для русскоязычных пользователей - например, RUSSIA. Русский язык поддерживается. Одна из самых интересных особенностей Soulseek - возможность заносить поисковые запросы в Wish List. Работает эта опция так: если вы ничего не нашли по заданному запросу, то можете занести его в этот список пожеланий. Через определенные промежутки времени Soulseek сама будет производить поиск среди файлов появляющихся в сети пользователей. Если вдруг файл найдется, программа тут же сообщит вам об этом.

Этот клиент является улучшенной версией программы eDonkey, которая, в свою очередь, является первоначальным клиентом одноименной пиринговой сети. За несколько лет своего существования сеть eDonkey стала невероятно популярной во всем мире. Клиент eDonkey не был рассчитан на такое количество участников, что стало причиной ухудшения его работы - медленной загрузки файлов, появления ошибок и т.д.

Одна из первых пиринговых сетей, создана в 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

Илья Евсеев (С.-Петербург)

Файлообменные сети (Peering networks, peer-to-peer, P2P) уменьшают нагрузку на существующие серверы FTP и HTTP и ведущие к ним каналы, распределяя ее между всеми участниками сети. Они используют собственный набор протоколов и ПО, несовместимый с FTP/HTTP и обладающий важными особенностями.

Чем файлообменная сеть отличается от FTP и HTTP?

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

Второе отличие заключается в роли сервера: FTP- и HTTP-серверы просто хранят и передают данные клиентам. В файлообменной сети задача сервера (если его наличие вообще предусматривается конкретным протоколом) сводится не только и не столько к хранению и передаче данных, сколько к координации клиентов:

* какой IP-адрес какому клиенту принадлежит;

* у какого клиента какие файлы имеются;

* какие фрагменты каких файлов где находятся;

* кто сколько скачал себе;

* кто сколько дал скачать от себя другим.

Таким образом, в файлообменной сети присутствуют программы не двух, а трех типов:

— клиент-водовоз, который и скачивает, и отдает;

— сервер-координатор (отдает также файлы клиентам, которые обращаются за ними первыми).

При этом в одной программе может быть совмещено несколько функций.

Как работает типичная файлообменная сеть?

* Сервер, отдавая клиенту файл, запоминает IP-адрес клиента и имя файла;

* Если клиент запрашивает у сервера файл, уже имеющийся у других клиентов, сервер указывает ему IP-адреса этих клиентов;

* Клиенты информируют сервер обо всех клиентах, которые к ним подключаются, и файлах, которые те за-прашивают;

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

Даже если ваша любительская сеть или клиентская сеть Интернет-провайдера закрыты для внешнего доступа, пиринговые системы могут оказаться полезными для передачи данных внутри такой сети. Например, некто с безлимитным тарифом скачивает из Интернета нечто громоздкое, затем остальные абоненты скачивают данные от него (и друг от друга!) через P2P.

Достоинства файлообменной сети

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

* Принимающий узел получает возможность формировать очереди закачки c отдающих узлов пропорционально скоростям приема — чем быстрее связь, тем больше блоков будет скачано с узла;

* Если один из отдающих узлов выключается, это не приводит к срыву закачки в целом;

* У каждого из отдающих узлов нагрузка на сеть снижается тем сильнее, чем их больше;

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

Peer-to-peer, клиент-сервер и метаданные

Поскольку клиенты и принимают, и отдают, файообменные сети принято относить к одноранговым сетям, или сетям типа peer-to-peer (равный к равному, P2P). В чем отличие от архитектуры «клиент-сервер», по которой выполнены протоколы FTP и HTTP?

В сети типа «клиент-сервер» сервер — это компьютер, занимающийся непосредственно хранением и/или обработкой полезных данных: файлов, баз данных и т. д.

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

Например, контроллер домена в сети Microsoft Windows централизованно хранит списки пользователей, а рабочие станции могут напрямую обмениваться друг с другом файлами через сетевые папки (shared folders), которые каждая может как отдавать («расшаривать») в общий доступ, так и подключать из сети; при этом как в правах доступа к папкам, так и в запросах на подключение фигурируют имена пользователей, хранимые и проверяемые контроллером домена.

Служебные данные для обслуживания полезных данных принято обозначать термином «метаданные». Пример: содержимое файла является полезными данными, а его имя, координаты на диске, права доступа, время создания и т. д. — это метаданные. Еще пример: Веб-страницы на HTTP-сервере — это полезные данные, а запись соответствия имени (или имен) HTTP-сервера его IP-адресу (или IP-адресам), хранимая на DNS-сервере, это метаданные, необходимые для координации доступа к веб-страницам.

Капитализм против популизма

Заклятыми врагами файлообменных сетей являются производители любой информации, предназначенной для массовой продажи — музыки, фильмов, книг и ПО, так как пользователи P2P-сети получают возможность бесконтрольно обмениваться всем этим друг с другом, минуя официальных продавцов. Более того, большинство P2P-сетей создано в первую очередь именно для этих целей!

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

* протокол обмена предусматривает наличие координирующего сервера;

* разработчик протокола либо не распространяет программу-сервер вообще, либо распространяет только за деньги.

В таком случае объектом судебной атаки становятся владельцы серверов, а без них тихо умирает и вся сеть. Во всех остальных случаях сеть просто не имеет фиксированных точек, ударами по которым ее можно парализовать. Поэтому пользователи сравнительно более примитивного однорангового протокола Gnutella могут не опасаться неприятностей, а более совершенный Napster, основатель одноименной файлообменной сети и фактически первооткрыватель идеи для массового потребителя, был в итоге засужен Американской Ассоциацией производителей звукозаписей (RIAA). Хронология этих событий увлекательно описана на сайте Грани.ру.

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

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

* ключи регистрации для программы-клиента;

* право подключения к серверу-координатору на определенный период или на количество раз;

Нынешний Napster вместе со сменой владельцев изменил и правила работы:

* ПО переписано практически полностью;

* доступ к серверу возможен только по подписке;

* количество файлов, загружаемых клиентом за месяц, ограничено;

* пересылка того или иного файла может быть заблокирована по заявлению обладателя прав на оригинал;

* обладатели прав на передаваемые по сети данные получают за это лицензионные отчисления от Napster.

Экскурс в историю

Первый этап: братство сети

Первоначально количество компьютеров было невелико, все они были дорогими и многопользовательскими. Терминальные устройства, за которыми работали пользователи, представляли собой симбиоз пишущей машинки, телевизора и программируемого микрокалькулятора, их единственная задача — предоставлять интерфейс для обращения к главному компьютеру. Поэтому с появлением локальных сетей вопрос о предоставлении доступа к ресурсам другого компьютера не возникал — такой доступ был всего лишь развитием уже существующего доступа через терминал. Свою роль играло и то, что значительная часть компьютерного парка находилась в ведении университетов с их весьма демократичной атмосферой. Это формировало слабую дисциплину разработки программ-сервисов и их обслуживания. Каждый компьютер был настроен на обслуживание любого желающего в гостевом или транзитном режиме, если это позволял соответствующий протокол. Например, почтовый сервер Санкт-Петербургского Центра суперкомпьютерных приложений вплоть до осени 1998 года работал в режиме open relay, то есть соглашался пересылать по назначению почту, поступающую от любых внешних клиентов — прекрасный способ забросать Сеть рекламой и остаться незамеченным.

К тому же первые DNS-серверы, в отличие от нынешнего иерархического режима (сбор и рассылка обновлений осуществляются по цепочке «клиент — провайдер — корневой сервер имен»), обменивались данными напрямую. Хотя такая схема открывала богатые возможности для подтасовок, отказались от нее не из-за проблем с безопасностью, а из-за той перегрузки сети, к которой она приводила. Можно сказать, что первоначально Интернет представлял собой одноранговую сеть, и ее техническое несовершенство с учетом малых на тот момент размеров и низкого профессионализма пользователей было некритично.

Второй этап: IBM PC наносит ответный удар

Бум Интернета стал следствием бума персональных компьютеров. Четкое деление «клиент-сервер», которое существует в Интернете с момента его массового распространения и по сей день, обусловлено следующими свойствами ПК:

* ограниченность аппаратных ресурсов;

* недостаток серверного ПО;

* отсутствие полноценной многозадачности, мешающее запускать сетевые сервисы в фоновом режиме;

* повременная оплата соединения с Интернетом через модем;

* постоянная смена IP-адреса, зависящая от выбора провайдера, телефонного номера и номера линии в многоканальном соединении;

* дефицит IP-адресов и беззащитность клиентских компьютеров перед атаками из сети заставляла владельцев сетей «прятать» их от доступа извне за прокси-сервер, сетевой фильтр (firewall) и транслятор сетевых адресов (NAT).

Вследствие этих причин персоналка до поры до времени могла быть в сети только клиентом.

Третий этап: возвращение джедая

К моменту появления первой получившей всеобщее признание файлообменной сети Napster положение дел на рынке ПК было следующим:

* персональные компьютеры стали достаточно мощными;

* настольные операционные системы стали многозадачными;

* программы для организации сервера доступны для всех основных ОС;

* на смену коммутируемым подключениям пришли выделенные, в которых и время на линии, и исходящий трафик бесплатны;

* постоянные подключения позволили делать IP-адрес клиента неизменным;

предстоящее внедрение нового протокола IPv6, в котором под адрес компьютера отводится 128 бит (вместо 32 бит в нынешнем IPv4), позволит провайдерам выдавать клиентам глобально видимые IP-адреса без ограничений;

* появились персональные средства защиты (антивирусные мониторы и сетевые фильтры), способные предохранить ПК от заражений и сетевых атак.

Средний компьютер снова дорос до того, чтобы быть сервером. Но теперь такой сервер имеется в каждой квартире.

Идентификация файлов

Собственно получению файла предшествуют два действия, поддержке которых в FTP/HTTP достаточного внимания не уделено:

* пользователь выбирает файл на сервере;

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

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

имя, размер, время создания и прочие метаданные, предоставляемые файловой системой;

сведения из файлов-описателей, расположенных в том же каталоге (FILE_ID.DIZ, README*, *.LSM, FILES.BBS, DESCRIPT.ION и т. д.);

начальная часть текста, если файл хранит текст (DOC, PDF и т. д.);

содержимое комментариев, если таковые предусмотрены в формате файла (DOC, MP3, EXE, ISO, RPM, ZIP, RAR и т. д.);

Что является надежным идентификатором для файла? Во-первых, GUID, глобально-уникальный идентификатор, автоматически генерируемый и назначаемый файлу в момент публикации. Во-вторых, контрольная сумма, вычисляемая по содержимому файла. Даже если файл будет опубликован независимо несколькими узлами, с разными GUID, по контрольной сумме все равно можно будет понять, что это один и тот же файл. Хотя вычисление контрольных сумм занимает много времени, многие P2P-программы определяют их в фоновом режиме.

Подробнее о GUID

Привычный способ указания программы, которую мы хотим запустить, — указание ее имени в файловой системе, например: C:WinNTSystem32cmd.exe или \servergamestetristet.exe. Протокол HTTP позволяет запускать программы на выполнение другим компьютером удаленно (remote). Например, команда http://www.mail.ru/cgi-bin/auth запустит на сервере Mail.ru утилиту авторизации и выведет на ваш экран веб-страницу, сгенерированную этой утилитой, присланную вам для заполнения и обратной отправки. При повторном запуске утилиты авторизации на Mail.ru произойдет проверка введенных вами данных и вывод веб-страницы с содержимым почтового ящика.

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

* 48-разрядный адрес сетевой карты;

* текущее время;

* случайный «довесок».

Об удобстве чтения и запоминания речь не идет, поскольку GUID никогда не приходится вводить вручную: программа-клиент всегда хранит фиксированный GUID программы-сервера, для взаимодействия с которой она разработана, а при разработке GUID назначается создаваемым компонентам если не автоматически, то через буфер обмена путем Cut’n’Paste.

Стоит подчеркнуть еще раз: GUID и IP-адрес компьютера — это разные вещи! GUID — это номер (если угодно, адрес) программы внутри компьютера, остающийся неизменным, на каком бы компьютере и в каком каталоге она не была инсталлирована, однако гарантированно не совпадающий с номером любой другой программы. Эти номера позволяют серверу различать разные программы, а клиенту — находить разные экземпляры одной программы на разных серверах. Теоретически алгоритм генерации, принятый сейчас в качестве стандартного, обещает отсутствие случайных совпадений приблизительно до 3400 года. Увы, как минимум одно такое совпадение уже было: вкладка свойств видеокарты S3 для Панели управления и один из компонентов переводчика Stylus имели одинаковые GUID.

Соответствие между GUID и именем файла программы, запускаемой по приходящим из сети запросам, хранится где-то в общесистемных настройках, куда заносится при инсталляции программы. Например, в Windows для этого используется ветка реестра HKEY_CLASSES_ROOT CLSID, а для регистрации в ней — утилита RegSvr32. GUID в Windows назначаются не только сетевым сервисам, но и вообще всему, что может быть запущено или загружено и нуждается в однозначной идентификации: DLL-библиотекам, классам и т. д.

Почему файлообменная сеть совершеннее HTTP/FTP?

P2P-сеть является полноценной распределенной системой, то есть:

* одни и те же данные резервируются на множестве узлов;

* список узлов формируется и обновляется автоматически;

* у клиента существует возможность так же автоматически выбирать узлы для получения данных;

* при выходе из строя части узлов система остается работоспособной.

В то же время FTP/HTTP используют только ту информацию о файле, которая предоставляется им файловой системой, на которой файл расположен: имя, размер, дата создания и последнего доступа — никакие из этих метаданных не уникальны.

Такая же проблема существует не только на сетевом, но и на внутримашинном уровне: попытка разработчика приложения искать динамическую библиотеку (DLL) в общесистемном каталоге по имени вполне может привести к тому, что будет по ошибке за-гружена библиотека с тем же именем, но установленная другим пакетом и хранящая другой набор подпрограмм (с другими или, еще хуже, совпадающими именами). Этой проблемы можно было бы избежать, будь у библиотек названия вида «фирма_продукт_компонент», но пока названия типа strutil, myutil или xbase можно встретить гораздо чаще. Поэтому в протоколах передачи управления и данных через сеть, альтернативных HTTP с надстройкой в виде CGI-BIN, таких, как CORBA и Microsoft DCOM, вызов серверного компонента осуществляется не по имени файла, а по GUID. GUID представляет собой 128-разрядное двоичное число, сгенерированное автоматическим образом на компьютере разработчика из следующих компонентов:

По этой причине ни базовый FTP, ни базовый HTTP распределенными системами не являются. Один и тот же файл или веб-страница могут иметь на разных узлах разное имя. И наоборот, разные файлы и страницы на разных узлах могут называться одинаково. У клиента нет надежного способа определить, на каких узлах находятся требуемые данные. И, как уже говорилось, FTP/HTTP-клиенты по мере получения данных не становятся их распространителями и не разгружают от запросов оригинальный сервер.

Самолет = автомобиль + крылья

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

* на каждом клиенте в фоновом режиме запускается FTP/HTTP-сервер, чтобы отдавать файлы другим клиентам;

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

* вместе с файлами скачиваются их описатели;

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

* перед началом закачки клиенты загружают с поисковых серверов базу со сведениями о файлах, сообщая серверам о своем существовании (посредством записей, остающихся в log-файле сервера, или специальными уведомлениями через CGI-BIN).

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

Аэропорт = самолеты + тягачи

Впрочем, одно применение протоколу HTTP в P2P-сетях все же нашлось. Дело в том, что встроенные возможности P2P-протоколов не позволяют составлять полную базу поиска файлов, не перегружая сеть (та же проблема, что и в ранних версиях DNS). Желательно наличие выделенных компьютеров, которые будут вести список известных P2P-серверов, просматривать их в качестве клиентов, дублировать у себя полученную информацию и предоставлять ее настоящим клиентам, не беря на себя координирующих функций. Такое предоставление сведений может осуществляться как через P2P-протокол, так и через обычный веб-интерфейс. Например, сайт www.filedonkey.com/ является веб-интерфейсом поисковой системы по серверам EDonkey2000. Точно так же, кстати, работает поисковая служба FileSearch.ru, но применительно к протоколу FTP: в качестве FTP-клиента обшаривает сеть, сохраняет у себя метаданные файлов и обслуживает запросы пользователей через веб-интерфейс с CGI-сценариями. Некоторые универсальные поисковые системы, например, FileWatcher, в дополнение к поиску по FTP ввели у себя поиск по P2P.

Советы и вопросы на будущее

Услышав термин, в первую очередь постарайтесь понять, названием чего он служит: протокола или программы. Один и тот же протокол может поддерживаться несколькими программами. Например, HTTP-протокол поддерживается серверами Apache и MS IIS, а также клиентами Mozilla, Internet Explorer, Opera и т. д.; P2P-протокол под названием EDonkey2000 поддерживается одноименной программой, а также программами eMule, Shareaza и т. д.

В то же время одна программа может поддерживать несколько протоколов. Например, большинство веб-клиентов (веб-браузеров) поддерживает протоколы HTTP и FTP, а P2P-клиент Shareaza поддерживает P2P-протоколы EDonkey2000, BitTorrent и Gnutella2.

Если речь идет о протоколе, то поинтересуйтесь следующими аспектами:

* Требуется ли отдельный сервер-координатор?

* Какие программы-клиенты его поддерживают?

* Насколько широко клиенты и серверы данного протокола распространены в Интернете?

* Для передачи какой информации (мультимедиа, ISO-образы и т. д.) в первую очередь разрабатывался протокол и поддерживающие его программы?

* Развитием какого протокола является данный протокол и в какой мере они совместимы?

* Существует ли открытое описание либо лицензирование протокола (следствием чего будет более широкий выбор программ)?

* Если протокол закрыт и требуется отдельная программа-сервер, то можно ли подключаться к узлам-серверам бесплатно? Можно ли ее скачать для использования в приватной сети?

Применительно к программе важны ответы на следующие вопросы:

* Какие протоколы она поддерживает?

* Насколько она бесплатна (shareware, adware, open source)?

* На какие платформы она перенесена (Windows, Linux)?

Ответам на эти вопросы по отношению к наиболее популярным протоколам и программам P2P будет посвящена следующая часть статьи.