root.elima.ru
Мертвечина
Статьи и книгиИнтернет-технологии и сетевое программирование

Пиринговые сети

Образ мышления большинства россиян таков, что даже если они в состоянии заплатить и купить легальную копию программы, они будут упорно искать лазить по хакерским сайтам для недобросовестного приобретения данного программного продукта.
Но отойти от этого способа поиска халявы лично меня побудило посещения одного такого ресурса, где в окошке с кнопочкой «download crack» была просьба, которая в вольном переводе звучит следующим образом: «если крак, который вы сейчас закачиваете, работает как надо – напишите нам об этом».
Последнее время большое распространение получили так называемые пиринговые сети, то есть сети, основанные на технологии P2P (peer-to-peer). Взлом shareware софта – отнюдь не единственное предназначение таких сетей: что делать обычному рядовому российскому сетянину, которому хочется слушать музыку, а денег нет на платные mp3 архивы? Проблема усугубляется взаимоотношениями некоторых провайдеров, из-за чего – delit.net, один из самых популярных бесплатных mp3-архивов, стал недоступен.
Последнее время все большее число гигантов ИТ-мира стали обращать внимание на эту технологию. Например – компания Sun, объявившая о том, что в новый протокол Jxta («Джакста») будет добавлена поддержка карманных компьютеров и мобильных телефонов, что позволит мобильным устройствам получать доступ к данным и обмениваться информацией в P2P-сетях.

Немного истории

7 лет назад, в 1996 г., израильские программисты изобрели программу межпользовательского онлайнового общения ICQ, а уже сегодня не встретишь ни дного пользователя сети, который не слышал бы о ней; номер «Аськи» стали указывать наряду с e-mail.

Спустя три года после изобретения этой программы в сети появился сервис под названием Napster, который сделал обмен «mp3-шками» в Internet настолько же простым и удобным, как чат в ICQ.

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

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

Большинство компьютерных сетей построены по принципу «клиент-сервер».

Связь между двумя клиентами сети происходит посредством сервера, что предъявляет значительные требования к его ресурсам. К тому же стабильность сети целиком зависит от центрального сервера: нет его – нет и сети. Но есть и положительные моменты: вся информация хранится на центральном сервере и ее достоверность и «свежесть» можно легко контролировать.

Но время не стоит на месте: локальные сети объединяют друг с другом и происходит уже что-то более глобальное, пример тому – Интернет. Наиболее значимым преимуществом данной топологии является масштабируемость, которую прекрасно продемонстрировал DNS: за последние пятнадцать лет число обслуживаемых этим сервисом узлов возросло с нескольких тысяч до сотен миллионов, и хотя сбои время от времени случаются, носят они локальный и, как правило, временный характер. Так что система демонстрирует завидную надежность, особенно по сравнению с предыдущим примером, но информация в такой сети не отличается абсолютной точностью – для ее обновления необходимо обновлять не только центральный сервер.

Возникает логичный вопрос: а если вообще убрать сервер и соединять клиентов напрямую? Это и попытались реализовать в технологии «P2P».

Четкого определения, что же такое P2P, нет. Поэтому приведу два наиболее распространенных. P2P (peer-to-peer) – это технология построения распределенной сети, где каждый узел может одновременно выступать как в роли клиента (получателя информации), так и в роли сервера (поставщика информации). Как правило, сеть состоит из равноправных узлов, причем каждый из них взаимодействует лишь с некоторым подмножеством узлов сети, так как установление связи «каждый с каждым» невозможно из-за ограниченности ресурсов (как вычислительных, так и пропускных). При этом передача информации между узлами, не связанными в данный момент непосредственно, может осуществляться как по своеобразной эстафете – от узла к узлу, так и путем установления временной прямой связи. Все вопросы маршрутизации и авторизации сообщений, передаваемых по эстафете, лежат не на едином сервере, а на всех этих отдельных узлах. Такое определение также известно под названием Pure P2P.

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

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

  • Файловые обменные сети (file-sharing). В данном случае сети P2P выступают хорошей альтернативой FTP-архивам, которые уже давно перестали справляться с ростом информационного наполнения и числа потребителей. Несмотря на постоянный рост количественных характеристик файл-серверной архитектуры, P2P потенциально обладает целым рядом преимуществ: балансировкой нагрузки, более широкой полосой пропускания, высокой «живучестью» и широкими возможностями по публикации контента.
  • Распределенные вычислительные сети. Например, такие как SETI@HOME. Этот проект продемонстрировал громадный вычислительный потенциал для хорошо распараллеливаемых задач. В настоящий момент в нем принимают участие свыше трех миллионов пользователей, а общее число «процессоро-лет» перевалило за семьсот тысяч, и все это на абсолютно бесплатной основе, когда добровольцы не получают ничего кроме красочного скринсейвера и возможности общественного признания.
  • Службы сообщений (Instant-messaging). Думаю, что одни лишь имена наиболее популярных приложений данного класса – ICQ и AIM – говорят сами за себя.
  • Сети групповой работы (P2P Groupware). Подобные приложения пока мало распространены, но в их будущем сомневаться не приходится. Одними из самых перспективных считаются Groove Network – сеть, предоставляющая защищенное пространство для коммуникаций, и OpenCola – технология поиска информации и обмена ссылками на наиболее интересные источники, где в роли поискового сервера выступает не бездушная железка, а каждый из пользователей сети, что обещает гораздо более высокую релевантность (при ответственном подходе пользователей к процессу, конечно).

