Гибкие Гнутеллы

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


Как реализуется децентрализация

В 1999 году был разработан механизм первой полностью децентрализованной файлообменной сети, названной Gnutella. Вдаваться в историю создания, названия и т.д. не буду, кто желает - может посмотреть в Википедии. Лучше посмотрим, как работала оригинальная Gnutella. Первоначально в этой сети не было каких-то выделенных центров. При подключении клиент получал от узла, с которым ему удалось соединиться, список из нескольких активных узлов; далее отсылался запрос на поиск файла по ключевому слову. Узлы искали у себя соответствующие запросу ресурсы и если не находили их, то пересылали запрос узлам вверх по "дереву", пока не находился узел, обладающий ресурсом, или не превышалось допустимое число шагов. В информатике такой поиск называется методом размножения запросов (query flooding). Данный метод ведёт к быстрому росту числа запросов и в результате к отказам в обслуживании, что и наблюдалось. Понимая это, разработчики Gnutell'ы усовершенствовали алгоритм: ввели правила, в соответствии с которыми запросы могут пересылать вверх по "дереву" только избранные узлы, называемые ультрапирами, остальные узлы могут лишь запрашивать. Принятые меры, однако, не слишком улучшили свойства этой p2p-технологии.

В 2003 г. была разработана принципиально новая p2p-технология под названием Gnutella2. Официальный сайт gnutella2.com, к сожалению, закрыт, о причинах можно говорить много, но сеть Gnutella2 живёт и здравствует.

Каковы же основные отличия между Gnutella и Gnutella2? Gnutella2 делит узлы на две группы: собственно узлы ("листья" на сленге Gnutell'ы) и хабы. В Gnutella ультрапиры поддерживают небольшое количество связей с рядовыми узлами и большое количество связей с другими узлами сети, как c ультрапирами, так и с рядовыми узлами. В Gnutella2, наоборот, хаб поддерживает связь с большим количеством узлов и с небольшим количеством других хабов. Каждый узел в Gnutella2 одновременно связан с двумя-тремя соседними хабами, а то и больше, что определяется настройкой клиентской программы. Нетрудно видеть, что при этом на каждый хаб может быть повешено ну очень много клиентских узлов. Такое топологическое отличие Gnutellа2 от Gnutellа обусловлено различными методами поиска, каждый из которых оптимален только для своей топологии сети. Рассмотрим, как работает сеть Gnutellа2.

 

В начале поиска конкретный узел, если в нём список адресов хабов пуст, получает тем или иным способом (руками пользователя, из Интернета, из "бортового" перечня, от специальных серверов) список адресов хабов и поочерёдно напрямую связывается с ними, отмечая тех, с кем удалось связаться, до тех пор, пока список не будет исчерпан или пока не будет достигнут лимит, заданный пользователем узла.

Каждый узел, соединившись с хабом, отсылает ему проиндексированный список расшаренных файлов (но не сами файлы!). Список содержит хеш-коды и ключевые слова, по которым эти файлы можно найти. Хаб из каждой полученной таблицы путём вторичной индексации составляет и хранит общую таблицу QRT (Query Routing Table). Если какой-то узел хочет найти файл, он посылает запросы к подключенным к нему хабам; если хаб по QRT видит, что запрос может быть удовлетворён какими-либо из подключенных к нему узлами, то он возвращает запросившему узлу идентификаторы узлов, из которых запросивший узел по кускам может скачать искомый файл. Иначе хаб возвращает список адресов других хабов, к которым узел должен снова подключиться. Так как узлу практически всегда не со всеми хабами удаётся связаться, то выбор новых хабов оказывается случайным. Выбор также может быть и принудительно случаен, это зависит от того, как узел настроен. В информатике такой поиск называется методом блужданий. Может оказаться, что ширококанальному клиенту недостаточно узлов-источников для достижения желаемой скорости скачивания, о чём он дополнительно извещает связанные с ним хабы, и те снова возвращают ему адреса новых хабов. Однако "аппетит" клиентского узла всегда ограничивается. Удивительно, но метод блужданий теоретически позволяет пользователю, как и метод размножения запросов, найти любой файл, если он только лежит в сети!

Метод блужданий даёт ряд преимуществ перед методом размножения запросов: 1) в процессе поиска не происходит экспоненциального увеличения трафика, 2) запросы не маршрутизируются через большое количество узлов, что увеличивает гранулированность поиска, 3) клиент быстрее прекращает поиск при достижении заданного порога. Но за всё надо платить: 1) увеличивается сложность сети, 2) требуется её поддержка, 3) усложняется защита от атак извне. К счастью эти задачи оказались решаемыми. Кстати, устаревшая Gnutella всё ещё популярна у англоязычных пользователей Интернета, что объясняется её неустаревающими медиаресурсами, но постепенно и верно сдаёт свои позиции.

