-1

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

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

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

2 ответа2

2

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

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

Если соединение обрывается или менеджер загрузки хочет разделить загрузку, чтобы он мог использовать, например, 4 соединения, он должен установить заголовок RANGE:

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
1

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

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

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

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

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