2014-11-09 3 views
0

Я получаю сегменты пакетов в двух частях. Я могу видеть это в wirehark как tcp повторно собран. После поиска в google я узнал о некотором фрагменте фрагмента, установленном для фрагментированных данных. Но он не установлен даже для фрагментированных данных. Я использую java-библиотеку jnetpcap для получения пакетов, но я не могу понять, какие поля и флаги должны ждать, чтобы собрать пакет tcp. Иногда пакеты появляются сразу, если я запускаю на VM, но несколько раз его фрагментированный. Мне нужен способ выяснить, как собрать пакет.Проблема с повторной сборкой tcp

+0

Конечно, он «не установлен даже для фрагментированных данных». В противном случае данные не могли быть фрагментированы. – EJP

ответ

0

Фрагментация может произойти на многих латтерах протокола. Это может происходить в IP, когда датаграмма IP фрагментирована на несколько IP-датаграмм, и это может происходить в протоколах, запущенных на TCP.

Бит «Не фрагментировать» - бит IP. Сегментация пакетов, которую вы видите, находится на уровне TCP; эта сегментация полностью отделена от фрагментации, которая происходит на уровне IP.

Повторная сборка IP довольно проста в программе пакетного анализа; все данные, необходимые для сбора фрагментов, доступны в заголовках протоколов IP-фрагментов.

TCP сборка NOT как прост в использовании. Абстракция TCP для протоколов, работающих поверх TCP, представляет собой последовательность потоков октетов (байтов); нет границ пакетов. Пакет или другая многобайтовая структура, отправляемая через TCP, может произвольно разбиваться на сегменты TCP в любой точке пакета.

Это означает, что повторная сборка TCP в программе анализа пакетов требует, чтобы код, который понимает сегменты TCP, и код, который понимает протокол, работающий на TCP, взаимодействует. См., Например, процедуру tcp_dissect_pdus() в файле packet-tcp.c Wireshark и код в файле req_resp_hdrs.c.

+0

Если неполные пакеты прибывают в пункт назначения, возможно, найдется способ найти следующий следующий пакет. Как мы можем его идентифицировать? Я видел этот ответ http://stackoverflow.com/questions/4481914/reassembling-tcp-segments. Но когда я вижу его в wirehark, он не получает ответа, как указано в ответе. – saifjunaid

+0

Ответ на вопрос: «Does wireshark использует Ack, чтобы знать, какие сегменты принадлежат друг другу?» нет*. Как я уже сказал, сам TCP предоставляет * NO * информацию, указывающую, какие байты в потоке байтов TCP являются частью пакетов более высокого уровня; не только может быть разделен пакет более высокого уровня между двумя отдельными сегментами TCP, но сегмент TCP может содержать часть или все несколько пакетов. Пока вы не поймете, почему невозможно выполнить повторную сборку, основанную только на данных в заголовке TCP, вы не сможете писать код для повторной сборки пакетов для протоколов, работающих на TCP. –