Вопрос проверяет знание структур данных для быстрого поиска по префиксам и диапазонам.
Для хранения подсетей используют префиксные деревья (trie или radix tree), а также структуры диапазонов, например interval tree. Префиксное дерево эффективно для поиска по CIDR, потому что IP-адрес — это последовательность битов. Такие структуры позволяют выполнять поиск за время, близкое к длине ключа. Они применяются в маршрутизаторах и сетевых фильтрах.
Когда подсетей мало, можно просто хранить список и проверять по очереди. Но при тысячах и миллионах записей нужен более эффективный подход.
Идея:
IP рассматривается как последовательность битов
каждый уровень дерева соответствует одному биту
подсети хранятся в узлах
Преимущества:
быстрый поиск
естественная поддержка CIDR
predictable время работы
Недостаток — большой расход памяти.
Оптимизированный вариант trie:
сжатие цепочек узлов
меньше памяти
быстрее на практике
Поэтому в реальных системах часто используют именно radix tree.
Подсеть можно представить как диапазон:
start_ip - end_ip
И хранить диапазоны:
быстро искать пересечения
эффективно хранить большие диапазоны
Но сложнее работать с префиксной логикой.
Такие структуры применяются:
маршрутизаторы
firewall
CDN
балансировщики
Для хранения подсетей чаще всего используют trie или radix tree, поскольку они хорошо соответствуют префиксной природе IP-адресов и позволяют быстро выполнять поиск.