Сетевые пакеты - всегда ли данные принимаются последовательно?
Допустим, вы сидите на своем домашнем компьютере и запрашиваете 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) не обеспечивают упорядочение сегментов, поэтому сегменты доставляются приложению в порядке их получения.