Другие языки программирования и технологии

Вопрос по технологии торрентов

Почему части файла передаваемые через торрент качаются не последовательно, а случайным образом?
Образно говоря: есть части файла 1-10. Передаются через торрент. От чего зависит их порядок загрузки?
Yura Ivashkevich
Yura Ivashkevich
252
с разных компов качаются части файла которые затем воедино соединяются, долго объяснять. лучше погуглите.
Багдат Джабаев
Багдат Джабаев
4 763
Лучший ответ
Эти файлы лежат ни на каком-то специальном сервере, а на компьютерах разных пользователей которые объединены в пиринговую сеть. Ваш торрент-клиент у кого какой кусок найдет - у того и скачивает этот кусок. Другой кусок берет у другого пользователя, третий у третьего и так далее
Timur Dzhumashev
Timur Dzhumashev
54 237
Представь, что файл находится пока что только у одного человека. Если все начнут качать его последовательно, то конца ни у кого не будет, у всех будет только начало и раздающий будет всего один. Файл нужно раздать целиком разным пользователям, чтобы те потом докачивали его друг у друга. Если раздавать последовательно, то у большинства будет начало, а данных на конец будет не хватать. В идеале всё (все данные) должно быть равномерно распространено.
В qbittorrent можно включить последовательную загрузку
Сергей Рябов
Сергей Рябов
75 583
Во-первых суть этого протокола: "скачал сам - раздай другим".

Так же поэтому и реализована загрузка случайных частей, ведь если все клиенты будут скачивать все части файла последовательно - то все они будут зависеть от клиента, который имеет все 100% частей файла, а если он уйдет с раздачи - все останутся у разбитого корыта.

А с возможностью загрузки случайных частей клиенты становятся менее зависимыми от негласного сервера, который имеет 100% файла, ведь как только клиент, который только что загрузил часть 20 (*условно*) тут же ее раздает всем остальным клиентам - это обеспечивает не только децентрализацию всей системы, но и снижение нагрузки на этот "сервер", ведь клиенты будут ломиться к нему только в самом начале, когда пойдет загрузка первых нескольких частей (потом они тут же начинают делиться друг с другом).

Полагаю так же, чтобы обеспечить ЕЩЕ БОЛЬШУЮ децентрализацию и отказоустойчивость (т. е ситуацию, когда раздающий уходит с раздачи), клиенты постоянно опрашивают наличие тех или иных частей у всех участников раздачи, т. е:

Клиент №1 спросил: сколько частей и какие части у вас есть?
Клиент №2 ответил: у меня 5 частей (1, 7, 2, 3, 6)
Клиент №3 ответил: у меня 4 части (1, 2, 4, 6)
Клиент №4 ответил: у меня 10 частей (1, 2, 3, 4. 6, 9, 11, 13, 8, 15)
и т. д. По этому получается, что частей "5", "10", "12", "14" и "16) нет ни у кого, а частей "7", "8" и "9" довольно мало - надо отдать сначала приоритет отсутствующим частям и тем, которых мало (отсутствующие части запрашиваются о раздающего 100% файл, а те части, которых мало могут и у других клиентов запрашиваться)

Данный протокол имеет большие возможности, например "снижение нагрузки на раздающих 100% комплект частей файла", ведь:

1. Клиенты сами самостоятельно обмениваются скачанными частями файла друг с другом - лишний раз никто раздающего не тревожит

2. Клиенты запрашивают у раздающего только те части, которые отсутствуют у всех клиентов - лишний раз никто раздающего не тревожит

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

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

При этом раздающий 100% пакет данных так же является полноправным клиентом этой сети (только он ничего не загружает у других клиентов).

Высокая скорость обеспечивается за счет установления множества соединений с другими клиентами для скачивания одной лишь части.

Думаю, что вполне понятно объяснил
Какая часть быстрее получает коннект та и скачивается