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-сумм кусочков файла. Это позволяет считать одинаковыми файлы с разными названиями, но одинаковым содержимым, и различать файлы с разным содержимым, но одинаковым названием.
- Файлы делятся на равные кусочки по 9,728,000 байт (9500 КБ) и остаток.
- Для каждого кусочка вычисляется 128-битная MD4-хеш сумма.
- Если размер файла кратен 9,728,000 байтам, то есть размер остатка равен 0, всё равно рассчитывается сумма для этого пустого остатка.
- Затем все рассчитанные суммы объединяются в один единый массив (хеш-список) и рассчитывается MD4-хеш сумма всего этого массива. Эта сумма является корневой MD4-суммой — и идентификатором в сети eDonkey.
- Если размер файла меньше 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 эта «особенность» исправлена.
Отличия от оригинального алгоритма в следующем:
- Если размер файла меньше или равен 9,728,000 байт, то в качестве идентификатора используется MD4 сумма всего файла.
- Если размер файла кратен 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.
См. также
[править | править код]- eMule — наиболее распространённый свободный клиент сети eDonkey2000 для Windows
- iMule — кроссплатформенный, защищённый, анонимный клиент для сетей I2P и Kad сетей
- mlDonkey — свободный кроссплатформенный клиент с открытым исходным кодом
- aMule — кроссплатформенный клиент, разработанный на основе xMule, lMule и eMule
- JMule — клиент к файлообменной сети eDonkey2000, написанный на Java.
- lphant — бесплатный кроссплатформенный клиент
- Shareaza — свободный клиент для Windows, поддерживающий несколько P2P сетей
Ссылки
[править | править код]- Официальный сайт. Закрытый (прекративший работу) (англ.)
- Алгоритм ed2k_hash (англ.)
- eDonkey понарошку закрылась на compulenta.ru (13 сентября 2006)
- RHash консольная Open Source программа, вычисляющая ED2K и AICH хэши и EDonkey ссылки.
Примечания
[править | править код]- ↑ Неформальное название «ослик», «осёл», и «ослик ИЕ» также может относиться к браузеру Microsoft Internet Explorer.
- ↑ ссылка разбита на строчки для удобочитаемости