Принцип работы протокола.Трекер
— специализированный сервер, работающий по протоколу HTTP. Трекер нужен
для того, чтобы клиенты могли найти друг друга. Фактически, на трекере
хранятся IP-адреса, входящие порты клиентов и хеш-суммы, уникальным
образом идентифицирующие объекты, участвующие в закачках. По стандарту,
имена файлов на трекере не хранятся, и узнать их по хеш-суммам нельзя.
Однако на практике трекер часто помимо своей основной функции выполняет и
функцию небольшого веб-сервера. Такой сервер хранит файлы метаданных и
описания распространяемых файлов, предоставляет статистику закачек по
разным файлам, показывает текущее количество подключённых пиров и пр.
Перед началом скачивания клиент подсоединяется к
трекеру,
сообщает ему свой адрес и хеш-сумму запрашиваемого файла, на что в
ответ клиент получает адреса других клиентов, скачивающих или раздающих
этот же файл. Далее клиент периодически информирует трекер о ходе
процесса и получает обновлённый список адресов.
Клиенты
соединяются друг с другом и обмениваются сегментами файлов без
непосредственного участия трекера, который лишь регулярно обновляет
информацию о подключившихся к обмену клиентах и другую статистическую
информацию. Для эффективной работы сети
DMX необходимо,
чтобы как можно больше клиентов были способны принимать входящие
соединения. Неправильная настройка NAT или брандмауэра могут этому
помешать.
Принцип работы
OnlyFiles:
нагрузка на распространителя файла уменьшается благодаря тому, что
клиенты начинают обмениваться данными сразу же, даже если файл не
докачан ими до конца.
При соединении клиенты сразу
обмениваются информацией об имеющихся у них сегментах. Клиент, желающий
скачать сегмент, посылает запрос и, если второй клиент готов отдавать,
получает этот сегмент. После этого клиент проверяет контрольную сумму
сегмента и оповещает всех присоединённых пиров о наличии у него этого
сегмента.
Каждый клиент имеет возможность временно блокировать
отдачу другому клиенту (англ. choke). Это делается для более
эффективного использования канала отдачи. Кроме того, при выборе — кого
разблокировать, предпочтение отдаётся пирам, которые сами передали этому
клиенту много сегментов. Таким образом, пиры с хорошими скоростями
отдачи поощряют друг друга по принципу «ты — мне, я — тебе».
Обмен
сегментами ведётся по принципу «ты — мне, я — тебе» симметрично в двух
направлениях и в случайном порядке. Клиенты периодически сообщают друг
другу об имеющихся у них сегментах. Обмен данными начинается, когда обе
стороны в нём заинтересованы, то есть каждая из сторон имеет сегменты,
которых нет у другой. Количество переданных сегментов подсчитывается, и
если одна из сторон обнаруживает, что передаёт в среднем больше, чем
принимает, она блокирует (англ. choke) отдачу. Таким образом, в протокол
заложена защита от личеров.
При получении полного файла клиент переходит в специальный режим работы, в котором он только отдаёт данные (становится сидом).
Клиенты периодически информируют
трекер об изменениях в состоянии закачек и обновляют списки IP-адресов.