Ilya Matveev (ilya_314) wrote,
Ilya Matveev
ilya_314

Category:

Прямой обмен файлами по BitTorrent протоколу без участия трекера

Задача – передать файлы через интернет напрямую от компьютера A к B без посредников. Сразу оговорюсь, чтобы такое было возможно, нужно чтобы хотя бы одна из сторон была видна напрямую по IP (т.е. иметь реальный IP или A и B в пределах одной подсети).

BitTorrent протокол позволяет скачивать/раздавать файлы между многими равноправными клиентами прямой передачей кусочков от одного к другому. Если кто-то скачал фрагмент он тут-же может его раздавать другому. Сила этого механизма в том, что данные не хранятся на сервере, однако третья сторона все-же имеется. Вот шаги которые нужны чтобы отдать файл от A к B:

  • A создает файл (торрент) в котором хранится список раздаваемых файлов и их хэш сумма, а также адрес tracker-а
  • Tracker – это сервер помогающий находить клиентам друг друга, он получает от A торрент и запоминает его
  • A передает торрент к B
  • B стартует торрент, программа обращается к tracker, тот по торренту выдает адрес A
  • A и B связываются и B качает файл

Как только B инициирует скачивание, tracker запоминает адрес B и потом, когда появится третий клиент C, то он уже от tracker получит связь с A и B, качать C будет сразу с двух мест, A и B соответственно тоже это дело подхватят в другом направлении. Таким образом все кому надо связываются и происходит процесс передачи фрагментов в разные стороны. Роль tracker лишь в том, чтобы A и B могли найти друг друга. Как оказалось это звено можно исключить. Вот все шаги на примере самого популярного клиента uTorrent:

  • A и B ставят себе uTorrent (300 kb)
  • A выполняет команду “File/Create New Torrent”, указав файл или папку которую будем передавать, поле с tracker-ами оставляем пустым
  • A стартует торрент (Add torrent), он его раздает (стартовать можно на предыдущем шаге, если поставить соответствующую галочку)
  • A пересылает торрент к B
  • B стартует торрент (Add torrent)
  • Если B видит A по IP, то в закладке Peers для этого торрента выполняем “Add peer” и указываем IP_A:port_A, порт берем из настроек utorrent на A
  • Если A видит B по IP, то аналогично можно поступить с его стороны (IP_B:port_B), но достаточно это сделать хотя бы с одной стороны
  • Процесс передачи пошел…

Плюсы:

  • Передача идет кусочками и устойчива к сбоям и разрывам.
  • Можно передавать и принимать одновременно много файлов.
  • Если задействовано более двух сторон, то если торренты обнаружатся у нескольких клиентов, то закачка будет идти параллельно со всех клиентов (в таком случае надо добавлять через “Add peer” всех кого видит данный клиент напрямую).
  • uTorrent (как и другие аналогичные программы) может легко регулировать скорость отдачи/скачивания, индивидуально для торрентов и глобально.
  • uTorrent чрезвычайно надежная программа и риск взлома компьютера может даже ниже чем при использовании ftp.

Минусы:

  • Требуется добавлять peers вручную, причем когда добавляется peer, то на той стороне должен быть уже запущен данный торрент.

Минус можно частично обойти двумя способами. Первый, наверное более удобный – можно активировать встроенный в uTorrent tracker (Advanced –> bt.enable_tracker). Этот tracker доступен по адресу http://ip:port/announce. Нужно указывать этот tracker при создании торрентов, он конечно должен быть виден всем участникам передачи файлов. Второй способ – протокол DHT (распределенная хэш таблица). Этот протокол встроен в uTorrent и другие клиенты и позволяет искать peers по хэшу перескакивая по узлам DHT сети без участия tracker-а. Т.е. если B уже имеет связь с A, то она подцепится другим торрентом и так далее. Получается, что при запуске второго и последующих торрентов можно не добавлять peers (это я точно не проверял, но вроде должно работать).

Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 21 comments