@fsfsfs32

Почему все современные протоколы передают маленькие куски?

Почему например при скачаивании файла в 1гб через хттп или битторрент они не отдают сразу гиг по сети на клиент а бьют его на части и тянут часами? Ладно когда это что-то рил-тайм стримы.стриминг.мультиплеер, но когда статические файлы почему? Из-за нехватки сети? В чем проявляется эта нехватка?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 4
NeiroNx
@NeiroNx
Программист
потому что если произойдет потеря/ошибка в одной из частей - она выкачивается снова. А теперь представте вы качаете 1 гиг - он качается уже 60% и "бац" - ошибка, вы начинаете качать снова с 0 - теперь уже 89% и снова ошибка. Закачка начнется снова с 0. Вы уже скачали 1.5 гига, но файла так и не получили.
Ответ написан
inoise
@inoise
Solution Architect, AWS Certified, Serverless
По тому что так устроены сети в принципе, это раз. И по тому что это контролируемой - два. И потери сети. Просто для справки - регулярно пакеты теряются, поэтому в TCP есть ретраи для гарантированной доставки данных. Будет неловко закачивать многогигабайтный файл и получить его битым, да? Потом начинать все с начала
Ответ написан
Вы как-то неточно вопрос ставите.
Все протоколы частями пересылают. Ибо вся информация дискретная - биты, байты. А уже протоколы TCP, UDP и выше их - передают фреймами, ибо есть и потери, и задержки, и прочие прелести сети.
Если же имеется ввиду части, которые можно наблюдать в торрентах, то там это для распределения закачки - чтобы можно было с разных участников брать разные части, а не ждать пока появится один, у кого весь файл (да и если все разом у него начнут качать, тупо забьют весь его канал).
Но ведь кроме этого есть и SMB, и DC, и FTP, и куча других - и в некоторых на прикладном уровне ничего не бьётся, хотя часто поддерживается докачка (FTP, DC). И если по SMB в локалке можно без особых проблем скачать файлик в 10 гигов, то по интернету это на 90% будет битый файл, и придётся перезакачивать заново.
spoiler
P.S. на работе, в начале 2000хх была у нас одна линия связи особо нестабильная (воздушка на 50км), и скорость была что-то около 19кбит/с. Так вот передать на удалённый комп обновление программы на 5 мегабайт было непросто. Приходилось winrar'ом архивировать с разбиением на части максимум по 80-100кБайт, и с избыточной информацией для восстановления. Перекидывали все эти части, а на том конце собирали - почти всегда какие-то части были битые, но избыточность архива спасала. Это потом уже более-менее нормальные качалки появились, стали их использовать, но целостность они проверить не могли, и уж точно восстановить файл после ошибок не могли.
Ответ написан
Griboks
@Griboks
1. Так быстрее - параллельная передача
2. Так надёжнее - вероятность ошибки снижается
3. Какие протоколы? Почти все протоколы, которые использую я, передают целые данные. Разбиение происходит на нижних уровнях.
4. Как бы tcp/ip в любом случае разбивает любые данные на пакеты по ~1кб
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы