VLSM - SUBNETTING VLSM por sus siglas en inglés Variable Length Subnet Masks o creación de subredes de longitud de máscara variable.
Antes de comenzar hay que aclarar un término que se va a usar en todo el documento: máscara de subred. La máscara consiste en 32 bits con los cuales cada nodo de una red IP determina si los paquetes se dirigen a una red diferente a la propia. La estructura de esta máscara es igual que la de la dirección IP pero su composición es una secuencia de unos seguida por una secuencia de ceros, la secuencia de unos determina qué parte de una dirección IP es la dirección de red, con frecuencia se dice que la máscara de subred delimita la parte de red y de host de una dirección IP. Dado que la máscara es una secuencia de unos seguida de ceros, ésta se suele representar con un número que indica cuántos unos tiene (ya se sabe que al principio) y a ese número se le suele llamar prefijo (estrictamente hablando, el prefijo incluiría la dirección de subred). Para que quede más claro, una máscara 255.255.255.0 tiene 32 bits de los cuales los primeros 24 son unos y los últimos 8 son ceros, por lo tanto el prefijo es /24. En éste documento el término máscara hará referencia tanto a la máscara de subred en decimal y como al prefijo recién descrito, es decir, serán equivalentes. Esquemas de máscara fija Esquema de direccionamiento: es una forma de decir cómo se va a repartir la capacidad de numeración de hosts que tiene cierta red, básicamente consta de una dirección de red base, una máscara de red, una máscara de subred y la enumeración de las subredes. Usualmente la máscara de red (la de la red base)
suele ser una dirección de clase, es decir, una que usa uno, dos o tres octetos (clase A, B y C respectivamente). Para ilustrar la idea, un esquema de direccionamiento consistiría en lo siguiente: Dirección base y máscara: 192.168.11.0/24 , ésta es la dirección que nos proporcionan y de la cual sólo podemos variar arbitrariamente la máscara (alargarla solamente) y los números en la parte de host (el último octeto). Nueva máscara (subredes): /27, si agregamos 3 bits a la máscara original (24+3=27), tendremos la capacidad de dividir el potencial de hosts (255) en 8 subredes (2^3) y en cada subred podríamos tener hasta 32 host en potencia (2^5), pero no podemos usar el host #0 ni el host #31 ya que éstas direcciones especiales corresponden a la dirección de red y de broadcast para cada subred (parte de host toda en 0 y toda en 1 respectivamente). Enumeración de las subredes: la primera subred (después de la cero) va a ser numerada como 192.168.11.32/27 , la primera dirección asignable sería 192.168.11.33 (la cero no se puede usar) y la última sería 192.168.11.62 (hay que recordar que la 63 es la dirección de broadcast -parte de host toda en unospara ésta subred y no se puede usar para un host ni un enrutador). Si quisieramos enumerar más subredes con la misma máscara, además de la primera (con ésta máscara tenemos 8 subredes en total, 27-24=3 bits de subred y 2^3=8), la numeración de las subredes aumentaría en saltos de a 32 (2^5) y así tendríamos
las otras subredes hasta llegar al límite. Es decir, las siguientes subredes serían 192.168.11.64/27, 192.168.11.96/27, 192.168.11.128/27, 192.168.11.160/27, 192.168.11.192/27, 192.168.11.224/27 y para cada una tendríamos una dirección de broadcast y un rango de direcciones asignables a los hosts de cada subred. Note que cada dirección de subred es la anterior más 32, eso sería si usamos máscara fija. En este esquema, todas las redes tienen la misma capacidad de numeración de hosts, es decir, todas las subredes pueden numerar hasta 30 hosts (2^5=32 menos la dir. de red y de broadcast que no se pueden asignar a ningún host) y esta capacidad está dada por la máscara /27 que agrega 3 bits para subred a la máscara original, alargandola y dejando 5 bits para numerar hosts. Ésta capacidad fija se nota en que la máscara de todas las subredes es la misma , lo único que varía en cada subred es la dirección y sus parámetros (dir. de red/broadcast y rango de direcciones asignables), eso la hace poco flexible y desperdicia capacidad de numeración de la red original. Usando máscara fija, los requerimientos se pueden presentar de dos formas: pidiendo una cantidad de subredes o pidiendo una cantidad de hosts por subred. En el primer caso determinar la longitud de la máscara es fácil y directo, dado que sólo debo agregar los bits que se necesitan para cierta cantidad de subredes, por ejemplo, para 5 subredes necesito 3 bits, ya que con tres bits puedo numerar hasta 8 subredes (2^3). Por otro lado, si me piden una cantidad de hosts no es posible determinar directamente la longitud de la máscara, debo determinar la cantidad de bits de hosts necesaria y luego restarla a los bits de hosts que tengo en la red base y esa diferencia es el aumento en la máscara de subred, por ejemplo, si la máscara base es de 24 bits y me piden redes de por lo menos 20 hosts, para éste número necesito 5 bits (2^5=32-2=30) y estos 5 bits se los quito a los 8 de host que tenía para hosts en la máscara inicial, es decir 3 bits para subredes, por lo tanto la máscara que debería usar para redes de por lo menos 20 hosts sería 24+3=27 bits. Esquemas de máscara variable
Con la máscara variable se resuelven los problemas mencionados, tanto la falta de flexibilidad como del despercicio de direcciones. Básicamente lo que se hace en VLSM es permitir que la información de direccionamiento se use sólo cuando es efectiva, es decir, cuando se asigna un rango de direcciones, a tal rango se le asigna una máscara de subred dependiente de la capacidad de hosts que debe numerar y el resto se deja en reserva para otras subredes o para uso futuro, con la posibilidad de que el tamaño de las subredes futuras puede ser diferente al de las ya asignadas. Para ilustrar vamos a usar el mismo ejemplo anterior: la dirección base es 192.168.11.0/24, tenemos el último octeto para asignar subredes y hosts y vamos a usar VLSM para hacerlo. La primera diferencia grande es que en el anterior esquema si, por ejemplo, nos decían que necesitaban redes de 5, 10 y 30 hosts, la única posibilidad era hacer redes de a 30 hosts y esperar que el esquema soportara eso, en otras palabras,
las redes de 5 hosts tenían una capacidad ociosa de 25 hosts y las de 10 tenían 20 hosts que probablemente no se usarían nunca. En VLSM, podemos elegir máscaras según las necesidades individuales de cada subred, es decir para 5 hosts necesito 3 bits, por lo tanto sólo dejo tres bits para hosts y el resto para numerar la subred (24 de la máscara original más 5 de la subred = 29), para la red de 10 hosts necesito 4 bits, osea que puedo usar para la subred una máscara de 28 bits y para la de 30 hosts necesito 5 bits (2^5=32, puedo usar el resto para la subred) uso una máscara de 27 bits. Ya establecidas las máscaras según la capacidad, puedo asignar las direcciones concretas, preferiblemente tomando las subredes más grandes de los números más bajos.
Empezaremos con la red más grande que es de 30 hosts y por lo tanto necesita una máscara de 27 bits. Si no tengo direcciones asignadas todavía, asumo un esquema de dirección fijo y numero ésta primera red como si fuera la número uno (sin usar la cero). Esto es una preferencia personal, lo verdaderamente importante es que ninguna dirección de host/subred combinada con su máscara esté dentro del rango de numeración de otra subred. Los enrutadores Cisco detectan este tipo de conflicto y no dejan asignar direcciones de ésta manera. Otra forma menos compleja de comenzar sería empezar con la subred cero y eso es perfectamente válido si se usa VLSM, en éste caso la dirección de la primera subred sería 192.168.11.0/27 (la única diferencia con la red base es la máscara más larga) y ocuparía el rango de .1 hasta .30 en hosts válidos y .31 sería la dir. de broadcast. La dirección específica de la primera subred sería 192.168.11.32/27 , igual que el ejercicio con máscara fija, pero en éste caso, el resto de la capacidad de la red original sigue disponible con máscaras de otros tamaños como veremos. Con ésta subred asignada, quedan en uso los números de .33 hasta .63 (dir. de broadcast) y por lo tanto la siguiente dirección de subred debe estar justo después de ese rango (o antes ya que no usamos la cero). Las siguientes direcciones a asignar serían las de la subred de 10 hosts. Recordando lo ya dicho sobre esta red, para numerar hasta 10 necesito por lo menos 4 bits, ya que 2^4=16, restando las direcciones de red y de broadcast tengo 14 direcciones válidas de host. Si voy a usar 4 bits para la parte de host me quedan 28 para la parte de subred (32-4=28), esta subred usaría una máscara /28 por su capacidad. Entonces la numeraríamos después de la ya asignada, .32. La siguiente dirección usable sería .64, dado que la primera subred asignada ocupa hasta la dirección .63, por lo tanto la siguiente subred sería 192.168.11.64/28, con esa máscara, sabemos que las direcciones asignables van desde la .65 hasta la .79, como vemos, en éste caso la máscara nos obliga a sumar sólo 15 direcciones más, si nos pasaramos de eso, la máscara haría que la red fuera diferente , ya que la dirección .80 con
máscara /28 tiene sus últimos 5 bits en cero, que son los bits que quedan para hosts, por lo tanto es una dirección de red y es diferente a la dirección de red de cualquier host entre .65 hasta .79. Como vemos, seguimos con el resto del
rango libre para asignar como queramos, y como hemos numerado las redes con números consecutivos, sabemos perfectamente qué rangos no se pueden usar para otras subredes. Para numerar 5 hosts elegimos una máscara de 29 bits, dado que sólo tenemos que dejar 3 bits para hosts y podemos usar los primeros cinco para subred (24+5=29). Sabemos que la siguiente subred debería estar fuera de los números ya asignados y la última subred terminaba en .79, por lo tanto la siguiente sería .80. La máscara nos dice qué direcciones quedan reservadas, 2^3 hosts potenciales, por lo tanto las direcciones asignables son .81 hasta .86 con dirección de broadcast .87, todas las con máscara /29 y aún nos quedan direcciones para asignar (un rango escondido al principio desde .0 hasta .31 y desde la .88 que sería la siguiente subred hasta el máximo del rango .255). Analicemos en binario lo que acabamos de hacer. Tenemos tres subredes, la subred 192.168.11.32/27, la 192.168.11.64/28 y la 192.168.11.80/29. Los últimos octetos serían de la siguiente manera en binario: Último Máscara
octeto: 11100000
00100000
(.32/27)
Último Máscara
octeto: 11110000
01000000
(.64/28)
01010000
(.80/29)
Último Máscara:
octeto: 11111000
Como se observa, las combinaciones de direcciones de red y máscaras elegidas nunca son iguales, es decir, aunque las últimas dos direcciones de subred coinciden en sus primeros dos bits, la máscara las distingue unívocamente. Otra cosa notable, es que las direcciones de red siguen teniendo, en sus bits de hosts, sólo ceros . Ésto último es muy importante, dado que si se asigna una red grande después de una pequeña, puede ser necesario dejar un espacio sin asignar para cumplir el requisito de tener los bits de host en cero. Por ejemplo, si se deseara asignar una subred de 25 hosts después de la última, necesitaríamos una máscara de /27 (2^5-2=30 hosts) y la siguiente dirección de red después de la .88/29 con ésta máscara (/27) sería .96/27 que tiene sus últimos 5 bits en cero. Notese que entre .88 y 96 queda un espacio disponible, pero que sólo se puede usar para redes de tamaño pequeño, por ejemplo una red de 6 hosts (2^3-2) o dos redes de 2 hosts (2^2-2). En el esquema de ejemplo, si quisieramos asignar una nueva subred, primero estableceríamos cuántos hosts debe numerar, seleccionamos la máscara adecuada para la cantidad de hosts y buscamos un rango de direcciones que no esté asignado, bien sea antes de la primera gran subred (192.168.11.32/27) o después de la última pequeña subred (192.168.11.80/29). Finalmente, comparando las direcciones de las dos subredes asignadas 192.168.11.64/28 y 192.168.11.80/29 en binario, observamos que coinciden en sus dos primeros bits. Si éstas dos direcciones estuvieran asignadas a diferentes interfaces de un mismo enrutador, el enrutador podría enviar la dirección y máscara
común a éstas dos subredes, llamada ruta agregada o summary route, caso en el cual en vez de enviar información sobre dos subredes en la actualización de enrutamiento, enviaría sólo una. A ésto se le conoce como sumarización o CIDR por sus siglas en inglés Classless Inter-Domain Routing.
EJERCICIOS PROPUESTOS
Ejercicio 1. Dada la red 192.168.12.0/24, desarrolle un esquema de direccionamiento usando VLSM que cumpla los siguientes requerimientos: Una subred de 60 hosts para Mercadeo Una subred de 80 hosts para la Ventas Una subred de 20 hosts para la Administrativos Cuatro subredes de 2 hosts para los enlaces entre enrutadores Solución Ventas 192.168.12.0/25 (2^7=128-2=126); Rango: .1-127; Máscara: 255.255.255.128 Mercadeo 192.168.12.128/26 (2^6=64-2=62); Rango: .129-.190; Máscara: 255.255.255.192
Administrativos 192.168.12.192/27 (2^5=32-2=30); Rango: .193-222; Máscara: 255.255.255.224 Enlace 1 192.168.12.224/30; Broadcast: 192.168.12.227; Rango: .225-.226 Enlace 2 192.168.12.228/30; Broadcast: 192.168.12.231; Rango: .229-.230 Enlace 3 192.168.12.234/30; Broadcast: 192.168.12.237; Rango: .235-.236 Enlace 4 192.168.12.238/30; Broadcast: 192.168.12.241; Rango: .239-.240 Recuerde la verificación: * La dirección de red debe tener la parte de host toda en ceros * La dirección de Broadcast debe tener la parte de host toda en unos * Ningún rango de direcciones se debe traslapar (tener parte del rango dentro del rango de otra subred). Ejercicio 2. Dada la red 192.168.0.0/24, desarrolle un esquema de direccionamiento que cumpla con los siguientes requerimientos. Use VLSM, es decir, optimice el espacio de direccionamiento tanto como sea posible. 1. 2. 3. 4.
Una subred de 20 hosts para ser asignada a la VLAN de Profesores Una subred de 80 hosts para ser asignada a la VLAN de Estudiantes Una subred de 20 hosts para ser asignada a la VLAN de Invitados Tres subredes de 2 hosts para ser asignada a los enlaces entre enrutadores.
Solución Ordeno las subredes en orden decreciente: 80, 20, 20, 2, 2, 2.
Para 80 hosts necesito 7 bits (2^7=128, menos red y broadcas 126 hosts máx.), por lo tanto el prefijo de subred del primer bloque sería /25 (8-7=1; 24+1=25) Tomando la subred cero, la primera dirección de subred sería 192.168.0.0/25, broadcast 192.168.0.127, por lo tanto el rango asignable sería .1 hasta .126. Para 20 hosts necesito 5 bits (2^5=32, es decir 30 hosts máx.). Prefijo: /27 (8-5=3, 24+3=27); Dir. de red: 192.168.0.128/27, broadcast 192.168.0.159. Rango asignable .129-.158. La siguiente subred es del mismo tamaño y el prefijo es el mismo. Dir. de red: 192.168.0.160/27 , broadcast 192.168.0.191, rango .161-.190. Los enlaces entre enrutadores sólo necesitan 2 bits (2^2=4, es decir 2 hosts máx) por lo tanto el prefijo debe ser /30 (8-2=6, 24+6=30). Dir. de enlace 1: 192.168.0.192, dir. de broadcast en enlace 1: 192.168.0.195, rango .193-.194. Dir. enlace 2:
192.168.0.196/30, broadcast en enlace 2: 192.168.0.199, rango .197-.198. Dir. enlace 3: 192.168.0.200/30, broadcast enlace 3: 192.168.0.203, rango: .201-.202. El esquema resultado es: Red
Dir
Estudiantes(80) 192.168.0.0/25
Broadcast
Rango
192.168.0.127 .1-.126
Máscara
255.255.255.128
Profesores(20) 192.168.0.128/27 192.168.0.159 .129-158 255.255.255.224 Invitados(20)
192.168.0.160/27 192.168.0.191 .161-190 255.255.255.224
Enlace 1(2)
192.168.0.192/30 192.168.0.195 .193-194 255.255.255.252
Enlace 2(2)
192.168.0.196/30 192.168.0.199 .197-198 255.255.255.252
Enlace 3(2)
192.168.0.200/30 192.168.0.203 .201-202 255.255.255.252
Se puede observar que los rangos de direcciones asignados son contínuos y que queda disponible para crecimiento futuro un rango de direcciones desde 204 en adelante. Ejercicio 3. Dada la siguiente dirección de red: 172.25.0.0/16, dividala en subredes de las siguientes capacidades: 2 subredes de 1000 hosts 2000 hosts 5 hosts 60 hosts 70 hosts 15 enlaces de 2 hosts por enlace El potencial ideal de la red base sería 2^16-2, es decir 65534 hosts si no usamos subredes, osea que debemos esperar que esa capacidad potencial no se desperdicie mucho, en especial si usamos VLSM. Lo anterior nos permite saber que los requerimientos aparentes (4165 hosts) caben de sobra en la red base . Procedimiento
Vamos a ordenar las subredes decrecientemente para asegurar que el direccionamiento no quede fraccionado. 1. 2. 3. 4.
Subred de 2000 Hosts Subred de 1000 Hosts Subred de 1000 Hosts Subred de 70 Hosts
5. Subred de 60 Hosts 6. Subred de 5 Hosts 7. 15 subredes de 2 Hosts Una vez ordenados los requerimientos, procedemos a operar la división en subredes como si fueramos a usar subredes de máscara fija para la subred actual y la siguiente. Es decir, hacemos los cálculos para una subred y dejamos indicada cuál sería la siguiente subred, sólo que, como usamos máscara variable sabemos que las siguiente subred puede o no tener la misma máscara (usualmente la tendrá más larga). Análisis del procedimiento para la primera subred
Para la primera subred necesitamos 11 bits (2^11=2048-2=2046 hosts, 10 bits no son suficientes ya que sólo alcanzaría para 1024). Como tenemos 16 bits originales para hosts, tomamos éstos 11 bits de la parte de host y dejamos el resto para subred, es decir, 5 bits para subred (adicionales a la máscara de red original). 172.25.{SSSSSHHH.HHHHHHHH}, donde S es bit de subred y H es bit de host Nuestra primera red es 172.25.0.0/21 y la siguiente sería 172.25.8.0/21 (como si aplicaramos máscara fija). La siguiente red con la misma máscara es importante, debido a que a partir de ésa es que tomamos las siguientes subredes, ésta nos marca el final de la subred asignada y el comienzo del espacio libre. De la dirección y máscara de la primera subred se deducen los otros datos importantes: broadcast y rango asignable. Ya sabemos que la dirección de subred es aquella que tiene todos los bits de host en cero y los bits de host son aquella porción de la dirección de red que se corresponden con los ceros de la máscara de red, es decir, para nuestra 1a subred
la máscara es 255.255.248.0 o /21, por lo tanto la dirección 172.25.0.0 es una dir. de subred ya que los bits que en la máscara son cero también son cero en la dirección de red. La dirección de broadcast es aquella en la que los bits de hosts son todos 1 , es decir, para la primera subred la dirección de broadcast es 172.25.7.255, ya que en ésta dirección, los bits que en la máscara son ceros, en la dirección de broadcast son unos. Y el resto de direcciones entre la dir de red y la dir de broadcast son asignables, es decir de 172.25.0.1 hasta 172.25.7.254. Tenga en cuenta que en estas direcciones hay algunas que pueden engañar como las 15 direcciones que terminan en 255 (por ejemplo 172.25.5.255), esas direcciones, aunque tengan el último octeto en 255 no son de broadcast, ya que la máscara /21 nos dice que la porción de host incluye bits del tercer octeto (.5), por lo tanto no todos los bits de host son unos y por lo tanto no es una dirección de broadcast. Lo mismo ocurre con otras tantas direcciones que terminarán en 0 pero que no son de subred por la misma (similar) razón por la que la anterior no era de broadcast. El procedimiento para las demás es igual, pero con menos análisis
Todo lo que hay que explicar y racionalizar en éste “difícil” problema de subredes está dicho en la sección anterior, digamos que los principios están descritos. Lo que haremos de acá en adelante es repetir esta mecánica, ya que entendemos la justificación de la misma, por lo tanto, asegúrese de entender lo que indica el párrafo anterior y la justificación de la primera subred. La segunda subred es de 1000 hosts, por lo tanto necesito 10 bits (2^10=1024 menos dir. de red y de broadcast = 1022
hosts máximo). Éstos los tomo de la parte de host, quedando así 6 bits de subred. Del cálculo de la subred anterior sabemos que la siguiente sería la 172.25.8.0 /21, osea que a partir del cálculo de la subred anterior tomamos la siguiente subred (la actual) pero con una máscara más larga (/22) dado que necesitamos menos capacidad. De ésto se desprenden los otros dos números, la dir. de broadcast es 172.25.11.255/22 y las direcciones después de la de red y antes de la de broadcast son asignables (172.25.8.1 hasta 172.25.11.254). Como del cálculo de ésta subred vamos a tomar la siguiente, de una vez digamos cual sería la siguiente subred sin cambiar la máscara: 172.25.12.0/22. La tercera subred es también de 1000 hosts, por lo que no cambia la máscara y del ejercicio anterior ya tenemos la dirección de subred: 172.25.12.0/22. La dir de broadcast es entonces 172.25.15.255/22 y las direcciones asignables 172.25.12.1/22 hasta 172.25.15.254/22). La siguiente subred con la misma máscara sería 172.25.16.0/22. La cuarta subred es de 70 hosts, para los que necesito 7 bits (2^7=128 menos broadcast y subred 126 hosts máx), que tomo de la parte más baja de la porción de host lo que me deja 9 bits de lo que tenía originalmente en host (16 bits), por lo tanto la máscara de subred queda en /25. La dir. de red es 172.25.16.0/25, la dir de broadcast es 172.25.16.127/25 y las direcciones asignables desde 172.25.16.1/25 hasta 172.25.16.126/25. La siguiente subred sería 172.25.16.128/25 La quinta subred es de 60 hosts, necesito 6 bits (2^6=64-2=62 hosts máximo) y de ahí que la máscara de subred sea /26. La dir de red es 172.25.16.128/26, la dir de broadcast es 172.25.16.191/26 y las direcciones asignables son 172.25.16.129/26 hasta 172.25.16.190/26. La siguiente subred sería 172.25.16.192/26 La siguente subred es de 5 hosts por lo tanto la máscara será /29 (haga el cálculo). La dir. de subred es 172.25.16.192/29, la dir. de broadcast es 172.25.16.199/29 y las direcciones asignables de 172.25.16.193/29 hasta 172.25.16.198/29 (inclusive). La siguiente subred sería 172.25.16.200/29 Las últimas son las subredes de enlaces WAN que sólo admiten dos hosts, por lo tanto necesito sólo 2 bits de host y sin hacer más cálculos tengo que la máscara es /30 (de todos modos para enlaces punto a punto, usualmente WAN, siempre se usa ésta máscara). Las direcciones de subred serían 172.25.16.200/30, 172.25.16.204/30, –.16.208/30, –16.212/30, –16.216/30, –16.220/30, –16.224/30, –16.228/30, – 16.232/30, –16.236/30, –16.240/30, –16.244/30, –16.248/30, –16.252/30, – 17.0/30. Por favor deduzcan uds. las direcciones asignables y las direcciones de
broadcast de cada una de éstas subredes de enlaces punto a punto. Note que la última dirección rompió el límite del octeto y pasó de la .16.252 a la .17.0. Note que el ejercicio esta cuidadosamente planeado para romper los límites de octeto que tanto malacostumbran a los estudiantes y para incluir direcciones en los rangos de asignación que pueden engañar como aquellas direcciones de hosts que tienen 0 ó 255 en su último octeto. Note también que a pesar de haber usado tantas direcciones y tantas subredes, todavía queda un rango gigantesco por asignar, todas las direcciones por encima de 172.25.17.0 en adelante siguen libres. Y finalmente también note mi insistencia en siempre escribir la máscara de subred, que es en efecto el criterio que define qué tipo de dirección es una dirección IP (de red, de broadcast o de host) y además que es la que le permite a un PC o nodo de red determinar cómo encapsular un paquete (si con la dir física del enrutador o con la dir física del par -del otro PC-).
Para entender cómo se encapsula el paquete, lea ¿Cómo cambian los paquetes por la red?.