Как торрент-клиенты собирают и хранят фрагменты?

9

Мне было интересно, как куски, загруженные торрент-клиентами, хранятся и собираются заново? Они используют метаданные? Кажется, это не тот случай, так как их можно воспроизвести, если они наполовину сформированы? Понятия не имею, как это делается? В общем, я спрашиваю, как организованы фрагменты загруженного файла? Это просто от первого до последнего или между ними есть буферные пространства?

Cenoc
источник
Есть ли способ загрузить половину загруженных фрагментов после перепроверки? Мое соединение похоже на dialup ...... Так что, пожалуйста, помогите.

Ответы:

19

Добро пожаловать в чудесный мир Торрентов! Протокол Bittorrent состоит из нескольких частей: у вас есть файл legalthing.iso, и вы хотите распространить его как можно большему числу людей. Таким образом, вы создаете «торрент» файл, который описывает legalthing.iso, и распространяете торрент файл через веб-сайт или любым другим способом, который вам нравится. Файл торрента может указывать либо на ваш компьютер (а вы будете выступать в качестве начального числа), либо файл торрента может указывать на «трекер», который представляет собой сервер, который соединяет «начальные значения» (пользователей со всем legalthing.iso). файл уже) и "peers" (пользователи, которые активно скачивают файл).

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

Теперь представьте, что вы загружаете файл с компьютера, используя Bittorrent. Протокол может работать одним из двух способов: либо вы загружаете случайные фрагменты файла, либо сначала загружаете самые редкие фрагменты. Этот последний подход заключается в увеличении общего «здоровья» (доступности) торрента.

Так что же в текущем торрент-файле? Он варьируется в зависимости от клиента, использовавшегося для его создания, но обычно он содержит раздел «анонс», в котором указан адрес используемого вами трекера, и большой огромный список всех фрагментов файла, который вы хотите загрузить. Каждый кусок имеет одинаковый размер (32 КБ, 512 КБ, 4 МБ, действительно любого размера, который вам нравится), и каждый кусок имеет хеш, связанный с ним. Каждый раз, когда одноранговый узел получает фрагмент, он сравнивает хеш для этого фрагмента (используя хеш-код SHA-1) с хешем, указанным в торрент-файле. Вот как он выясняет, что штуки хорошие.

Поскольку в торрент-файле перечислены все фрагменты загружаемого вами файла, каждый раз, когда ваш клиент успешно загружает фрагмент и хэширует его, он записывает этот фрагмент в правильную позицию на жестком диске в файле. Вот почему, если вы загрузите файл размером 1 ГБ, клиент выделит пустой блок пространства на вашем диске размером 1 ГБ для размещения торрент-фрагментов, которые вы будете загружать.

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

Есть много более сложных аспектов (Google DHT, буферизация торрент-записи, все эти забавные вещи), но это основы того, как работает Bittorrent.

geodave
источник
Вау, это очень полный ответ .... но я никогда не замечал, что это действительно откладывает 1 ГБ файл? Кажется, он растет постепенно?
Cenoc
1
@Cenoc зависит от торрент-клиента, некоторые клиенты предварительно выделяют, некоторые нет, некоторые имеют дополнительные предпочтения для предварительного выделения
Сатьяджит Бхат
Интересно, сначала это просто файл, заполненный нулями, а затем, когда частично загруженный файл сначала проверяется, он сравнивается с хешами?
Cenoc
1
Это пустой контейнер для конечного полного файла, и, поскольку каждый фрагмент загружается клиентом, он проверяется на соответствие хешу и затем помещается в соответствующее место в контейнере до тех пор, пока полный файл не будет завершен.
Geodave
1
Как сказал Сатья, это зависит от клиента. Некоторые предварительно выделят место на вашем жестком диске для всего файла; это зарезервирует кучу места, и другие программы не смогут использовать это место на диске, пока ваш файл не будет загружен. Другие клиенты Bittorrent помещают готовые фрагменты во временное хранилище, чтобы сэкономить место на диске, а затем собирают полный файл после загрузки всех фрагментов. Это зависит от того, какие настройки вы выберете.
Geodave