Как я могу определить, является ли текущий сегмент TCP частью большого PDU? - PullRequest
0 голосов
/ 08 февраля 2020

Я пишу небольшое приложение, используя libpcap, где я анализирую / анализирую приложение на основе TCP. Я столкнулся с ситуацией, когда приложение пытается отправить действительно большой объем данных, скажем, 64 КБ, а слой TCP разрезает его на несколько более мелких сегментов.

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

Заголовок TCP имеет поле последовательности, но я не до конца понимаю, как он может ответить на мой вопрос.

Кроме того, в заголовке IP есть поле total_length, но оно не имеет ничего общего с сегментацией TCP, оно указывает на размер полезной нагрузки IP текущего пакета

. получить некоторые подсказки. Спасибо.

1 Ответ

2 голосов
/ 08 февраля 2020

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

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

Для этого и нужен протокол сообщений. Если, например, протокол сообщения говорит, что PDU - это «серия символов, не содержащих символ новой строки, оканчивающийся символом новой строки», то, если у вас нет символа новой строки, вы знаете, что это часть большего PDU.

Концепция PDU применяется к протоколам сообщений, поэтому, если вы говорите о PDU, у вас должен быть протокол сообщений. Протокол сообщения скажет вам, когда у вас есть весь PDU. Это его цель.

...