Сетевые пакеты - всегда ли данные принимаются последовательно?

Допустим, вы сидите на своем домашнем компьютере и запрашиваете https://google.com через ваш браузер по выбору. TCP Handshake завершается, и сервер Google отправляет страницы HTML/JS (и любые другие ресурсы, которые он использует).

Страницы слишком велики для отправки в одном пакете, поэтому он разбивает страницу на несколько частей... отсюда и пакеты

Будет ли полезная нагрузка (данные) поступать последовательно?

Подобно:

Пакет 1 - получил первым

<html>
     <head>
            <script src='./blah/blah.js'</script>
     </head>

Пакет 2 - получен второй

     <body>
     <h4> Hi I'm Google.com </h4>

Пакет 3 - получен третий

      </body>
 </html>

Я просто говорю о данных в пакетах (полезная нагрузка) на прикладном уровне. Я хочу знать, есть ли структура порядка, в котором пакеты принимаются. Как браузер собирает его, если он не приходит в порядок?

1 ответ

Решение

С HTTP данные будут получены последовательно на прикладном уровне. Это связано с тем, что HTTP использует протокол TCP на транспортном уровне. Одной из услуг, предоставляемых TCP, является последовательное упорядочение сегментов. Это достигается наличием поля порядкового номера пакета в заголовке TCP.

Это не означает, что пакеты действительно поступили в систему по порядку. Кроме того, другие транспортные протоколы (такие как UDP) не обеспечивают упорядочение сегментов, поэтому сегменты доставляются приложению в порядке их получения.

Другие вопросы по тегам