Indexing IP地址的索引范围搜索算法

Indexing IP地址的索引范围搜索算法,indexing,ip-address,search,Indexing,Ip Address,Search,给定CIDR通知中或两个IP之间具有100亿IPv4范围的ACL列表: x.x.x.x/y x.x.x.x - y.y.y.y 什么是有效的搜索/索引算法,用于测试给定IP地址是否符合一个或多个ACL范围的标准 让我们假设大多数ACL范围定义跨越大量C类块 通过哈希表对点进行索引很容易,但请尝试一下,因为我可能无法找到一种合理的方法来检测哪些点被大量“行”所覆盖 有一些想法,比如在某个细节级别上索引提示——比如在C类级别上预计算每个覆盖该点的ACL,但是表太大了。。或者某种KD树来动态设置细节

给定CIDR通知中或两个IP之间具有100亿IPv4范围的ACL列表:

x.x.x.x/y
x.x.x.x - y.y.y.y
什么是有效的搜索/索引算法,用于测试给定IP地址是否符合一个或多个ACL范围的标准

让我们假设大多数ACL范围定义跨越大量C类块

通过哈希表对点进行索引很容易,但请尝试一下,因为我可能无法找到一种合理的方法来检测哪些点被大量“行”所覆盖

有一些想法,比如在某个细节级别上索引提示——比如在C类级别上预计算每个覆盖该点的ACL,但是表太大了。。或者某种KD树来动态设置细节级别

我还认为可能有碰撞检测算法可以解决这个问题

是否有正确方向的提示或指针?

您可以查看以查找与任何给定间隔或点重叠的所有间隔

对于不重叠的ip范围,您可以使用b-树或类似的压缩尝试进行索引和搜索(将起始ip存储为键,将结束ip存储为值)。

在Internet路由查找中使用的简单方法可以缩放以容纳表示与其他较小CIDR子网重叠的较大CIDR子网的节点。最长匹配查找将遍历这些节点,这些节点也将被选中以获取与IP地址匹配的整个CIDR子网集


现在,要在同一棵树中保留IP范围,我们可以。尽管集合中可能有许多子网(甚至一些主机IP,即IP/32类CIDR地址),但始终可以这样做。

您有100亿条规则来匹配40亿个可能的地址

制作一个包含40亿个地址的表格。对于100亿条规则中的每一条,“画”出它适用的地址,当两条或多条规则适用于同一地址时,做一些明智的事情