BitTorrent (букв. англ. «битовый поток») — пиринговый (P2P) сетевой протокол для кооперативного обмена файлами через Интернет. Файлы передаются частями, каждый torrent-клиент, получая (скачивая) эти части, в то же время отдаёт (закачивает) их другим клиентам, что снижает нагрузку и зависимость от каждого клиента-источника и обеспечивает избыточность данных.
Протокол был создан Брэмом Коэном, написавшим первый torrent-клиент «BitTorrent» на языке Python 4 апреля 2001 года. Запуск первой версии состоялся 2 июля 2001 года. Существует множество других программ-клиентов для обмена файлами по протоколу BitTorrent. Раздача может содержать как один файл, так и несколько, например, содержимой директории.
Для каждой раздачи создаётся файл метаданных с расширением .torrent, который содержит следующую информацию:
-URL трекера
-Общую информацию о файлах (имя, длину и пр.) в данной раздаче
-Контрольные суммы (точнее, хеш-суммы SHA1) сегментов раздаваемых файлов
-Passkey пользователя, если он зарегистрирован на данном трекере. Длина ключа устанавливается трекером
-(Необязательно) хеш-суммы файлов целиком
-(Необязательно) Альтернативные источники, работающие не по протоколу BitTorrent. Наиболее распространена поддержка так называемых web–сидов (протокол HTTP), но допустимыми также являются ftp, ed2k, magnet URI
Размер сегмента регулируется при создании торрента и, как правило, выбирается размер, соответствующий степени двойки. При выборе размера необходимо соблюдать баланс, связанный с механизмом работы протокола (см. ниже). Размер сегмента чаще всего лежит в диапазоне от 128 килобайт до 2-4 мегабайт, хотя на очень больших раздачах (порядка сотни гигабайт) могут использоваться сегменты размером 32-64 мегабайта.
Если раздача состоит из нескольких файлов, то в процессе хеширования они считываются подряд и рассматриваются как непрерывный поток данных. Поэтому чаще всего сегмент, содержащий конец одного файла, также содержит и начало следующего. Вместе с тем для того, чтобы убедиться в правильности скачанного сегмента, необходимо иметь его весь целиком. Именно поэтому, несмотря на то, что большинство клиентов поддерживает скачивание не всех файлов в раздаче, а только некоторых, почти всегда будет скачан также и начальный и/или конечный кусок файлов, не выбранных для скачивания.
Так как хеши в .torrent-файле включают в себя имена и структуру директорий раздачи, то переименование файлов с сохранением возможности их раздавать в общем случае невозможно. Однако, некоторые клиенты поддерживают изменение структуры, например, создание или переименование директорий и переименование или перемещение файлов.
Файл метаданных является словарём в bencode формате. Файлы метаданных могут распространяться через любые каналы связи: они (или ссылки на них) могут выкладываться на веб-серверах, размещаться на домашних страницах пользователей сети, рассылаться по электронной почте, публиковаться в блогах или новостных лентах RSS. Также есть возможность получить info часть публичного файла метаданных напрямую от других участников раздачи благодаря расширению протокола "Extension for Peers to Send Metadata Files". Это позволяет обойтись публикацией только магнет-ссылки. Получив каким-либо образом файл с метаданными, клиент может начинать скачивание. Принцип работы протокола
Принцип работы BitTorrent: нагрузка на распространителя файла уменьшается благодаря тому, что клиенты начинают обмениваться данными сразу же, даже если файл не докачан ими до конца.
Перед началом скачивания клиент подсоединяется к трекеру по адресу, указанному в торрент-файле, сообщает ему свой адрес и хеш-сумму торрент-файла, на что в ответ клиент получает адреса других клиентов, скачивающих или раздающих этот же файл. Далее клиент периодически информирует трекер о ходе процесса и получает обновлённый список адресов. Этот процесс называется объявлением (англ. announce).
Клиенты соединяются друг с другом и обмениваются сегментами файлов без непосредственного участия трекера, который лишь хранит информацию, полученную от подключенных к обмену клиентов, список самих клиентов и другую статистическую информацию. Для эффективной работы сети BitTorrent необходимо, чтобы как можно больше клиентов были способны принимать входящие соединения. Неправильная настройка NAT или брандмауэра могут этому помешать.
При соединении клиенты сразу обмениваются информацией об имеющихся у них сегментах. Клиент, желающий скачать сегмент (личер), посылает запрос и, если второй клиент готов отдавать, получает этот сегмент. После этого клиент проверяет контрольную сумму сегмента. Если она совпала с той, что записана в торрент-файле, то сегмент считается успешно скачанным, и клиент оповещает всех присоединённых пиров о наличии у него этого сегмента. Если же контрольные суммы различаются, то сегмент начинает скачиваться заново. Некоторые клиенты банят тех пиров, которые слишком часто отдают некорректные сегменты.
Таким образом, объём служебной информации (размер торрент-файла и размер сообщений со списком сегментов) напрямую зависит от количества, а значит, и размера сегментов. Поэтому при выборе сегмента необходимо соблюдать баланс: с одной стороны, при большом размере сегмента объём служебной информации будет меньше, но в случае ошибки проверки контрольной суммы придется скачивать ещё раз больше информации. С другой стороны, при малом размере ошибки не так критичны, так как необходимо заново скачать меньший объём, но зато размер торрент-файла и сообщений об имеющихся сегментах становится больше.
| ADSL | BitTorrent | Dial-Up | DNS | DNSSEC | FTP | Gnutella | Gopher | HTTP | IMAP | IPv6 | IRC | MMORPG | POP3 | Skype | SMTP | SSH | SSL | TLS | TCP IP | UseNET | VoIP | WAIS | WAP | I-радио | I-TV | Мессенджеры | SPDY и ISDN | Оптоволокно | Эл.Платежи |