我试图找出一种方法来确定"免费前缀"在给定网络块的CIDR网络块内以及其中的分配列表。
例如:
让netblock = 10.0.0.0/22
让分配= {10.0.0.0/24,10.0.1.0/24}
什么是计算效率最高的方法来确定" free" netblocks在10.0.0.0/22之内?我需要为上面的例子输出10.0.2.0/23。
我已经尝试过研究,并且大部分都是空洞的。我想到的唯一方法(可能是由于我对网络编程经验不足)是:
然而,这听起来效率很低(我称之为" bruteforce"方法)。
我使用通用算法,但它不一定是Java特定的答案。
谢谢! :)
答案 0 :(得分:1)
给定一个地址x / y,当你从一组地址中减去它时,你剩下的就是集合a / y中的地址,其中a< x,以及集合b / y中的地址,其中b> X
因此,在您的示例中,当您从10.0.0.0/22减去10.0.0.0/24时,它会离开10.0.1-3.0 / 24。
10.0.0.0/22中没有地址x / 24,其中x< 10.0.0.0。 10.0.0.0/22中的地址y / 24,其中y> 10.0.0.0是10.0.1.0/24,10.0.2.0/24和10.0.3.0/24,或10.0.1-3.0 / 24.
另一种查看方式:删除前24位为10.0.0的所有地址
这样就可以保留前24位更大的所有地址,以及前24位更小的所有地址。每个都可以表示为一个范围。
只需迭代重复此过程。