Если вы закодируете IP как целое число в диапазоне [0, 2 ^ 32], вы можете определить исходный и целевой диапазоны с помощью четырехмерного прямоугольника
min = [src_ip_min, src_prt_min, dst_ip_min, dst_prt_min]
max = [src_ip_max, src_prt_max, dst_ip_max, dst_prt_max]
Вы можете индексировать многомерные прямоугольники, используяструктура пространственного индекса, такая как R-Tree , для эффективного ответа на пространственные запросы.В вашем случае вам понадобится поиск по диапазону (диапазон = 0), чтобы получить все прямоугольники (= правила), которые применяются к определенному запросу.
4 измерения по-прежнему должны хорошо индексироваться, поэтому в зависимости от распределения диапазонаВы можете ожидать время запроса ближе к O(log n)