IP 範囲内で最大の cidr を決定する方法

IP 範囲内で最大の cidr を決定する方法

開始 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 です

2 つの別々のネットワークを持つことができます。

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 です

関連情報