Эта статья входит в число хороших статей

BitTorrent: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 94: Строка 94:


== Принцип работы протокола ==
== Принцип работы протокола ==
[[Изображение:Torrentcomp small.gif|frame|Принцип работы BitTorrent: Нагрузка на сервер уменьшается благодаря тому, что клиенты начинают обмениваться данными сразу же, даже если файл не докачан ими до конца]]
[[Изображение:Torrentcomp small.gif|frame|Принцип работы BitTorrent: Нагрузка на начального обладателя файла уменьшается благодаря тому, что клиенты начинают обмениваться данными сразу же, даже если файл не докачан ими до конца]]
Перед началом закачки клиент подсоединяется к трекеру, сообщает ему свой адрес, и получает адреса других клиентов, скачивающих или раздающих этот же файл. Далее клиент периодически информирует трекер о своем прогрессе и получает обновленный список адресов.
Перед началом закачки клиент подсоединяется к трекеру и получает IP-адреса других клиентов, у которых есть нужный файл. После этого, клиенты подсоединяются друг к другу (используя протокол [[TCP]] или [[UDP]]), и обмениваются сегментами файлов и служебными данными без непосредственного участия трекера. Для эффективной работы сети BitTorrent необходимо, чтобы как можно больше клиентов были способны принимать входящие соединения. Неправильная настройка [[NAT]] или [[файрвол]]а могут этому помешать.


Клиенты соединяются друг с другом <!--(используя протокол [[TCP]]) --> и обмениваются сегментами файлов <!--и служебными данными--> без непосредственного участия трекера. Для эффективной работы сети BitTorrent необходимо, чтобы как можно больше клиентов были способны принимать входящие соединения. Неправильная настройка [[NAT]] или [[файрвол]]а могут этому помешать.

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

Каждый клиент имеет возможность временно блокировать отдачу другому клиенту ({{lang-en|choke}}). Это делается для более эффективного использования канала отдачи. Кроме того, при выборе кого разблокировать предпочтение отдается пирам, которые сами передали этому клиенту много сегментов. Таким образом, пиры с хорошими скоростями отдачи поощряют друг друга по принципу «ты&nbsp;— мне, я&nbsp;— тебе».

<!--
Обмен сегментами ведется по принципу «ты&nbsp;— мне, я&nbsp;— тебе» симметрично в двух направлениях и в случайном порядке. Клиенты периодически сообщают друг другу об имеющихся у них сегментах. Обмен данными начинается, когда обе стороны в нем заинтересованы, то есть каждая из сторон имеет сегменты, которых нет у другой. Количество переданных сегментов подсчитывается, и, если одна из сторон обнаруживает, что передает в среднем больше, чем принимает, она блокирует ({{lang-en|choke}}) отдачу. Таким образом в протокол заложена защита от «личеров» ({{lang-en|leechers}}) — клиентов, которые только скачивают данные и не отдают ничего взамен.
Обмен сегментами ведется по принципу «ты&nbsp;— мне, я&nbsp;— тебе» симметрично в двух направлениях и в случайном порядке. Клиенты периодически сообщают друг другу об имеющихся у них сегментах. Обмен данными начинается, когда обе стороны в нем заинтересованы, то есть каждая из сторон имеет сегменты, которых нет у другой. Количество переданных сегментов подсчитывается, и, если одна из сторон обнаруживает, что передает в среднем больше, чем принимает, она блокирует ({{lang-en|choke}}) отдачу. Таким образом в протокол заложена защита от «личеров» ({{lang-en|leechers}}) — клиентов, которые только скачивают данные и не отдают ничего взамен.


Строка 107: Строка 114:
# служебный трафик.
# служебный трафик.
# закачиваемые/отсылаемые данные.
# закачиваемые/отсылаемые данные.
-->


== Программы-клиенты ==
== Программы-клиенты ==

Версия от 17:29, 6 ноября 2006

Файл:NewBitTorrentLogo.png
Логотип BitTorrent

BitTorrent ( дословно "поток битов" ) — децентрализованный P2P-протокол, предназначенный для обмена файлами через интернет. BitTorrent был создан программистом Брэмом Коэном (англ. Bram Cohen).

Отличительные черты

Общие особенности

  • Отсутствие очередей на закачку.
  • Файлы закачиваются небольшими, случайным образом выбранными сегментами.
  • Клиенты (peers) обмениваются сегментами непосредственно между собой, по принципу «ты — мне, я — тебе».
  • Закачанные сегменты становятся немедленно доступны другим клиентам.
  • Контролируется целостность каждого сегмента.
  • В качестве объекта закачки могут выступать несколько файлов (например, содержимое каталога).

