eDonkey2000 (сеть)

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

eDonkey2000, eDonkey, eD2k — файлообменная сеть, построенная по принципу P2P на основе сетевого протокола прикладного уровня MFTP. Распространённые в Рунете неформальные названия: «ослик», «осёл»"[1] пользователи сети — «ословоды».

Сеть состоит из нескольких миллионов клиентов и нескольких десятков серверов, взаимодействующих между собой. Клиентами являются пользователи, загружающие файлы, и пользователи, имеющие полные версии файлов («полные источники»). Серверы позволяют находить опубликованные файлы и других пользователей, имеющих эти файлы (полностью или частично). Сами файлы через серверы не проходят.

Поиск[править | править исходный текст]

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

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

Кроме того, ссылки на файлы публикуются на различных форумах в Интернете, в виде так называемых «релизов».

Загрузка[править | править исходный текст]

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

Принцип работы: Client Z имеет все части Файла (символы прописных букв представляют части файла). Client W, X, и Y хотят загрузить Файл. Начиная с Client X и Client Y, оба имеют различные части Файла, они могут не только получить файл от Client Z, но и могут посылать файл друг другу. Это позволяет скачивать файл намного быстрее вместо того, чтобы загружать канал Client Z. Client W может запустить загрузку файла, даже если источник файла (Client Z) больше не имеет достаточной ширины канала для отсылки.

Межсерверные соединения[править | править исходный текст]

Периодически серверы связываются друг с другом на короткое время. Во время этого сеанса связи сервер, объявляя о своём существовании, посылает список всех других известных ему серверов. Таким образом, серверы поддерживают список других активных серверов. Когда клиент подключается к серверу, сервер может выдать ему список известных ему серверов.

Хеш-алгоритм ed2k[править | править исходный текст]

Файлы в сети eDonkey идентифицируются благодаря использованию корневой MD4-хеш суммы MD4-сумм кусочков файла. Это позволяет считать одинаковыми файлы с разными названиями, но одинаковым содержимым, и различать файлы с разным содержимым, но одинаковым названием.

  1. Файлы делятся на равные кусочки по 9,728,000 байт (9500 КБ) и остаток.
  2. Для каждого кусочка вычисляется 128-битная MD4-хеш сумма.
  3. Если размер файла кратен 9,728,000 байтам, то есть размер остатка равен 0, всё равно рассчитывается сумма для этого пустого остатка.
  4. Затем все рассчитанные суммы объединяются в один единый массив (хеш-список) и рассчитывается MD4-хеш сумма всего этого массива. Эта сумма является корневой MD4-суммой — и идентификатором в сети eDonkey.
  5. Если размер файла меньше 9,728,000 байт, то хеш-список не составляется, а идентификатором файла служит MD4-хеш сумма всего файла.

Существует второй вариант алгоритма вычисления контрольной суммы файлов, дающих другой результат для файлов, размер которых кратен размеру секции, то есть с размерами 9,728,000 байт, 19,456,000 байт и т. д. Оригинальный алгоритм (использовавшийся в edonkey2000 до версии v0.5.0) содержит ошибку (особенность), благодаря которой, для файлов, кратных 9,728,000 байт, добавляется контрольная сумма пустой секции. Эту особенность учитывают в расчётах далеко не все программы (например, emule учитывает, а shareaza нет). В edonkey2000 с версии v0.5.0 до версии v1.4.3 эта «особенность» исправлена.

Отличия от оригинального алгоритма в следующем:

  1. Если размер файла меньше или равен 9,728,000 байт, то в качестве идентификатора используется MD4 сумма всего файла.
  2. Если размер файла кратен 9,728,000 байт, то контрольная сумма «пустого» остатка не добавляется.

Различия алгоритмов столь минимальны (и возникают только в конце расчёта суммы), что позволяет рассчитать обе суммы одновременно — практически без потери производительности. Вторая версия суммы для таких «особенных» файлов может быть указана, например, в комментариях (так делает программа avdump).