Теперь, когда теоретическая база подведена, нужна практика. Для Gnutella2 существует множество клиентов, о которых можно почитать в Википедии, я остановлюсь только на двух лучших: по одному для ОС Windows и ОС Линукс, а также на том, о чём в Википедии не пишут.


Эта восхитительная Shareaza

Самый популярный p2p-клиент для Gnutella2 под ОС Windows - это, несомненно, Shareaza (далее "Шареаза"), которая на дату написания этой статьи была скачана с сайта Sourceforge.net более 43 млн раз. Существует две "Шареазы": одна версия как бы коммерческая, а другая распространяется свободно практически в том виде, как её в своё время написал разработчик Майкл Стокс, если не считать новых "шкурок". История раскола сама по себе интересна, но профессиональные журналисты напишут об этом лучше, чем я. Читателям, думается, интереснее знать, что именно нужно устанавливать на компьютер, чтобы не попасть впросак.

Коммерческую "Шареазу" ShareazaV6.exe "весом" в 13 Мб с чрезвычайно красивым интерфейсом можно совершенно бесплатно скачать с сайта shareaza.com, который претендует на звание официального. Возникает вопрос: если "Шареаза" коммерческая, то почему она бесплатная? Всё просто: это сыр в мышеловке. Найденные в Сети файлы не полностью записываются на компьютер клиента. Если вы записали файл в библиотеку скачанных файлов, то это ещё не всё. Чтобы этот файл повторно прочитать, нужно подключение компьютера к Интернету, так как чтение файла сопровождается дополнительной информацией, подкачиваемой из коммерческого сервера владельцев продукта, а без неё файл не читается. Конечно, найдутся энтузиасты, которые вычленят полезное из "подарка", но простому пользователю такое точно не под силу. Впрочем, анлимитчики могут себе позволить установить коммерческую "Шареазу".

Свободно распространяемую "Шареазу" с русским языком можно найти на веб-сайте shareaza.sf.net. Скачивайте последнюю стабильную версию и наслаждайтесь. Классика! Никаких рекламных добавок. Настройка "Шареазы" ещё проще, чем настройка DC-клиента, о чём я писал в своей прошлой статье. Единственное, что следует отметить: не пользуйтесь мастером настройки, если в разделах, куда он предлагает установить рабочие директории, мало места. Учтите, что для закачек вам оно очень понадобится: нужно иметь свободными десяток-другой гигабайт. Лучше заранее в каком-нибудь объёмистом разделе жёсткого диска создайте файловым менеджером папки "Downloads", "Collections", "Incomplete" и воспользуйтесь меню "Инструменты", чтобы сделать эти папки рабочими.

"Шареаза" производит поиск в четырёх разных p2p-сетях, обеспечивая доступ к сотням тысяч компьютеров пользователей, и всё это одной программой. Вы сможете загружать/выгружать файлы в следующих сетях: Edonkey, Gnutella, BitTorrent и Gnutella2. Как видно из рисунка, "Шареаза даже имеет собственный проигрыватель аудио и видео. Впрочем, можно подключить и внешний. Многие считают, что лучшей p2p-программы, чем свободная "Шареаза", для ОС Windows нет. К сожалению, Windows не та ОС, которая способна безопасно работать напрямую с тысячами компьютеров, поэтому держите антивирус в постоянной свежести, о чём "Шареаза" предупреждает ещё при установке.


Этот суровый Sharelin

Как бы хороша "Шареаза" не была, новые вирусы прежде, чем попадают в антивирусные базы, какое-то время безнаказанно гуляют по Сети. Поэтому использовать p2p-технологии намного безопаснее в никсоподобных ОС, чем в ОС Windows. В никсоподобных ОС вирусы, образно говоря, "идут лесом", хотя этому многие не верят. А зря.

