31

Я хочу узнать больше о bittorrent способ обмена файлами. Я - технически продвинутый пользователь (программист), поэтому технически продвинутый материал не проблема, но он должен быть кратким и конкретным. Мне нужна хорошая книга ресурсов / веб, которая объясняет общую архитектуру bittorrent.

Меня не интересуют детали, только общая архитектура и терминология, такая как семена, коллеги и т.д.

Какие-либо предложения?

4 ответа4

29

Обзор работы bittorrent:

  • У вас есть сверстники и трекер. Все сверстники в любой момент - это рой. Обычная ситуация - один или несколько пиров имеют полный набор файлов и хотят сделать его доступным для других пиров.

  • Одноранговый узел получает файл .torrent, который будет иметь среди прочего A) хэш SHA-1 набора файлов, B) URL-адрес трекера и C) количество фрагментов, на которые разбит файл, а также хэш SHA-1 для каждой части. Размер кусков определяется самим торрентом.

  • Затем узел подключается к трекеру, используя URL-адрес, указанный в торренте. Трекер отвечает списком пиров. Трекеры общаются по HTTP через порт 80 или 443.

  • Пир затем выбирает другого пира, используя информацию из трекера, и связывается с ним напрямую, чтобы установить сеанс обмена, пытаясь получить кусок. Обратите внимание, что сеансы обмена напрямую выполняются одноранговыми узлами, и трекер НЕ участвует в передаче. Трекер только предоставляет информацию.

  • Как только у узла есть кусок, он проверяет его по хешу SHA-1 и записывает его в файл. Затем он может предложить этот кусок при выборе другого пира. Последующие обменные сессии включают "торговые" фигуры. Я полагаю, что сверстники, как правило, дадут вам первую часть, если у вас нет других частей.

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

  • Когда узел имеет все части, весь файл сверяется с хэшем SHA-1 набора файлов. Затем он становится сеялкой и теперь ничего не делает, кроме как помогает повысить доступность набора файлов. Сверстники, которые не имеют всех частей, являются пиявками.

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

  • Хэш SHA-1 - это то, как трекер и одноранговые узлы "знают", какой файл должен быть скопирован. Имена файлов в торренте не используются для идентификации данных. Куски, которые не проверяются на наличие ошибок в файле .torrent, выбрасываются. Сверстники, которые постоянно посылают плохие куски, игнорируются другими сверстниками и в конечном итоге не смогут соединиться ни с кем в рое.

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

  • Если вы публикуете что-то через BitTorrent, лучше всего заполнить файл, если вы хотите сделать его доступным. Другие коллеги будут помогать вам, так как большинство программного обеспечения BitTorrent реализует алгоритмы, которые предпочитают пытаться распределить вещи среди максимально возможного числа пиров, чтобы максимизировать параллельные соединения. Таким образом, BitTorrent может помочь вам опубликовать вещи и сэкономить расходы на пропускную способность.

18

Хорошая статья на эту тему здесь

      http://davidhales.name/posters/patarin-hales-delis-poster6.pdf (Примечание - это файл .pdf который можно просмотреть с помощью Acrobat Reader.)

Вот файл изображения, который кто-то сделал из его содержимого:

Patarin-Hales-гастрономы-poster6

8

На YouTube есть довольно симпатичное видео, которое объясняет это визуально с помощью картонных вырезов. Это не очень техническое объяснение, но оно отлично подходит для объяснения идеи BitTorrent людям простым и понятным способом.

как BitTorrent работает на YouTube

2

Обзор протокола одноранговых сообщений.

Клиент может использовать два протокола для обмена информацией с пирами, TCP или uTP (по UDP). Эти данные соответствуют спецификации протокола bittorrent, сообщения однорангового узла.

Таким образом, программно должно быть установлено соединение между двумя клиентами. После того, как соединение установлено (через TCP или uTP), клиент инициирует битрент-квитирование, которое получило информацию удаленного узла (ip & port) с трекера или через DHT. Это рукопожатие содержит info_hash, который идентифицирует торрент, о котором будет происходить соединение.

Давайте сначала посмотрим, как данные Torrent усекаются по протоколу. Часть - это часть данных, которыми вы делитесь через сеть. Не путать с блоком, который является частью куска, завернутого в пакет. Блок является зернистость делить кусок через пакеты, а часть является зернистость делить Torrent через коллег.

Когда соединение начинается, оба клиента (локальный клиент, которого я назову LC, и удаленный клиент, RC ) блокируются и не заинтересованы. Choked означает «Я не буду отвечать ни на одно из ваших сообщений, слишком занят, но я мог бы принять их во внимание». Поэтому Unchocked означает "Я отвечу на ваши сообщения". Заинтересованный означает, конечно, что я хотел бы некоторые кусочки у вас есть. Следовательно, состояние соединения между двумя одноранговыми узлами может быть определено с помощью этих четырех состояний: LC_chocked?, LC_interested?, RC_chocked?, RC_interested? Чтобы предупредить RC, что я (не) забит или (не) заинтересован, я должен отправить ему (не) заинтересованные и (не) забитые сообщения, и взаимно.

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .