Некоторые вопросы повторной сборки потока TCP - PullRequest
0 голосов
/ 14 сентября 2011

Я внедряю систему IPS, и я немного растерялся, наблюдая за процессом повторной сборки TCP-потока при помощи wireshark.

Например, сервер передает страницу HTML клиенту.Страница разделена на 4 части и заключена в пакет TCP.Затем сервер отправляет клиенту еще 4 TCP-пакета для получения текста JavaScript.

Мой вопрос: я знаю, что могу определить их последовательности, измерив их Seq и Len, но как я могу определить конец текста HTML?Как я могу узнать, что HTML содержит 4 TCP-пакета, но не 5?

1 Ответ

2 голосов
/ 14 сентября 2011

RFC 2616 раздел 4.4 утверждает, что длина сообщения может быть задана несколькими способами:

  • Заголовком Content-Length, если он определен. (Вероятно, это тот случай, который вы видите, и он относительно прост. Если вы знаете позицию (seq + смещение в пакете) начала тела и длину сообщения, вы можете просто добавить, чтобы получить позицию конца. )
  • Путем кодирования по частям. RFC имеет подробности, но имеет аналогичную кодировку для каждого чанка и способ отметить последний чанк.
  • multipart/byteranges (который вы не увидите, если клиент не попросит об этом, и, вероятно, не будет для документа HTML).
  • Или до тех пор, пока TCP-соединение не будет закрыто. (В частности, до тех пор, пока пакет FIN не будет отправлен с сервера клиенту, что происходит только при чистом закрытии; в противном случае вы увидите RST.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...