Автор: Арсений Чеботарёв
http://www.comizdat.com/
Те, кто живет достаточно
долго, наверное, помнят феномен Napster'а, первой всемирной сети обмена файлами
между пользователями. Napster пережил пару пинков судьбы, в результате чего стал
мягким и пушистым. Но "джин халявы" уже вылетел из бутылки…
Говоря о "первой сети обмена", я, конечно, не имел в виду, что до этого люди не
обменивались файлами по сети. Любой мог послать и получить файл по почте или выложить
его на ftp. Но, тем не менее, никогда ранее Сеть не потрясала такая "волна" обмена
данными между пользователями - эта волна поставила под сомнение сами основы современного
шоу-бизнеса. Например, та же Майкрософт, изучая феномен Napster'а, пришла к выводу,
что "[DRM - система управления правами] технология сама по себе не может решить
проблемы пиратства [в сетях P2P]" (доклад
Уилла Пулла комитету Юридической палаты, 5/6/2002).
Что было самым важным прорывом в новой технологии - так это создание гигантской распределенной базы данных, содержащей информацию "что есть у кого". Файлы классифицировались по категориям, так что можно было производить более осмысленный поиск. Второе - файлы и отдельные фрагменты ("чунки", chunks) снабжались контрольными суммами (MD4) для установления "подлинности". Так что система понимала - даже файлы с разными именами могут быть одним и тем же файлом. Третье - это протокол "частичной распределенной загрузки" (впоследствии MFTP), позволяющий собирать файл из фрагментов, находящихся у разных пользователей. При этом система сама видит, у кого и сколько закачано, и подключается только к тем пользователям, что располагают частями, которых недостает вам.
Сам процесс получил название peer to peer (P2P), то есть соединение двух пользователей без использования сервера. Конечно, не так уж и "без сервера" - на самом деле серверы используются в этой схеме трижды.
Первый раз - для получения каталогов удаленных пользователей. При подключении к серверу вы отдаете ему список файлов, которые были определены вами как "общие", а взамен получаете: а) список других доступных (выделенных) серверов; б) список пользователей, которые могут выполнять роль серверов.
Другое использование серверов - это собственно операция поиска. В изначальной схеме, например eDonkey, на сервере находится общая для всех пользователей база данных общих файлов. При обращении поиска к серверу тот определяет, у кого из пользователей есть нужный файл. Эта схема в последнее время выходит из моды - серверы все реже содержат базу поиска.
Третье - серверы должны быть использованы для связи двух "слабых" клиентов (с так называемыми "слабыми идентификаторами"). Это рабочие станции за NAT firewall'ами, которые не имеют собственных IP из глобального пула, а потому не могут быть адресованы другим "слабым" клиентом без посредства прокси-сервера. Слабый клиент ("слепой ослик") сам инициирует соединение, периодически обращаясь к серверу с запросами типа "чего поискать?" и получая ответы. Естественно, раз "слепой" клиент не может служить сервером и принимать запросы, то соединить двух клиентов за NAT можно только через третью точку, имеющую нормальный IP-адрес.
Некоторые серверы могут ограничивать количество слабых клиентов или вообще запрещать их подключение. В Overnet ID больше не зависит от свойств клиента - вместо этого клиенты явно делятся на открытых и тех, что "за файерволом".
Эта статья - не обзор абсолютно всех Napster-подобных сетей и клиентов (да это особо и не нужно). Как всегда, я сначала расскажу о самом интересном (для меня), а потом, по мере истощения словарного запаса,- о некоторых, тоже не лишенных смысла, кусках кода, а также о тех "трабл мейкерах", о которых вы должны знать скорее теоретически, но не практически. Но для начала - о самом бесполезном, о Napster'е и KaaZaa.
Пару слов о грустном, или Что осталось от Napster'а?
Для начала посмотрим, что жестокий мир капитала сделал с энтузиастами "халявы", и бросим прощальный взгляд на классику жанра после кастрации, то есть на новый Napster и KaaZaa.
Первое, что бросается в глаза, когда заходишь на www.napster.com,- это сама инсталляция нового Napster'a, которая напоминает теперь инсталляцию порно-консоли или другого трояна. Я, как бы, понимаю, что загрузка exe ничем не лучше - но все равно как-то странно все это выглядит. Следующий за инсталляцией смешной момент - сообщение о том, что Napster работает только в США. А для американов - просьба зарегистрироваться и ввести имя и пароль (как видно, в Америке идет перепись медиа-"пиратов"). Короче - не ходите туда, делать там нечего.
Одним из "горячих пирожков" одно время был KaaZaa. Программа и вправду качала много чего полезного и ее имя даже стало нарицательным - однако в последнее время я не могу ни бельмеса там найти. Кроме того, количество баннеров и прочего мусора вокруг этой программы растет с ужасающей скоростью, так что теперь KaaZaa вызывает у меня ассоциации со словами "спам", "поп-ап консоли", "ускоритель интернета"… - и с соответствующими случаю эмоциями. Не удивлюсь, если к моменту выхода этой статьи KaaZaa и вовсе прикроют для народа - то есть сделают такой же продажной, как Napster. Не советую использовать ее практически - но если вам интересны исторические и технологические аспекты KaaZaa, поищите в Сети протокол FastTrack.
Короли Сети 2003: Ослик и Овернет
Самые лучшие на сегодня программы - это те, что работают в сети e-Donkey2000 и Kademlia/Overnet. К их числу относится собственно сам e-Donkey и его детеныш - Overnet (хотя как от ослика может произойти такая медуза?), а также масса клонов. Загрузить оба оригинальных айтема можно по адресу.
Разница между Overnet'ом и e-Donkey - в том, где производится поиск файлов. Если более старый "ослик" производил поиск на централизованном сервере или, точнее, в распределенной базе на нескольких серверах (а это узкое место - как в смысле трафика, так и в смысле Интерпола) - то более продвинутый Overnet ищет только на клиентских машинах, хотя серверы используются для прокси-услуг.
По указанной причине переполненных ED серверов рекомендуется использовать Overnet, а не e-Donkey - хотя первый, в силу своей природы, может загрузить ваш трафик по полной программе. С другой стороны, количество найденных (притом редких) файлов в Overnet поражает. Плохо, что не обошлось без рекламы, но это решается мы-знаем-как.
Недостаток и eDonkey и Overnet: состав их инсталляции входит насколько рекламных программ, так что, если вы прозеваете этот момент и не отмените установку последних, то получите на свой винт пригоршню мусора.
eMule и другие "ослоподобные"
Существует множество клиентов, которые штатно нависают на ED2к-сеть и эксплуатируют их базы. В числе популярных ED-"присосок" - eMule и OneMX. Они похожи настолько, что создается даже странное ощущение, будто это вообще одна и та же программа. Что, в общем-то, так и есть: первая - Open Source, вторая - "типа бесплатная". Единственное отличие - в списке серверов по умолчанию. И если eMule, в конце концов, нашел "путь к счастью" через мой гейтвей, то OneMX вообще не смог выбраться наружу - поэтому мои познания о его работе весьма скромны. Далее речь пойдет, в основном, о eMule, получить который можно (и нужно) на www.emule-project.net - если, конечно, вы не получаете наш журнал с диском.
eMule поддерживает два типа сети - автоматический ED2K и Kademlia Bootstrap. Не пугайтесь, это не ругательство, а система распределенного хеша - DHT, Distributed Hash Table.
Система работает так: все пользователи получают идентификаторы, и файлы получают идентификаторы, и части файлов получают идентификаторы. Сначала вы подключаетесь к паре-тройке "друзей" и как бы ненароком спрашиваете, "а как пройти в библиотеку". Поскольку ваши "кореша" уже в курсе и библиотеки и других заведений, они сбрасывают вам адреса новых серверов, где могут располагаться искомые файлы - и так далее, до победного конца. Сам процесс "раскрутки" называется Bootstrap, а система идентификации и поиска всего на свете по хеш-значениям - Kademlia.
В чем тут фишка - так это в том, что eMule предлагает вам самостоятельно ввести адрес первого хоста с установленным eMule или другим Kademila-сервером, так что вы сможете от него уже передвигаться к следующим хостам - и постепенно подобраться к требующимся файлам. Можно сказать, что eMule работает и как eDonkey, запрашивая данные у серверов, и как Overnet, через Kademila,- то есть применяет оба способа поиска.
Другой вопрос - откуда вы возьмете этот адрес? Вот именно. Другой "напряг" этой технологии - это то, что для "поднятия" Kademila нужно указать сервер с настоящим IP-адресом, а это не слишком распространенный сейчас метод подключения, и за NAT-фаерволом это работать не будет. Но, тем не менее,- спасибо за возможность.
Приятная фича eMule - он хранит недокачанные файлы отдельно, так что вы не видите "мусора" в точке назначения (как, например, у WinMX). Поэтому точкой назначения можно указать вполне приличное место, например "Мои документы".
Другая приятность - это возможность
посмотреть комментарии к фалу. К сожалению, часто они бестолковы, но иногда содержат
и важную информацию, например "это фильм на китайском языке"
Кроме прочего, eMule содержат встроенный клиент IRC для живого общения с удаленными "товарищами по несчастью" - короче, полный фарш с прикладом.
WinMX
Ставший весьма популярным в последнее время инструмент. Его главное отличие - полное отсутствие даже намека на рекламу и прочую "хрень". Скачать эту примочку можно на www.winmx-download-winmx.com (сама закачка происходит с сайта Morpheus-Download, что наводит на размышления; однако другой информации на тему WinMX и Morpheus я не нашел - наверное, люди предпочитают шифроваться).
WinMX - сокращение от "Windows Media eXchange". Существует порт на Mac, для других систем портов не обнаружено.
В отличие от других p2p-клиентов WinMX не показывает ни списка серверов, ни самого процесса подключений. На самом деле средний пользователь крайне редко может извлечь из этих данных какую-то полезную для себя информацию или как-то конструктивно повлиять на ход подключения.
Закладка Поиск посвящена понятно чему - тут все ясно: вводите слова и ищете. После того как будут найдены источники, можете отпиногвать их на предмет "интересности" - хотя вы никогда не угадаете, кто вам "сольет файло", так что дискриминация тут неуместна. Разумно щелкать Download по всей группе, а не только по одному источнику - ненужные опадут сами, как осенняя листва.
Несколько непонятных сокращений вы встретите на закладке Transfers, а именно - AFS и AEQ. Это очень хорошие параметры. Первый значит Auto Find Sources и показывает период (в минутах), с каким будет выполняться попытка найти новые источники для ваших файлов. Таким образом, можно "загнать" поисковик, а можно, напротив, "попустить". Постоянно проверять новые источники нет смысла, они появляются не слишком часто - главное, никогда не устанавливайте этот параметр в Never.
Второй параметр расшифровывается как Auto EnQueue - то есть, когда вы находите файл и при этом вам предлагают стать в очередь, то в каком случае соглашаться? Для редких файлов этот параметр можно поставить в максимальное значение - 100.
AFS и AEQ по умолчанию можно настроить на закладке Configuration… почему-то Search, но не суть важно. В других клиентах таких настоек нет (или это я не нашел?).
Есть небольшой "загон" в настройках по умолчанию - вы настроены выбрасывать "inactive DL sources" каждые 10 минут. Это приводит к тому, что в один момент вы можете выбросить все источники - и закачка улетит из списка. Файл останется на месте, и вы, конечно, всегда можете "вернуть" закачку, нажав Load Incomplete - но сделать это сможете только руками… утром в понедельник, тогда как вы могли качать все выходные.
G2: Shareaza
Shareaza (или, по-народному, Ш (З) араза)
- это клиент, созданный авторами и фанатами сети Gnutella для собственных нужд
Что хорошо - G2 имеет формальное описание, четкую систему требований и даже собственный стандарт, что может сделать эту сеть достаточно устойчивой для конкуренции с Overnet. Побочный эффект Shareaza - поскольку этот клиент обслуживает запросы сразу многих сетей, то исходящий (даже когда вы ничего и не закачиваете) трафик легко может "стартовать" до 25 Кб/с! Следите за этим, если вы выкачиваете под контролем. Ограничить скачивание можно в Config-Internet-Uploads (по умолчанию: 7 Кб/с для Core, 12 Кб/с для Partially Downloaded и по 2 Кб для каждого размера файлов, большого, среднего и малого - итого разрешенный исходящий трафик - 25 Кб/с).
BitTorrent
Раз уж речь (почти случайно) зашла о BitTorrent, то дадим некоторое описание и этой системе. Скачать ее можно по адресу (правда, в момент написания файловый сервер часто был недоступен, так что лучше смотрите на нашем диске). Это технология распределенной закачки файлов, которая называется еще swarming,- то есть файл собирается в одно целое, подобно тому как пчелы собирают мед в улей. Собственно, сам BT - это серверная часть для загрузки вот таким вот образом.
Все, что нужно для настройки, описано тут. Как вы поймете, это скорее технология, чем пользовательский инструмент - по крайней мере, программы не изобилуют документацией и богатым интерфейсом.
Gnutella 1
Самая распространенная и популярная сеть обмена (если не учитывать ED2k) называется Gnutella. Кстати, после появления Gnutella2 ее часто называют Gnutella 1 или "старая (legacy) Gnutella". В основе G1 лежит несколько другой механизм распространения запросов - но в принципе все без особых изменений. Основное отличие Gnutella - она не использует механизмы Kademlia, то есть поиск в этой сети осуществляется "вслепую", по случайным маршрутам. Лучшая критика G1 дана на сайте разработчиков Gnutella 2. - Там, например, упоминается, что в худшем случае один пользователь может "поставить на уши" 80% всей G1-сети.
Официальные программы для этой сети - BearShare (также поддерживает ED2K?), Gnucleus, Morpheus (версия: первоначально был на движке KaaZaa - FastTrack, но после "сессий" с судом Лос-Анджелеса перешел под знамена Gnutell'ы), Xolox Ultra, LimeWare, Phex. Некоторые из них написаны на Java, а некоторые даже под.NET. Каждый из этих клиентов превозносит себя как "самого": BearShare - "самый лучший", Gnucleus - "самый честный", ну и так далее.
Типичный современный клиент для сети Gnutella - LimeWire. Весь сайт LimeWare увешан надписями "быстрее, чем KaaZaa!" - хм, ну было бы чем гордиться. Главная отличительная особенность этого клиента - программа на Java. Со всеми вытекающими из этого последствиями: красиво и медленно.
Еще один клиент поверх сети Gnutella, происходящий от Lime (ну шо за мода пойшла),- это FreeWare. Больше информации можно найти здесь - www.freewirep2p.com. Что приятно, так это то, что исходники в понятном виде лежат на developers.html. А больше я вам ничего об этой программе не скажу - за подробностями обращайтесь к исходникам.
Перечисленные выше программы, особенно Lime, часто просто перенасыщенны рекламой, spy-ware и прочими вещами, так что я упоминаю их тут только для полноты изложения - можете поставить эти программы в целях ознакомления, чтобы не говорили потом, будто у вас не было выбора.
Помимо того, в сети Gnutella я не нашел нужных мне файлов, так что знакомство с ней завершилось, так и не начавшись. Единственное, что порадовало, так это сайт www.gnutella.com (на движке Zope+Plone?) - хотя и там все закачки происходят через рекламный блок.
|
В путь |
|
Вариант первый: вы знаете, что
вам нужно,- и готовы получить это любым путем. Дополнительное условие -
у вас огромный канал и вы не платите за трафик. Ваши действия - можете установить
параллельно три утилиты - WinMX, eMule и Shareaza - качать они будут, как
показывает опыт, из разных источников. Конечно, вы будете несколько раз
дублировать файлы, но ваши шансы получить их при жизни значительно возрастут.
Не втрое, конечно (люди-то и серверы во всех сетях часто одни и те же) -
но тем не менее. |
|
Для тех, кто хочет все знать |
|
Если вас интересует не столько
закачка файлов (хотя и она тоже), сколько технологии и алгоритмы, стоящие
за полностью распределенными системами,- то я попытаюсь вкратце изложить
основные принципы и дать пару полезных ссылок. Конечно не так, чтобы вы
написали диплом по этой теме, но все-таки. |