Понятие о BitTorrent

Основные понятия

BitTorrent (букв. англ. «битовый поток») — пиринговый (P2P) сетевой протокол Коэна для кооперативного обмена файлами через Интернет. Файлы передаются частями, каждый torrent-клиент, получая (закачивая) эти части, в это же время отдаёт (подкачивает) их другим клиентам, что снижает нагрузку и зависимость от каждого клиента-источника и обеспечивает избыточность данных.
Трекер (англ. tracker) — специализированный сервер, работающий по протоколу HTTP. Трекер нужен для того, чтобы клиенты могли найти друг друга. Фактически, на трекере хранятся IP-адреса, входящие порты клиентов и хеш-суммы, уникальным образом идентифицирующие объекты, участвующие в закачках. По стандарту, имена файлов на трекере не хранятся, и узнать их по хеш-суммам нельзя. Однако на практике трекер часто помимо своей основной функции выполняет и функцию небольшого веб-сервера. Такой сервер хранит файлы метаданных и описания распространяемых файлов, предоставляет статистику закачек по разным файлам, показывает текущее количество подключённых пиров и пр.
Анонс (англ. announce) — обращение клиента к трекеру. При каждом анонсе клиент передаёт на трекер информацию об объёмах им скачанного и отданного, a трекер передаёт клиенту список адресов других клиентов. Обращение клиента к трекеру происходит через определённые интервалы времени, которые определяются настройками клиента и трекера.
Доступность (англ. availability), или distributed copies — количество полных копий файла, доступных клиенту. Каждый сид добавляет 1,0 к этому числу; личеры увеличивают доступность в зависимости от количества скачанного, которого нет у других личеров. К примеру, если на раздаче есть один сид и два личера, скачавшие по 50 % файла (скачанные части равны между собой), то доступность равна 1,50.
Личер (англ. leech — пиявка) — пир, не имеющий пока всех сегментов, то есть продолжающий скачивание. Термин часто употребляется и в негативном смысле, который он имеет в других файлообменных сетях: пользователь, который отдаёт гораздо меньше, чем скачивает.
Отравленный торрент — ситуация, когда часть пиров раздаёт повреждённые сегменты.
Пир (англ. peer — соучастник) — клиент, участвующий в раздаче. Иногда пирами называют только скачивающих участников.
Раздача (англ. seeding) — процесс распространения файла по протоколу BitTorrent.
Рой (англ. swarm) — совокупность всех пиров, участвующих в раздаче.
Сид, иногда сидер (англ. seeder — сеятель) — пир, имеющий все сегменты распространяемого файла, то есть либо начальный распространитель файла, либо уже скачавший весь файл.
URL анонса (англ. announce URL) — адрес трекера, к которому клиент делает анонс. Во многих клиентах называется «Tracker URL». Может включать «passkey» — уникальный код, назначаемый трекером для аккаунта пользователя, помогающий идентифицировать его на трекере (добавляется к URL анонса в самом *.torrent-файле).
Пренебрегающий (англ. snubbed) — клиент, подключённый к получателю, но не посылавший ему данные уже более 60 секунд.
Заглохший (англ. choked — заглохший, придушенный) — клиент, обмен данными с которым заглох. Либо его канал на выход забит полностью и он не может ничего передать (достиг max_uploads), либо он сид и ему ничего не нужно получать.
Заинтересованный (англ. interested) — если у клиента А нет каких-то частей, которые есть у клиента Б, считается, что клиент А заинтересован в обмене с клиентом Б.
Сегмент (англ. part — часть) — все файлы для передачи делятся на небольшие куски — сегменты, которые, затем, передаются по сети в произвольном порядке для оптимизации обмена.
Поскрестись (англ. scrape — скрести, царапать) — аналогично анонсу, но клиент запрашивает только статистику торрента, информацию о подключённых клиентах и возможности с ними связаться для обмена.
Супер-сид — специальный режим раздачи в некоторых BitTorrent-клиентах, пытающийся минимизировать количество данных, которое отдаст раздающий до появления первого скачавшего. Клиент-суперсид предлагает каждому пиру скачать только один сегмент файла, которого ещё нет у других пиров. Затем сид не даёт этому пиру следующих сегментов, пока не получит от других пиров подтверждения, что они тоже получили этот сегмент. Таким образом, суперсид пытается избежать повторной отдачи одних и тех же сегментов, и старается отдавать сегменты только тем пирам, которые активно передают их другим.

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

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

Структура трафика

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

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

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

Протоколы и порты

