Назад | Перейти на главную страницу

Как определить самый большой 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. Преобразуйте имеющийся диапазон в серию блоков CIDR, которые должны быть как можно большего размера, не пересекая границы диапазона или не перекрываясь с другим блоком.

Шаг 2: Учитывая распределение, которое вы пытаетесь уместить, найдите наименьший возможный блок, который ему подходит. В идеале это будет точно соответствовать ему, но если нет, вы разделите наименьший блок, который вы нашли (потенциально рекурсивно), пока не получите блок нужного размера.

Моя формулировка здесь не особенно элегантна, но я надеюсь, что вы уловили идею.

Нет CIDR, который ограничен 10.10.1.0 - 10.10.2.128

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