ネットブロックとその中から割り当てられたリストを考慮して、CIDRネットブロック内の「フリープレフィックス」を判断する方法を見つけようとしています。例えばCIDRネットブロック内でフリープレフィックスを見つける
:
LETのネットブロック= 10.0.0.0/22
LET割り当て= {10.0.0.0/24、10.0.1.0/24}
最も計算上効率的であるもの10.0.0.0/22の「無料」ネットブロックを把握する方法は?上記の例では10.0.2.0/23を出力する必要があります。
私は研究を試みましたが、ほとんどが空になりました。 (おそらくネットワークプログラミングと私の経験不足に)私の心に来る唯一の方法は次のとおりです。
- CIDR - IPアドレスの拡張の>リスト
- マッチ共通IPアドレスにして、リスト
- からそれらを削除変更されたリストをCIDR表記に戻してください。
これはかなり非効率的です(私はそれを "ブルートフォース"アプローチと呼んでいます)。
私は一般的なアルゴリズムでうまくいきますが、Java固有の回答である必要はありません。
ありがとうございました! :)
あなたの割り当ては親ブロックの始めに割り当てられ、ビット境界によってうまく調整されているので、あなたの例は "完璧なケース"ですが、 "10.0.2.111/30"のようなものもありますこの場合、10.0.0.0-10.0.2.110をカバーする単一の連続ブロックを定義することはできず、10.0.0.0-10.0.2.107プラスM個の出力ブロックをカバーするN個の出力ブロックを定義する必要があります10.0.2.112-10.0.3.255をカバーする。それでもやり遂げることはできますが、(少なくとも最適な解を見つけたい場合はNとMを可能な限り小さくしてください)より難しい作業です。 @エッペリンは確かに – zeppelin
です。まあ、私の場合、割り当てサイズは常に少なくとも/ 24であることが保証されていますが、私はあなたが言っていることを理解しています。 –