Клиенты соединяются с трекером по протоколу TCP. Входящий порт трекера: 6969.
Клиенты соединяются друг с другом, используя протокол TCP. Входящие порты клиентов: 6881—6889.
Номера портов не фиксированы в спецификации протокола и могут изменяться при необходимости. Более того, в данный момент большинство трекеров используют обычный HTTP порт 80, а для клиентов рекомендуется выбрать случайный входящий порт.
DHT-сеть в BitTorrent-клиентах использует протокол UDP.
Кроме того, протокол UDP используется UDP-трекерами (поддерживается не всеми клиентами и не является официальной частью протокола) и для соединения клиентов друг с другом через UDP NAT Traversal (используется только в клиенте BitComet и не является официальной частью протокола).
Используйте порты отличные от этих:
411-413 | 6881-6889 | 6346-6347 | 1214 | 4662 | 6699

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

Для каждого распространяемого файла создаётся файл метаданных с расширением .torrent, который содержит следующую информацию:
* URL трекера;
* общую информацию о закачиваемом файле (имя, длину и пр.);
* Контрольные суммы (точнее, хеш-суммы SHA1) сегментов закачиваемого файла.
Файлы метаданных могут распространяться через любые каналы связи: они (или ссылки на них) могут выкладываться на веб-серверах, размещаться на домашних страницах пользователей сети, рассылаться по электронной почте, публиковаться в блогах или новостных лентах RSS. Получив каким-либо образом файл с метаданными, клиент может начинать скачивание.

BitTorrent трекер

BitTorrent трекер — веб-сервер, осуществляющий координацию BitTorrent клиентов. Основная функция BitTorrent трекера — обработка запросов клиентов и их последующая координация. Каждый клиент периодически обращается к трекеру с запросом, в котором указаны: info_hash — уникальный хеш торрент файла, port — TCP порт, на котором клиент ждёт соединений от других клиентов, количество данных, которыми клиент успел обменяться с другими клиентами, некоторая другая информация.
Такое обращение представляет собой обычный GET HTTP запрос, в котором информация закодирована с помощью специального протокола Bencode. Если в BitTorrent клиенте открыто несколько активных торрент файлов, то для каждого используется отдельный запрос, никак не связанный с другими. Интервалы между запросами по каждому отдельно взятому торренту зависят от настроек клиента и обычно составляют от 30 до 60 минут. BitTorrent трекер, используя info_hash, составляет списки IP адресов и портов участвующих в каждой отдельной раздаче клиентов. Каждому клиенту в ответ на очередной запрос трекер возвращает такой список, и клиент использует его для установления соединений с другими клиентами.
Роль трекера
Таким образом, трекер «связывает» клиентов друг с другом, но напрямую не участвует в обмене данными раздаваемых файлов. Более того, в принципе трекер может работать, не имея никакой информации об этих файлах, поскольку клиенты сообщают ему только info_hash. Трекер считается «слабым» местом системы BitTorrent, поскольку при его отключении новые клиенты просто не могут друг друга «найти». При этом уже участвующие в раздаче клиенты могут некоторое время продолжать файлообмен, постепенно теряя тех, кто отключился или у кого поменялся динамический IP адрес. Для разрешения этой проблемы могут использоваться резервные трекеры или специальный бестрекерный протокол DHT.
Дополнительные функции
Большинство реализаций трекеров, кроме координации клиентов, также имеют дополнительные функции, доступные пользователям с браузерами через обычный веб-сервер, часто с другим адресом или портом, чем у интерфейса для запросов клиентов. Так, практически все трекеры отображают статистику раздач, то есть количества сидов и пиров на каждой раздаче, общие объёмы переданных между клиентами данных и другую доступную им информацию. Часто трекеры используются для хранения торрент-файлов и их описаний.
Частные трекеры
Частный (англ. private) трекер — это трекер, ограничивающий доступ пользователям, обычно требованием регистрации учётной записи. Одной из причин появления частных трекеров является ассиметричность пользовательских каналов доступа к Интернет. Средний пользователь за время скачивания торрента успевает отдать другим пользователям незначительную по объёму часть данных, при этом многие пользователи после получения нужного файла сразу закрывают торрент клиент. В результате доступность торрента снижается, и на первоначальных распространителей файла ложится неоправданно большая нагрузка. Как правило, частные трекеры записывают статистику каждого пользователя по количеству «скачанного» и «отданного» другим пользователям, и требуют поддержания некоторого минимального отношения этих двух величин. Как результат, доступность и скорость скачивания торрентов на частном трекере обычно выше, чем на открытом. Для опознания запросов от клиента (программы) пользователя трекер либо использует IP адрес пользователя либо уникальный для каждого пользователя passkey, добавляемый трекером в announce URL торрент файла при скачивании пользователем.
Реализации трекеров
Существуют разные реализации трекеров, например как отдельный веб-сервер, в виде модуля для стороннего HTTP сервера (например Apache), или в виде движка сайта, написанного например на PHP или JSP.

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

