Мне было интересно, как куски, загруженные торрент-клиентами, хранятся и собираются заново? Они используют метаданные? Кажется, это не тот случай, так как их можно воспроизвести, если они наполовину сформированы? Понятия не имею, как это делается? В общем, я спрашиваю, как организованы фрагменты загруженного файла? Это просто от первого до последнего или между ними есть буферные пространства?
bittorrent
Cenoc
источник
источник
Ответы:
Добро пожаловать в чудесный мир Торрентов! Протокол 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.
источник