?

Log in

No account? Create an account
Ilya Matveev

> Recent Entries
> Archive
> Friends
> Profile

October 16th, 2009


Previous Entry Share Flag Next Entry
02:16 am - Прямой обмен файлами по 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 (это я точно не проверял, но вроде должно работать).


(21 comments | Leave a comment)

Comments:


[User Picture]
From:lina_nn
Date:October 16th, 2009 09:00 am (UTC)
(Link)
Какие у тебя иногда офигительно интересные посты бывают :)))) Как на китайском :))))
Выложил бы фотку киндера, что ли. Для равновесия :)
From:(Anonymous)
Date:October 16th, 2009 10:11 am (UTC)
(Link)
http://openbittorrent.com/

Они говорят, что все что нужно, это прописать их адрес в торренте. В этом случае не надо прописывать peer-ы, все будет работать если у кого-то сменится динамический ip и т.д. и т.п. :)
From:(Anonymous)
Date:October 16th, 2009 10:11 am (UTC)
(Link)
Сорри, не туда ответил :)
[User Picture]
From:elbior
Date:October 17th, 2009 07:05 am (UTC)
(Link)
спасибо за информацию. Пригодится
From:(Anonymous)
Date:November 3rd, 2009 12:40 am (UTC)
(Link)
Гмм... Никогда не думал, что такая вещь может являться для кого-либо, способного её проделать, открытием... Но наверное просто неправильно думал...
С t.ru пользуясь DHT можно "на халяву" скачивать какие-то вещи, как я понимаю DHT траффик ещё и не учитывается трекером, а может и учитывается но не полностью, тоесть не сам DHT траффик, а тот траффик, который пошел только благодаря DHT... :)
Но DHT включен не во всех торрентах...
From:(Anonymous)
Date:November 3rd, 2009 12:59 am (UTC)
(Link)
Кстати, если стоит задача в передаче файлов из точки А в точку Б, то для этого можно так же воспользоваться отличной вещью под названием HTTP File Server(rejetto.com/hfs/), весит она правда в двое больше, чем uTorrent и может быть в некоторых случах более сложной в настройке, хотя в других наоборот более простой...

Я бы подробнее рассказал, но боюсь это будет слишком, да и попробовал я несколько её плюсов боле-менее кратко и понятно описать, в результате получившийся текст получился очень похожим на рекламу, поэтому я его стёр... :)
[User Picture]
From:seleko_somme
Date:October 14th, 2010 07:49 am (UTC)
(Link)
таким образом обменивался фотками из поездки с друзьями в другом городе...
правда не осилил, чтобы оно по DHT само нашло... пришлось руками ипишник вколачивать.

по dht это реально вообще дождаться?
From:(Anonymous)
Date:January 26th, 2011 10:07 pm (UTC)
(Link)
Реально, достаточно скачать один и тот же файл с трекера и все. Но есть вероятность, что этого не произойдет никогда :)
From:(Anonymous)
Date:January 20th, 2011 08:23 pm (UTC)
(Link)
вопрос - а что делать с динамическим ip? beeline например - у всех один и тот же ip адрес. то есть уже два ограничения - нет своего постоянного ip и твой ip - не только твой. как быть?
[User Picture]
From:ilya_314
Date:January 20th, 2011 08:39 pm (UTC)
(Link)
В случае с динамическим DNS можно использовать какой-нибудь бесплатный сервис динамического DNS, чтобы он сопоставил доменное имя и ваш адрес.
http://ru.wikipedia.org/wiki/DDNS

Если провайдер выдает реальный ip (иногда за это надо дополнительно заплатить), тогда компьютер виден по этому ip отовсюду. Если же адрес ip не реальный, то значит клиенты провайдера находятся за NAT, который снаружи может иметь один адрес, а устройства внутри имеют адреса из специального диапазона. Из внутренней сетки виден внешний мир, но снаружи взять и достучаться до конкретного компьютера нельзя. Т.е. инициировать соединение можно только к реальному адресу. Есть хитрые способы как обойти это, но это уже отдельная тема.

Вобщем главное - нужен реальный ip, тогда все будет хорошо.
From:(Anonymous)
Date:January 26th, 2011 10:10 pm (UTC)
(Link)
Если они у одного провайдера, есть вероятность, увидеть друг-друга по внутренним адресам. Но в билайна они тоже динамические.
[User Picture]
From:ilya_314
Date:January 27th, 2011 05:44 am (UTC)
(Link)
Да, конечно, такое тоже может быть. Кроме того во внутренней сетке провайдера могут быть высокие скорости.
[User Picture]
From:yirtpoid
Date:January 25th, 2011 09:10 am (UTC)
(Link)
Спасибо за инфу, очень полезная.
Но беда в том, что у меня и моих друзей айпишники серые:-(
Пробовал какую-то прогу с созданием туннеля VPN, так она мне в венике сеть напрочь снесла, пришлось переустанавливать. Больше не заморачиавлся, однако периодически такая нужда есть.
Что можно придумать в этом случае?
[User Picture]
From:ilya_314
Date:January 26th, 2011 08:04 pm (UTC)
(Link)
Если оба пользователя находятся за NAT-ами и имеют локальные адреса, то создание P2P соединения является проблемой. Вообще говоря существуют техники "NAT traversal", которые позволяют установить прямой канал, но для UDP трафика, не для любых типов NAT и при содействии третьего узла. Все эти методы тут не помогают. В данном случае могу лишь порекомендовать одному из вас получить реальный ip, тогда хотя-бы с одной стороны можно будует инициировать соединение.
From:(Anonymous)
Date:January 26th, 2011 10:14 pm (UTC)
(Link)
Еще можно попросить у провайдера сделать проброс порта на ваш внутренний IP, тогда можно использовать серый адрес, но торрент настроить именно на этот порт.
[User Picture]
From:ilya_314
Date:January 27th, 2011 05:45 am (UTC)
(Link)
Не слышал, чтобы такую услугу оказывали. Реальные адреса некоторые дают за деньги. Но если такое есть, то конечно это выход.
[User Picture]
From:Сергей Горбунов
Date:March 9th, 2011 12:35 pm (UTC)
(Link)
спасибо! пригодится)
[User Picture]
From:Екатерина Арисова
Date:February 25th, 2012 01:06 am (UTC)
(Link)
А можно же просто сделать торрент, и этой файл по электронной почте отправить. Получатель его добавит в торрент и скачает.)
[User Picture]
From:tainam_net
Date:May 21st, 2013 09:56 pm (UTC)
(Link)
Единственный грамотный ответ здесь у Екатерины. Светлая голова.
Остальное - ярмарка тщеславия.
[User Picture]
From:vcsasha
Date:January 17th, 2019 01:35 pm (UTC)
(Link)
Это такой троллинг?
Люди пишут вполне адекватные вещи (не считая вашего коммента).
[User Picture]
From:vcsasha
Date:January 17th, 2019 01:32 pm (UTC)
(Link)
Насколько я понимаю: если у обоих компов серые IP (а это сейчас стандарт), то не получится - комп адресата не найдёт ваш комп, ибо он скрыт за NAT.

> Go to Top
LiveJournal.com