Advanced Direct Connect

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Advanced Direct Connect (ADC) — протокол для пиринговых сетей, основанный на протоколе Direct Connect (DC). ADC-клиенты подключаются к центральному серверу и обмениваются файлами напрямую между участниками сети.

История создания[править | править код]

Протокол ADC был создан как логическое развитие протокола Direct Connect c целью устранения его недостатков. Инициаторами создания нового протокола стали Jacek Sieka в сотрудничестве с Jan Vidar Krey’s. Ими были подготовлены черновики стандарта DCTNG . Первая версия протокола появилась в 2004 году, а первый официальный релиз состоялся 1 декабря 2007 года. 2 декабря 2007 года вышла финальная версия протокола ADC 1.0[1].

Версия 1.0 описывает и предлагает следующие функции:

  • разные шары[что?] для каждого хаба;
  • сквозная идентификация пользователей;
  • изменение псевдонима пользователя без необходимости переподключения;
  • непосредственный поиск между клиентами (на 18 февраля 2012 ни в одном DC клиенте не реализован);
  • улучшенная вместимость хаба;
  • передача, защищённая паролем (Tiger Hash) (при включении сильно нагружается процессор, поэтому на практике не используется);
  • кодировка UTF-8.
  • поддержка работы по протоколу IPv6.
  • шифрование трафика.

Недостатки протокола ADC 1.0.1[править | править код]

  • экранирование часто встречающихся символов (например символа пробела), увеличивающее трафик.
  • количество разделителей по сравнению с протоколом NMDC уменьшено, но не сведено к одному, что необходимо для максимально простой обработки команд.
  • лимит пользователей одного хаба — 1 048 575 пользователей (ограничение 20-битного SID’а). Данное ограничение невозможно обойти, поэтому ADC строго фиксирован в плане масштабирования.
  • из-за непродуманной системы Feature broadcast клиенты часто вынуждены отправлять несколько команд подряд. Пример — пассивный пользователь с поддержкой Nat-Traversal:

FSCH AAER +TCP4-NAT0 TO4172403789 ANdvdrip

FSCH AAER +NAT0 TO4172403789 ANdvdrip

В первом случае пользователь отправляет запрос всем активным пользователям, во втором всем пассивным, поддерживающим Nat Traversal. Эти запросы нельзя объединить в один, так как поддержка/неподдержка всех перечисленных команд обязательна. Для простой интерпретации между ними можно поставить логическое «и». Возможности указать «или» в протоколе не предусмотрено. Большинство хабов не пропускает вторую команду из-за лимита на количество запросов в единицу времени, и пользователи получают неполные списки ответов. Хабы, пропускающие два идущих подряд поисковых запроса, увеличивают свой трафик вдвое.

  • протокол ADC, как и NMDC, является излишне централизованным: хабы заведуют установкой всех соединений между пользователями.

Это увеличивает частоту пересылок команд и исходящий трафик хабов, что является не необходимым, и даже излишним. В протоколе предусмотрен прямой поиск между клиентами, минуя хаб, однако, на практике он не был реализован и не поддерживается ни одним клиентом.

  • протокол является полностью текстовым, что делает его наглядным для разработчиков (без преобразования), однако, увеличивает трафик и вычислительную нагрузку в несколько раз. В протоколе в бинарной форме можно было бы передавать все числа, ключи команд, ключи параметров, ip-адреса, порты, tth хеши, SID, CID, PID, и другие данные. Бинарные протоколы обладают существенным преимуществом, в них данные передаются и принимаются без преобразований, в той форме, в которой они хранятся у клиентов и хабов в памяти. Это значит, что если бы использовался бинарный протокол, при получении очередной команды клиент или хаб могли бы просто скопировать участки команды в соответствующие участки памяти и сразу начать работать с ними. Одновременно с этим данные в бинарной форме максимально компактны, поэтому в бинарных протоколах не используется повышающее нагрузку на процессор сжатие. Разработчики не смогли обосновать данный выбор, однако, для рядовых пользователей и держателей хабов эффективность протокола гораздо предпочтительнее наглядности.
    Частично проблема трафика текстового протокола решена zlib-сжатием тел команд, которое также присутствует и в протоколе NMDC. Однако оно ещё больше увеличивает вычислительную нагрузку, так как, помимо преобразования типов данных, необходимо также производить распаковку и упаковку конечных команд. В протоколе NMDC из-за большой вычислительной нагрузки сжатие получается использовать только на небольших хабах.
  • проверка CID’а пользователей, для которой необходимо вычислять хеш от PID’a, также увеличивает вычислительную нагрузку на хабы.

