
Digamos que tengo una IP inicial y una IP final. ¿Cuál sería la forma más sencilla de calcular el cidr más grande que podría asignar de este rango para reducir la fragmentación?
Por ejemplo, tengo el rango 10.10.1.0 - 10.10.2.128.
Solicito un /25. El algoritmo más sencillo me daría 10.10.1.0/25 y terminaría con él, pero luego esto fragmenta el /24 y no asigna el /25 (10.10.2.0/25). Lo que me gustaría ver es asignar 10.10.2.0/25 y dejar 10.10.1.0-10.10.1.255 intacto.
Cualquier idea sería bienvenida. He estado golpeándome la cabeza por esto por un tiempo.
Respuesta1
Parece que quieres algo parecido al asignador de amigos, para tomar prestada una página (ja, ja) de la administración de memoria.
Paso 1: Transforme el rango que tiene en una serie de bloques CIDR que sean lo más grandes posible sin cruzar el límite del rango ni superponerse con otro bloque.
Paso 2: Dada la asignación que estás intentando ajustar, encuentra el bloque más pequeño posible que se ajuste a ella. Idealmente, esto coincidirá exactamente, pero si no, dividirá el bloque más pequeño que encontró (potencialmente de forma recursiva) hasta llegar al bloque del tamaño correcto.
Mi redacción no es particularmente elegante aquí, pero espero que entiendas la idea.
Respuesta2
No existe un CIDR que esté limitado por 10.10.1.0 - 10.10.2.128
10.10.1.0 /22 es 10.10.0.0 - 10.10.3.255
10.10.1.0 /23 es 10.10.0.0 - 10.10.1.255
10.10.1.0 /24 es 10.10.1.0 - 10.10.1.255
Podrías tener dos redes separadas:
10.10.1.0 /24 es 10.10.1.0 - 10.10.1.255
10.10.2.0 /25 es 10.10.2.0 - 10.10.2.127