Торренты
В статье:
В последнее время тема торрентов активно муссируется СМИ. К сожалению, обсуждение часто приобретает неконструктивный характер, а между протоколом BitTorrent и пиратством фактически ставится знак равенства. Не умаляя проблем нарушения авторских прав, хочу отметить, что BitTorrent – это всего лишь один из способов передачи информации, который, как и многое другое в нашем мире, может использоваться и во зло, и во благо. В статье я постараюсь рассказать о технической стороне этого вопроса.
BitTorrent – это пиринговый протокол обмена файлами, разработанный в 2001 году американским программистом Бремом Коэном. Суть его в том, что каждый файл разбивается на множество небольших фрагментов (сегментов), которые скачиваются и загружаются независимо друг от друга при помощи специальных программ (торрент-клиентов). Таким образом, файл передается не напрямую от первоисточника, а распространяется по кусочкам сразу между многими пользователями (пирами). Это обеспечивает информационную избыточность и равномерное распределение нагрузки. Каждый пир принимает недостающие фрагменты и одновременно отдает другим участникам сети полученные ранее сегменты файла. Пир, располагающий файлом частично, называется личером. Когда файл загружен полностью, личер превращается в сидера.
Как это работает
Для того чтобы приступить к процессу скачивания, необходимо загрузить небольшой файл с расширением .torrent и открыть его торрент-клиентом. Торрент-файл содержит адрес трекера (сервера, который координирует взаимодействие между торрент-клиентами), а также сведения о распространяемом объекте (имя файла, контрольные суммы и т. д.). Если доступ к трекеру осуществляется по логину и паролю, то в торрент-файле должен содержаться индивидуальный passkey.
После получения торрент-файла клиент соединяется с трекером, сообщает ему хеш-сумму файла, а также свой IP-адрес. В ответ приходит информация об IP-адресах других пиров, которые полностью или частично располагают данным файлом. Процесс получения такой информации называется объявлением; он происходит периодически (обычно каждые полчаса, но можно запускать вручную). Затем торрент-клиент устанавливает прямые соединения с пирами и посылает запросы с информацией об имеющихся и недостающих файловых сегментах. Когда какой-либо пир дает добро на скачивание запрашиваемого сегмента, происходит его передача, после чего контрольная сумма фрагмента сравнивается с той, которая записана в торрент-файле. Отмечу, что в процессе передачи сегменты дробятся на элементарные блоки объемом от 16 Кбайт до 4 Мбайт. Блоки из разных сегментов одного и того же файла могут обрабатываться одновременно. Если при загрузке возникла ошибка, фрагмент отбраковывается и его скачивание повторяется. Поэтому целесообразно использовать сегменты небольших размеров. Однако если дробить файл слишком сильно, то существенно увеличивается размер сервисной информации (контрольных сумм), что может замедлить скачивание торрента. После проверки контрольной суммы скачанный сегмент немедленно становится доступен для передачи другим пирам. Кстати, если раздача состоит из нескольких файлов, то на фрагменты разбивается не каждый файл по отдельности, а весь массив целиком. При этом один сегмент может «захватывать» части сразу несколько файлов.
В последних версиях протокола добавлена возможность работы без трекер-сервера при помощи распределенных хеш-таблиц (DHT). В этом случае совокупность клиентов выступает в роли децентрализованного трекера, что резко увеличивает надежность функционирования сети.
Как повышается эффективность файлового обмена
Выбор, предполагающий, какие фрагменты запрашивать в первую очередь и с какими пирами соединяться, случаен лишь отчасти. Существуют простые и прозрачные правила. Наибольшим приоритетом обладают дефицитные сегменты, которые имеются у меньшего числа пиров. Они запрашиваются в первую очередь. С другой стороны, торрент-клиент отслеживает соблюдение баланса между количеством переданных и скачанных сегментов. Если какой-либо пир скачивает непропорционально больше того, что отдает, он может быть на некоторое время заблокирован. Разумеется, речь не идет о сидировании (это уже другой режим работы), когда файл целиком загружен и осуществляется только его раздача.
Таким образом, трекер-сервер не принимает непосредственного участия в распространении файлов, а лишь координирует работу торрент-клиентов, периодически обновляя списки активных пиров. Файловый обмен осуществляется непосредственно между пирами. Скачивание идет тем быстрее, чем больше пиров, располагающих данным файлом, подключены и объявлены трекером.
Отмечу, что протокол BitTorrent, в отличие от более ранних P2P-систем, не предусматривает ранжирование пиров. Однако некоторые закрытые трекеры вводят собственные системы учета трафика и правила рейтинга. В результате у тех пользователей, которые скачивают больше, чем раздают, может быть заблокирована возможность загрузки новых торрент-файлов. При этом работа с полученными ранее торрентами продолжается в полном объеме. Подобные ограничения могут быть неудобны для обладателей ассиметричных интернет-каналов (например, ADSL), но в глобальном масштабе они вполне справедливы. Также существует множество полностью открытых трекеров, не накладывающих никаких ограничений на ратио (отношение объема скачанного к объему отданного). Эти трекеры выживают за счет большого числа пиров, а также энтузиастов, бескорыстно сидирующих загруженные файлы.
Какие порты и протоколы используются
Пиры соединяются друг с другом, а также с трекером по протоколу TCP. При использовании DHT задействуется протокол UDP. Конкретные порты определяются настройками торрент-клиента и могут быть переназначены. Необходимо следить, чтобы файервол не блокировал работу используемых портов как для входящих, так и для исходящих соединений. Также блокирует файлообмен неправильно настроенный NAT.
Поскольку скачивание файлов по торрент-протоколу осуществляется децентрализованно, максимальная скорость загрузки ограничена лишь пропускной способностью интернет-соединения и количеством пиров, готовых поделиться нужным файлом. При наличии интернет-канала 100 Мбит/с скорость скачивания очень быстро может достигнуть 8–9 Мбайт/с. Разумеется, речь идет о популярных раздачах, когда одновременно к трекеру подключены несколько сотен сидеров.
В то же время у торрентов есть и недостатки. В первую очередь речь идет об отсутствии анонимности. Дело в том, что любому торрент-клиенту видны IP-адреса всех пиров, полученных от трекера. Эту информацию злоумышленники потенциально могут использовать для подготовки и проведения атак. Кроме того, участились случаи, когда правообладатели начинали судебное преследование конкретных пользователей, обменивающихся пиратским контентом. При этом личность нарушителей устанавливалась исходя из «засвеченного» торрент-клиентом IP-адреса. С другой стороны, если использовать торрент для обмена легальной информацией и своевременно позаботиться о настройке межсетевого экран, то беспокоится совершенно не о чем.
Еще один недостаток связан с появлением «мертвых» раздач. Такая судьба настигает непопулярные файлы на трекерах с небольшим числом пользователей. Спустя какое-то время файл может оставаться лишь у нескольких пиров. Соответственно, он будет доступен только тогда, когда эти пользователи находятся онлайн. Если же все они удалили торрент-файл из списка раздач клиента, то, увы, скачать ничего не получится. В этом смысле традиционное размещение данных на файловом сервере надежнее.
Поскольку файлообмен привязан к одному или нескольким трекерам, указанным в торрент-файле, то, если скачивание идет слишком медленно, целесообразно поискать другую раздачу с этим файлом на других трекерах.
Для работы с протоколом BitTorrent существует множество торрент-клиентов. Сегодня наибольшей популярностью пользуется кросс-платформенная программа µTorrent. К преимуществам этого клиента следует отнести малый размер дистрибутива, простой и понятный интерфейс, а также широкие возможности по управлению раздачами. В частности, настраиваются максимальные скорости скачивания и отдачи как для всех торрентов вместе, так и для любого в отдельности. Клиент снабжен встроенным ретрекером и может использоваться для начальной раздачи (суперсидирования). Программа строит график изменения скорости файлообмена во времени, за которым порой интересно понаблюдать, визуализирует процесс скачивания отдельных сегментов, отображает список IP-адресов пиров и скорости соединения с ними.
Написанный на Java свободный клиент Vuze (прежнее название Azureus) поддерживает шифрование протокола, а также работу в анонимных сетях I2P и Tor.
Среди других кросс-платформенных торрент-клиентов можно выделить BitTornado, Deluge, MLDonkey, а также одноименный с протоколом BitTorrent. Отмечу, что встроенный торрент-клиент также имеется у браузера Opera. В среде Windows популярны BitComet и Shareaza, а пользователи Linux часто отдают предпочтение программам KTorrent и Transmission. Последняя, кстати, работает и под Mac OS.
Заключение
Таким образом, протокол BitTorrent является эффективным средством для быстрого распространения крупных массивов информации между большим числом пользователей. Обеспечивая высокие скорости обмена данными, BitTorrent не создает избыточные точечные нагрузки на инфраструктуру, а применение DHT-алгоритмов гарантирует отказоустойчивую работу.
Опубликовано 15.07.2011