Вот, например, контрольные суммы для файлов, состоящих из одних нулевых кодов для разных «вариантов» алгоритма. Получить их (файлы) можно, например, такой командой bash для unix-систем:

for i in 1 2 3;do dd if=/dev/zero of=zero$i bs=9728000 count=$i;done
Размер файла (байт) "Оригинальный" алгоритм ed2k "Исправленный" алгоритм ed2k Сумма MD5
9,728,000 fc21d9af828f92a8df64beac3357425d d7def262a127cd79096a108e7a9fc138 0a62f20c78368021785dbb79b826d26c
19,456,000 114b21c63a74b6ca922291a11177dd5c 194ee9e4fa79b2ee9f8829284c466051 d01f6501678711bdaf6ef11237117c95
29,184,000 1932517fb346b94b5fbdcab55bf92169 9a68abb94d13f1e6ea13e968279652d7 fc0548e86e6106b68ffc248d871b8c2a

ED2K Ссылка[править | править исходный текст]

Используется для обмена файлами и публикации на порталах.

Пример[2]:

ed2k://|file|[Имя файла]|[Размер файла]|[ ed2k хеш файла ]
|h=[ AICH хеш файла]|p=[ Md4 хеш 1ой части ]:[ Md4 хеш 2ой части ]:...
|s=[ URL ссылка на файл]|/|sources,[ IP адрес источника ]:[ Порт источника]|/

Чаще всего встречается короткий вид.

ed2k://|file|[Имя файла]|[Размер файла]|[ ed2k хеш файла ]|/
  • Имя файла рекомендуется URI кодировать.
  • Размер файла — точный размер в байтах.

h — AICH (Advanced Intelligent Corruption Handler)[править | править исходный текст]

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

Рекомендуется публиковать его в месте со ссылкой, тогда он сразу становится доверяемым хешем и сразу же может использоваться для восстановления файла. Если же его не публиковать вместе со ссылкой, то клиенту необходимо будет получить один и тот же AICH хеш из нескольких источников, прежде чем этот хеш будет признан достоверным.

Расчет AICH хеша[править | править исходный текст]

Для получения хеша стандартный ed2k чанк (9728000 байт) делится на 53 части (52x 180KB и 1x 140KB). Каждая часть позже обрабатывается алгоритмом sha1. Далее пары хешей снова проходят через алгоритм sha1 до тех пор, пока не получается один единственный хеш.

p — набор MD4 хешей[править | править исходный текст]

В этом поле перечисляются MD4 хеши ed2k чанков через двоеточие «:». Позволяет проверять части на соответствие даже если нет возможности получить набор хешей другим путём. Например, если единственным источником файла является URL ссылка.

s — URL ссылка[править | править исходный текст]

Позволяет при отсутствии ed2k источников загрузить файл по URL ссылке. Обычно сервера доступны постоянно в отличие от ed2k источников которыми в основном являются персональные компьютеры подключенные к сети интернет. Благодаря этому первичная загрузка происходит с сервера а дальнейшее распространение идет уже в сети ed2k что разгружает сервер и увеличивает доступность файла.

Перед вставкой ссылка должна быть URI кодирована.

sources — источники[править | править исходный текст]

Позволяет указать ed2k источники, к которым можно обратиться для загрузки файла. Это даёт возможность начать загрузку файла без подключения к ed2k серверу просто подключившись к перечисленным источникам напрямую.

Данное поле имеет смысл использовать только если источник имеет постоянный IP адрес.

Коллекции[править | править исходный текст]

Для публикации на порталах ссылки могут быть объединены в коллекции.

Lugdunum server[править | править исходный текст]

  • Lugdunum server — серверное ПО сети eDonkey2000. Большинство серверов ed2k-сети работает на Lugdunum. Он более масштабируем и эффективен, чем оригинальный MetaMachine eDonkey server.

См. также[править | править исходный текст]

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

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

  1. Неформальное название «ослик», «осёл», и «ослик ИЕ» также может относиться к браузеру Microsoft Internet Explorer.
  2. ссылка разбита на строчки для удобочитаемости