Пиринговые сети. Direct Connect

Когда-то давно на этих страницах мной была начата серия "Популярное введение в пиринговые сети" (№ 16, 21 за 2006 г.). С тех пор много воды утекло, и пришло время сделать обзор соответствующих технологий на текущий момент. Для тех, кто не читал мой прошлый цикл, мы сделаем небольшое введение и рассмотрим отдельно сеть Direct Connect. Итак, поехали.

Введение

За два с лишним года действительно много изменилось. Причем не только в Беларуси, но и в мире. Самое, на мой взгляд, значительное изменение — это то, что в массы пришел (имеется в виду, конечно же, наш регион, так как в странах Европы эта фраза выглядит смешно) относительно недорогой высокоскоростной Интернет. Сейчас житель более-менее крупного города может позволить себе забыть о кошмаре под названием dial-up, особенно на старой телефонной линии, а некоторые молодые люди уже даже не знают, что это такое J. Подключаясь, например, по технологии ADSL, вы получаете возможность проводить в Интернете сколько угодно времени и оплачивать только свой трафик, переходя таким образом в "постоянный онлайн". Постоянное присутствие в Сети в общем-то и стало толчком к развитию пиринговых сетей.

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

Изначально все пиринговые сети строились на принципах абсолютного равенства. Это значит, что если ты что-то качаешь, то должен обязательно что-то отдавать. Для этого ввели специальный показатель — рейтинг (ratio). Рейтинг чаще всего вычисляется как отношение отданного к загруженному. Если рейтинг мал (например, 0.1), то на такого пользователя должны накладываться ограничения, которые заставят его раздавать файлы и повышать рейтинг. Кроме того, в пиринговых сетях очень оригинально решается проблема с загрузкой канала отдающего компьютера. Если запрошенный файл присутствует у кого-нибудь еще в сети, то такой пользователь также участвует в раздаче. Другими словами, качаем со всех по чуть-чуть, но в сумме набегает большая скорость (часто ее ограничивает ширина вашего канала). Из-за принципа постоянной необходимости в повышении рейтинга пиринговые сети были просто неприемлемы для большинства пользователей, которые выходили в Интернет через модем. Дело в том, что быстро удается нарастить рейтинг, только если вы участвуете в раздаче популярных файлов (например, только что вышедшего фильма). Если ваши файлы непопулярны, то вы можете довольно долго ждать, прежде чем они кому-нибудь понадобятся. При этом, конечно, вы не знаете, когда именно это произойдет, поэтому вы должны быть все время онлайн. Работа в пиринговых сетях также является проблематичной при наличии прокси — тогда во внешнем мире у всех пользователей одинаковый IP-адрес; или в сетях, где используется NAT (ситуация аналогична). Например, в некогда популярной сети ed2k прокси был сущим злом и во многих случаях не позволял получить доступ на серверы. Кстати, о ed2k. Проводя параллели с предыдущими статьями, в них отмечалось, что ed2k постепенно теряла популярность. Спустя два года можно сказать, что эта сеть умерла совсем. Сейчас в Сети осталось очень мало серверов, на которых есть что-либо, кроме adult-контента, к тому же громкий процесс над владельцами серверов "Donkey Server No.1" — "Donkey Server No.6" в результате чего они были закрыты, и остановка самого большого сервера Razorback привели к тому, что во многих странах использование этой пиринговой сети запрещено. Корень зла все тот же — авторские права на аудио- и видеопродукцию. Международная федерация звукозаписывающей индустрии инициирует один за другим процессы против пользователей пиринговых сетей и практически всегда их выигрывает. На смену многострадальной ed2k сейчас пришла сеть torrent. Раньше она страдала от нехватки редких файлов, но сейчас ситуация кардинально изменилась и torrent — это одна из наиболее содержательных пиринговых сетей. При этом стоит отметить, что и ed2k, и torrent — это сети, предназначенные исключительно для пользователей Интернета (torrent, однако, может применяться в крупных локальных сетях). Специфика локальных сетей такова, что пользователи не хотят ждать, когда набежит их рейтинг. Им важно, чтобы файлы качались быстро и без лишних вопросов. Как раз для таких целей и была создана сеть, о которой сегодня пойдет речь.

История создания Direct connect