В этой статье мы остановимся только на файло-обменных, иначе говоря, пиринговых сетях.

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

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

Все «файлообменники» можно разделить на две большие категории:

  1. все операции в сети осуществляются непосредственно между программами-клиентами;
  2. работа программ связана с работой центрального сервера.

Представителей первой категории не так много, да и первая сеть, появившаяся на мировой арене была не такой, так что начнем со второй.

Ни дня без сервера не живут…

Napster

Официальный сайт: http://www.napster.com/.
Доступно для обмена: mp3.
Принцип работы: через центральный сервер.
Положение на данный момент: Сеть бездействует.

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

Механизм работы прост до безобразия:

  1. Пользователь загружает программу-клиент.
  2. Пользователь входит в сеть и регистрируется на сервере Napster, предоставляя информацию о себе (файлы в обменном фонде, ширина канала). Сервер регистрирует активного пользователя, внося список файлов в свою базу данных.
  3. Пользователь делает запрос на предмет интересующего его файла. Сервер производит поиск в своей базе, генерирует ответ (список IP-адресов узлов, имена и размеры файлов) и отправляет его пользователю.
  4. Пользователь выбирает, с какого узла загружать файл, соединяется напрямую с нужным узлом и загружает файл, используя протокол Napster.
  5. После загрузки он информирует сервер о результатах.

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

Программа-клиент на главном сервере отсутствует, вместо нее гордая надпись «under construction», так что привожу ссылку, кому интересно: самая первая программа от Шона Фена.

Kazaa

Официальный сайт: http://www.kazaa.com/.
Доступно для обмена: mp3, avi, mpg, asf, jpeg, gif, bmp, doc, rar, zip, exe и еще множество форматов.
Принцип работы: через центральный сервер.
Положение на данный момент: Сеть процветает и является самой большой из ныне действующих.

Неофициальное название сети – «коза рогатая».

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

Количество подключенных в сети никогда (по крайней мере, при мне) не опускалось ниже 500,000. Поэтому найти в ней можно все, что душе угодно.

Достоинств у нее множество:

  1. Работает со всеми форматами.
  2. Существует докачка.
  3. Умеет качать сразу у нескольких пользователей (у каждого свой кусочек).
  4. В списке найденных файлов отображается полная информация о файле: длина, битрейт, артист, название, размер экрана (для видео) и т. д.

Есть и недостатки:

  1. Количество результатов поиска ограничено цифрой «100».
  2. Иногда открывается реклама спонсора в браузере. Для этого на сайтах народных умельцев выложены «обработанные» версии программы (soft-teleport.com и supreme.rusc.ru). Кстати, на последнем сайте есть довольно интересный плагин для winamp'a.
  3. Недокаченные файлы имеют название kazaaXXXXXXXXX.dat, где XXXXXXX – это какой-то номер (дата + еще что-то). В результате этого, определить, какой это файл без изучения внутренностей тяжело.

eDonkey2000

Официальный сайт: http://www.edonkey2000.com/.
Доступно для обмена: все, что угодно.
Принцип работы: через центральные сервера.
Положение на данный момент: Сеть работает.

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

