Как загрузчик файлов узнает, где начинается файл?

Как загрузчик файлов узнает, где начинается файл?

Предположим, я скачиваю файл по протоколу HTTP. Пакеты, содержащие фрагменты файла, могут приходить в любом порядке. Тогда как загрузчик узнает, какой пакет первый в порядке? Я просматривал поля пакета HTTPздесьи не нашел поля «Порядковый номер».

Немного поразмыслив над этим вопросом, я пришел к выводу, что HTTP — это протокол уровня 7 и зависит от протоколов нижележащих уровней. TCP, будучи протоколом уровня 4, предоставляет HTTP эту услугу упорядочивания данных, поскольку заголовок TCP имеет порядковый номер (Нашел здесь).

Но я не уверен, что эта теория верна, поэтому хочу спросить об этом экспертов. Есть ли какой-то другой механизм для решения этой проблемы?

решение1

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

Вы можете использовать Wireshark и посмотретьэтот пример здесь

введите описание изображения здесь

Если соединение прерывается или если менеджер загрузок хочет разделить загрузку, чтобы использовать, например, 4 соединения, он должен установитьЗаголовок ДИАПАЗОНА:

GET /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
Range: bytes=0-1023

В этом случае ответ будет таким:

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024

решение2

Ты угадал.Из RFC 2616, раздел 1.4 «Общая эксплуатация», выделено:

HTTP-коммуникацияобычно происходит через соединения TCP/IP.Порт по умолчанию — TCP 80 [19], но можно использовать и другие порты. Это не мешает HTTP быть реализованным поверх любого другого протокола в Интернете или в других сетях.HTTP предполагает только надежный транспорт;Может быть использован любой протокол, который предоставляет такие гарантии; отображение структур запросов и ответов HTTP/1.1 на транспортные единицы данных рассматриваемого протокола выходит за рамки данной спецификации.

«Надежный транспорт» на сетевом жаргоне означает «доставляет данные без потерь (если не указано иное), дублирования/повторного воспроизведения, изменения или неправильного порядка».

Аналогично HTTPS работает поверх TLS (ранее SSL), который построен на TCP и предоставляет по сути тот же сервис (надежный транспорт байтового потока), но с дополнительными свойствами конфиденциальности и целостности (если не сигнализирована ошибка) даже против интеллектуальных злоумышленников, а не просто естественных ошибок и сбоев. Есть различия в производительности, но, насколько мне известно, единственные различия в сервисе заключаются в том, что TLS не предоставляет указатель «срочно» TCP, также известный как внеполосный, или отдельное закрытие для каждого направления, как состояния «полузакрыто» TCP, а HTTP/HTTPS в них не нуждается.

Связанный контент