Как работает Bittorrent?


34

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

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

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

Ответы:


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 может помочь вам опубликовать вещи и сэкономить расходы на пропускную способность.


1
Прекрасный ответ! Одно замечание: я полагаю, что семена предпочитают семена редкие , а не первые кусочки в первую очередь. Не уверен, что это алгоритм, но это то, что я однажды получил из торрент-программы, когда возился с настройками.
Галлифреян


8

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

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


3
+1 Полезное видео. Показал это моему отцу. У него не было вопросов после этого. Поразительно. :)
zero2cx

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 имеет unchocked его, то он может послать запрос сообщение попросить блок , принадлежащий к одной части он знает LC имеет благодаря битовым сообщениям.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.