Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как работает Torrent?

ТехнологииЗачем я это узнал?+1
Евгения Семенова
  ·   · 27,7 K
Пользователь старого TheQuestion  · 5 июл 2016

«Сайт не распространяет и не хранит электронные версии произведений, а лишь предоставляет доступ к списку хеш-сумм» - загадочную фразу читал с экрана монитора популярного сайта мой знакомый, чью книгу спиратили и выложили на популярном торрент-сайте, пока я объяснял ему, что нет никакого подвоха...

А что такое эти самые хэш-суммы? Предположим, вы — робот (т. е. компьютер), и ваша скорость чтения — более 50 мегабайт в секунду (обычное дело), то есть, почти любую книгу вы можете прочитать менее чем за 1 секунду, так текстовая информация занимает минимальный объем памяти, а затраты на механику чтения мы не учитываем.

Предположим, что вы занимаетесь оцифровкой большой библиотеки, в которой тысячи книг, и вам нужно все книжки после «оцифровки» отправить в другое место по сети. Разумеется, многие книжки в библиотеке не уникальны и уже есть там, куда вам нужно все отправить. А значит отправлять каждую оцифрованную книгу нелогично, и нужно найти способ как-то различать их.

Так как существуют различные издания у одной и той же книги, или, если книга рукописная, может быть написана с ошибками, нельзя различать книги по названию или по общему количеству символов, это ненадежно, и теоретически важный экземпляр книги может быть упущен. Поэтому книги нужно различать непосредственно по их содержиму, нужно каким-то образом снизить затраты на сравнение разных книг и построении выводов об их «одинаковости».

Для этого один ученый, работавший в IBM в 1953 году ввел в оборот термин «хэша» (hash), за чем в последствии стали иметь ввиду функцию, которая приводит данные незаданного размера к значению фиксированной длины. Проще говоря, хэшем называют функцию, которая может преобразовать книгу с содержимым любого размера в некоторую последовательность символов заданной длины, которая подходит на роль указателя. Например, результатом хэша может быть строка из 20 байтов, как функция SHA-1, используемая в BitTorrent. Используя такие строки как «указатели» в базе данных, можно однозначно сравнить любые две книги и сделать вывод о том, что они одинаковые, без сравнения их названия или содержания (которое может быть любого размера).

Конечно, для очень больших книг, скажем, более 10 МБ, хэши начнут повторятся, поэтому структуру базы данных придется изменить. Мы будем разбивать каждую книгу на фрагменты по 10 мегабайт и назовем их частями. Для каждой части мы будет создавать свой хэш и формировать список хэшей частей. В качестве указателя на каждую уникальную книгу мы будем использовать уже список хэш-сумм, вместо одной общей. Для книги размером 5 МБ будет всего 1 часть и один хэш в списке, для книги размером 83 мегабайта указатель будет списком из 9 хэш-сумм.

Так как мы роботы, и наши вычислительные мощности превосходят человеческие, мы можем сравнивать эти самые списки хэш-сумм очень быстро. За то же время, за которое человек отличает две надписи из 4 букв, мы можем сравнить два списка из тысяч хэш-сумм.

После оцифровки каждой книги в нашей библиотеке, мы буем высылать список её хэш-сумм (хэшей для всех её частей) на сервер нашей базы данных. Там нам будут давать ответ, существует ли такая книга, или нет. Сервер базы данных будет считывать индекс для каждой книги, что у него имеется, и сравнивать с присланным списком хэш-сумм. Если встречается список, идентичный присланному, значит книга уже существует в базе данных, и её не нужно повторно сохранять.

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

Так у нас появился идеальный робот, который может оцифровывать тысячи библиотек по всему миру, и присылать нам только уникальные версии произведений, которые мы будем складировать и различать по достаточно коротким указателям. Б-г (программист базы данных) может сообщить своим друзьям-роботам: «эй, прочитайте книгу Х!» - и в качестве Х передать список хэш сумм. Каждый проверит в своей собственной памяти, и кто-то скажет «знаешь, я уже прочитал Х!». А кто то - «Ой, а передай мне пожалуйста копию Х!».

----------

В реальном мире все еще намного сложнее и запутанее, ведь речь идет о любых файлах, любых размеров. Однако принципы разбивки на части и хэш-суммы тот же. «Базой данных» из художественного примера выше в BitTorrent является торрент-трекер. Так называется веб-сайт, который предоставляет возможность скачать списки хэш-сумм для произведений, которые хотят получить его пользователи. Например, Вася скачивает .torrent файл «Игра престолов все серии» с трекера. Этот файл будет очень небольшой и его загрузка едва ли займет секунду времени, ведь мы помним, что она содержит всего лишь список хэшей для честей. Независимо от размера каждой части хэши всегда 20 байтов в длину, что даже меньше, чем четвертишье стихотворения Маяковского. Но тем не менее, торрент будет состоять из сотен или тысяч частей, так как любые фильмы и кино (мультимедиа файлы) — это большие объемы данных.

После этого Вася включает спициальную программу, которая умеет работать с такими .torrent-файлами (например, свободная кросс-платформенная программа Transmission). Вы наверняка осведомлены о том, что Torrent-клиент (так называются эти программы), скачивают файлы напрямую с компьютеров других пользователей, которые уже ранее скачали файлы. Значит, кто-то когда-то скачал этот файл впервые, откуда? Все просто — файл был скачан впервые у того, кто создал и опубликовал торрент-файл на трекере, а первый скачавший получил свою копию первым, а затем, он стал «сидом» (seed — англ. Сеять), то есть он из «качающего» стал «раздающем», и теперь к нему можно обращаться с самым главным вопросом: «Эй, привет, можешь поделиться частью 43 файла 332 торрента Х? Жду передачи».

