8

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

1 ответ1

17

Добро пожаловать в чудесный мир Торрентов! Протокол 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .