Direcciones IP y subredes, sin rodeos
El subnetting tiene fama de quisquilloso, pero en realidad es una sola idea aplicada con coherencia: una dirección es un número y un prefijo dice cuántos de sus bits iniciales están fijos. En cuanto eso encaja, el recuento de hosts, los solapamientos y la agregación salen solos. Esta guía cubre la aritmética, los rangos con significado especial y los puntos donde la intuición se rompe.
Una dirección es un número; un prefijo es una frontera
Una dirección IPv4 es un único número de 32 bits. La forma con puntos que nos resulta familiar es solo ese número partido en cuatro bytes para ojos humanos: 192.168.1.10 es 3232235786. Todo lo que hace una máscara de subred es decidir dónde cortar ese número: los bits iniciales identifican la red y los finales identifican un host dentro de ella.
La notación CIDR escribe el corte directamente. `/24` significa que los primeros 24 bits son la red, dejando 8 para hosts; `/26` fija 26 y deja 6. La máscara 255.255.255.0 y el sufijo `/24` son la misma afirmación escrita de dos maneras, y conviene pensar en la longitud del prefijo: es un recuento, así que comparar y comprobar contención se vuelve pura aritmética de bits.
Leer un prefijo: cuántas direcciones y cuántas utilizables
Un prefijo de longitud *n* en IPv4 contiene 2^(32−n) direcciones. Un `/24` alberga 256, un `/26` alberga 64 y un `/30` alberga 4. En una subred de difusión normal, la primera dirección es el identificador de red y la última es la de difusión, así que los hosts utilizables son dos menos: 254, 62 y 2 respectivamente. Ese último número explica por qué los enlaces punto a punto son tradicionalmente `/30`.
Las fronteras no son arbitrarias: un prefijo siempre empieza en un múltiplo de su propio tamaño. Hay un `/26` en .0, .64, .128 y .192, y nada entre medias — 192.168.1.100/26 describe en realidad el bloque que empieza en 192.168.1.64. Dos prefijos o se anidan por completo o no se solapan en absoluto, y eso es lo que hace manejables las tablas de enrutado y las reglas de cortafuegos.
Los rangos que significan algo especial
Tres rangos de IPv4 están reservados para uso privado y no se enrutan en la internet pública: 10.0.0.0/8, 172.16.0.0/12 (ojo: no todo 172.x) y 192.168.0.0/16. Junto a ellos, 127.0.0.0/8 es loopback, 169.254.0.0/16 es link-local — la dirección que una máquina se da a sí misma cuando falla el DHCP — y 100.64.0.0/10 es NAT de operador, y por eso un dispositivo puede informar de una dirección "pública" que sigue sin ser alcanzable.
Saber esto va más allá de la curiosidad. Registros llenos de 10.x te dicen que la dirección del cliente se capturó detrás de un proxy; una dirección 169.254 significa que la red nunca llegó a levantarse; y tratar 172.20.x como pública porque "172 no es privada" es un error real y recurrente. Cuando hay una lista de permitidos de por medio, comprueba los límites del rango, no el primer octeto.
IPv6 cambia la aritmética
Las direcciones IPv6 son de 128 bits, escritas como ocho grupos de cuatro dígitos hexadecimales, con una única racha de grupos a cero colapsable a `::` — una sola vez por dirección, o la expansión sería ambigua. Los ceros iniciales de un grupo son opcionales, así que la misma dirección admite muchas grafías válidas y la comparación textual no sirve. Normaliza antes de comparar o deduplicar.
Las convenciones también difieren. Un `/64` es el tamaño estándar de un enlace, así que la pregunta "cuántos hosts" deja en gran medida de ser interesante; no hay dirección de difusión ni un par red/difusión que restar. Los prefijos siguen siendo rangos de bits anidados, así que la agregación funciona exactamente igual que en IPv4: solo que los números son mucho mayores.
Ordenar, agregar y comparar
Nunca ordenes direcciones como cadenas. Lexicográficamente, 10.0.0.9 va después de 10.0.0.100 y 9.0.0.1 va después de 10.0.0.1, así que cualquier informe ordenado así está silenciosamente mal. Ordena por el valor numérico: es lo que hace que los bloques adyacentes queden juntos, que es el primer paso de toda agregación.
La agregación es la operación inversa a la división: dos prefijos de la misma longitud que comparten todos los bits salvo el último se funden en un único prefijo un bit más corto. Repetirlo convierte una lista de permitidos desperdigada en un puñado de bloques, lo que se traduce en dinero real cuando hay límites de reglas y tiempos de búsqueda. Eso sí, recuerda que un rango arbitrario de inicio a fin no siempre es un solo prefijo: cubrir exactamente 10.0.0.5–10.0.0.20 requiere varios bloques, y redondearlo a un `/27` bonito concede accesos que no pretendías.
- `/24` = 256 direcciones, 254 utilizables. `/26` = 64, 62 utilizables. `/30` = 4, 2 utilizables.
- Un prefijo empieza en un múltiplo de su tamaño: 192.168.1.100/26 es el bloque de .64.
- Privados: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Link-local: 169.254.0.0/16. CGNAT: 100.64.0.0/10.
- Compara direcciones numéricamente, nunca como texto.