Direct Connect ( DC ) — это одноранговый протокол обмена файлами . Клиенты Direct Connect подключаются к центральному хабу и могут загружать файлы напрямую друг у друга. Advanced Direct Connect можно считать протоколом-преемником.
Хабы содержат список клиентов или пользователей, подключенных к ним. Пользователи могут искать файлы и загружать их с других клиентов, а также общаться с другими пользователями.
NeoModus была основана как компания, финансируемая рекламным ПО «Direct Connect» Джоном Хессом в ноябре 1999 года, когда он учился в старшей школе. [1]
Первый сторонний клиент назывался «DClite», который никогда полностью не поддерживал аспекты обмена файлами протокола. Hess выпустил новую версию Direct Connect, требующую простой ключ шифрования для инициирования соединения, блокируя сторонних клиентов. Ключ шифрования был взломан, и автор DClite выпустил новую версию DClite, совместимую с новым программным обеспечением от NeoModus. Некоторое время спустя DClite был переписан как Open Direct Connect с целью иметь пользовательский интерфейс MDI и использовать подключаемые модули для протоколов обмена файлами (похожих на MLDonkey ). Open Direct Connect также не имел полной поддержки всех аспектов обмена файлами протокола, но порт на Java имел. Позже другие клиенты, такие как DCTC (Direct Connect Text Client) и DC++, стали популярными.
Архив DCDev [2] содержит обсуждения изменений протокола для разработки DC в 2003–2005 годах.
Протокол Direct Connect — это текстовый компьютерный протокол, в котором команды и их информация отправляются открытым текстом, без шифрования в оригинальном программном обеспечении NeoModus ( шифрование доступно как расширение протокола). Клиенты подключаются к центральному серверу, выступающему в качестве «концентратора». Этот центр обеспечивает обнаружение контента и позволяет клиентам устанавливать прямые соединения между собой для передачи контента. Поскольку этот центральный центр имеет дело только с метаданными, он не имеет даже близко таких же требований к пропускной способности, как если бы он также обслуживал сам контент; оценка показывает, что для обработки 1000 пользователей потребуется около 2,5 Мбит/с пропускной способности. [3]
Официальной спецификации протокола нет, что означает, что каждый клиент и концентратор (кроме оригинального клиента и концентратора NeoModus) были вынуждены провести обратную разработку информации. Таким образом, любая спецификация протокола, на которую может ссылаться эта статья, вероятно, неточна и/или неполна. [4]
Клиент-серверный (а также клиент-клиентский, где один клиент действует как «сервер») аспект протокола предусматривает, что сервер отвечает первым при установлении соединения. Например, когда клиент подключается к сокету концентратора , концентратор первым отвечает клиенту.
В протоколе отсутствует указанная кодировка символов по умолчанию для клиентов или концентраторов. Исходный клиент и концентратор используют кодировку ASCII вместо кодировки операционной системы . Это позволяет перейти на кодировку UTF-8 в более новом программном обеспечении.
Порт 411 является портом по умолчанию для концентраторов, а 412 — для клиент-клиентских соединений. Если какой-либо из этих портов уже используется, номер порта увеличивается до тех пор, пока не будет найден номер свободного порта для использования. Например, если используются 411, 412 и 413, то будет использоваться порт 414.
Адреса концентраторов имеют следующий вид: dchub://example.com[:411], где 411 — необязательный порт.
Глобальной схемы идентификации не существует; вместо этого пользователи идентифицируются по своему псевдониму на уровне хаба.
Входящий запрос на соединение клиент-клиент не может быть связан с реальным соединением. [5]
Результат поиска не может быть связан с конкретным поиском. [6]
Протокол поддерживает возможность выгнать или переместить (перенаправить) пользователя на другой хаб. Если пользователь выгнан, хаб не обязан сообщать этому пользователю конкретную причину, и нет ограничений на то, куда может быть перенаправлен пользователь. Однако, если другой клиент, находящийся у власти, дает хабу команду выгнать, этот клиент может отправить уведомление перед этим. Перенаправление пользователя должно сопровождаться указанием причины. Эквивалент HTTP referer отсутствует.
Хабы могут отправлять пользовательские команды клиентам. Эти команды являются только командами сырого протокола и используются в основном для упрощения определенной задачи. Например, хаб не может отправить пользовательскую команду, которая заставит браузер по умолчанию посетить веб-сайт. Однако он может добавить команду "+rules" (где "+" указывает хабу, что это команда - это может отличаться) для отображения правил хаба.
Одноранговая часть протокола основана на концепции «слотов» (аналогично количеству открытых позиций для работы). Эти слоты обозначают количество людей, которым разрешено скачивать у пользователя в любой момент времени, и контролируются клиентом.
В клиент-клиентских соединениях стороны генерируют случайное число, чтобы определить, кому первому следует разрешить загрузку, и побеждает клиент с большим числом.
Для передачи загрузок и подключения к концентратору требуется протокол TCP , тогда как для активного поиска используется протокол UDP .
Пользователь может находиться в двух режимах: «активном» или «пассивном». Клиенты, использующие активный режим, могут загружать данные от любого пользователя сети, в то время как клиенты, использующие пассивный режим, могут загружать данные только от активных пользователей. В NeoModus Direct Connect пользователи пассивного режима получают результаты поиска других пользователей пассивного режима, но сам пользователь не сможет ничего загрузить. В DC++ пользователи не получат эти результаты поиска. В NeoModus Direct Connect всем пользователям будет отправлено не более пяти результатов поиска на запрос. Если пользователь выполнил поиск, DC++ ответит десятью результатами поиска, когда пользователь находится в активном режиме, и пятью, когда пользователь находится в пассивном режиме. Пассивные клиенты будут отправлять результаты поиска через концентратор, в то время как активные клиенты будут получать результаты напрямую.
Разделителями протокола являются "$", "|" и U+0020 ПРОБЕЛ . Протокол имеет для них (и нескольких других) escape-последовательность , и большинство программ правильно используют их в последовательности входа (Lock to Key). По какой-то причине эта escape-последовательность была проигнорирована разработчиками DC++, и они используют эквивалент HTML, если эти символы должны быть видны пользователю.
Продолжается интерес к таким функциям, как рейтинги и языковые пакеты. Авторы DC++ также предложили полную замену протокола Direct Connect, названную ADC, или неофициально Advanced Direct Connect. ADC использует ту же топологию сети , концепции и терминологию, что и исходный протокол. [7]
Одним из примеров дополнительной функции протокола, по сравнению с исходным протоколом, является трансляция Tiger-Tree Hashing общих файлов (TTH). Преимущества этого включают проверку того, что файл загружен правильно, и возможность находить файлы независимо от их имен.
Поскольку протокол позволяет концентраторам перенаправлять пользователей на другие концентраторы , вредоносные концентраторы перенаправляли пользователей в места, отличные от реальных концентраторов Direct Connect, что фактически приводило к атаке Distributed Denial of Service . Концентраторы могут изменять IP в клиентских соединениях, указывая на потенциальную жертву. [8] [9] [10]
Уязвимость CTM появилась в 2006–2007 годах, в этот период вся сеть Direct Connect пострадала от DDoS-атак. [11] [12] Эта ситуация побудила разработчиков более серьезно отнестись к вопросам безопасности. [13]
По состоянию на февраль 2009 г. [14] [15] [16] [17] [12] было предложено расширение для клиентов , позволяющее атакуемой стороне узнать концентратор, отправляющий подключающихся пользователей.
Фонд сети прямого подключения (DCNF) — некоммерческая организация, зарегистрированная в Швеции, целью которой является улучшение сети постоянного тока путем улучшения программного обеспечения, протоколов и других услуг в сети. [18]
DCNF ведет список статей, документов и другой документации, которая относится к DC. [19]