Тихая потеря пакетов в PcapSpl... Заметка

Тихая потеря пакетов в PcapSplitter: ошибка столкновения файлов при повторном использовании TCP-сессии

Автор столкнулся с проблемами повреждения файлов при обработке больших PCAP-файлов с помощью инструмента, обернутого в tshark. Первоначальные проблемы заключались в ошибках tshark, указывающих на проблемы с "Total Block Length" в больших файлах. После распараллеливания обработки PCAP повреждение файлов стало более очевидным. Воспроизведение показало, что PcapSplitter сообщал о большем количестве файлов и пакетов, чем фактически существовало на диске, несмотря на успешное завершение работы. Были исследованы и исключены две неверные теории: исчерпание файловых дескрипторов и жестко заданный предел в параллельной обработке файлов PcapSplitter. Истинная причина была выявлена в FiveTupleSplitter PcapSplitter, в частности, в отношении повторного использования TCP-сессий. Когда поступал новый SYN-пакет для уже отслеживаемого пятиэлементного кортежа, разделитель неправильно присваивал новый номер файла, но генерировал то же имя файла, используя только IP-адрес и порт. Это приводило либо к усечению файла, либо к состоянию гонки между двумя обработчиками записи. Было разработано исправление, которое добавляет суффикс к именам файлов только при фактическом столкновении. Это исправление было протестировано и объединено в библиотеку PcapSplitter.