Direct connect (прямое подключение) наиболее полно отражает суть пиринговой сети. Их еще называют р2р — peer-to-peer сетями, то есть прямое соединение между пользователями без каких-либо промежуточных серверов (допускается, однако, наличие сервера, управляющего потоками трафика). Это одна из самых старых пиринговых сетей. Ее разработала компания NeoModus в далеком 1999 году. Первая программа-клиент содержала рекламные баннеры, и компания зарабатывала на этом. Свою популярность DC набрала сразу после закрытия сервера с бесплатной музыкой под названием Napster. Был выпущен сторонний клиент DCLite, который впоследствии породил OpenDC. Ее пользовательский интерфейс стал многодокументным (MDI), и появилась возможность использовать плагины для файлообменных протоколов. У Open Direct Connect не было полной поддержки протокола, но была выпущена Java-версия программы. Кстати, протокол DC является текстовым. Это во многом обеспечило такое большое разнообразие программ, написанных для этой р2р-сети на сегодня. Существуют некоторые базовые исходные коды, например ApexDС, на которых собираются многочисленные сторонние клиенты.

Структура сети Direct Connect

Данная сеть предполагает наличие специально выделенного сервера, который будет координировать передачу данных между пользователями. Такой сервер в DC называется хабом. Клиенты могут подключаться к одному или нескольким хабам, которые обычно не связаны между собой (некоторые типы хабов можно частично или полностью связать в сеть, используя специализированные скрипты или программу Hub-Link). Хаб обслуживает поиск по ресурсам своих пользователей. Разумеется, клиенты умеют искать на нескольких хабах сразу. В качестве хаба чаще всего используются такие пакеты, как PtokaX, Verlihub, YnHub, Aquila, DB Hub. Мы с вами рассмотрим, как создать собственный хаб, немного позднее. Отличительной особенностью DC является возможность создавать тематические хабы, то есть, например, только музыка или только фильмы. Это очень удобно во многих случаях. Также огромным плюсом этого протокола для локальной сети является развитый многопользовательский чат. В нем существуют мастера, администраторы, операторы и обычные пользователи.

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

В сети DC поиск файлов производится по ТТН. Это хэш-функция, позволяющая идентифицировать расшаренные файлы по содержимому. Таким образом, зная TTH, мы можем найти файл, не зная его имени. То есть даже если каждый пользователь запишет один и тот же фильм под разными названиями, ТТН останется прежним (т.к. хэш вычисляется от размера файла), и мы все равно сможем качать сегменты это файла со всех пользователей сразу. В DC также есть magnet-ссылки. Это аналог привычной всем http-ссылки, только в DC она содержит ТТН нужного файла, и программа-клиент сразу его нам находит. Также замечу, что данный протокол разрабатывался исключительно под Windows, и на других платформах программы-клиенты не дадут полной функциональности своих Windows-коллег в силу ряда архитектурных особенностей этой ОС. Любая файлообменная сеть в первую очередь создается с целью передачи фильмов и музыки (т.е. потенциально больших файлов). В случае множества мелких файлов (например, зеркало веб-ресурса), клиенты будут очень долго качать их, и в таком случае лучше просто пользоваться общим доступом (SMB).

Также важным понятием является слот (slot). Слот — это канал, по которому клиент качает либо отдает файлы. По дефолту слотов 15 штук (при этом в старых версиях Windows число одновременно поддерживаемых подключений было ограничено 10, и приходилось править реестр), но этого может быть недостаточно, если вы раздаете популярный фильм, например. Обычно их выставляют по 30-50. В отличие от сетей ed2k, torrent и т.д. в DC понятие рейтинга не играет никакой роли, хотя практически все клиенты продолжают его вести (обычно эта информация содержится в окне "О программе"). Существует два режима работы клиентов: активный и пассивный. Подробнее о них смотрите в таблице.

Программа-клиент

Как уже отмечалось, для этой сети существует очень большое количество программ-клиентов. Мы с вами рассмотрим клиент FlyLink DC++, но вы сможете выбрать себе и любой другой клиент из таблицы, которая прилагается к этой статье.

FlyLink в основном используется в локальных сетях наряду с некоторыми другими популярными клиентами. Во-первых, для подключения к хабам нужно вначале что-то расшарить, поскольку на многих хабах стоит ограничение на количество расшаренных данных. На некоторых это число достигает 50 Гб. Самый лучший способ быстро набрать шару — это фильмы. Если у вас есть большая коллекция фильмов, вы быстро зайдете на любой хаб и станете там уважаемым пользователем. Это можно сделать в "Файл-Настройки-Шара". В настройках нужно также указать папку для временных файлов и папку, куда файлы будут скачиваться по умолчанию. Желательно, чтобы обе папки были на одном разделе жесткого диска. Если вы находитесь за брандмауэром, то в настройках соединения нужно сделать следующее: в ячейку "Сетевой интерфейс для всех соединений" прописываем ваш внутренний локальный сетевой адрес. Ставим галочку на "Брандмауэр с ручным перенаправлением портов". В ячейку Порты вносим значения TCP 30001 UDP 30002. Жмем на "Найти IP-адреса". После нажатия в ячейке должен появиться внешний сетевой адрес, присвоенный провайдером. Жмем ОК.

