С торрентом в том или ином виде сталкивались, думаю, большинство пользователей ПК. И даже сейчас, когда лицензионный контент стоит относительно недорого, торренты не теряют своей популярности (да, вы скажете, что через торренты можно качать и лицензионное ПО, но думаю никто спорить не будет, что в России «торрент» и «пиратство» — синонимы). Причины, почему такой протокол многим полюбился, просты — простота (закинули небольшой файлик в клиент и вуаля, закачка пошла), удобство (клиенты есть под все платформы, начиная с iOS и заканчивая дистрибутивами Linux, при этом возможностей по настройке масса) и скорость (зачастую закачка через торрент идет ощутимо быстрее, чем напрямую с сайта). Но цель статьи — не обсудить плюсы или минусы этого протокола (хотя о них, конечно же, поговорим), а посмотреть, как же этот протокол работает.
Итак, собственно, сам файл торрента, который магическим образом преобразует несколько десятков килобайт кода в многогигабайтные файлы. Что же находится внутри «черного ящика»? Во-первых, самое основное — это ссылка на трекер. Что такое трекер? Это сервер, который хранит всю информацию о раздаче, а именно сколько людей ее качает, какую часть раздачи скачал каждый из них, и т.д. Зачем это нужно? Затем, чтобы торрент-клиент на вашем устройстве мог получить IP адреса тех, у кого эта раздача уже скачана (сиды), и тех, кто также, как и вы, хочет скачать или уже качает раздачу (личеры и пиры). После получения этих данных ваш торрент-клиент подключается к уже качающим и начинает обмениваться с ними данными по принципу «ты — мне, я — тебе».
Отсюда вытекает первая проблема торрента: если «убить» трекер, то новые люди, которые хотят скачать раздачу, сделать этого не смогут. Но те, кто уже качает файлы, скорее всего, смогут их докачать, так как список IP адресов сидов у них есть. Для защиты от такого совсем недавно, с бумом распределительных платформ, была придумана бестрекерная система работы: смысл ее в том, что в торрент-файл зашит адрес не сервера, а первого сида (или нескольких сидов). А они уже хранят адреса других сидов и пиров, и как только вы к нему подключаетесь, то они адресами с вами делятся. Поэтому теперь «убить» такую раздачу становится гораздо сложнее.
Что еще в обязательном порядке должен хранить торрент-файл? Разумеется, информацию о файлах в этой раздаче: их количество, вес, число блоков и их контрольные суммы (SHA1). В отличие от обычной закачки, раздача всегда поделена на множество блоков, размер которых зависит от веса раздачи и обычно составляет порядка 1 МБ. Зачем так делать? Во-первых, это позволяет скачать в раздаче только один или несколько нужных файлов — не нужно качать все (хотя все же качается чуть больше данных, чем весят нужные вам файлы, но об этом ниже). Во-вторых, так проще проверять файлы: согласитесь, будет обидно, скачав несколько сотен мегабайт, узнать, что этот кусок файла битый. В-третьих, при такой системе новый пир может быстрее начать участвовать в общем процессе: как только один из сегментов скачан и проверен, то ваш торрент-клиент оповещает трекер, что вы готовы этот сегмент отдавать другим.
Еще один достаточно важный параметр, который включает в себя торрент-файл — passkey. Это — ваш личный ключ, состоящий из цифр и букв, который присваивает вам трекер. Зачем он нужен? Затем, чтобы следить, сколько вы скачали и отдали, тем самым получая ваш ratio — отношение отданной к полученной информации. Зачем эта слежка? Увы — достаточно много людей заходят на трекеры чтобы просто скачать нужный торрент-файл, после чего скачать раздачу и уйти из нее навсегда. Конечно, многим это удобно, но это нарушает саму суть торрента: «ты — мне, я — тебе». Поэтому на многих трекерах введено ограничение: если ваш ratio ниже определенного (1, 0.5, бывает и 0.1-0.3), то вам запрещается качать с этого трекера, пока ваш ратио не поднимется. Поэтому появляется еще одно правило: если вы скачали торрент-файл на трекере, который мониторит ratio, не отдавайте этот файл никому — по понятным причинам другие люди могут быстро «слить» ваш ратио до нуля.
С развитием торрентов, в торрент-файлы стали включать дополнительную информацию о магнет-ссылках и веб-сидах. Магнет-ссылка — по сути ссылка напрямую на трекер, которая избавляет вас от «посредника» в виде файла. Веб-сид уже интереснее: очевидно, что обычный человек вряд ли сможет раздавать данные в режиме 24/7 (хотя такие есть), а вот сервер в интернете такое делать вполне себе способен. И такой сервер-сид и называется веб-сид — он постоянно отдает данные раздачи, ну и бонусом зачастую имеет скорость гораздо выше, чем у обычного человека.
Особенности обмена данными
Так уж получилось, что принцип работы протокола мы разобрали в части статьи, посвященной торрент-файлу. Однако тут есть тонкости, которые стоит разобрать, и самый главный вопрос: раздача поделена на множество небольших блоков — а как их закачивать? Самый первый вариант, который приходит на ум — последовательно, с первого до последнего. И если бы это была закачка с сервера, то да, пожалуй, это было бы логично. Но вот торренты мы качаем у других людей, и теперь представьте: у одного-единственного сида качают сразу десять пиров, и качают блоки последовательно, так что скорость, понятное дело, небольшая. И тут сиду через пару часов захотелось уйти. Что мы видим? Есть 10 человек, у которых скачаны первые несколько блоков, а остальных блоков ни у кого нет, и взять их не у кого. Так что до возвращения сида раздача мертва. Ладно, скажете вы — тогда давайте качать блоки рандомно. Ну, это уже разумнее — даже если через пару часов сид уйдет с раздачи, то у пиров вполне возможно окажутся все блоки, и они будут ими обмениваться, так что в итоге каждый получит все файлы. Однако и тут есть проблема — даже при рандоме всегда окажется так, что какой-то блок скачали меньшее число раз, чем другие. И опять же может быть так, что единственный человек с этим блоком с раздачи уйдет (или же у него ооочень медленный интернет) — это опять застопорит раздачу. Поэтому алгоритм закачки сделан хитро — блоки качаются вразнобой, но приоритет отдается самым редким из них. Таким образом поддерживается баланс скорости закачки и доступности каждого блока.
Выше я писал, что, если вы хотите закачать лишь часть раздачи, вы скорее всего закачаете больше, чем нужно. Такое происходит из-за того, что далеко не всегда файлы в раздаче нацело разбиваются на блоки — зачастую в одном блоке будет часть сразу двух файлов, а для того, чтобы не было сбоев, скачать блок придется целиком. Плюс никто не отменял передачу служебной информации на трекер и другим пирам, что при наличии в раздаче сотен и тысяч блоков тоже может вылиться в достаточно серьезную трату трафика.
Теперь представим, что вы закачали 99% данных, и вам осталось закачать всего пару блоков. И, наверное, вы замечали, что при этом скорость закачки катастрофически падает. Это вполне логично — пока торрент клиент может, он качает параллельно много блоков, стараясь держать скорость на том уровне, котором вы ее ограничили. Однако когда блоков для закачки остается мало, то скорость может просесть, так что тут нужно скачать оставшиеся блоки у самых быстрых пиров. Для этого создан специальный режим End Game, который в такой ситуации спрашивает наличии оставшихся блоков у всех пиров, тем самым позволяя найти человека с наибольшей скоростью и как можно быстрее докачать остаток.
Еще одной интересной особенностью является возможность скачать раздачу... без торрент-клиента. Ничего удивительного тут нет — закачка происходит по TCP (или вообще HTTP), то есть для нее вполне хватает и браузера — от вас всего-то требуется установить небольшое расширение. Однако, тут есть один минус — зачастую такие расширения позволяют вам лишь скачивать торренты, но не раздавать их, так что пользоваться ими стоит в том случае, если другого способа получить файлы из раздачи у вас нет.
Неприятной особенность торрентов стало развитие так называемых приватных трекеров. В чем их суть? Скачанный оттуда торрент-файл имеет метку private, и качать вы сможете только у других людей, у которых файлы имеет ту же метку. С одной стороны, это позволяет создать некоторое «закрытое сообщество», где можно передавать файлы только своим. С другой стороны — торренты испокон веков были бесплатными и общедоступными, так что приватные трекеры, где зачастую за регистрацию нужно платить, этот принцип нарушают.
Чем больше распространялся торрент, тем больше появлялось раздач со всякими книгами, картинками, кодами программ и просто с небольшими программами, вес которых не превышает пары мегабайт. Создавать полноценный .torrent файл, да и еще разбивать такую раздачу на части — «жирно», поэтому были придуманы .micro.torrent — файлы для раздач, где данные умещаются в один сегмент, а в самом микро-торренте хранится лишь контрольная сумма, размер и название файла в раздаче. При этом закачка ведется торрент-клиентом напрямую с веб-сервера.
Плюсы и минусы протокола
Теперь, когда устройство протокола стало понятным, поговорим о его достоинствах и недостатках, и начнем с последних. Самым основным недостатком являются мертвые раздачи: если у всех участников нет 100% блоков, то раздачу они не скачают никогда. При закачке с серверов таких проблем нет — пока файл хранится на сервере, он всегда будет доступен в полной мере. Второй серьезный минус — полное отсутствие анонимности: как только вы стали качать что-либо, на трекер отправляется ваш IP-адрес, и он же отдается и другим пирам. Так что если вы качаете что-то противозаконное — воспользуйтесь VPN (если что — шутка). Третий минус, который важен для лимитных соединений — отсутствие точного учета трафика: как я уже писал выше, если вы хотите скачать файлик на 10 МБ, вы вполне можете потратить 11-12 МБ трафика.
Плюсов тоже хватает: во-первых, это скорость закачки: если сервер может ее ограничивать, то в случае с популярной раздачей с сотней сидов единственное ограничение — скорость вашего интернета. Во-вторых — вы можете качать только нужные файлы из раздачи. По понятным причинам при закачке с серверов такого нет — вы или качаете файл весь, или не качаете его вообще. В-третьих — отсутствие всяких временных ограничений: зачастую при закачке с серверов нужно подождать 30 секунд, ввести капчу,
В итоге торрент — удобный протокол, который оценили, я думаю, все читатели этой статьи. И хотя зачастую он используется для распространений нелицензионного контента, а с этим сейчас все строже — никаких предпосылок к его умиранию нет, наоборот, его популярность только растет.