我試圖找出一種方法來確定給定網絡塊和分配來自其內部列表中的CIDR網塊內「自由前綴」中找到免費的前綴。一個CIDR網絡塊
例如:
設網塊= 10.0.0.0/22
設作業= {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在這種情況下,將不得不定義N個輸出塊,以覆蓋範圍10.0.0.0-10.0.2.107加上M個輸出塊覆蓋10.0.2.112-10.0.3.255。這仍然可以完成,但是這是一個更難的任務(至少如果你想找到一個最佳的解決方案,保持N和M儘可能小)。 – zeppelin
@zeppelin的確如此。那麼,就我而言,任務大小保證總是至少爲24,但我明白你在說什麼。 –