Использование крючков Netfilter Я реализовал модуль ядра Linux, который проверяет все входящие и исходящие пакеты хоста. Используя этот модуль, я могу контролировать потоки данного приложения, работающего на этом хосте, то есть, зная порты/IP-адреса src/dst, я могу отфильтровывать (классифицировать) соответствующие пакеты при их получении/отправке.Онлайн-соответствие запросов приложений с ответами в Linux Kernel
Что я хочу сделать дальше, это совпадение во время выполнения, запросы входящих приложений с соответствующими исходящими ответами. Каждый запрос/ответ идентифицируется с помощью src/dst IP и уникального идентификатора.
Наивный реализация является текучий:
- магазин каждый входящий запрос в списке (массив/связанный список и т.д.)
- Для каждого исходящего ответа:
- Поиск через чтобы найти соответствующий запрос. Если запрос найден, удалите его из списка.
- Периодически сокращать список запросов на удаление запросов старше X секунд.
Проблема в том, что для каждого ответа, этот наивный алгоритм требует линейного поиска по списку запросов с целью определения соответствия. Это дорого стоит по высоким ставкам.
Не могли бы вы предложить алгоритм, который может уменьшить сложность. Приятно жертвовать точностью (ослаблять некоторые совпадения) для поддержания производительности.
Спасибо!
A Btrie с (id, arc, dst), что и должен делать ключ. – 599644