В зависимости от хаба в Flylink могут работать следующие команды (их нужно писать в общем чате):
/join IP — Подключиться к хабу по адресу.
/ts — Включить/выключить отображение времени напротив сообщений в главном чате.
/showjoins — Включить/выключить отображение пришедших и уходящих пользователей в главном чате.
/search имя_файла — Поиск.
/clear — Очистить главный чат/away сообщение — Сообщение автоответчика, когда вы уходите.
/back — Выключает автоответчик.
/slots n — Изменяет количество слотов на n.
/grant — Открытие слота пользователю, с которым вы находитесь в приватном чате.
/close — Закрытие активного окна.
/refresh — Обновление списка файлов (файл-листа).
/help — Вывести список встроенных в DC команд.
/getlist nick — Скачать список файлов пользователя с ником nick.
/connection — Показать ваш IP-адрес и порты, которые использует DC для работы.
/log — Включить/выключить ведение логов.
/pm nick — Открыть окно для отправки личного сообщения пользователю nick.
/rebuild — Пересоздать свой список файлов.
/userlist — Включить/выключить список пользователей.

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

Пользователи в чат-листе FlyLink имеют разные иконки. Приведу значения этих иконок:
# красный — оператор;
# зеленый — соединение со скоростью от 10 до 100 Мбит/с;
# коричневый — соединение со скоростью от 0.2 до 5 Мбит/с;
# серый — соединение со скоростью от 0.01 до 0.1 Мбит/с;
# белый — пользователь с большой скоростью отдачи (бомба), более 100 Кб/с;
# шар — соединение со скоростью 0.005 Мбит/с;
# сервер-пользователь, который находится на хабе более 2 часов и с него скачано более 200 Мб;
# письмо — режим отсутствия;
# кирпич — пассивный режим;
# галка — пользователь, с которым было соединение.

Также одним из плюсов FlyLink является то, что программа автоматически определяет запуск в среде Wine и динамически корректирует свои настройки для исключения критических ошибок. Это придется по вкусу любому линуксоиду J.

Еще в нашем регионе пользуется большой популярностью клиент StrongDC++. Он известен как один из самых быстроразвивающихся клиентов. Его настройка близка к настройке FlyLink, так как они берут корни из одного семейства исходных кодов. Для пользователей Linux существует несколько достойных клиентов, самые известные из которых Linux DCpp и Valknut. LinuxDCpp обладает существенным минусом, так как не может качать один файл у нескольких пользователей одновременно. Кроме того, в нем не реализована работа с magnet-ссылками. Valknut — это более продвинутый клиент. Программа написана на C++ и использует кроссплатформенную библиотеку Qt для создания GUI. Valknut компилируется и выполняется в следующих операционных системах: GNU/ Linux, FreeBSD, Mac OS X и Windows. При достаточно широком функционале приложение имеет запутанный, отталкивающий многих людей интерфейс, но это лишь небольшой недостаток.

Таблица основных существующих клиентов для Direct Connect (в сокращении)