Дальнейшая разработка протокола ADC[править | править код]

Версия протокола 1.0.1 была опубликована 2 мая 2008 года. Последнее дополнение для протокола было опубликовано в июне 2013 года (версия 1.0.3). Официальных заявлений об окончании разработки протокола не поступало.

Серверное ПО[править | править код]

ADCH++[править | править код]

ADCH++ — это хаб для сетей, использующих ADC-протокол. Он работает на Windows / Unix платформах, поддерживает скрипты lua и python, а также плагины, написанные на C++. Начиная с версии 2.5.2 добавлена поддержка выполнения плагинов от PtokaX

Сайт проекта ADCH++

Для хаба активно разрабатывается графический интерфейс в проекте ADCH++ GUI.

Сайт проекта ADCH++ GUI в данное время не актуален

Файлы доступные для скачки

DSHub[править | править код]

DSHub написан на кроссплатформенном языке программирования Java (требуется JRE 1.6 и новее). Может управляться через интерфейс командной строки на сервере, графический интерфейс, чат ADC-клиента. Имеется возможность осуществлять фильтрацию чата/личных сообщений/поиска через механизм chatcontrol с использованием regex-правил. Хаб находится в активной разработке. На данный момент ПО хаба достаточно стабильно и подходит для организации хабов до 1000 пользователей (на лето 2008 г.). Имеется интерфейс для расширений на языках Java и python. В январе 2009 года автор приостановил (недоступная ссылка) работу над данным хабом.

DSHub Website

luadch[править | править код]

luadch — ADC-хаб, написанный на C, C++, Lua и функционирует в операционных системах MinGW/MSYS/NT/2000/XP и Linux/BSD/UNIX-like. Для сценариев используется язык Lua, что позволяет легко вносить дополнительную функциональность. Имеются небольшие проблемы со стабильностью (в версии 0.08). Подходит для организации хабов до 1000 пользователей и выше.

luadch веб-сайт

µHub[править | править код]

µHub (micro-Hub) — ADC хаб написанный на C под лицензией GPLv3. Работает в операционных системах Linux, Windows, BSD и других. Имеет только базовую функциональность для p2p. Крайне нетребователен к ресурсам — при 350 пользователях занимает в памяти несколько десятков килобайт ОЗУ. Возможна работа на устройствах поддерживающих ПО OpenWRT. Начиная с версии 0.3.2 поддерживает шифрование server-client, так называемую ADCS-mode. Начиная с версии 0.4.0 введена система плагинов с простым API и добавлены некоторые особо востребованные плагины.

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
123 uhub      15   0  5984 4636 1044 S  0.0  0.9   4:08.93 uhub

µHub веб-сайт

Быстрый запуск в Ubuntu | Пакеты для Debian и Ubuntu

EADC[править | править код]

EADC-hub (Erlang ADC) — ADC-хаб, написанный на Erlang. Реализация ADC не является полной, есть команды чата и поддержка плагинов (на языке Erlang). Компиляция возможна на всех платформах, поддерживаемых Erlang, включая Windows, Linux, Mac OS X. (К сожалению, автор ещё не добавил существующий код расчета TIGER на Erlang в свой проект, и программа до сих пор используется библиотеку, написанную на C). Возможности языка Erlang позволяют хабу иметь свойства, подобные Ejabberd, в частности кластеризацию и обновление кода без остановки сервера.

страница на github.com

StarLet ADC[править | править код]

StarLet ADC Hub — ПО ADC хаба под OpenVMS соответствие со спецификацией ADC 1.0, написан на C с использованием средств OpenVMS, что обуславливает высокую нагрузочную способность хаба, а также надёжность функционирования, в настоящий момент находится в разработке. Тестовая P2P-сеть, поддерживаемая StarLet ADC Хаб-ом — доступна по ссылке [adc://adc.deltatel.ru:412] (Nick/Username и пароль может быть любым и непустым). StarLet ADC — доступен в исходных текстах.

Одной из отличительных возможностей Хаб-а является «виртуальная P2P-сеть», что позволяет строить P2P-сети на одной платформе (OpenVMS Cluster) для различных групп пользователей.

Рабочий каталог проекта StarLet ADC

Клиентское ПО[править | править код]

Примечания[править | править код]

  1. ADC Protocol. Дата обращения: 18 июля 2008. Архивировано 24 ноября 2010 года.

Ссылки[править | править код]