Вопрос по TCP и как осмысленно собирать TCP сегменты - PullRequest
0 голосов
/ 27 октября 2010

Когда приложение, такое как веб-сервер, отправляет данные HTTP в веб-браузер, как браузер узнает, когда он получил все данные, чтобы он мог начать использовать их вместо ожидания большего?TCP нигде не указывает, насколько большим будет сегментированное сообщение.

Сейчас я думаю, что это до уровня приложения, как заголовок Content-Length HTTP.Но похоже, что даже этот заголовок может быть разбит на 2-й или 3-й пакет.

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

TCP / IP - это протокол, ориентированный на соединение. Таким образом, когда браузер выполняет HTTP-соединение с использованием TCP / IP, сетевой стек гарантирует, что поток будет поступать в том же порядке, в котором отправитель предполагал.

Таким образом, при работе с TCP отсутствует концепция пакета . TCP - это упорядоченный поток байтов, поступающий через сокет. Не нужно беспокоиться о пакетах вообще. В этом прелесть стека протоколов: каждый уровень выполняет свою работу и абстрагирует уровень над ним от основных сложностей решаемых им проблем.

1 голос
/ 27 октября 2010

Действительно, длина содержимого, кроме случая, когда клиент читает, пока не получит указание конца файла из-за того, что другой конец закрывает соединение. Конечно, в HTTP, «RSVP», так что этого не произойдет.

Отсутствует длина контента, он должен искать </html> или какой-либо другой разделитель в контенте. Браузер не видит пакеты вообще. Соединение выглядит как поток, без границ, и протокол должен составить два конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...