НазваниеОписаниеOSЧитыИсходные кодыСайт
NeoModus Direct Connect(он же NMDC) Первый клиент DC. Использовал Adware-баннеры.WindowsнетнетНет
DC++"отец" всех DC-клиентовWindowsнетда
ApexDC++(ранее назывался PeerWeb DC++) — модификация StrongDC++, отличается изменённым интерфейсом, набором смайликов.Windowsнетдаhttp://www.apexdc.net/
StrongDC++Поддерживает многопотоковое скачивание, смайлики и множество полезных дополнительных настроек. Его используют на большинстве русских хабов.Windowsнетдаhttp://strongdc.sourceforge.net/
ApexDC++ speed modМодификация ApexDC++, позволяющая устанавливать лимит скорости скачивания для любого пользователя, банить пользователей, игнорировать личные сообщения, автоматически выпрашивать слоты, есть функция автобана по размеру расшаренных данных и количеству открытых на отдачу слотов ниже заданного минимума и т. д. В настоящий момент разработка замедлилась, последняя версия (устойчивая к эксплоиту-падению клиента и с отключенной проверкой версии апекса на сайте) Многие наработки клиента были взяты за основу разработчиками GreyLink и FlyLink.Windowsнетдаhttp://sourceforge.net/projects/
apexdcspeedmod/
AvaLinkDC++Модификация ApexDC++ speed mod, содержащая также ряд отсутствующих в других клиентах возможностей. По функциональности сравнима с PeLinkDC++. Клиент создан для хаба локальной сети avangard-dsl.Windowsданетhttp://www.avangard-hub.ru/AvaLink.html
GreyLinkDC++Клиент на базе ApexDC++ speed mod, содержащий как ряд отсутствующих в других клиентах возможностей (например, поддержка частичных списков файлов, анимированные смайлы), так и множество читов (fake share, ограничения скорости, симуляция других клиентов и т. п.). Запрещён к использованию на многих хабах. Из-за введения новой функции, эксплуатирующей баг в большинстве клиентов, приводящий к вылету программы, сайт программы временно закрыт, а разработчики ушли в подполье. Нарушая лицензию GPL, распространяется без исходных текстов.Windowsданетhttp://home.tula.net/greylink_dc/
PeLinkDC++Аналог GreyLinkDC++. Также распространяется без исходных кодов.Windowsданетhttp://pepelink.narod.ru/
FlyLinkDC++(ранее DomolinkDC++) — основан на ApexDC++ speed mod, специализируется на работе в ADSL и LAN сетях.Windowsнетдаhttp://www.flylinkdc.ru/
RevConnectМод DC++, главным отличием является возможность многопоточного скачивания файлов с пользователей, что позволяет увеличить скорость в несколько раз. Использует свою модификацию сетевого протокола Kademlia.Windowsнетдаhttp://www.revconnect.com/
LinuxDC++Клиент для OC GNU/Linux.Linuxнетдаhttps://launchpad.net/linuxdcpp
Valknut(ранее DCGUI, и dcgui-qt) открытый кросс-платформенный клиент на базе библиотеки qtLinux/FreeBSD/
MacOSX/
Windows/OS/2нетдаhttp://wxdcgui.sourceforge.net
MediaDC.Net++Альтернативный клиент, НЕ клон DC++, из основных преимуществ — быстрый просмотр музыки/фильмов без скачки.нетнетhttp://mdc.505.ru/
directKonnectКлиент для OC GNU/Linux, основан на Qt3Linuxнетдаhttp://sourceforge.net/projects/directkonnect/
MobileDCКлиент DC для смартфонов на базе SymbianOS 7.0 UIQSymbianOSнетhttp://mobiledc.sourceforge.net/
DC-QTКлиент для ОС Linux и MacOSX с раздельной архитектурой ядро-guiLinux/MacOSXнетдаhttp://sourceforge.net/projects/dc-qt/
NanoDCDC-клиент с ncurse интерфейсомLinuxнетдаhttp://sourceforge.net/projects/nanodc/
PHP DC++Написанный на PHP с применением AJAX DC-клиентПлатформонезависимаянетдаhttp://sourceforge.net/projects/phpdccli/
AirDC++Реинкарнация клиента fulDC++Windowsнетдаhttp://sourceforge.net/projects/airdc/
QuantumDCDC-клиент с поддержкой протоколов NMDC, ADC и QSDCWindowsнетдаhttp://sourceforge.net/projects/quantumdc/
SababaDCКлиент, основанный на исходниках DC++, поддержка нескольких источников, интеграция с IEWindowsнетдаhttp://sourceforge.net/projects/sababadc/
CuRZed DC++Клиент для Windows, Linux с поддержкой скриптов (lua/shell scripting), читов и спам-хаковWindows/
Linuxдадаhttp://sourceforge.net/projects/crzdc/
ShakespeerКлиент для MacOSX, с поддержкой основных функций, разработка GoogleMacOSXнетдаhttp://code.google.com/p/shakespeer/



Заключение

Несмотря на то, что DC — один из самых старых р2р-протоколов, его популярность год от года не убывает. Сейчас он прижился в локальных сетях по всему миру. Если в вашей сети еще нет DC-хаба, установите его!

В следующий раз мы рассмотрим работу с Verlihub и обсудим некоторые тонкости настройки DC-хаба. До скорых встреч.

Brian Warner, Minsk 2009


Компьютерная газета. Статья была опубликована в номере 27 за 2009 год в рубрике интернет

©1997-2024 Компьютерная газета