Терминология

личер (англ. leecher пиявка) — пользователь, скачивающий сегменты от вас, но не имеющий частей, нужных вам.

пир (англ. peer соучастник) — пользователь, обменивающийся (способный обмениваться) с вами сегментами.

сид (англ. seed зерно, источник) — пользователь, имеющий все сегменты данного торрента (т.е., данный торрент целиком).

рой - Группа компьютеров, которые коллективно связываются для закачки конкретного файла. Например, если вы начинаете с клиента BitTorrent, и он сообщает вам, что вы подключены к 10-ти пирам и 3-м сидам, то рой состоит из 13-ти других компьютеров.

англ. scrape
Это когда клиент посылает запрос к серверу для информации о статистике торрента.

Доступность англ. availability (также distributed copies) Количество полных копий файла, доступных клиенту. Каждый seed добавляет 1.0 к этому числу, поскольку они обаладают полной копией файла. Те участники (peers), которые скачали только часть файла, увеличивают его доступность на столько, сколько ими уже скачанно. Однако, если несколько peer'ов скачали одинаковые части, то доступность от этого не увеличивается. К примеру, если у двух peer'ов скачано 50% и скачанные части равны между собой, и есть один seed, то доступность равна 1.50

Используемые порты (ТСР)

  • Порты 6881—6889 — входящие порты клиентов.
  • Порт 6969 — входящий порт трекера.

Номера портов не фиксированы в спецификации протокола и могут изменяться при необходимости.

Файл метаданных

Bittorrent не имеет системы поиска: для каждого распространяемого файла создаётся файл метаданных с расширением torrent, который содержит следующую информацию:

Файлы метаданных могут распространяться через любые каналы связи — например, эти файлы (или ссылки на них) могут выкладываться на веб-серверах, размещаться на домашних страницах пользователей сети, рассылаться по электронной почте, публиковаться в блогах или новостных лентах RSS.

Клиент начинает закачку, получив каким-либо образом файл с метаданными, в котором есть ссылка на трекер.

Трекер

Трекер (англ. tracker) — специализированный сервер, работающий по протоколу HTTP. Трекер нужен для того, чтобы клиенты из разных сетей могли найти друг друга. Фактически, на трекере хранятся IP-адреса клиентов и хэш-суммы, уникальным образом идентифицирующие объекты, участвующие в закачках. По стандарту, имена файлов на трекере не хранятся, и узнать их по хэш-суммам нельзя. В практических реализациях, однако, трекер часто, помимо своей основной функции, выполняет и функцию небольшого веб-сервера. Такой сервер предоставляет статистику закачек по разным файлам, хранит файлы метаданных, показывает текущее количество подключенных пиров и пр.

Работа без трекера

В новых версиях протокола были разработанны бестрекерные системы (trackerless), которые решают некоторые из предыдущих проблем. Отказ трекера в таких системах не приводит к автоматическому отказу всей сети.

Начиная с версии 4.2.0 официального клиента в нем реализована функция бестрекерной работы, базирующаяся на протоколе Kademlia. В таких системах трекер доступен децентрально, на клиентах, в форме распределенной хеш-таблицы (Distributed Hash Table).

На данный момент еще не все клиенты используют совместимый друг с другом протокол. Совместимы BitComet, µTorrent, KTorrent и официальный клиент BitTorrent.

Super seeding

Super seeding является особенностью некоторых клиентов BitTorrent, которые пытаются минимизировать объем данных до первого завершения загрузки пира. Эта было задумано Джоном Хофманом и сначала было осуществлено на клиенте BitTornado в середине 2003г. Эта особенность должна использоваться, когда есть только один сидер. Super seeding является изменением в поведении сидеров и не может быть осуществлен без нарушения протокола BitTorrent. Тем не менее, это не утверждается ни разработчиком протокола, Брэмом Коэном, ни в официальном клиенте.

Принцип работы протокола

Принцип работы BitTorrent: Нагрузка на начального обладателя файла уменьшается благодаря тому, что клиенты начинают обмениваться данными сразу же, даже если файл не докачан ими до конца

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

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

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

Каждый клиент имеет возможность временно блокировать отдачу другому клиенту (англ. choke). Это делается для более эффективного использования канала отдачи. Кроме того, при выборе кого разблокировать предпочтение отдается пирам, которые сами передали этому клиенту много сегментов. Таким образом, пиры с хорошими скоростями отдачи поощряют друг друга по принципу «ты — мне, я — тебе».


Программы-клиенты

Использование протокола BitTorrent на примере Azureus

См также

Ссылки