Торрент-клиент, с помощью которого части раздаются и скачиваются между «пирами» (peer— участник обменной сети), получатет информацию о том, у кого сколько процентов торрента скачано от торрент-трекера. То есть файл .torrent содержит не только список частей и их хэш-суммы, он так же содержит список трекеров, к которым можно обратиться за списком «сидирующих» (раздающих) этот торрент. На практике, существует технология DHT, которая в определенных обменных сетях позволяет сделать процесс обмена списком пиров в конкретной сети очень быстрым. В то время как в глобальной сети, отключив трекер, торрент очень скоро прекратит свое существование, ведь новые и старые пиры уже не смогут найти друг друга.. Поэтому называть BitTorrent децентрализованным протоколом файлового обмена не совсем корректно.

Поэтому в мире BitTorrent существуют абсолютно аномные трекеры, которые можно найти в интернете. Адреса этих трекеров можно смело добавлять при создании торрента. И они не требуют публикации .torrent файла. Они просто будут «помнить» членов обменной сети для каждого торрента, список хэш-сумм которого у них появится, то есть трекер действительно ПОЧТИ ничего не знает о содержимом файлов торрентов, а просто собирает и делится по запросу списком IP-адресов, когда его спрашивают, где можно скачать конкретный торрент.

Наконец, в случае с базой данных, куда оцифровщик отправлял уникальные произведения, мы говорили о так называемом «указателе», который является списком хэш-сумм. Например, список хэш сумм для 10 частей фиксированного размера составит 200 байтов (размер хэша = 20 Б). Значит, указателем является последовательность из 200 байтов. А вот для торрента из 1000 частей, указатель станет очень длинным (20000 Б), и сравнивать много таких указателей не разумно. Поэтому мы опять используем хэш — для индекса мы берем эту самую последовательность хэшей (будь то в 200 Б, или 20000 Б) и вычисляем её хэш, равный 20 Б. То есть, получается, что мы создали хэш из списка хэшей, и размер нашего указателя тоже стал фиксированным. В BitTorrent это применяется для того, что бы различить разные торренты, для каждого списка хэш-сумм, независимо от размера и количества частей, можно сделать фиксрованный хэш. Он может, к примеру, использоватьсяв качестве «указателя» на серверах торрент-трекеров, когда нужно «спросить» у кого можно скачать содержимое торрент файлов.

Торрент-файлы может создать любой желающий. Для этого необхима упомянутая программа-клиент (Transmission) и файл или папка, которую вы хотите «раздать». Вам нужно найти функцию создания торрента. Программа-клиент сама разобьет ваши файлы на части и вычислит для каждого блока хэш. В качестве списка трекеров вы можете указать вот эти (https://openbittorrent.com/), и сгенерировать торрент-файл. Отправив файл другу или друзьям, он может открыть его в аналогичной программе, совместимой с протоколом BitTorrent. При условии, что вы «встанете на раздачу», оповестив трекер, ваши товарищи смогут получить ваш IP-адрес от трекера и начать передачу напрямую.

А что по поводу скорости скачивания? Она зависит от собственной сети - или совпадает со скоростью очередного раздающего?

Ограничена меньшим из двух. Если ваша сеть быстрее, чем у раздающего, быстрее, чем он раздает, вы не скачаете. Но можете одновременно качать у других пользователей другие части файла, что как раз делает торрент очень быстрым способом передачи данных (использует по максимуму пропускную способность вашего канала), но только для популярных раздач. Если на раздаче один сид с плохим каналом, тут ничего не поделать, придется ждать

Представьте себе большую бутылку, в которую льют воду из нескольких шлангов. Скорость наполнения бутылки зависит как от ширины горлышка (скорость приёма вашей сети), так и от количества и ширины шлангов (скорость отдачи раздающих).

А что именно означает число сидов и личей у торрент-файла?

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

Если это 10-20 раздач на одном сайте, скорее всего они все-таки разные. Разное качество видео, разная озвучка, субтитры. Полные дубликаты модераторы как правило удаляют. Далее, если скачать два действительно идентичных торрент-файла с разных трекеров, торрент-клиент объединит их в одну закачку и будет качать с обоих - каждый трекер знает только о раздачах своих пользователей, но не пользователей других трекеров (DHT пока не будем рассматривать). А как уже было сказано выше, чем больше сидов, тем лучше. Но для этого раздачи должны быть идентичными - не просто один и тот же сезон одного сериала, а полученные из одного источника, например третьего закрытого трекера

Спасибо большое, достаточно доступно и понятно объяснили;) А то всегда гадала, что же это за слова сиды-пиры-личи и тд

//Это к теме, конечно, не относится, но разрешите проявить своё занудство и придраться: правильно всё-таки говорится "четверостишье"

Извините, ни хрена не понял. Сколько ни пытался воспользоваться торрентами, только облизывался, хотя делал всё правильно (по инструкции).

Студентка ТФ РГУ Нефти и газа им. Губкина, бывший...  · 5 июл 2016
Если кому-то лень читать ответ выше, то вкратце: у кого-то на компьютере имеется файл. Ссылку на него этот кто-то публикует на трекере. Далее вы скачиваете ссылку и даете ее почитать торрент-клиенту. Программа уже в курсе, что... Читать далее

Я тот, кому было лень читать ответ выше,спасибо, от души прям)

Первый
Интересуюсь компами  · 5 дек 2020
Я думаю, что торрент-это файл, в котором указано ,откуда качать те или иные файлы,то есть это файл в котором указан сервер, откуда этот файл клиент и будет загружать. Например: я хочу скачать фильм. Я его скачал, а мой друг... Читать далее