Sharelin (далее "Шарелин") - это клиент для Gnutella2 с открытым кодом, который, по словам его автора, можно заставить работать практически под любой реализацией "Линукса". Не знаю, насколько это соответствует истине, но с Ubuntu клиент точно работает. "Шарелину" всего полтора года отроду. Продукт распространяется под лицензией GNU GPL. Автор известен под ником Sav, поговаривают, что это один из разработчиков "Шареазы". Пишут также, что "Шарелин" - это форк (ответвление) "Шареазы", в чём лично я сомневаюсь, хотя автор в свой продукт постепенно добавляет то, что есть в "Шареазе". Клиент работает в линуксном терминале, обычного графического интерфейса (GUI) у него нет. Автор поступил оригинально - вместо встроенного GUI, как это общепринято, написал для него WUI - веб-пользовательский интерфейс, поэтому работа с "Шарелином" идёт через какой-нибудь браузер. Во всяком случае, через браузеры Chrome и Firefox всё прекрасно управляется, через Аmaya тоже, но криво, через другие браузеры автор не удосужился проверить, но на форумах сообщают, что через IE и Opera всё работает хорошо.

"Шарелин" распространяется в исходниках на языке C++ и предназначен для более-менее продвинутых пользователей, освоивших азы взаимодействия компьютерных программ. Я попробую, насколько смогу, доходчиво изложить установку из исходников для тех, кто с этим сталкивается впервые, а также затрону некоторые моменты настройки. При сравнительно небольших усилиях вы получите компактный клиент сети Gnutella2 и сможете забыть про вредоносы, "косящие" под медиафайлы. Исходники "Шарелина" и сопровождающие данные, включая внушительный список адресов хабов, в виде архива находятся по адресу sourceforge.net/projects/sharelin/files. Скачанный архив нужно поместить в домашнюю папку. В ОС Ubuntu под "Наутилусом" в два клика по архиву исходники разжимаются и растариваются. Для сборки исполняемого файла дополнительно потребуется скомпилированная под ваш "Линукс" библиотека Boost C++ и g++ компилятор. Обладателям ОС Ububntu проще: вместо скачивания библиотеки boost из boost.org и последующей компиляции необходимо будет доустановить deb-пакеты libboost-dbg, libboost-serialization-dev и zlib1g-dev, остальные пакеты библиотеки boost для вашего дистрибутива автоматически подтянутся из репозитория. Для запуска сборки нужно зайти в папку с растаренными исходниками и в режиме суперпользователя выполнить команду make. Команда make install не требуется. Если всё сделано правильно, то в папке появится исполняемый файл sharelin. Предварительно текстовым редактором правим файл sharelin.conf_sample; как править, смотрим в комментариях внутри этого файла. Переименовываем этот файл в sharelin.conf. Также разрешаем доступ к папкам incomplete и complete командами chmod и chown:

sudo chmod -R 777 /путь/имя_папки

sudo chown -R user /путь/имя_папки

Запуск: входим в Интернет, терминальной командой cd входим в рабочую папку и выполняем ./sharelin. Если всё нормально, то в терминале сразу пойдут сообщения о блужданиях "Шарелина" в сети Gnutella2. Если нет, значит в конфигурационном файле есть "косяки", разбираемся. Включаем WUI, набрав в браузере после http:// IP-адрес клиента и через двоеточие номер порта клиента, которые вы указали в текстовом конфигурационном файле, например, http://127.0.0.1:4080.

Если всё нормально, то через несколько секунд вы увидите страницу, как на рис., причём обязательно убедитесь, что вы подключились к хабам, на что указывают строчки "connected".

Можно искать файлы. Для этого служит страница "Search". В строку поиска вводим ключевое слово или магнет-ссылку, указываем тип файла, ищем. Количество найденных файлов отображается в разделе "Results", оно должно быть ненулевым. Щёлкаем по ключу поиска под строкой "Criteria", выбираем, какой файл и откуда скачивать, идём на страницу "Downoads" и любуемся процессом загрузки. Сложно? Возможно. Если "Шарелин" вам не по силам, запускайте "Шареазу" под "Линуксом" в среде Wine, это всё же лучше, чем рисковать целостностью ОС Windows.

Успешных вам поисков и удачных находок!

Михаил ГУРЧИК,
Gor-mike@tut.by

Версия для печатиВерсия для печати

Номер: 

23 за 2010 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!