假设我有一个起始 IP 和一个结束 IP。为了减少碎片,找出可以从这个范围分配的最大 cidr 的最简单方法是什么?
例如,我有范围 10.10.1.0 - 10.10.2.128。
我请求一个 /25。最简单的算法会给我 10.10.1.0/25 并完成它,但这会将 /24 分段并且不会分配 /25(10.10.2.0/25)。我希望看到的是分配 10.10.2.0/25 并保持 10.10.1.0-10.10.1.255 不变。
欢迎提出任何想法。我已经为此绞尽脑汁了。
答案1
听起来你想要一些接近伙伴分配器的东西,从内存管理中借用一个页面(哈哈)。
步骤 1:将您拥有的范围转换为一系列尽可能大的 CIDR 块,但不要跨越范围边界或与其他块重叠。
步骤 2:根据您要尝试适应的分配,找到适合它的最小可能块。理想情况下,这将完全匹配,但如果不匹配,您将拆分找到的最小块(可能递归),直到找到正确大小的块。
这里我的措辞不是特别优雅,但我希望你能明白我的意思。
答案2
不存在以 10.10.1.0 - 10.10.2.128 为界的 CIDR
10.10.1.0 /22 是 10.10.0.0 - 10.10.3.255
10.10.1.0 /23 是 10.10.0.0 - 10.10.1.255
10.10.1.0 /24 是 10.10.1.0 - 10.10.1.255
您可以拥有两个独立的网络:
10.10.1.0 /24 是 10.10.1.0 - 10.10.1.255
10.10.2.0 /25 是 10.10.2.0 - 10.10.2.127