Java 在CIDR netblock中查找免费前缀
我正试图找出一种方法来确定CIDR netblock中的“自由前缀”,给定netblock和其中的分配列表 例如: 设netblock=10.0.0.0/22 让赋值={10.0.0.0/24,10.0.1.0/24} 从10.0.0.0/22中计算出“免费”NetBlock的计算效率最高的方法是什么?对于上面的示例,我需要输出10.0.2.0/23 我试过研究,结果大部分都是空的。我想到的唯一方法(可能是由于我缺乏网络编程经验)是:Java 在CIDR netblock中查找免费前缀,java,networking,routing,cidr,Java,Networking,Routing,Cidr,我正试图找出一种方法来确定CIDR netblock中的“自由前缀”,给定netblock和其中的分配列表 例如: 设netblock=10.0.0.0/22 让赋值={10.0.0.0/24,10.0.1.0/24} 从10.0.0.0/22中计算出“免费”NetBlock的计算效率最高的方法是什么?对于上面的示例,我需要输出10.0.2.0/23 我试过研究,结果大部分都是空的。我想到的唯一方法(可能是由于我缺乏网络编程经验)是: CIDR->IP扩展列表 匹配常见IP并将其从列表中删除 将
谢谢!:) 给定一个地址x/y,当你从一组地址中减去它时,剩下的是集合a/y中的地址,其中a
这就剩下了前24位较大的所有地址,以及前24位较小的所有地址。其中每一个都可以表示为一个范围
只需反复重复此过程。您的示例是一个“完美案例”,因为您的赋值分配在父块的开头,并通过位边界很好地对齐,但您最好在列表中有类似“10.0.2.111/30”的内容,在这种情况下,您将无法定义单个连续块以覆盖10.0.0.0-10.0.2.110,并且必须定义N个输出块以覆盖范围10.0.0-10.0.2.107,再加上M个输出块以覆盖范围10.0.2.112-10.0.3.255。这仍然可以做到,但这是一项更艰巨的任务(至少如果你想找到一个最优的解决方案,保持N和M尽可能小)。@zeppelin确实如此。在我的例子中,分配的大小保证总是至少是a/24,但我理解你的意思,每一个都可以表示为一个范围。情况并非总是如此,例如,如果源代码块为10.0.0.0/21,并且从中删除了10.0.5.0/24,则剩下的(低端)是10.0.0.0-1.0.4.255,不能在CIDR表示法中记为单个范围。