Я не случайно написал, что принцип работы данной сети основан не на «центральном сервере», а на «центральных серверах». Итак, разбор полетов: «Осел» сделан несколько по другому – полное отсутствие центрального сервера – все построено чуть ли не на ежеминутно появляющихся серверах. Свежий список серверов всегда можно найти здесь.

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

Кстати, существует русская страничка ослика – http://edonkey2000.boom.ru/, правда местами недоделанная, но все же описывающая последовательность действий при работе с данной программой. Там же есть клиенты, причем не только для «детищ Билла», но и для Linux и Mac OS.

У меня есть пара знакомых, которые от этого «осла» в полном восторге; по их словам в данной сети они «находили много чего такого, про что ни в какой «козе рогатой» (Kazaa) даже и не слыхивали».

iMesh

Официальный сайт: http://www.imesh.com/.
Доступно для обмена: mp3, avi, mpg, asf, jpeg, gif, bmp, rar, zip, exe и еще несколько.
Принцип работы: через центральный сервер.
Положение на данный момент: Сеть работает.

Эта сеть появилась через пару месяцев после «выхода в эфир» Napster'a. Впоследствии, ее популярность затмили такие монстры, как Kazaa, Morpheus. На данный момент производит впечатление слабо развитой, но неплохой сети. Народу в ней не больше 50000. Ищет и качает хуже.

Но сама программа-клиент довольно стабильная и не требует высокочастного «железа». На слабых машинах (<Pentium 100) и при низких скоростях (<28 kbit/s) работает лучше, чем Morpheus. К плюсам можно отнести: закачку сразу у нескольких человек, докачка, умение оценивать качество доступа к файлу. На каждый тип файлов в результатах поиска выдает свой отчет (например, для Audio: битрейт, размер и т. д.).

Далее перейдем ко второй категории сетей. Итак, встречайте:

Сети, не имеющие завязки на сервер

У них есть огромно достоинство перед всеми предыдущими, так как их вообще невозможно закрыть, даже если очень захотеть. Вот Napster, например, прикрыли очень просто – сервак из розетки выдернули и баста.

Кроме достоинств есть и свои недостатки. Если вы работаете в Интернете по dial-up'у, то при работе с такими сетями существует две рекомендации:

  1. Когда вы настроились на то, что сейчас пойдет закачка любимой песни – в тот самый момент у вас должно быть очень хорошее настроение и большое количество терпения, иначе вы рискуете разбить монитор.
  2. Убрать фотографию любимого дяди Билли со стены за монитором.

Если подытожить все вышесказанное, то это звучит коротко: тормоза. Причем очень большие.

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

Gnutella

Официальный сайт: gnutella.wego.com.
Доступно для обмена: mp3, avi, asf, mpg, jpeg, gif, bmp и все остальные.
Принцип работы: без центрального сервера.
Положение на данный момент: Сеть работает.

Это пример того, как работает чистая P2P сеть.

История ее появления очень забавная: эту сеть началa создавать America-on-Line с корыстными целями. Собрали одних из лучших сетевых программистов, которые придумали непобедимое чудо сетевых технологий. Но, так получилось, что AOL объединился со звукозаписывающей компанией и понял, какую собаку он себе подложил. Сеть попытались закрыть, но она оказалась непобедимой, плюс, непосредственно создатели сопротивлялись. От AOL они ушли, и стали строить эту сеть сами. Вот так AOL навредил самому себе. Gnutella построена по собственной особой технологии без центральных узлов gPulp. Узлами здесь служат сами пользователи, а саму программу вывести из строя невозможно. Поэтому, даже если самих программистов «раскулачат», сеть закрыть никто не сможет.

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

Начнем с плюсов:

  1. Система позволяет задавать несколько поисков одновременно. Это очень удобно, получив результаты поиска на один запрос, можно задать другой, и он будет искать, пока вы разбираетесь с предыдущим, это экономит время. Результаты поиска достаточно подробны и неограниченны.
  2. Имеет докачку. Каждому файлу в результатах поиска выставляет баллы, которые показывают, как хорошо будет качаться файл.
  3. Сеть действительно большая, хотя то, насколько вы ее сможете осмотреть, зависит от вашего коннекта и мощности компьютера.