В новых версиях протокола были разработаны бестрекерные (англ. trackerless) системы, которые решают некоторые из предыдущих проблем. Отказ трекера в таких системах не приводит к автоматическому отказу всей сети.
Начиная с версии 4.2.0 официального клиента, в нем реализована функция бестрекерной работы, базирующаяся на протоколе Kademlia. В таких системах трекер доступен децентрально, на клиентах, в форме распределенной хеш-таблицы.
На данный момент еще не все клиенты используют совместимый друг с другом протокол. Совместимы между собой BitComet, µTorrent, KTorrent и официальный клиент BitTorrent. Azureus также имеет режим бестреккерной работы, но его реализация отличается от официальной, вследствие чего он не может работать через DHT с вышеперечисленными клиентами.

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

µTorrent — клиент BitTorrent для Windows и Mac OS X, отличающийся малым размером и высокой скоростью работы.
(англ.) — поддерживает HTTP, FTP, BitTorrent; файлы Metalink 3.0
Vuze (старое название — Azureus) — написан на языке Java, поэтому является кроссплатформенным. Поддерживает Tor. Нужно учесть, используемая им библиотека Eclipse Standard Widget Toolkit использует системнозависимые модули и должна компилироваться для каждой платформы отдельно.
BitTyrant (zen) — модифицированный вариант клиента Azureus 2.5
BitTornado — кроссплатформенный клиент, написанный на языке Python
Deluge — кроссплатформенный клиент, написанный на языке Python; использует GTK
FoxTorrent — расширение для браузера Mozilla Firefox, реализующее функции клиента BitTorrent
Opera — в этом браузере есть простенький встроенный BitTorrent-клиент, настройки вызываются командой: opera:config#BitTorrent (вводить в адресной строке).
LeechCraft — кроссплатформенный клиент, существует плагин для поддержки BitTorrent
mlDonkey — кроссплатформенный клиент
TorrentFlux (en) — написан на PHP, работает на удалённом Web-сервере как PHP-скрипт, позволяя не держать свой компьютер включённым постоянно, но при этом качать и раздавать торренты
ABC — Yet Another Bittorrent Client, основан на BitTornado

GNU/Linux, UNIX

BTPD — консольный клиент для Unix/GNU+Linux, написанный на C++; работает в режиме демона
CTorren — консольный клиент для Unix/GNU+Linux, прекративший развитие в 2004 году
KTorrent — использует библиотеку Qt; работает в среде KDE
rTorrent — консольный клиент для UNIX/GNU+Linux, написанный на C++; использует библиотеки ncurses и libTorrent
Transmission — клиент для Mac OS X, FreeBSD, OpenBSD, NetBSD, GNU/Linux и BeOS, использующий GTK. Также может работать в консольном режиме и в режиме демона.
Bitflu — консольный клиент для Unix/GNU+Linux, написанный на Perl; работает в режиме демона, с поддержкой chroot окружения. Имеет веб-интерфейс, управляется через telnet.

Windows

BitComet - менеджер закачек и клиент для p2p сетей BitTorrent и eDonkey2000. Работает в операционных системах семейства Windows.
Содержит рекламу в виде баннеров.
BitSpirit - мощный и удобный в использовании клиент BitTorrent, который не только работает по этому протоколу, но также имеет ряд дополнительных возможностей.
FlashGet - бесплатная компьютерная программа, менеджер закачек с закрытым исходным кодом для ОС Microsoft Windows.
GetRight - условно-бесплатный менеджер закачек для Windows, разработанный компанией «Headlight Software».
Shareaza — свободный файлообменный клиент для всех[уточнить!] версий Microsoft Windows с поддержкой протоколов Gnutella, Gnutella2, eDonkey2000 (сеть), BitTorrent, FTP и HTTP. Умеет работать с magnet-ссылками, ed2k-ссылками и piolet-ссылками, а также с Gnutella-ссылками. Переведён на 27 языков.
Free Download Manager - свободный менеджер закачек с открытыми исходными кодами. Поддерживает закачку FLV-видео с YouTube, Google Video и других сайтов. Поддерживает конвертирование FLV. Поддерживает BitTorrent. Оффлайн-браузер.

Mac OS

XTorrent - продвинутый BitTorrent-клиент. Имеет удобный интерфейс и хороший набор функций, некоторые из которых не имеют аналогов в других менеджерах.
Transmission - свободный легковесный BitTorrent клиент. Свободное программное обеспечение, большей частью под лицензией GNU GPL с небольшими фрагментами под лицензией MIT. Transmission возможно запустить на Mac OS X (интерфейс Cocoa), других Unix-подобных операционных системах (интерфейс GTK+), а также на BeOS/ Zeta
Tomato Torrent -менеджер закачек файлов для Mac OS в файлообменных сетях Torrent.
Acquisition - торрент-клиент для Mac OS.

Symbian OS

SymTorrent for S60 - полноценный torrent клиент для смартфонов

Сервис Dropbox: бесплатно храните ваши файлы и делитесь ими!