В минусах только то, что для работы с ней нужен очень мощный компьютер. Как было сказано выше, это связано с тем, что каждый подключенный – есть узел обрабатывающий и пропускающий поисковые запросы. Вы можете даже наблюдать за этим сами, там есть такая опция. Количество связанных с вами хостов зависит тоже от мощности компьютера и от сети. Максимум у меня получалось подключиться к 20 хостам, что обеспечивало мне доступ примерно к 3 Терабайтам (3000 GB) данных.

Механизм работы:

  1. Пользователь загружает программу.
  2. При первом запуске программы (назовем наш узел – A), пользователь сообщает клиенту IP-адрес одного из функционирующих узлов (условно узел B). Данная процедура может и не повторяться в будущем, но при первом запуске она обязательна. Это один из самых «скользких» моментов в реализации данной сети: без адреса хотя бы одного из работающих в данный момент узла пользователь не сможет подключиться. В принципе, существует целый ряд централизованных серверов, предоставляющих подобную информацию (connect1.gnutellanet.com:6346, gnutella.hostscache.com и др.), но такая схема уже приводит к некой централизованности.
  3. Программа посылает запрос узлу B на предмет подтверждения активности.
  4. Узел В подтверждает свою активность, если нет – см. шаг 2.
  5. Узел А посылает узлу В так называемый Ping-запрос. В этом запросе указывается, помимо прочей информации, TTL (Time To Live) – число, означающее, сколько переходов от узла к узлу данный запрос может совершить. Обычно TTL равняется 7.
  6. Другие узлы, получив Ping-запрос, посылают Pong-ответ, в котором содержится IP-адрес отправителя, номер порта и минимальная информация о файлах в фонде обмена.
  7. Кроме того, узлы, получившие Ping-запрос, уменьшают TTL данного запроса на единицу, и если TTL больше 0, а также если данный запрос они не получали ранее (защита от зацикливания), рассылают его своим соседям.
  8. Каждый узел, получивший Ping-запрос, отсылает Pong-ответ, тем же путем, которым этот запрос получил.
  9. Когда Pong-ответы доходят до своего источника (т. е. нашего узла А), программа составляет список доступных узлов. Как правило, этот список насчитывает от 2 до 10 тысяч узлов и от 500 тысяч до миллиона файлов в обменном фонде.
  10. Пользователь вводит запрос (например, название mp3-файла). Программа рассылает запрос на поиск файла всем узлам в списке, а далее просто ждет входящих сообщений.
  11. Каждый узел, получивший запрос на поиск, ищет в своем фонде указанный файл. Если файл не найден, то узел просто не отвечает.
  12. Если файл найден, узел отсылает инициатору запроса ответ с информацией о файле и о себе (IP-адрес).
  13. Получив ряд ответов, программа выбирает один из узлов, устанавливает с ним стандартное HTTP-соединение и загружает файл. При этом все сообщения (от Ping-запроса до скачивания файла) посылаются по HTTP, что затрудняет их отслеживание и блокировку.

Некоторые клиенты Gnutella работают в соответствии с приведенным алгоритмом, а некоторые нет. Связано это с тем, что Gnutella – это, прежде всего, протокол взаимодействия узлов (такой же, как HTTP, например), и в нем не определены некоторые из аспектов этого взаимодействия.

Послесловие

Итак, если вы счастливый обладатель (или имеющий доступ) выделенной сети, то вам будет значительно приятнее обратиться к чисто пиринговым сетям, таким, как Gnutella. А если вы среднестатистический российский «диалапщик», то пробуйте и ищите, «на вкус и цвет товарища нет»: кому-то больше по душе «коза» придется, а кому-то и «осел».

Как и у любой молодой технологии, у P2P есть, помимо технических, и свои социальные проблемы. Многие исследователи отмечают весьма неприятную ситуацию, сложившуюся в Gnutella: около 70% пользователей не добавляют вообще никаких файлов в обменный фонд, а около 50% всех найденных ресурсов предоставлены 1% (одним процентом!) пользователей. Психология «общества массового потребления» постепенно превращает сеть равноправных узлов в клиент-серверную, со всеми вытекающими последствиями (падение производительности и надежности).

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

Другая проблема P2P сетей связана с тем, что обмен информацией осуществляется между «незнакомыми» узлами (отсутствует опыт по обмену в прошлом), что порождает вполне объяснимые сомнения в качестве и достоверности предоставляемого контента.

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

Это статья: Тихий Омут
omut.ru