Arq Red:Tema 5
Arq Red:Tema 5
Arq Red:Tema 5
La capa de red:
el plano de control
En este capítulo, completaremos nuestro viaje a través de la capa de red hablando del segundo de sus
constituyentes, el plano de control: la lógica de la red que controla no solo cómo se reenvía un data-
grama de un router a otro, a lo largo de una ruta extremo a extremo desde el host de origen al host de
destino, sino también cómo se configuran y gestionan los servicios y componentes de la capa de red.
En la Sección 5.2 hablaremos de los algoritmos tradicionales de enrutamiento utilizados para calcu-
lar las rutas de coste mínimo en un grafo; estos algoritmos son la base de dos protocolos de enruta-
miento ampliamente implantados en Internet: OSPF y BGP, de los que hablaremos en las secciones
5.3 y 5.4, respectivamente. Como veremos, OSPF es un protocolo de enrutamiento que opera dentro
de la red de un único ISP. BGP es un protocolo de enrutamiento que sirve para interconectar todas
las redes de Internet; por ello se suele decir que BGP es el “pegamento” que mantiene unida Internet.
Tradicionalmente, los protocolos de enrutamiento del plano de control se han implementado junto
con las funciones de reenvío del plano de datos monolíticamente, dentro de un router. Como vimos
en la introducción al Capítulo 4, las redes definidas por software (SDN) separan claramente los pla-
nos de datos y de control, implementando las funciones del plano de control mediante un servicio
“controlador” separado que es distinto, y remoto, con respecto a los componentes de reenvío de los
routers que controla. Hablaremos de los controladores SDN en la Sección 5.5.
En las secciones 5.6 y 5.7, hablaremos un poco de las interioridades de la gestión de una red
IP, presentando los protocolos ICMP (Internet Control Message Protocol, protocolo de mensajes de
control de Internet) y SNMP (Simple Network Management Protocol, protocolo simple de gestión
de red).
5.1 Introducción
Establezcamos rápidamente el contexto para nuestro estudio del plano de control de la red, recor-
dando las Figuras 4.2 y 4.3. Allí vimos que la tabla de reenvío (en el caso del reenvío basado en el
309
destino) y la tabla de flujo (en el caso del reenvío generalizado) eran los principales elementos que 309
310 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
enlazaban los planos de datos y de control de la capa de red. Dijimos que estas tablas especifican el
comportamiento de reenvío del plano de datos local de un router. Vimos que, en el caso del reenvío
generalizado, las acciones tomadas (Sección 4.4.2) podían incluir no solo reenviar un paquete a
través de un puerto de salida del router, sino también eliminar un paquete, duplicar un paquete y/o
reescribir los campos de cabecera de las capas 2, 3 o 4 del paquete.
En este capítulo estudiaremos cómo se calculan, mantienen e instalan estas tablas de reenvío
y de flujo. En nuestra introducción a la capa de red en la Sección 4.1 aprendimos que existen dos
posibles enfoques para hacerlo.
• Control por router. La Figura 5.1 ilustra el caso en el que se ejecuta un algoritmo de enrutamiento
en todos y cada uno de los routers; cada router contiene tanto una función de reenvío como una
función de enrutamiento. En cada router hay un componente de enrutamiento que se comunica
con los componentes de enrutamiento de otros routers, con el fin de calcular los valores de su
tabla de reenvío. Esta técnica del control por router se ha estado utilizando en Internet durante
décadas. Los protocolos OSPF y BGP que estudiaremos en las Secciones 5.3 y 5.4 están basados
en este enfoque de control por router.
• Control lógicamente centralizado. La Figura 5.2 ilustra el caso en que un controlador lógica-
mente centralizado calcula y distribuye las tablas de reenvío que tienen que usar todos y cada
uno de los routers. Como vimos en la Sección 4.4, la abstracción generalizada correspondencia-
acción permite al router llevar a cabo tanto el reenvío IP tradicional, como un rico conjunto de
otras funciones (compartición de carga, cortafuegos y NAT) que anteriormente se habían venido
implementando mediante dispositivos intermediarios separados.
El controlador interactúa con un agente de control (AC) que reside en cada router, a través de
un protocolo bien definido, para configurar y gestionar la tabla de flujo de ese router. Normalmente,
el AC tiene una funcionalidad mínima; su trabajo consiste en comunicarse con el controlador y
en hacer lo que el controlador le ordene. A diferencia de los algoritmos de enrutamiento de la
Figura 5.1, los AC no interactúan directamente entre sí, ni participan activamente en el cálculo
de la tabla de reenvío. Esta es una distinción fundamental entre el control por router y el control
lógicamente centralizado.
Algorit. de
enrutam.
Plano de control
Plano de datos Tabla de
reenvío
Figura 5.1 ♦ Control por router: los componentes individuales del algoritmo de
enrutamiento interactúan en el plano de control.
5.2 • ALGORITMOS DE ENRUTAMIENTO 311
Por control “lógicamente centralizado” [Levin 2012] queremos decir que al servicio de
control de enrutamiento se accede como si fuera un único punto central de servicio, aunque es
probable que el servicio se implemente mediante múltiples servidores, por razones de tolerancia
a fallos y de escalabilidad del rendimiento. Como veremos en la Sección 5.5, la tecnología
SDN adopta esta noción de un controlador lógicamente centralizado, una técnica que se está
empleando cada vez más en instalaciones de producción. Google utiliza SDN para controlar los
routers de su red de área extensa global B4, que interconecta sus centros de datos [Jain 2013].
SWAN [Hong 2013], de Microsoft Research, utiliza un controlador lógicamente centralizado
para gestionar el enrutamiento y el reenvío entre una red de área extensa y una red de centros
de datos. China Telecom y China Unicom están empleando SDN tanto dentro de los centros de
datos como entre los centros de datos [Li 2015]. AT&T ha señalado [AT&T 2013] que “soporta
muchas capacidades SDN, así como mecanismos propietarios, definidos de forma independiente,
que encajan en el marco arquitectónico de SDN”.
Controlador de enrutamiento
lógicamente centralizado
Plano de control
Plano de datos
Agente de
control (AC) AC AC
AC AC
cuyo origen sea la red de la organización Z”), también entran en juego. Hay que resaltar que,
independientemente de si el plano de control de la red adopta una solución de control por router o
de control lógicamente centralizado, siempre debe existir una secuencia de routers bien definida
que el paquete atravesará en su viaje desde el host emisor al host receptor. Por ello, los algoritmos
de enrutamiento que calculan estas rutas tienen una importancia fundamental, siendo otro de los
candidatos para nuestra lista de los 10 conceptos de redes más importantes.
Para formular los problemas de enrutamiento se utilizan grafos. Recuerde que un grafo
G 5 (N, E) es un conjunto N de nodos y una colección E de aristas, donde cada arista es una pareja
de nodos de N. En el contexto del enrutamiento de la capa de red, los nodos del grafo representan los
routers (los puntos en los que se toman las decisiones acerca del reenvío de los paquetes), mientras
que las aristas que conectan esos nodos representan los enlaces físicos entre los routers. En la Figura
5.3 se muestra la abstracción en forma de grafo de una red de computadoras. Si desea ver algunos
grafos que representan mapas de redes reales, consulte [Dodge 2016, Cheswick 2000]; para ver un
estudio de cómo diferentes modelos basados en grafos permiten modelar Internet, consulte [Zegura
1997, Faloutsos 1999, Li 2004].
Como se muestra en la Figura 5.3, una arista también tiene un valor que representa su coste.
Normalmente, el coste de una arista puede reflejar la longitud física del enlace correspondiente (por
ejemplo, un enlace transoceánico tendría un coste mayor que un enlace terrestre de corto alcance),
la velocidad del enlace o el coste monetario asociado con el enlace. Para nuestros propósitos,
simplemente utilizaremos el coste del enlace como algo que nos viene dado, sin preocuparnos por
cómo se determina. Para cualquier arista (x, y) de E, denominaremos c (x, y) al coste de la arista
que conecta los nodos x e y. Si el par (x, y) no pertenece a E, hacemos c (x, y) 5 ∞. Asimismo, solo
vamos a considerar en nuestra exposición los grafos no dirigidos (es decir, grafos cuyas aristas no
tienen una dirección), de modo que la arista (x, y) es la misma que la arista (y, x) y además c (x, y) 5
c (y, x); sin embargo, los algoritmos que estudiaremos pueden generalizarse fácilmente para el caso
de enlaces dirigidos que tengan un coste diferente en cada dirección. Por último, un nodo y se dice
que es un vecino del nodo x si (x, y) pertenece a E.
Dado que las distintas aristas del grafo abstracto tienen costes asignados, un objetivo natural
de un algoritmo de enrutamiento es identificar las rutas de coste mínimo entre los orígenes y los
destinos. Con el fin de definir este problema de manera más precisa, recuerde que una ruta en un
grafo G 5 (N, E) es una secuencia de nodos (x1, x2,..., xp) tal que cada una de las parejas (x1, x2),
(x2, x3),..., (xp-1, xp) son aristas pertenecientes a E. El coste de una ruta (x1, x2,...,xp) es simplemente
la suma del coste de todas las aristas que componen la ruta; es decir, c (x1, x2) 1 c (x2, x3) 1 ... 1
c (xp-1, xp). Dados dos nodos cualesquiera x e y, normalmente existen muchas rutas entre los dos
nodos, teniendo cada una de ellas un coste. Una o más de estas rutas será una ruta de coste mínimo.
Por tanto, el problema del coste mínimo está claro: hallar una ruta entre el origen y el destino que
tenga el mínimo coste. Por ejemplo, en la Figura 5.3 la ruta de coste mínimo entre el nodo de origen
u y el nodo de destino w es (u, x, y, w), con un coste de ruta igual a 3. Observe que si todas las aristas
3
v w
2 5
u 2 1 z
3
1 2
x 1
y
del grafo tienen el mismo coste, la ruta de coste mínimo es también la ruta más corta (es decir, la
ruta con el número mínimo de enlaces entre el origen y el destino).
Como ejercicio sencillo, intente encontrar la ruta de coste mínimo desde el nodo u al z en
la Figura 5.3 y reflexione sobre cómo ha calculado esa ruta. Si es usted como la mayor parte de
la gente, habrá determinado la ruta de u a z examinando la Figura 5.3, trazando unas pocas rutas
de u a z, y llegando de alguna manera al convencimiento de que la ruta que ha elegido es la de
coste mínimo de entre todas las posibles rutas. (¿Ha comprobado las 17 rutas posibles entre u y
z? ¡Probablemente no!). Este cálculo es un ejemplo de algoritmo de enrutamiento centralizado
(el algoritmo de enrutamiento se ejecutó en un lugar, su cerebro, que dispone de la información
completa de la red). En términos generales, una forma de clasificar los algoritmos de enrutamiento
es dependiendo de si son centralizados o descentralizados.
Una segunda forma general de clasificar los algoritmos de enrutamiento es según sean estáticos
o dinámicos. En los algoritmos de enrutamiento estático, las rutas cambian muy lentamente con
el tiempo, a menudo como resultado de una intervención humana (por ejemplo, una persona que
edita manualmente la tabla de reenvío de un router). Los algoritmos de enrutamiento dinámico
modifican los caminos de enrutamiento a medida que la carga de tráfico o la topología de la red
cambian. Un algoritmo dinámico puede ejecutarse periódicamente o como respuesta directa a
cambios en la topología o en el coste de los enlaces. Aunque los algoritmos dinámicos responden
mejor a los cambios de la red, también son más susceptibles a problemas como los bucles de
enrutamiento y la oscilación de rutas.
Una tercera forma de clasificar los algoritmos de enrutamiento es según sean sensibles o no
a la carga. En un algoritmo sensible a la carga, los costes de enlace varían de forma dinámica
para reflejar el nivel actual de congestión en el enlace subyacente. Si se asocia un coste alto con
un enlace que actualmente esté congestionado, el algoritmo de enrutamiento tenderá a elegir rutas
que eviten tal enlace congestionado. Aunque los primeros algoritmos de enrutamiento de ARPAnet
eran sensibles a la carga [McQuillan 1980], se encontró una serie de dificultades [Huitema 1998].
314 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
Los algoritmos de enrutamiento actuales de Internet (como RIP, OSPF y BGP) son algoritmos
no sensibles a la carga, ya que el coste de un enlace no refleja explícitamente su nivel actual (o
reciente) de congestión.
Como ejemplo, consideremos la red de la Figura 5.3 y calculemos las rutas de coste mínimo
desde u a todos los destinos posibles. En la Tabla 5.1 se muestra una tabla de resumen de los cálculos
del algoritmo, donde cada línea de la tabla proporciona los valores de las variables del algoritmo al
final de la iteración. Veamos en detalle los primeros pasos.
• En el paso de inicialización, las rutas de coste mínimo actualmente conocidas desde u a sus
vecinos conectados directamente, v, x y w, se inicializan a 2, 1 y 5, respectivamente. En particular,
fíjese en que el coste a w se define como 5 (aunque pronto veremos que, de hecho, existe una ruta
de coste más pequeño), ya que este es el coste del enlace directo (un salto) de u a w. Los costes a
y y z se hacen igual a infinito porque no están directamente conectados a u.
• En la primera iteración, buscamos entre aquellos nodos que todavía no se han añadido al
conjunto N y localizamos el nodo que tiene el coste mínimo después de finalizar la iteración
previa. Dicho nodo es x, con un coste de 1, y por tanto x se añade al conjunto N. La línea 12 del
algoritmo LS se ejecuta entonces para actualizar D(v) para todos los nodos v, proporcionando
los resultados mostrados en la segunda línea (Paso 1) de la Tabla 5.1. El coste de la ruta a v no
varía. Se determina que el coste de la ruta a w (que era 5 al final de la inicialización) a través del
nodo x es ahora igual a 4. Por ello, se selecciona esta ruta de coste mínimo y el predecesor de w a
lo largo de la ruta más corta desde u se establece en x. De forma similar, se calcula el coste a y
(a través de x) y se obtiene que es 2, actualizándose la tabla de acuerdo con ello.
• En la segunda iteración, se determina que los nodos v e y tienen las rutas de coste mínimo (2) y se
deshace el empate arbitrariamente, añadiendo y al conjunto N, de modo que ahora N contiene a
u, x e y. El coste de los restantes nodos que todavía no pertenecen a N, es decir, los nodos v, w y
z, se actualiza en la línea 12 del algoritmo LS, dando los resultados mostrados en la tercera fila
de la Tabla 5.1.
• Y así sucesivamente. . .
Cuando el algoritmo LS termina, tenemos para cada nodo su predecesor a lo largo de la ruta de
coste mínimo desde el nodo de origen. Para cada predecesor, también tenemos su predecesor, y así
de este modo podemos construir la ruta completa desde el origen a todos los destinos. La tabla de
reenvío de un nodo, por ejemplo del nodo u, puede entonces construirse a partir de esta información,
almacenando para cada destino el nodo del siguiente salto en la ruta de coste mínimo desde u al
destino. La Figura 5.4 muestra las rutas de coste mínimo resultantes y la tabla de reenvío de u para
la red de la Figura 5.3.
¿Cuál es la complejidad de cálculo de este algoritmo? Es decir, dados n nodos (sin contar
el origen) ¿cuántos cálculos hay que realizar, en el caso peor, para determinar las rutas de coste
mínimo desde el origen a todos los destinos? En la primera iteración, tenemos que buscar a través
de los n nodos para determinar el nodo w que no pertenece a N y que tiene el coste mínimo. En
la segunda iteración, tenemos que comprobar n 2 1 nodos para determinar el coste mínimo; en la
tercera iteración, hay que comprobar n 2 2 nodos, y así sucesivamente. En general, el número total
Paso N’ D (v), p (v) D (w), p (w) D (x), p (x) D (y), p (y) D (z), p (z)
0 u 2, u 5, u 1,u
1 ux 2, u 4, x 2, x
2 uxy 2, u 3, y 4, y
3 uxyv 3, y 4, y
4 uxyvw 4, y
5 uxyvwz
Tabla 5.1 ♦ Ejecución del algoritmo de estado de enlaces para la red de la Figura 5.3.
316 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
Destino Enlace
v w v (u, v)
w (u, x)
u z x (u, x)
y (u, x)
x y z (u, x)
de nodos a través de los que tenemos que buscar, teniendo en cuenta todas las iteraciones, es igual
a n(n 1 1)/2 y, por tanto, decimos que la anterior implementación del algoritmo LS tiene, en el
caso peor, una complejidad de orden n al cuadrado: O(n2). Una implementación más sofisticada de
este algoritmo, que utiliza una estructura de datos conocida como montón (heap), puede calcular el
mínimo en la línea 9 en tiempo logarítmico en lugar de lineal, reduciendo así la complejidad.
Antes de terminar nuestro estudio del algoritmo LS, consideremos una patología que puede
surgir. La Figura 5.5 muestra una topología de red simple donde el coste de cada enlace es igual a
la carga transportada por el enlace, reflejando, por ejemplo, el retardo que se experimentaría en ese
enlace. En este ejemplo, los costes de los enlaces no son simétricos; es decir, c (u,v) es igual a c (v,u)
solo si la carga transportada en ambas direcciones del enlace (u,v) es la misma. En este ejemplo,
el nodo z origina una unidad de tráfico destinada a w, el nodo x también origina una unidad de
w w
1+e 0
1 2+e
1 z x 1 1 z x 1
0 0 1+e 1
0 e 0 0
y y
e e
w w
2+ e 0
0 2+e
1 z x 1 1 z x 1
0 0 1+e 1
1 1+e 0 0
y y
e e
tráfico destinada a w, y el nodo y inyecta una cantidad de tráfico igual a e, también destinado a w.
El enrutamiento inicial se muestra en la Figura 5.5(a), correspondiendo los costes de los enlaces a la
cantidad de tráfico transportado.
Cuando se vuelve a ejecutar el algoritmo LS, el nodo y determina, basándose en los costes de
enlace mostrados en la Figura 5.5(a), que la ruta en sentido horario a w tiene un coste de 1, mientras
que la ruta en sentido antihorario a w (que era la que había estado utilizando) tiene un coste de
1 1 e. Por tanto, la ruta de coste mínimo de y a w ahora va en sentido horario. De forma similar, x
determina que ahora su nueva ruta de coste mínimo a w va en sentido horario, dando como resultado
los costes mostrados en la Figura 5.5(b). Cuando el algoritmo LS se ejecuta otra vez, los nodos x,
y y z detectan una ruta de coste cero a w en el sentido antihorario y todos ellos envían su tráfico a
las rutas en sentido antihorario. La siguiente vez que se ejecuta el algoritmo LS, x, y y z enrutan su
tráfico a las rutas en sentido horario.
¿Qué podemos hacer para evitar tales oscilaciones (que pueden producirse en cualquier algoritmo,
no solo el LS, que utilice una métrica de enlace basada en la congestión o el retardo)? Una solución
sería obligar a que los costes de enlace no dependan de la cantidad de tráfico transportado (una
solución inaceptable, ya que uno de los objetivos del enrutamiento es evitar los enlaces altamente
congestionados; por ejemplo, los enlaces con un alto retardo). Otra solución consiste en garantizar
que no todos los routers ejecuten el algoritmo LS al mismo tiempo. Esta parece una solución más
razonable, ya que podríamos esperar que, aunque los routers ejecuten el algoritmo LS con la misma
periodicidad, la instancia de ejecución del algoritmo no sería la misma en cada uno de los nodos.
Es interesante observar que los investigadores han comprobado que los routers de Internet pueden
auto-sincronizarse entre ellos [Floyd Synchronization 1994]. Es decir, incluso aunque inicialmente
ejecuten el algoritmo con el mismo periodo pero en distintos instantes de tiempo, la instancia de
ejecución del algoritmo puede llegar a sincronizarse en los routers y permanecer sincronizada. Una
forma de evitar tal auto-sincronización es que cada router elija aleatoriamente el instante en el que
enviar un anuncio de enlace.
Ahora que ya hemos estudiado el algoritmo LS, vamos a abordar el otro algoritmo de enru-
tamiento importante que se utiliza actualmente en la práctica: el algoritmo de enrutamiento por
vector de distancias.
donde minv se calcula para todos los vecinos de x. La ecuación de Bellman-Ford es bastante intui-
tiva. De hecho, después de viajar de x a v, si tomamos la ruta de coste mínimo de v a y, el coste de
la ruta será c (x,v) 1 dv(y). Puesto que hay que comenzar viajando a algún vecino v, el coste mínimo
de x a y será el mínimo de c (x,v) 1 dv(y), calculado para todos los vecinos v.
318 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
Pero para aquellos que sean escépticos en cuanto a la validez de la ecuación, vamos a comprobarla
para el nodo de origen u y el nodo de destino z de la Figura 5.3. El nodo de origen u tiene tres
vecinos: los nodos v, x y w. Recorriendo las distintas rutas del grafo, es fácil ver que dv(z) 5 5,
dx(z) 5 3 y dw(z) 5 3. Introduciendo estos valores en la Ecuación 5.1, junto con los costes
c (u,v) 5 2, c (u,x) 5 1 y c (u,w) 5 5, se obtiene du(z) 5 mín{2 1 5, 5 1 3, 1 1 3} 5 4, que
obviamente es cierto y es exactamente lo que nos proporcionó el algoritmo de Dijskstra para la
misma red. Esta rápida verificación debería ayudarle a disipar cualquier duda que pueda tener.
La ecuación de Bellman-Ford no es únicamente una curiosidad intelectual; realmente tiene
una importancia práctica significativa. En concreto, la solución de la ecuación de Bellman-Ford
proporciona las entradas de la tabla de reenvío del nodo x. Para ver esto, sea v* cualquier nodo vecino
que alcanza el mínimo dado por la Ecuación 5.1. Entonces, si el nodo x desea enviar un paquete al
nodo y a lo largo de la ruta de coste mínimo, debería en primer lugar reenviar el paquete al nodo v*.
Por tanto, la tabla de reenvío del nodo x especificaría el nodo v* como el router del siguiente salto
para el destino final y. Otra importante contribución práctica de la ecuación de Bellman-Ford es que
sugiere la forma en que tendrá lugar la comunicación vecino a vecino en el algoritmo de vector de
distancias.
La idea básica es la siguiente: cada nodo x comienza con Dx(y), una estimación del coste de
la ruta de coste mínimo desde sí mismo al nodo y, para todos los nodos y de N. Sea Dx 5 [Dx(y):
y perteneciente a N] el vector de distancias del nodo x, que es el vector de coste estimado desde x a
todos los demás nodos y pertenecientes a N. Con el algoritmo de vector de distancias, cada nodo x
mantiene la siguiente información de enrutamiento:
En el algoritmo asíncrono distribuido, cada nodo envía de vez en cuando una copia de su vector
de distancias a cada uno de sus vecinos. Cuando un nodo x recibe un nuevo vector de distancias
procedente de cualquiera de sus vecinos w, guarda dicho vector de w y luego utiliza la ecuación de
Bellman-Ford para actualizar su propio vector de distancias como sigue:
Si el vector de distancias del nodo x ha cambiado como resultado de este paso de actualización,
entonces el nodo x enviará su vector de distancias actualizado a cada uno de sus vecinos, lo que
puede a su vez actualizar sus propios vectores de distancias. De forma bastante milagrosa, siempre
y cuando todos los nodos continúen intercambiando sus vectores de distancia de forma asíncrona,
¡cada coste estimado Dx(y) converge a dx(y), el coste real de la ruta de coste mínimo del nodo x al
nodo y [Bertsekas 1991]!
1 Inicialización:
2 for todos los destinos y pertenecientes a N:
3 Dx(y)= c(x,y)/* si y no es un vecino, entonces c(x,y)= ∞ */
4 for cada vecino w
5 Dw(y) = ? for todos los destinos y pertenecientes a N
6 for cada vecino w
7 enviar vector de distancias Dx = [Dx(y): y perteneciente a N] a w
5.2 • ALGORITMOS DE ENRUTAMIENTO 319
8
9 loop
10 wait (hasta ver una variación en el coste de enlace a un vecino w
11 o hasta recibir un vector de distancias de algún vecino w)
12
13 for cada y perteneciente a N:
14 Dx(y) = minv{c(x,v) + Dv(y)}
15
16 if Dx(y) ha variado para cualquier destino y
17 enviar vector de distancia Dx = [Dx(y): y perteneciente a N] a todos los vecinos
18
19 forever
y
2 1
x 7 z
Tabla nodo x
coste a coste a coste a
x y z x y z x y z
x 0 2 7 x 0 2 3 x 0 2 3
desde
desde
desde
y ` ` ` y 2 0 1 y 2 0 1
z ` ` ` z 7 1 0 z 3 1 0
Tabla nodo y
coste a coste a coste a
x y z x y z x y z
x ` ` ` x 0 2 7 x 0 2 3
desde
desde
desde
y 2 0 1 y 2 0 1 y 2 0 1
z ` ` ` z 7 1 0 z 3 1 0
Tabla nodo z
coste a coste a coste a
x y z x y z x y z
x ` ` ` x 0 2 7 x 0 2 3
desde
desde
desde
y ` ` ` y 2 0 1 y 2 0 1
z 7 1 0 z 3 1 0 z 3 1 0
Tiempo
Dx 5 [0, 2, 7] a los nodos y y z. Después de recibir las actualizaciones, cada nodo recalcula su propio
vector de distancias. Por ejemplo, el nodo x calcula
Dx(x) 5 0
Dx(y) 5 mín{c (x, y) 1 Dy(y), c (x, z) 1 Dz(y)} 5 mín{2 1 0, 7 1 1} 5 2
Dx(z) 5 mín{c (x, y) 1 Dy(z), c (x, z) 1 Dz(z)} 5 mín{2 1 1, 7 1 0} 5 3
Por tanto, la segunda columna muestra, para cada nodo, el nuevo vector de distancias del nodo,
junto con los vectores de distancias que acaba de recibir de sus vecinos. Observe, por ejemplo, que
la estimación del nodo x para el coste mínimo al nodo z, Dx(z), ha cambiado de 7 a 3. Fíjese también
en que para el nodo x, el nodo vecino y alcanza el mínimo en la línea 14 del algoritmo de vector de
distancias; luego en esta etapa del algoritmo tenemos que, en el nodo x, v*(y) 5 y y v*(z) 5 y.
Una vez que los nodos recalculan sus vectores de distancias, envían de nuevo los valores actua-
lizados a sus vecinos (si se ha producido un cambio). Esto se indica en la Figura 5.6 mediante las fle-
chas que van desde la segunda columna a la tercera columna de las tablas. Observe que únicamente
los nodos x y z envían actualizaciones: el vector de distancias del nodo y no ha cambiado, por lo que
no envía ninguna actualización. Después de recibir las actualizaciones, los nodos recalculan sus vec-
tores de distancias y actualizan sus tablas de enrutamiento, lo que se muestra en la tercera columna.
5.2 • ALGORITMOS DE ENRUTAMIENTO 321
El proceso de recibir vectores de distancias actualizados de los vecinos, recalcular las entradas
de la tabla de enrutamiento e informar a los vecinos de los costes modificados de la ruta de coste
mínimo hacia un destino continúa hasta que ya no se envían mensajes de actualización. En esta
situación, puesto que no se envían mensajes de actualización, no se realizarán más cálculos de la
tabla de enrutamiento y el algoritmo entrará en un estado de reposo; es decir, todos los nodos se
encontrarán realizando la espera indicada por las líneas 10–11 del algoritmo del vector de distancias.
El algoritmo permanece en el estado de reposo hasta que el coste de un enlace cambia, como se
explica a continuación.
• En el instante t0, y detecta el cambio en el coste del enlace (el coste ha cambiado de 4 a 1),
actualiza su vector de distancias e informa a sus vecinos de este cambio, puesto que su vector de
distancias ha cambiado.
• En el instante t1, z recibe la actualización de y y actualiza su tabla. Calcula el nuevo coste mínimo
a x (ha disminuido de 5 a 2) y envía su nuevo vector de distancias a sus vecinos.
• En el instante t2, y recibe la actualización de z y actualiza su tabla de distancias. El coste mínimo
de y no cambia y, por tanto, y no envía ningún mensaje a z. El algoritmo entra en el estado de
reposo.
Así, solo se han necesitado dos iteraciones para que el algoritmo DV alcance un estado de reposo.
Las buenas noticias acerca de la disminución del coste entre x e y se han propagado rápidamente a
través de la red.
Consideremos ahora lo que ocurre cuando el coste de un enlace aumenta. Suponga que el coste
del enlace entre x e y aumenta de 4 a 60, como se muestra en la Figura 5.7(b).
1. Antes de que el coste del enlace varíe, Dy(x) 5 4, Dy(z) 5 1, Dz(y) = 1 y Dz(x) = 5. En el instante
t0 y detecta el cambio en el coste del enlace (el coste ha variado de 4 a 60). El nodo y calcula su
nueva ruta de coste mínimo a x, obteniendo un coste de:
Por supuesto, con nuestra visión global de la red, podemos ver que este nuevo coste a través de
z es erróneo. Pero la única información que tiene el nodo y es que su coste directo a x es 60 y
que z le ha dicho a y que z podría alcanzar x con un coste de 5. Por tanto, para llegar a x, y ahora
1 y 60 y
4 1 4 1
x 50 z x 50 z
a. b.
enrutaría a través de z, confiando plenamente en que z será capaz de llegar hasta x con un coste
de 5. En t1 tenemos por tanto un bucle de enrutamiento (para llegar a x, y enruta a través de
z, y z enruta a través de y). Un bucle de enrutamiento es como un agujero negro (un paquete
destinado a x que llega a y o z en t1 rebotará entre estos dos nodos permanentemente, o hasta que
las tablas de reenvío cambien).
2. Dado que el nodo y ha calculado un nuevo coste mínimo a x, informa a z de este nuevo vector
de distancias en el instante t1.
3. En algún momento posterior a t1, z recibe un nuevo vector de distancias de y, que indica que el
coste mínimo de y a x es 6. z sabe que puede llegar a y con un coste de 1 y, por tanto, calcula un
nuevo coste mínimo a x que será igual a Dz(x) 5 mín{50 1 0, 1 1 6} 5 7. Puesto que el coste
mínimo de z a x ha aumentado, a continuación informa a y de su nuevo vector de distancias en
t2.
4. De forma similar, después de recibir el nuevo vector de distancias de z, el nodo y determina que
Dy(x) 5 8 y envía a z su vector de distancias. El nodo z determina entonces que Dz(x) 5 9 y
envía a y su vector de distancias, y así sucesivamente.
¿Durante cuánto tiempo continuará el proceso? Puede comprobar por sí mismo que el bucle se man-
tendrá durante 44 iteraciones (intercambios de mensajes entre y y z), hasta que z finalmente calcule
que el coste de su ruta a través de y es mayor que 50. En ese punto, z (¡finalmente!) determinará que
su ruta de coste mínimo a x es a través de su conexión directa con x. El nodo y entonces enrutará
hacia x a través de z. ¡Como puede ver, las malas noticias acerca del aumento del coste del enlace
han tardado mucho en propagarse! ¿Qué habría ocurrido si el coste del enlace c (y, x) hubiera cam-
biado de 4 a 10.000 y el coste c (z, x) hubiera sido 9.999? A causa de los escenarios de este tipo, en
ocasiones se designa a este problema con el nombre de problema de la cuenta hasta infinito.
con sus vecinos directamente conectados, pero les proporciona sus estimaciones de coste mínimo
desde sí mismo a todos los demás nodos (conocidos) de la red. El algoritmo de estado de enlaces
requiere información global. En consecuencia, cuando se lo implemente en todos y cada uno de los
routers, como por ejemplo en las Figuras 4.2 y 5.1, cada nodo tendrá que comunicarse con todos
los restantes nodos (vía difusión), pero solo les informará de los costes de sus enlaces directamente
conectados. Vamos a terminar este estudio sobre los algoritmos de estado de enlaces y de vector de
distancias haciendo una rápida comparación de algunos de sus atributos. Recuerde que N es el con-
junto de nodos (routers) y E es el conjunto de aristas (enlaces).
• Complejidad del mensaje. Hemos visto que el algoritmo LS requiere que cada nodo conozca el
coste de cada enlace de la red. Esto requiere el envío de O(|N| |E|) mensajes. Además, cuando
el coste de un enlace cambia, el nuevo coste tiene que enviarse a todos los nodos. El algoritmo
de vector de distancias requiere intercambios de mensajes entre los vecinos directamente conec-
tados en cada iteración. Hemos visto que el tiempo necesario para que el algoritmo converja
puede depender de muchos factores. Cuando los costes de los enlaces cambian, el algoritmo
de vector de distancias propagará los resultados del coste del enlace que ha cambiado solo si el
nuevo coste de enlace da lugar a una ruta de coste mínimo distinta para uno de los nodos conec-
tados a dicho enlace.
• Velocidad de convergencia. Hemos visto que nuestra implementación del algoritmo de estado de
enlaces es un algoritmo O(|N|2) que requiere enviar O(|N| |E|)) mensajes. El algoritmo de vector
de distancias puede converger lentamente y pueden aparecer bucles de enrutamiento mientras
está convergiendo. Este algoritmo también sufre el problema de la cuenta hasta infinito.
• Robustez. ¿Qué puede ocurrir si un router falla, funciona mal o es saboteado? Con el algoritmo
de estado de enlaces, un router podría difundir un coste incorrecto para uno de sus enlaces conec-
tados (pero no para los otros). Un nodo también podría corromper o eliminar cualquier paquete
recibido como parte de un mensaje de difusión LS. Pero, con el algoritmo LS, un nodo solo
calcula su propia tabla de reenvío, mientras que otros nodos realizan cálculos similares por sí
mismos. Esto significa que los cálculos de rutas son hasta cierto punto independientes en LS,
proporcionando un mayor grado de robustez. Con el algoritmo de vector de distancias, un nodo
puede anunciar rutas de coste mínimo incorrectas a uno o a todos los destinos. (De hecho, en
1997, un router que funcionaba mal en un pequeño ISP proporcionó a los routers troncales nacio-
nales información de enrutamiento errónea. Esto hizo que otros routers inundaran con una gran
cantidad de tráfico al router que funcionaba mal y provocó que amplias partes de Internet estu-
vieran desconectadas durante varias horas [Neumann 1997].) En un sentido más general, obser-
vamos que, en cada iteración, los cálculos de un nodo con el algoritmo de vector de distancias
se pasan a sus vecinos y luego, indirectamente, al vecino del vecino en la siguiente iteración.
En este sentido, con el algoritmo de vector de distancias, un cálculo de nodo incorrecto puede
difundirse a través de toda la red.
Estos dos problemas pueden resolverse organizando los routers en sistemas autónomos (AS,
Autonomous System), estando cada AS formado por un grupo de routers que se encuentran bajo el
mismo control administrativo. A menudo, los routers de un ISP, y los enlaces que los interconectan,
constituyen un único AS. Otros ISP, sin embargo, dividen su red en múltiples AS. En particular,
algunos ISP de nivel 1 utilizan un solo AS gigante para toda su red, mientras que otros ISP dividen
su red en decenas de AS interconectados. Cada sistema autónomo se identifica mediante su número
de sistema autónomo (ASN, Autonomous System Number), que es único globalmente [RFC 1930].
Los números de AS, como las direcciones IP, son asignados por los registros regionales de ICANN
[ICANN 2016].
Los routers de un mismo AS ejecutan todos ellos el mismo algoritmo de enrutamiento y
disponen de información unos de otros. El algoritmo de enrutamiento que se ejecuta dentro de un
sistema autónomo se denomina protocolo de enrutamiento interno del sistema autónomo.
OSPF
El enrutamiento OSPF (Open Shortest Path First, protocolo abierto de preferencia para la ruta
más corta) y su pariente próximo, IS-IS, se utilizan ampliamente para el enrutamiento interno a
los sistemas autónomos en Internet. El ‘Open’ de OSPF indica que la especificación del protocolo
de enrutamiento está disponible públicamente (a diferencia, por ejemplo, del protocolo EIGRP de
Cisco, que solo recientemente se ha convertido en abierto [Savage 2015], después de ser durante
unos 20 años un protocolo propiedad de Cisco). La versión más reciente de OSPF, la versión 2, está
definida en [RFC 2328], un documento público.
OSPF es un protocolo de estado de enlaces que utiliza la técnica de inundación de información
de estado de los enlaces y un algoritmo de la ruta de coste mínimo de Dijkstra. Con OSPF, un
router construye un mapa topológico completo (es decir, un grafo) del sistema autónomo entero.
A continuación, cada router ejecuta localmente el algoritmo de la ruta más corta de Dijkstra para
determinar un árbol de rutas más cortas a todas las subredes, con él mismo como nodo raíz. El
administrador de la red configura los costes de los enlaces individuales (consulte el recuadro
En la práctica: configuración de los pesos de los enlaces en OSPF). El administrador puede
decidir hacer igual a 1 el coste de todos los enlaces, proporcionando así un enrutamiento con un
número mínimo de saltos, o puede definir los pesos de los enlaces para que sean inversamente
proporcionales a la capacidad de los mismos, con el fin de disuadir al tráfico de utilizar los
enlaces con poco ancho de banda. OSPF no establece una política para definir el peso de los
enlaces (esta tarea le corresponde al administrador de la red), sino que proporciona el mecanismo
(el protocolo) para determinar el enrutamiento de coste mínimo para el conjunto dado de pesos
de los enlaces.
5.3 • ENRUTAMIENTO DENTRO DE UN SISTEMA AUTÓNOMO EN INTERNET: OSPF 325
EN LA PRÁCTICA
CONF IGURACI ÓN DE LOS PES OS D E L O S EN L ACES EN O S P F
En nuestra exposición sobre el enrutamiento de estado de enlaces hemos supuesto implícitamente que los
pesos de los enlaces están definidos, que se está ejecutando un algoritmo de enrutamiento como OSPF y
que el tráfico fluye de acuerdo con las tablas de enrutamiento calculadas por el algoritmo LS. En términos
de causa y efecto, los pesos de los enlaces nos vienen dados (es decir, se conocen de antemano) y dan
como resultado (mediante el algoritmo de Dijkstra) las rutas que minimizan el coste global. Desde este punto
de vista, los pesos de los enlaces reflejan el coste de utilizar un enlace (por ejemplo, si los pesos son inver-
samente proporcionales a la capacidad, entonces los enlaces de alta capacidad tendrían asociados pesos
más pequeños y, por tanto, serían más atractivos desde el punto de vista del enrutamiento) y el algoritmo de
Disjkstra sirve para minimizar el coste global.
En la práctica, la relación causa-efecto entre el peso de los enlaces y las rutas puede invertirse, cuando
los operadores de red configuran los pesos de los enlaces de manera que se obtengan rutas que permitan
alcanzar determinados objetivos de ingeniería de tráfico [Fortz 2000, Fortz 2002]. Por ejemplo, suponga
que un operador de red tiene una estimación del flujo de tráfico que entra en la red por cada punto de
entrada y que está destinado a cada punto de salida. El operador podría querer entonces implementar un
enrutamiento específico para los flujos de entrada-a-salida que minimice la tasa máxima de utilización de
los enlaces de la red. Pero con un algoritmo de enrutamiento como OSPF, la principal herramienta de la
que dispone el operador para alterar el enrutamiento de los flujos a través de la red son los pesos de los
enlaces. Por tanto, para alcanzar el objetivo de minimizar la tasa máxima de utilización de los enlaces, el
operador tiene que encontrar el conjunto de pesos de los enlaces que permita alcanzar este objetivo. Esto
constituye una inversión de la relación causa-efecto: el enrutamiento deseado de los flujos es conocido y
tienen que determinarse los pesos de los enlaces OSPF de manera que el algoritmo de enrutamiento OSPF
dé como resultado el enrutamiento de flujos deseado.
Con OSPF, un router difunde la información de enrutamiento a todos los demás routers del
sistema autónomo, no solo a sus routers vecinos. Un router difunde la información de estado de los
enlaces cuando se produce un cambio en el estado de un enlace (por ejemplo, un cambio en el coste
o en su estado activo/inactivo). También difunde periódicamente el estado de un enlace (al menos
una vez cada 30 minutos), incluso aunque el estado del mismo no haya cambiado. El documento
RFC 2328 destaca que “esta actualización periódica de los anuncios del estado de los enlaces
añade robustez al algoritmo LS”. Los anuncios OSPF están contenidos en mensajes OSPF que son
transportados directamente por IP, siendo el número del protocolo de la capa superior para OSPF
igual a 89. Por tanto, el protocolo OSPF tiene que implementar por sí mismo funcionalidades tales
como la de transferencia fiable de mensajes y la de envío de mensajes de difusión acerca del estado
de los enlaces. El protocolo OSPF también comprueba que los enlaces estén operativos (mediante un
mensaje HELLO que se envía a un vecino conectado) y permite al router OSPF obtener de un vecino
la base de datos de estado de los enlaces de toda la red.
OSPF es un protocolo relativamente complejo, por lo que aquí lo hemos cubierto de forma
necesariamente breve; en [Huitema 1998; Moy 1998; RFC 2328] se proporcionan detalles
adicionales.
y asíncrono, en la línea del enrutamiento por vector de distancias descrito en la Sección 5.2.2.
Aunque BGP es un protocolo complejo y difícil, si queremos comprender en profundidad Internet
necesitamos familiarizarnos con sus principios fundamentales y su funcionamiento. El tiempo que
dediquemos a aprender BGP estará bien invertido.
Como protocolo de enrutamiento entre sistemas autónomos, BGP proporciona a cada router
mecanismos para:
1. Obtener de los sistemas autónomos vecinos información acerca de la alcanzabilidad de los
prefijos. En particular, BGP permite a cada subred anunciar su existencia al resto de Internet.
Una subred vocifera “Existo y estoy aquí”, y BGP garantiza que todos los routers de Internet
sepan sobre ella. Si no fuera por BGP, las subredes estarían aisladas, resultando desconocidas
e inalcanzables para el resto de Internet.
2. Determinar las “mejores” rutas hacia los distintos prefijos. Un router puede llegar a conocer
dos o más rutas hacia un prefijo específico. Para determinar la mejor ruta, el router ejecutará
localmente un procedimiento de selección de rutas de BGP (utilizando la información de
alcanzabilidad de prefijos que ha obtenido de los routers vecinos). La mejor ruta se determinará
basándose tanto en las políticas existentes, como en la información de alcanzabilidad.
2b
2a 2c
1b 3b
2d
1a 1c 3a 3c
AS2
1d 3d X
AS1 AS3
Figura 5.8 ♦ Red con tres sistemas autónomos. AS3 incluye una subred con prefijo x.
2b
2a 2c
1b 3b
2d
1a 1c 3a 3c
AS2
1d 3d X
AS1 AS3
Leyenda:
eBGP
iBGP
TCP dentro de cada AS. En la Figura 5.9, las conexiones eBGP se muestran con punteado más largo;
las conexiones iBGP se ilustran mediante punteado más corto. Observe que las conexiones iBGP no
siempre se corresponden con enlaces físicos.
Para propagar la información de alcanzabilidad se utilizan sesiones tanto iBGP como eBGP.
Consideremos de nuevo la tarea de anunciar la información de alcanzabilidad para el prefijo x
a todos los routers de AS1 y AS2. En este proceso, el router de pasarela 3a envía primero un mensaje
eBGP “AS3 x” al router de pasarela 2c. A continuación, el router de pasarela 2c envía el men-
saje iBGP “AS3 x” a todos los restantes routers de AS2, incluyendo el router de pasarela 2a.
Después, el router 2a envía el mensaje eBGP “AS2 AS3 x” al router de pasarela 1c. Finalmente, el
router de pasarela 1c utiliza iBGP para enviar el mensaje “AS2 AS3 x” a todos los routers de AS1.
Tras completar este proceso, todos los routers de AS1 y AS2 conocen la existencia de x y conocen
también una ruta de sistemas autónomos que conduce hasta x.
Por supuesto, en una red real puede haber muchas rutas diferentes desde un cierto router hasta
un destino determinado, cada una de ellas a través de una secuencia distinta de sistemas autó-
nomos. Considere, por ejemplo, la red de la Figura 5.10, que es la red original de la Figura 5.8, pero
con un enlace físico adicional que une el router 1d con el router 3d. En este caso, hay dos rutas desde
AS1 hasta x: la ruta “AS2 AS3 x” a través del router 1c, y la nueva ruta “AS3 x” a través del router
1d.
NEXT-HOP
2b
2a 2c
1b 3b
2d
1a 1c 3a 3c
AS2
1d 3d X
Figura 5.10 ♦ Red ampliada con un enlace directo entre AS1 y AS3.
330 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
Aquí, hemos escrito cada ruta BGP en forma de lista con tres componentes: NEXT-HOP; AS-PATH;
prefijo de destino. En la práctica, una ruta BGP incluye atributos adicionales, que por el momento
vamos a ignorar. Observe que el atributo NEXT-HOP es una dirección IP de un router que no
pertenece a AS1; sin embargo, la subred que contiene esta dirección IP está directamente conectada
a AS1.
Figura 5.11 ♦ Pasos para añadir a la tabla de reenvío de un router un destino externo
al sistema autónomo.
5.4 • ENRUTAMIENTO ENTRE LOS ISP: BGP 331
La idea que subyace al enrutamiento de la patata caliente es que el router 1b debe preocuparse
de conseguir que los paquetes salgan de su propio sistema autónomo lo más rápidamente posible
(o, para ser más específicos, con el menor coste posible), sin preocuparse del coste que tengan las
partes restantes de la ruta hasta el destino, situadas fuera de su propio sistema autónomo. En el
nombre “enrutamiento de la patata caliente” subyace la idea de que un paquete es análogo a una patata
caliente, que nos está quemando las manos. Puesto que quema, queremos pasársela a otra persona
(a otro sistema autónomo) lo más rápidamente posible. El enrutamiento de la patata caliente es, por
tanto, un algoritmo egoísta: trata de reducir el coste dentro de su propio sistema autónomo, ignorando
los restantes componentes de los costes extremo a extremo que están fuera de su sistema autónomo.
Fíjese en que, con el enrutamiento de la patata caliente, dos routers pertenecientes a un mismo sistema
autónomo podrían elegir dos rutas de sistemas autónomos diferentes para un mismo prefijo. Por
ejemplo, acabamos de ver que el router 1b enviaría los paquetes a través de AS2 para alcanzar x. Sin
embargo, el router 1d evitaría AS2 y enviaría los paquetes directamente a AS3 para alcanzar x.
1. Se asigna un valor de preferencia local a las rutas, como uno de sus atributos (además de
los atributos AS-PATH y NEXT-HOP). La preferencia local de una ruta podría haber sido
definida por el router o podría haber sido aprendida de otro router perteneciente al mismo
sistema autónomo. El valor del atributo de preferencia local es una decisión política que
se deja completamente en manos del administrador de red del sistema autónomo (en breve
veremos en detalle las políticas de BGP). Se eligen las rutas con los valores de preferencia
local más altos.
2. De las rutas que quedan (todas ellas con el mismo valor de preferencia local), se selecciona
la ruta con la secuencia de sistemas autónomos (AS-PATH) más corta. Si esta regla fuera la
única para seleccionar la ruta, entonces BGP estaría aplicando un algoritmo de vector de dis-
tancias para determinar la ruta, siendo la métrica de distancia utilizada el número de saltos entre
sistemas autónomos, en lugar del número de saltos entre routers.
3. Para las restantes rutas (todas con el mismo valor de preferencia local y la misma longitud de
AS-PATH), se utiliza el enrutamiento de la patata caliente, es decir, se selecciona la ruta con el
router del siguiente salto (NEXT-HOP) más próximo.
4. Si siguiera quedando más de una ruta, el router utilizaría identificadores BGP para seleccionar
la ruta; véase [Stewart 1999].
Como ejemplo, consideremos de nuevo el router 1b de la Figura 5.10. Recuerde que hay
exactamente dos rutas BGP hacia el prefijo x, una que pasa a través de AS2 y otra que evita pasar a
través de AS2. Recuerde también que si solo usáramos el enrutamiento de la patata caliente, entonces
BGP enrutaría los paquetes hacia x a través de AS2. Pero en el anterior algoritmo de selección de
ruta, la regla 2 se aplica antes de la regla 3, haciendo que BGP seleccione la ruta que evita pasar
por AS2, ya que esa ruta tiene un AS-PATH más corto. Así que, como puede ver, con el anterior
algoritmo de selección de ruta BGP ya no es un algoritmo egoísta: elige preferentemente las rutas
con secuencias sistemas autónomos cortas (reduciendo así el retardo extremo a extremo).
Como hemos mencionado anteriormente, BGP es el estándar de facto para el enrutamiento
entre sistemas autónomos de Internet. Para ver el contenido de varias tablas de enrutamiento BGP
(¡muy grandes!) extraídas de routers de los ISP de nivel 1, consulte http://www.routeviews.org.
Frecuentemente, las tablas de enrutamiento BGP contienen más de medio millón de rutas (es
332 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
decir, prefijos y sus atributos correspondientes). Puede ver estadísticas acerca del tamaño y las
características de las tablas de enrutamiento BGP en [Potaroo 2016].
5.4.4 IP-Anycast
Además de ser el protocolo de enrutamiento entre sistemas autónomos de Internet, BGP se usa a
menudo para implementar el servicio IP-anycast [RFC 1546, RFC 7094], utilizado comúnmente en
DNS. Para entender la motivación de IP-anycast, piense que, en muchas aplicaciones, nos interesa
(1) duplicar el mismo contenido en diferentes servidores, situados en muchas ubicaciones distintas,
geográficamente dispersas; y (2) hacer que cada usuario acceda al contenido usando el servidor que
tenga más próximo. Por ejemplo, una red CDN podría replicar los vídeos y otros objetos en servido-
res situados en distintos países. De forma similar, el sistema DNS puede replicar los registros DNS
en servidores DNS dispersos por todo el mundo. Cuando un usuario quiera acceder a este contenido
replicado, resulta conveniente dirigir al usuario al servidor “más próximo” que disponga de ese
contenido. El algoritmo de selección de rutas de BGP proporciona un mecanismo sencillo y natural
para hacer esto.
Para concretar nuestra exposición, veamos de qué modo podría una red CDN utilizar
IP-anycast. Como se muestra en la Figura 5.12, durante la etapa de configuración de IP-anycast la
empresa CDN asigna la misma dirección IP a cada uno de sus servidores, y utiliza BGP estándar
para anunciar esa dirección IP de cada uno de los servidores. Cuando un router BGP recibe
múltiples anuncios de ruta para esta dirección IP, trata esos anuncios como si proporcionaran
diferentes rutas hacia una misma ubicación física (cuando, de hecho, los anuncios son para
diferentes rutas hacia distintas ubicaciones físicas). Al configurar su tabla de enrutamiento, cada
router utilizará localmente el algoritmo de selección de rutas de BGP para elegir la “mejor” ruta
hacia esa dirección IP (por ejemplo, la ruta más cercana, midiendo según el número de saltos de
4b
4a 4c
AS4
2c
3c
2a
3a
1c
2b
3b AS2
AS3 1a 1b
Recibe anuncios
BGP para 212.21.21.21
1d desde AS1 y AS4.
Reenvía hacia el
AS1
servidor B, ya que
está más cerca.
Anuncia
212.21.21.21
Servidor CDN A
Anuncia
212.21.21.21
Servidor CDN B
Figura 5.12 ♦ Utilización de IP-anycast para dirigir a los usuarios al servidor CDN más
próximo.
5.4 • ENRUTAMIENTO ENTRE LOS ISP: BGP 333
sistema autónomo). Por ejemplo, si una ruta BGP (correspondiente a una ubicación) está a una
distancia de un solo salto de sistema autónomo con respecto al router y todas las restantes rutas
BGP (correspondientes a otras ubicaciones) están a una distancia de dos o más saltos de sistema
autónomo, entonces el router BGP decidirá enrutar los paquetes hacia la ubicación que está a un
solo salto de distancia. Después de esta fase inicial BGP de anuncio de direcciones, la red CDN
puede dedicarse a su tarea principal: distribuir contenido. Cuando un cliente solicita el vídeo,
la CDN devuelve al cliente la dirección IP común utilizada por los servidores geográficamente
dispersos, con independencia de dónde esté situado el cliente. Cuando el cliente envía una
solicitud a esa dirección IP, los routers de Internet reenvían ese paquete de solicitud al servidor
“más próximo”, según determine el algoritmo de selección de rutas de BGP.
Aunque el ejemplo anterior de CDN ilustra adecuadamente cómo puede usarse IP-anycast, en
la práctica las redes CDN no suelen utilizar IP-anycast, porque los cambios en el enrutamiento BGP
pueden hacer que diferentes paquetes de una misma conexión TCP lleguen a diferentes instancias
del servidor web. Pero IP-anycast sí que es ampliamente utilizado por el sistema DNS para dirigir
las consultas DNS al servidor DNS raíz más cercano. Recuerde, de la Sección 2.4, que actualmente
existen 13 direcciones IP para los servidores DNS raíz. Pero para cada una de estas direcciones hay
múltiples servidores DNS raíz, teniendo algunas de estas direcciones más de 100 servidores DNS
raíz dispersos por todo el mundo. Cuando se envía una consulta DNS a una de estas 13 direcciones
IP, se utiliza IP-anycast para enrutar la consulta hacia el servidor DNS raíz más cercano que sea
responsable de esa dirección.
Leyenda:
B
Red de
X proveedor
W A
Red de
C cliente
Y
EN LA PRÁCTICA
¿POR QUÉ LOS S I S TEMAS AU TÓ N O MO S D IS P O N EN D E D IFEREN TES
PROT OCOLOS DE E N RU TAMIEN TO PARA U S O IN TERN O Y PARA
COMUN I CARS E ENTRE EL L O S ?
Una vez estudiados los detalles de una serie de protocolos específicos de enrutamiento interno a los sistemas
autónomos y de enrutamiento entre sistemas autónomos, implantados actualmente en Internet, vamos
a concluir considerando quizá la cuestión más importante que podríamos plantearnos acerca de estos
protocolos (¡esperamos que le haya surgido esta duda a lo largo del capítulo y que los árboles no le hayan
impedido ver el bosque!): ¿por qué se utilizan protocolos de enrutamiento distintos dentro de los sistemas
autónomos y para comunicarse entre unos sistemas autónomos y otros?
La respuesta a esta pregunta se encuentra en las diferencias de objetivos entre el enrutamiento dentro
de un sistema autónomo y el enrutamiento entre sistemas autónomos:
• Política. Entre sistemas autónomos, prevalecen las políticas. Puede ser importante que el tráfico origi-
nado en un determinado sistema autónomo no pueda atravesar otro sistema autónomo específico. De
forma similar, un sistema autónomo dado puede desear controlar el tráfico de tránsito que transporta
entre otros sistemas autónomos. Hemos visto que BGP transporta atributos de ruta y permite la distribu-
ción controlada de información de enrutamiento, de manera que pueden tomarse ese tipo decisiones de
enrutamiento basadas en políticas. Dentro de un sistema autónomo, todo está en teoría bajo el mismo
control administrativo y, por tanto, las políticas desempeñan un papel mucho menos importante en la
elección de rutas dentro del sistema autónomo.
• Escala. La capacidad de ampliación de un algoritmo de enrutamiento y de sus estructuras de datos,
con el fin de gestionar el enrutamiento hacia/entre una gran cantidad de redes, es un problema crítico
en el enrutamiento entre sistemas autónomos. Dentro de un sistema autónomo, la escalabilidad es un
problema menor, aunque sólo sea porque si un ISP se hace demasiado grande, siempre es posible
dividirlo en dos sistemas autónomos y realizar el enrutamiento entre los dos nuevos sistemas. (Recuerde
que OSPF permite crear una jerarquía de ese estilo, dividiendo un sistema autónomo en áreas.)
• Rendimiento. Puesto que el enrutamiento entre sistemas autónomos está muy orientado a las políticas, la
calidad (por ejemplo, el rendimiento) de las rutas utilizadas suele ser una cuestión secundaria (es decir,
una ruta más larga o más costosa que satisfaga determinados criterios políticos puede perfectamente
tener preferencia sobre una ruta más corta, pero que no cumpla dichos criterios). De hecho, hemos visto
que entre sistemas autónomos no existe ni siquiera el concepto de coste asociado con las rutas (salvo
por el recuento de saltos entre sistemas autónomos). Sin embargo, dentro de un sistema autónomo tales
cuestiones políticas tienen una importancia menor, lo que permite al enrutamiento centrarse más en el
rendimiento que se puede alcanzar en una ruta.
son anunciadas las rutas BGP. En concreto, X operará como la red de un ISP de acceso si anuncia
(a sus vecinos B y C) que no tiene ninguna ruta a ningún otro destino excepto a ella misma. Es
decir, incluso aunque X pueda conocer una determinada ruta, por ejemplo XCY, para llegar a la red
Y, no anunciará este camino a B. Puesto que B no es consciente de que X dispone de un camino
hasta Y, B nunca reenviará tráfico destinado a Y (o a C) a través de X. Este sencillo ejemplo ilustra
cómo se puede utilizar una política selectiva de anuncio de rutas para implementar las relaciones de
enrutamiento cliente/proveedor.
A continuación, vamos a centrarnos en la red de un proveedor, por ejemplo, en el sistema
autónomo B. Suponga que B ha aprendido (de A) que A dispone de la ruta AW hacia W. B puede,
por tanto, incluir la ruta AW en su base de información de enrutamiento. Evidentemente, B también
quiere anunciar la ruta BAW a su cliente, X, para que X sepa que puede llegar a W a través de B.
Pero, ¿debería B anunciar la ruta BAW a C? Si lo hace, entonces C podría enviar tráfico a W por
la ruta BAW. Si A, B y C son proveedores troncales, entonces B podría pensar, con razón, que no
Descargado en: eybook s.co m 5.4 • ENRUTAMIENTO ENTRE LOS ISP: BGP 335
tendría que asumir la carga (¡y el coste!) de transportar el tráfico en tránsito entre A y C. B podría
pensar, con razón, que es el trabajo (¡y el coste!) de A y C asegurarse de que C puede enrutar hacia/
desde los clientes de A a través de una conexión directa entre A y C. Actualmente, no existe ningún
estándar oficial que gobierne cómo los ISP troncales deben llevar a cabo el enrutamiento entre ellos.
Sin embargo, una regla heurística seguida por los ISP comerciales es que cualquier tráfico que fluya
a través de la red troncal de un ISP tiene que tener su origen o su destino (o ambos) en una red que
sea un cliente de dicho ISP; si fuera de otro modo, ese tráfico estaría obteniendo un viaje gratis a
través de la red del ISP. Los acuerdos bilaterales individuales (que regulan cuestiones como las
mencionadas más arriba) normalmente son negociados entre parejas de proveedores ISP y suelen
ser confidenciales; [Huston 1999a] proporciona una interesante explicación acerca de esos acuerdos
bilaterales. Si desea ver una descripción detallada de cómo las políticas de enrutamiento reflejan
las relaciones comerciales entre los ISP, consulte [Gao 2001; Dmitiropoulos 2007]. Para ver una
descripción de las políticas de enrutamiento BGP desde el punto de vista de un ISP, consulte [Caesar
2005b].
Con esto completamos nuestra breve introducción a BGP. Es importante comprender BGP
porque juega un papel crucial en Internet. Le animamos a consultar las referencias [Griffin 2012;
Stewart 1999; Labovitz 1997; Halabi 2000; Huitema 1998; Gao 2001; Feamster 2004; Caesar 2005b;
Li 2007] para aprender más acerca de BGP.
Para que la gente pueda descubrir las direcciones IP de su servidor web, tendrá que incluir
entradas en su servidor DNS que establezcan la correspondencia entre el nombre de host de su
servidor web (por ejemplo, xanadu.com) y su dirección IP. También deberá tener entradas similares
para otros servidores de su empresa que estén públicamente disponibles, incluyendo su servidor de
correo. Con todo esto, si Alicia quiere acceder a su servidor web, el sistema DNS contactará con su
servidor DNS, averiguará la dirección IP de su servidor web y se la proporcionará a Alicia. Alicia
podrá entonces establecer una conexión TCP directamente con su servidor web.
Sin embargo, todavía queda otro paso necesario y crucial para permitir que usuarios de todo el
mundo accedan a su servidor web. Piense en lo que sucedería cuando Alicia, que conoce la dirección
IP de su servidor web, envíe un datagrama IP (por ejemplo, un segmento SYN TCP) a esa dirección
IP. Ese datagrama será enrutado a través de Internet, visitando una serie de routers en muchos
sistemas autónomos distintos, y terminará por llegar a su servidor web. Cuando cualquiera de los
routers reciba el datagrama, buscará en su tabla de reenvío una entrada que le permita determinar a
través de qué puerto de salida debe reenviar el datagrama. Por tanto, cada uno de los routers necesita
conocer la existencia del prefijo /24 de su empresa (o de alguna entrada agregada que lo incluya).
¿Cómo puede un router conocer el prefijo de su empresa? ¡Como acabamos de ver, lo consigue
gracias a BGP! Específicamente, cuando su empresa firma un contrato con un ISP local y se le
asigna un prefijo (es decir, un rango de direcciones), su ISP local usará BGP para anunciar su prefijo
a los ISP con los que esté conectado. Esos ISP usarán BGP, a su vez, para propagar el anuncio. Al
final, todos los routers de Internet conocerán su prefijo (o algún agregado que lo incluya) y serán
así capaces de reenviar apropiadamente los datagramas destinados a su servidor web y a su servidor
de correo.
• Separación del plano de datos y el plano de control. Esta separación se muestra claramente en las
Figuras 5.2 y 5.14. El plano de datos está compuesto por los conmutadores de la red: dispositivos
relativamente simples (pero rápidos) que ejecutan las reglas de “correspondencia más acción”
contenidas en sus tablas de flujo. El plano de control está compuesto por servidores y software
que determinan y gestionan las tablas de flujo de los conmutadores.
• Funciones de control de la red: externas a los conmutadores del plano de datos. Dado que la
“S” de SDN significa “software”, quizá no resulte sorprendente que el plano de control SDN esté
implementado en software. A diferencia de los routers tradicionales, sin embargo, este software
se ejecuta en servidores que son diferentes (y remotos) de los conmutadores de la red. Como se
muestra en la Figura 5.14, el propio plano de control consta de dos componentes: un controlador
SDN (o sistema operativo de red [Gude 2008]) y un conjunto de aplicaciones de control de red.
El controlador mantiene información precisa sobre el estado de la red (por ejemplo, el estado de
los hosts, conmutadores y enlaces remotos), proporciona esta información a las aplicaciones de
control de red que se ejecutan en el plano de control y proporciona los medios con los cuales
estas aplicaciones pueden monitorizar, programar y controlar los dispositivos de la red subyacente.
Aunque el controlador de la Figura 5.14 se muestra como un único servidor central, en la práctica
el controlador solo está centralizado desde el punto de vista lógico; normalmente se implementa
mediante varios servidores, que proporcionan unas prestaciones coordinadas y escalables, así como
una alta disponibilidad.
• Una red programable. La red se puede programar mediante las aplicaciones de control de red
que se ejecutan en el plano de control. Estas aplicaciones representan el “cerebro” del plano
de control SDN y utilizan las API proporcionadas por el controlador SDN con el fin de especi-
ficar y controlar el plano de datos en los dispositivos de la red. Por ejemplo, una aplicación de
control de red para enrutamiento podría determinar las rutas extremo a extremo entre orígenes y
destinos (por ejemplo, ejecutando el algoritmo de Dijkstra a partir de la información de estado
Control Equilibrador
Enrutamiento
de acceso de carga
Plano de API
control norte
Controlador SDN
(sistema operativo de red)
API
sur
Plano de
datos
de los nodos y de los enlaces mantenida por el controlador SDN). Otra aplicación de red podría
encargarse del control de acceso, es decir, de determinar qué paquetes hay que bloquear en
un conmutador, como en nuestro tercer ejemplo de la Sección 4.4.3. Otra aplicación diferente
podría reenviar los paquetes de forma que se consiga un equilibrio de carga entres servidores (el
segundo ejemplo que hemos considerado en la Sección 4.4.3).
Teniendo en cuenta todo esto, podemos ver que SDN representa un significativo “desem-
paquetamiento” de la funcionalidad de red: los conmutadores del plano de datos, los controladores
SDN y las aplicaciones de control de red son entidades separadas, que pueden ser suministradas por
diferentes proveedores y organizaciones. Esto contrasta con el modelo pre-SDN, en el que un router/
switch (junto con su software integrado del plano de control y sus implementaciones de protocolos)
era monolítico, estaba integrado verticalmente y era suministrado por un único fabricante. Este
desempaquetamiento de la funcionalidad de red en SDN ha sido comparado con la evolución, en
su día, desde las computadoras mainframe (en las que el hardware, el software del sistema y las
aplicaciones eran suministrados por un único fabricante) a las computadoras personales (con su
hardware, sistemas operativos y aplicaciones separados). El desempaquetamiento del hardware de la
computadora, del software del sistema y de las aplicaciones ha dado como resultado un ecosistema
abierto y rico, guiado por la innovación en esas tres áreas; la esperanza para SDN es que también
traiga consigo una rica y similar ola de innovación.
Dada nuestra comprensión de la arquitectura SDN de la Figura 5.14, surgen de manera natural
numerosas cuestiones. ¿Cómo y dónde se calculan en la práctica las tablas de flujo? ¿Cómo se
actualizan en los dispositivos controlados por SDN esas tablas, en respuesta a sucesos (por ejemplo,
un enlace conectado que se active/desactive)? ¿Y cómo se coordinan las entradas de las tablas de
flujo de múltiples conmutadores, de tal manera que resulte una funcionalidad de la red orquestada y
coherente (por ejemplo, rutas extremo a extremo de reenvío de paquetes desde los orígenes hasta los
destinos, o cortafuegos distribuidos coordinados)? Es tarea del plano de control SDN proporcionar
estas, y otras muchas, capacidades.
• Una capa de comunicaciones: comunicación entre el controlador SDN y los dispositivos de red
controlados. Obviamente, si un controlador SDN tiene que controlar el funcionamiento de un
conmutador, host u otro dispositivo remoto compatible con SDN, se necesita un protocolo para
transferir información entre el controlador y ese dispositivo. Además, un dispositivo debe ser
capaz de comunicar al controlador sucesos observados localmente (por ejemplo, un mensaje que
indique que un enlace conectado se ha activado o desactivado o que un dispositivo se acaba de
unir a la red, o un latido que indique que un dispositivo está activo y funcionando). Estos sucesos
proporcionan al controlador SDN una visión actualizada del estado de la red. Este protocolo
5.5 • EL PLANO DE CONTROL SDN 339
Control Equilibrador
Enrutamiento
de acceso de carga
API norte
Interfaz, abstracciones para las aplicaciones
de control de red
Grafo API
Intent
de red REST
Tablas
Estadísticas
de flujo Controlador SDN
Info de Info de Info de
estado de
enlaces hosts conmutad.
OpenFlow SNMP
API sur
constituye la capa inferior de la arquitectura del controlador, como se muestra en la Figura 5.15.
La comunicación entre el controlador y los dispositivos controlados cruza lo que se ha dado
en llamar la interfaz “sur” del controlador (southbound interface). En la Sección 5.5.2 estudia-
remos OpenFlow, un protocolo específico que proporciona esta funcionalidad de comuni-
caciones. OpenFlow está implementado en la mayoría de los controladores SDN, si no en todos.
• Una capa de gestión del estado de la red. Las decisiones últimas de control tomadas por el plano
de control SDN —por ejemplo, configurar tablas de flujo en todos los conmutadores para con-
seguir el reenvío extremo a extremo deseado, para implementar un equilibrado de carga o para
habilitar una determinada capacidad de cortafuegos —requiere que el controlador disponga de
información actualizada sobre el estado de los hosts, enlaces, conmutadores y otros dispositivos
controlados por SDN que haya en la red. La tabla de flujo de un conmutador contiene contadores
cuyos valores también pueden ser aprovechados por las aplicaciones de control de red; por tanto,
estos valores deberán estar disponibles para esas aplicaciones. Puesto que el fin último del plano
de control es determinar las tablas de flujo de los diversos dispositivos controlados, un controla-
dor puede también mantener una copia de dichas tablas. Todos estos elementos de información
constituyen ejemplos del “estado” de la red que el controlador SDN mantiene.
• La interfaz con la capa de aplicaciones de control de red. El controlador interactúa con las
aplicaciones de control de red a través de su interfaz “norte” (northbound interface). Esta API
permite a las aplicaciones de control de red leer/escribir el estado de la red y las tablas de flujo
340 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
dentro de la capa de gestión del estado. Las aplicaciones pueden registrarse para que se las
notifique cuando se produzcan sucesos de cambio de estado, con el fin de poder tomar acciones
en respuesta a las notificaciones de sucesos de red enviadas desde los dispositivos controlados
por SDN. Pueden proporcionarse diferentes tipos de APIs; como veremos más adelante, dos
controladores SDN muy populares se comunican con sus aplicaciones utilizando una interfaz
solicitud-respuesta tipo REST [Fielding 2000].
Ya hemos indicado, en diversas ocasiones, que se puede considerar que un controlador SDN está
“lógicamente centralizado”, es decir, que el controlador puede ser visto externamente (por ejemplo,
desde el punto de vista de los dispositivos controlados por SDN y de las aplicaciones externas de
control de red) como un único servicio monolítico. Sin embargo, estos servicios, y las bases de
datos utilizadas para almacenar la información de estado, se implementan en la práctica mediante
un conjunto distribuido de servidores, por razones de tolerancia ante fallos, de alta disponibilidad
o de prestaciones. Al estar las funciones controladoras implementadas mediante un conjunto de
servidores, hay que tomar en consideración la semántica de las operaciones internas del controlador
(por ejemplo, el mantenimiento de un orden temporal lógico de los sucesos, la coherencia, el consenso
y otros factores) [Panda 2013]. Esas preocupaciones son comunes en muchos sistemas distribuidos;
en [Lamport 1989, Lampson 1996] puede encontrar algunas soluciones elegantes a estos desafíos.
Los controladores modernos como OpenDaylight [OpenDaylight Lithium 2016] y ONOS [ONOS
2016] (véase el recuadro adjunto de En la práctica) han puesto un considerable énfasis en desarrollar
la arquitectura de una plataforma controladora lógicamente centralizada, pero físicamente distribuida,
que proporcione servicios escalables y alta disponibilidad, tanto a los dispositivos controlados como
a las aplicaciones de control de red.
La arquitectura mostrada en la Figura 5.15 se asemeja mucho a la del controlador NOX
originalmente propuesto en 2008 [Gude 2008], así como a la de los actuales controladores SDN
OpenDaylight [OpenDaylight Lithium 2016] y ONOS [ONOS 2016] (véase el recuadro adjunto
de En la práctica). Veremos un ejemplo de operación del controlador en la Sección 5.5.3. Pero
primero vamos a examinar el protocolo OpenFlow, que reside en la capa de comunicaciones del
controlador.
EN LA PRÁCTICA
RE D G LOBAL DEFI N I DA POR S OF TWAR E D E G O O G L E
Recuerde del caso de estudio de la Sección 2.6 que Google tiene implantada una red de área extensa
(WAN) dedicada, que interconecta sus centros de datos y sus clusters de servidores (en IXPs e ISPs). Esta
red, denominada B4, tiene un plano de control SDN diseñado por Google y construido sobre OpenFlow.
La red de Google es capaz de conseguir una utilización promedio de sus enlaces WAN del 70% (entre
dos y tres veces superior a la tasa de utilización típica de los enlaces) y de dividir los flujos de aplicación
entre múltiples rutas, basándose en la prioridad de las aplicaciones y en las demandas de flujo existentes
[Jain 2013].
La red B4 de Google está particularmente bien adaptada a SDN: (i) Google controla todos los disposi-
tivos, desde los servidores de frontera situados en IXPs e ISPs, hasta los routers que forman el núcleo de su
red; (ii) las aplicaciones que más ancho de banda requieren son copias de datos a gran escala entre sitios,
que pueden ceder la preferencia a las aplicaciones interactivas de mayor prioridad durante los periodos de
congestión de recursos; (iii) al haber solo unas pocas docenas de centros de datos conectados, el control
centralizado resulta factible.
La red B4 de Google utiliza conmutadores hechos a medida, cada uno de los cuales implementa una
versión ligeramente ampliada de OpenFlow, con un agente local OpenFlow (OFA, OpenFlow Agent) que
es similar en espíritu al agente de control que nos encontramos en la Figura 5.2. Cada OFA se conecta, a
su vez, con un controlador OpenFlow (OFC, OpenFlow Controller) que reside en el servidor de control de
la red (NCS, Network Control Server) a través de una red separada “fuera de banda”, distinta de la red
que transporta el tráfico entre centros de datos. El OFC proporciona, por tanto, los servicios utilizados por
el NCS para comunicarse con los conmutadores que controla, de forma similar en espíritu a la capa inferior
de la arquitectura SDN mostrada en la Figura 5.15. En B4, el OFC también realiza funciones de gestión de
estado, manteniendo el estado de los nodos y enlaces en una base de información de red (NIB, Network
Information Base). La implementación del OFC realizada por Google está basada en el controlador SDN
ONIX [Koponen 2010]. Están implementados dos protocolos de enrutamiento: BGP para el enrutamiento
entre centros de datos e IS-IS (un pariente cercano de OSPF) para el enrutamiento en el interior de un centro
de datos. Se utiliza Paxos [Chandra 2007] para ejecutar réplicas en caliente de los componentes del NCS,
con el fin de protegerse frente a posibles fallos.
Una aplicación de control de red especializada en ingeniería de tráfico (que descansa desde un punto
de vista lógico sobre el conjunto de servidores de red) interactúa con estos servidores para proporcionar a
los grupos de flujos de aplicación asignaciones globales de ancho de banda, que afectan a toda la red.
Gracias a B4, SDN dio un importante salto adelante, adentrándose en las redes operacionales de un pro-
veedor de red global. En [Jain 2013] puede encontrar una descripción detallada de B4.
• Flujo eliminado (flow-removed). Este mensaje informa al controlador de que se ha eliminado una
entrada de una tabla de flujo, por ejemplo debido a un fin de temporización o como resultado de
un mensaje modify-state recibido.
• Estado de puerto (port-status). El conmutador usa este mensaje para informar al controlador de
un cambio en el estado de un puerto.
• Paquete entrante (packet-in). Recuerde de la Sección 4.4 que los paquetes que llegan a un puerto
del conmutador y que no se corresponden con ninguna entrada de la tabla de flujo se envían
al controlador para su procesamiento adicional. Los paquetes para los que sí exista correspon-
dencia también pueden ser enviados al controlador, como una de las posibles acciones que se
ejecutan al detectarse la correspondencia. El mensaje packet-in se emplea para enviar tales
paquetes al controlador.
En [OpenFlow 2009, ONF 2016] se definen mensajes OpenFlow adicionales.
342 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
• El algoritmo de Dijkstra se ejecuta como una aplicación separada, fuera de los conmutadores de
paquetes.
• Los conmutadores de paquetes envían las actualizaciones de estado de los enlaces al controlador
SDN, en vez de intercambiárselas unos con otros.
Enrutamiento de Dijkstra
basado en el estado
de los enlaces
4 5
Grafo API
Intent
de red REST
3
Tablas
Estadíst.
de flujo
2 OpenFlow SNMP
1 6
s2
s1
s4
s3
2. El controlador SDN recibe el mensaje OpenFlow que indica el cambio en el estado del enlace
y envía una notificación al gestor del estado de los enlaces, que actualiza una base de datos de
estado de los enlaces.
3. La aplicación de control de red que implementa el enrutamiento de Dijkstra basado en el estado
de los enlaces, se había registrado previamente para ser notificada cuando hubiera cambios en
el estado de los enlaces. Esa aplicación recibe la notificación del cambio en el estado del enlace.
4. La aplicación de enrutamiento basada en el estado de los enlaces interactúa con el gestor de
estado de los enlaces para obtener información actualizada del estado de los enlaces; también
puede consultar otros componentes de la capa de gestión del estado. Después calcula las nuevas
rutas de coste mínimo.
5. La aplicación de enrutamiento basada en el estado de los enlaces interactúa entonces con el
gestor de tablas de flujo, que determina las tablas de flujo que hay que actualizar.
6. El gestor de tablas de flujo utiliza entonces el protocolo OpenFlow para actualizar las entradas
de las tablas de flujo de los conmutadores afectados: s1 (que ahora enrutará a través de s4
los paquetes destinados a s2), s2 (que ahora comenzará a recibir paquetes de s1 a través del
conmutador intermedio s4) y s4 (que ahora debe reenviar los paquetes de s1 destinados a s2).
Este ejemplo es sencillo, pero ilustra cómo el plano de control SDN proporciona servicios del
plano de control (en este caso, enrutamiento de la capa de red) que previamente se habían venido
implementando mediante un control por router, ejercido en todos y cada uno de los routers de la
red. Ahora podemos ver fácilmente cómo un ISP que utilice SDN podría pasar fácilmente de utilizar
rutas de mínimo coste, a emplear una técnica de enrutamiento más especializada. De hecho, puesto
que el controlador puede ajustar las tablas de flujo como desee, puede implementar cualquier forma
de reenvío que quiera, simplemente cambiando su software de aplicación de control. Compare esta
facilidad de modificación con el caso de un plano de control tradicional, con control por router, en
el que habría que cambiar el software de todos los routers (que podrían haber sido suministrados al
ISP por múltiples fabricantes independientes).
importante trata de ampliar los conceptos de SDN desde el entorno interno a un sistema autónomo
al entorno de operación entre sistemas autónomos [Gupta 2014].
EN LA PRÁCTICA
CAS OS DE ES T UDI O D E CO N TR O L AD O R ES S D N : L O S CO N TRO L AD O RE S
OPEN DAY LI GHT Y O N O S
En los primeros días de SDN había un único protocolo SDN (OpenFlow [McKeown 2008; OpenFlow 2009])
y un único controlador SDN (NOX [Gude 2008]). Desde entonces, el número de controladores SDN ha
crecido significativamente [Kreutz 2015]. Algunos controladores SDN son propietarios y específicos de una
empresa, como por ejemplo ONIX [Koponen 2010], Contrail, de Juniper Networks [Juniper Contrail 2016] y
el controlador de Google [Jain 2013] para su red de área extensa B4. Pero hay muchos más controladores
que son de código abierto, implementados en diversos lenguajes de programación [Erickson 2013]. Más
recientemente, el controlador OpenDaylight [OpenDaylight Lithium 2016] y el controlador ONOS [ONOS
2016] han recibido un considerable apoyo del sector. Ambos son de código abierto y están siendo desarro-
llados en colaboración con la Linux Foundation.
• Protocolos y abstracciones norte. Una característica original de ONOS es su infraestructura Intent, que
permite a una aplicación solicitar un servicio de alto nivel (por ejemplo, establecer una conexión entre
el host A y el host B o, a la inversa, no permitir que el host A y el host B se comuniquen) sin necesidad
de conocer los detalles de cómo se implementa dicho servicio. La información de estado se proporciona
a las aplicaciones de control de red a través de la API norte, bien síncronamente (mediante consultas) o
5.5 • EL PLANO DE CONTROL SDN 345
Ingeniería Aplicaciones de
de tráfico servicio de red
API REST
Aplicaciones de
control de red
Protocolos y
abstracciones API REST Intent
norte
Reglas
Hosts Rutas
Núcleo de flujo
distribuido Topología
ONOS
Dispositivos Enlaces Estadísticas
asíncronamente (a través de retrollamadas a procesos escucha, por ejemplo cuando cambia el estado
de la red).
• Núcleo distribuido. El estado de los enlaces, hosts y dispositivos de la red se mantiene en el núcleo
distribuido de ONOS. ONOS se implanta como un servicio en un conjunto de servidores interconec-
tados, ejecutándose en cada servidor una copia idéntica del software ONOS; a mayor número de
servidores, mayor capacidad de servicio. El núcleo de ONOS proporciona los mecanismos de repli-
cación y coordinación del servicio entre instancias, proporcionando a las aplicaciones situadas por
encima y a los dispositivos de red situados por debajo la abstracción de unos servicios del núcleo
lógicamente centralizados.
• Protocolos y abstracciones sur. Las abstracciones sur enmascaran la heterogeneidad de los hosts,
enlaces, conmutadores y protocolos subyacentes, permitiendo que el núcleo distribuido sea indepen-
diente de los dispositivos y de los protocolos. Debido a esta abstracción, la interfaz sur situada por
debajo del núcleo distribuido está a un nivel lógico superior que en nuestro controlador canónico de la
Figura 5.15 o en el controlador ODL de la Figura 5.17.
En el Capítulo 1 hemos introducido el programa Traceroute, el cual nos permite trazar una ruta
desde un host a cualquier otro host del mundo. Merece la pena resaltar que Traceroute se implementa
con mensajes ICMP. Para determinar los nombres y las direcciones de los routers existentes entre el
origen y el destino, el programa Traceroute del origen envía una serie de datagramas IP ordinarios al
destino. Cada uno de estos datagramas transporta un segmento UDP con un número de puerto UDP
poco probable. El primero de estos datagramas tiene un TTL de 1, el segundo de 2, el tercero de 3, y
así sucesivamente. El origen también inicia sendos temporizadores para cada uno de los datagramas.
Cuando el datagrama n-ésimo llega al router n-ésimo, este observa que el TTL del datagrama acaba
de caducar. De acuerdo con las reglas del protocolo IP, el router descarta el datagrama y envía al
origen un mensaje de advertencia ICMP (tipo 11, código 0). Este mensaje de advertencia incluye
el nombre del router y su dirección IP. Cuando este mensaje ICMP llega de vuelta al origen, este
obtiene el tiempo de ida y vuelta del temporizador, y obtiene también del propio mensaje ICMP el
nombre y la dirección IP del router n-ésimo.
¿Cómo sabe un origen Traceroute cuándo dejar de enviar segmentos UDP? Recuerde que el
origen incrementa el valor del campo TTL cada vez que envía un datagrama. Por tanto, uno de
los datagramas terminará recorriendo el camino completo hasta el host de destino. Dado que ese
datagrama contiene un segmento UDP con un número de puerto improbable, el host de destino
devuelve al origen un mensaje ICMP de puerto inalcanzable (tipo 3, código 3). Cuando el host de
origen recibe este mensaje ICMP, sabe que no tiene que enviar más paquetes de sondeo. (Realmente,
el programa estándar Traceroute envía conjuntos de tres paquetes con el mismo TTL; es por ello que
la salida de Traceroute proporciona tres resultados para cada TTL.)
De esta forma, el host de origen obtiene el número y la identidad de los routers que existen entre
él y el host de destino, así como el tiempo de ida y vuelta entre los dos hosts. Observe que el programa
cliente Traceroute tiene que poder instruir al sistema operativo para generar datagramas UDP con
valores TTL específicos, y que el sistema operativo también tiene que ser capaz de notificarle la
llegada de mensajes ICMP. Ahora que comprende cómo funciona Traceroute, puede volver atrás y
practicar con él un poco más.
348 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
En RFC 4443 se ha definido una nueva versión de ICMP para IPv6. Además de reorganizar las
definiciones existentes de tipos y códigos ICMP, ICMPv6 también añade nuevos tipos y códigos,
requeridos por la nueva funcionalidad IPv6. Entre estos se incluyen el tipo “Packet too big”
(paquete demasiado grande) y un código de error “unrecognized IPv6 options” (opciones IPv6 no
reconocidas).
Dada esta amplia definición, vamos a cubrir en esta sección únicamente los rudimentos de la
gestión de red: la arquitectura, los protocolos y la base de información que un administrador de
red utiliza para llevar a cabo su tarea. No hablaremos de los procesos de toma de decisiones
de los administradores, en los que hay que tener en cuenta la identificación de fallos [Labovitz
1997; Steinder 2002; Feamster 2005; Wu 2005; Teixeira 2006], la detección de anomalías [Lakhina
2005; Barford 2009], el diseño/ingeniería de la red para satisfacer los acuerdos de nivel de servicio
(SLA, Service Level Agreement) contratados [Huston 1999a] y otros temas. Nuestro enfoque será,
por tanto, deliberadamente reducido; el lector interesado puede consultar las referencias indicadas,
el excelente libro de gestión de red de Subramanian [Subramanian 2000] y el tratamiento más deta-
llado de la gestión de red disponible en el sitio web del presente libro.
Dispositivo
gestionado
Servidor de gestión
Dispositivo
Dispositivo
gestionado
gestionado
Clave:
Protocolo
SNMP
a cabo acciones locales en el dispositivo gestionado bajo control y por orden del servidor de
gestión. El agente de gestión de red es similar al agente de enrutamiento que vimos en la
Figura 5.2.
• El último componente del marco conceptual de la gestión de red es el protocolo de gestión de
red. El protocolo se ejecuta entre el servidor de gestión y los dispositivos gestionados, permi-
tiendo al servidor consultar el estado de los dispositivos gestionados y llevar a cabo acciones
de manera indirecta en estos dispositivos a través de sus agentes. Los agentes pueden utilizar el
protocolo de gestión de red para informar al servidor de gestión de que se han producido sucesos
excepcionales (por ejemplo, fallos de componentes o violación de los umbrales de rendimiento).
Es importante recalcar que el protocolo de gestión de red no se encarga él mismo de administrar
la red; simplemente proporciona una serie de capacidades que un administrador puede utilizar
para gestionar (“monitorizar, probar, sondear, configurar, analizar, evaluar y controlar”) la red.
Se trata de una distinción sutil, pero de gran importancia. En la siguiente sección hablaremos del
protocolo SNMP (Simple Network Management Protocol, protocolo simple de gestión de red) de
Internet.
GetRequest gestor a agente Obtener el valor de una o más instancias de objeto MIB.
GetNextRequest gestor a agente Obtener el valor de la siguiente instancia de objeto MIB en una lista o
tabla.
GetBulkRequest gestor a agente Obtener valores en un bloque grande de datos, por ejemplo, en una
tabla de gran tamaño.
InformRequest gestor a gestor Informar a la entidad gestora remota de valores MIB remotos a su
acceso.
SetRequest gestor a agente Establecer el valor de una o más instancias de objeto MIB.
Response agente a gestor o Generado en respuesta a:
gestor a gestor GetRequest,
GetNextRequest,
GetBulkRequest,
SetRequest PDU, o
InformRequest
SNMPv2-Trap agente a gestor Informar al gestor del número de un suceso excepcional.
• El último tipo de PDU de SNMPv2 es el mensaje TRAP. Los mensajes TRAP son generados
asíncronamente; es decir, no son generados en respuesta a una solicitud recibida, sino en respues-
ta a un suceso para el que el servidor de gestión requiere una notificación. El documento RFC
3418 define tipos de mensajes TRAP bien conocidos, como el arranque en frío o caliente de un
dispositivo, la activación o desactivación de un enlace, la pérdida de un vecino o un suceso de
fallo de autenticación. Una solicitud TRAP recibida no requiere ninguna respuesta por parte del
servidor de gestión.
Dada la naturaleza solicitud-respuesta de SNMP, es conveniente señalar aquí que, aunque las PDU
SNMP pueden ser transportadas por medio de muchos protocolos de transporte distintos, normal-
mente son transportadas en la carga útil de un datagrama UDP. De hecho, el documento RFC 3417
Tipo Estado
PDU ID de de error Índice Nombre Valor Nombre Valor
(0–3) solicitud (0–5) de error
Tipo Tipo
PDU Direcc. Trap Código Marca de Nombre
Empresa Valor
(4) agente (0–7) específico tiempo
PDU SNMP
establece que UDP es “la correspondencia de transporte preferida”. Sin embargo, dado que UDP es
un protocolo de transporte no fiable, no existe ninguna garantía de que una solicitud, o su respuesta,
sea recibida por el destino. El servidor de gestión utiliza el campo ID de solicitud de la PDU (véase
la Figura 5.21) para numerar las solicitudes que envía a un agente; la respuesta del agente toma su
ID de solicitud de la solicitud recibida. Por tanto, el campo ID de solicitud puede ser utilizado por
el servidor de gestión para detectar las solicitudes y respuestas perdidas. Dependerá del servidor de
gestión decidir si retransmite una solicitud si no ha recibido la respuesta correspondiente transcu-
rrido un cierto periodo de tiempo. En particular, el estándar SNMP no obliga a aplicar ningún proce-
dimiento en concreto para las retransmisiones y ni siquiera indica si la retransmisión debe llevarse a
cabo. Solo obliga a que el servidor de gestión “actúe de forma responsable respecto a la frecuencia
y duración de las retransmisiones”. ¡Por supuesto, esto lleva a preguntarse cómo debe actuar un
protocolo “responsable”!
SNMP ha evolucionado en tres versiones. Los diseñadores de SNMPv3 han señalado que
“SNMPv3 puede interpretarse como SNMPv2 con una serie de capacidades adicionales de seguridad
y administración” [RFC 3410]. Realmente, existen cambios en SNMPv3 respecto de SNMPv2, pero
en ninguna parte son más evidentes estos cambios que en el área de la administración y la seguridad.
El papel central de la seguridad en SNMPv3 era particularmente importante, ya que la falta de
una adecuada seguridad hizo que SNMP se usara principalmente para monitorizar, más que para
cuestiones de control (por ejemplo, rara vez se emplea SetRequest en SNMPv1). De nuevo, vemos
que la seguridad —un tema del que trataremos en el Capítulo 8— es un problema crítico, pero un
problema cuya importancia, de nuevo, solo se ha reconocido un poco tarde, habiéndose “añadido”
entonces las soluciones.
5.8 Resumen
Ya hemos completado estos dos capítulos dedicados al estudio del núcleo de la red: un estudio que
comenzó con el análisis del plano de datos de la capa de red en el Capítulo 4 y que ha finalizado
aquí, con el repaso al plano de control de dicha capa. Hemos visto que el plano de control es la
lógica de red que controla no solo cómo se reenvía un datagrama entre routers, a lo largo de una
ruta extremo a extremo que va desde el host de origen hasta el host de destino, sino también cómo
se configuran y gestionan los componentes y servicios de la capa de red.
Hemos visto que hay dos enfoques generales para construir un plano de control: el control por
router tradicional (en el que se ejecuta un algoritmo de enrutamiento en todos y cada uno de los
routers y el componente de enrutamiento del router se comunica con sus homólogos de otros routers)
y el control mediante redes definidas por software (SDN), en el que un controlador lógicamente
centralizado calcula y distribuye las tablas de reenvío que deben utilizar todos y cada uno de los
routers. Hemos estudiado dos algoritmos fundamentales de enrutamiento para calcular las rutas de
menor coste en un grafo —el enrutamiento por estado de los enlaces y el enrutamiento de vectores
de distancia— en la Sección 5.2; estos algoritmos encuentran su aplicación tanto en el control por
router como en el control SDN. Dichos algoritmos son la base de dos protocolos de enrutamiento
muy difundidos en Internet, OSPF y BGP, de los que hemos hablado en las secciones 5.3 y 5.4. En
la Sección 5.5 hemos analizado el enfoque SDN de implementación del plano de control de la capa
de red, investigando las aplicaciones de control de red SDN, el controlador SDN y el protocolo
OpenFlow para la comunicación entre el controlador y los dispositivos controlados por SDN. En las
secciones 5.6 y 5.7 hemos repasado algunas de las interioridades de la gestión de una red IP: ICMP
(el protocolo de mensajes de control de Internet) y SNMP (el protocolo simple de gestión de red).
Habiendo completado nuestro estudio de la capa de red, vamos a descender un escalón más por
la pila de protocolos, concretamente hasta la capa de enlace. Al igual que la capa de red, la capa de
enlace también forma parte de todos y cada uno de los dispositivos conectados a la red. Pero en el
siguiente capítulo veremos que la capa de enlace tiene la tarea mucho más localizada de transferir
PROBLEMAS Y CUESTIONES DE REPASO 353
los paquetes entre nodos situados en un mismo enlace o LAN. Aunque esta tarea puede parecer en
principio trivial, comparada con las tareas que desempeña la capa de red, veremos que la capa de
enlace implica una serie de cuestiones importantes y fascinantes, que nos mantendrán ocupados
durante bastante tiempo.
SECCIÓN 5.2
R3. Indique las similitudes y diferencias entre los algoritmos de enrutamiento centralizados y
distribuidos. Proporcione un ejemplo de protocolo de enrutamiento que adopte un enfoque
centralizado y otro descentralizado.
R4. Indique las similitudes y diferencias entre los algoritmos de enrutamiento de estado de los
enlaces y por vector de distancias.
R5. ¿Qué es el problema de la “cuenta hasta infinito” en el enrutamiento por vector de distancias?
R6. ¿Es necesario que todos los sistemas autónomos utilicen el mismo algoritmo de enrutamiento
interno? ¿Por qué o por qué no?
SECCIONES 5.3–5.4
R7. ¿Por qué se utilizan diferentes protocolos de enrutamiento internos de un sistema autónomo y
entre sistemas autónomos en Internet?
R8. Verdadero o falso: cuando un router OSPF envía su información de estado de los enlaces, solo
la envía a los vecinos directamente conectados. Explique su respuesta.
R9. ¿A qué se llama área en un sistema autónomo OSPF? ¿Por qué se introdujo el concepto de
área?
R10. Defina los siguientes términos e indique en qué se diferencian: subred, prefijo y ruta BGP.
R11. ¿Cómo utiliza BGP el atributo NEXT-HOP? ¿Cómo utiliza el atributo AS-PATH?
R12. Describa cómo un administrador de red de un ISP de nivel superior puede implementar ciertas
políticas al configurar BGP.
R13. Verdadero o falso: cuando un router BGP recibe un ruta anunciada por su vecino, debe añadir
su propia identidad a la ruta recibida y luego enviar esa nueva ruta a todos sus vecinos. Expli-
que su respuesta.
SECCIÓN 5.5
R14. Describa el papel principal de la capa de comunicaciones, de la capa de gestión del estado de
la red y de la capa de aplicaciones de control de red en un controlador SDN.
R15. Suponga que quiere implementar un nuevo protocolo de enrutamiento en el plano de control
SDN. ¿En qué capa implementaría ese protocolo? Explique su respuesta.
354 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
R16. ¿Qué tipos de mensajes fluyen a través de las API norte y sur de un controlador SDN? ¿Quién
es el receptor de los mensajes que el controlador envía a través de la interfaz sur y quién envía
mensajes al controlador a través de la interfaz norte?
R17. Describa el propósito de dos tipos de mensajes OpenFlow (a su elección) enviados desde
un dispositivo controlado al controlador. Describa el propósito de dos tipos de mensajes
OpenFlow (a su elección) enviados desde el controlador a un dispositivo controlado.
R18. ¿Cuál es el propósito de la capa de abstracción de servicios en el controlador SDN Open-
Daylight?
SECCIONES 5.6–5.7
R19. Enumere cuatro tipos distintos de mensajes ICMP.
R20. ¿Qué dos tipos de mensajes ICMP se reciben en el host emisor que está ejecutando el pro-
grama Traceroute?
R21. Defina los siguientes términos en el contexto de SNMP: servidor de gestión, dispositivo
gestionado, agente de gestión de red y MIB.
R22. ¿Cuál es el objetivo de los mensajes SNMP GetRequest y SetRequest?
R23. ¿Cuál es el objetivo del mensaje SNMP Trap?
Problemas
P1. En la Figura 5.3, enumere las rutas desde y hasta u que no contienen bucles.
P2. Repita el Problema P1 para las rutas de x a z, de z a u y de z a w.
P3. Considere la siguiente red. Utilizando los costes de enlace indicados, aplique el algoritmo de
la ruta más corta de Dijkstra para calcular la ruta más corta desde x a todos los restantes nodos
Nota de vídeo
de red. Indique cómo funciona el algoritmo elaborando una tabla similar a la Tabla 5.1.
Algoritmo de Dijkstra:
explicación y ejemplo
z
12
8
7
y t
6 8 4
v 2
3
x 3
4
6 u
3
w
P4. Considere la red mostrada en el Problema P3. Utilizando el algoritmo de Dijkstra y una tabla
similar a la Tabla 5.1, haga lo siguiente:
a. Calcule la ruta más corta desde t a todos los demás nodos de la red.
b. Calcule la ruta más corta desde u a todos los demás nodos de la red.
c. Calcule la ruta más corta desde v a todos los demás nodos de la red.
d. Calcule la ruta más corta desde w a todos los demás nodos de la red.
e. Calcule la ruta más corta desde y a todos los demás nodos de la red.
f. Calcule la ruta más corta desde z a todos los demás nodos de la red.
PROBLEMAS 355
P5. Utilice la red que se muestra a continuación y suponga que cada nodo inicialmente conoce los
costes hasta cada uno de sus vecinos. Utilizando el algoritmo de vector de distancias, especi-
fique las entradas de la tabla de distancias para el nodo z.
1
u v
6
2 3
z
y 3 x
P6. Considere una topología general (es decir, no la red concreta mostrada más arriba) y una
versión síncrona del algoritmo de vector de distancias. Suponga que en cada iteración un
nodo intercambia sus vectores distancia con sus vecinos y recibe los vectores distancia de
ellos. Suponiendo que el algoritmo se inicia con cada nodo conociendo solo los costes de
sus vecinos inmediatos, ¿cuál es el número máximo de iteraciones requerido antes de que el
algoritmo distribuido converja? Justifique su respuesta.
P7. Considere el fragmento de red mostrado a continuación. x solo tiene dos vecinos conectados,
w e y. w tiene una ruta de coste mínimo al destino u (no mostrado) de 5 e y tiene una ruta de
coste mínimo a u de 6. Las rutas completas desde w e y a u (y entre w e y) no se muestran.
Todos los costes de enlace de la red tienen valores enteros estrictamente positivos.
w
2 2
x 5
y
4b
4c 4a
x
3c AS4
2c
3a
3b 2a
1c 2b
1b
AS3 1a
AS2
1d
I1 I2
AS1
P15. Continuando con el problema anterior, una vez que el router 1d aprende acerca de x incluirá
una entrada (x, I) en su tabla de reenvío.
a. Para esta entrada, ¿I será igual a I1 o a I2? Explique por qué en una frase.
b. Ahora suponga que existe un enlace físico entre AS2 y AS4 (mostrado mediante una línea
de puntos en la figura). Suponga que el router 1d aprende que x es accesible a través de
AS2 y de AS3. ¿I será igual a I1 o a I2? Explique por qué en una frase.
c. Ahora suponga que existe otro sistema autónomo AS5, que conecta la ruta entre AS2 y
AS4 (no se muestra en el diagrama). Suponga que el router 1d aprende que x es accesible a
través de AS2 AS5 AS4, así como de AS3 AS4. ¿I será igual a I1 o a I2? Explique por qué
en una frase.
PROBLEMAS 357
P16. Considere la red mostrada a continuación. El ISP B proporciona un servicio troncal nacio-
nal al ISP A regional. El ISP C ofrece un servicio troncal nacional al ISP D regional. Cada
ISP consta de un sistema autónomo. Los pares B y C se comunican entre sí por dos puntos
utilizando BGP. Considere el tráfico que va de A a D. B preferiría manipular dicho trá-
fico hacia C por el enlace de la Costa Oeste (de modo que C tendría que absorber el coste
de transportar el tráfico a través del país), mientras que C preferiría obtener ese tráfico a
través del enlace con B de la Costa Este, en cuyo caso B tendría que transportar el tráfico
a través del país. ¿Qué mecanismo BGP podría utilizar C para que B llevara el tráfico de
A-a-D al punto de contacto de la Costa Este? Para responder a esta pregunta, tendrá que
ahondar en la especificación de BGP.
ISP A
ISP B
ISP C
ISP D
P17. En la Figura 5.13, considere la información de rutas que llega a las redes terminales (stub)
W, X e Y. Basándose en la información disponible en W y X, ¿cuáles son sus respectivas
imágenes de la topología de la red? Justifique su respuesta. La imagen de la topología en Y se
muestra a continuación.
X
W A
Imagen de la
C topología en la
red terminal Y
P18. Considere la Figura 5.13. B nunca reenviaría tráfico destinado a Y a través de X basándose en
el enrutamiento BGP. Pero existen algunas aplicaciones muy populares en las que los paquetes
de datos se dirigen primero a X y luego fluyen hacia Y. Identifique una de tales aplicaciones y
describa cómo los paquetes de datos siguen una ruta que no ha sido determinada por el enru-
tamiento BGP.
P19. En la Figura 5.13, suponga que existe otra red terminal V que es un cliente del ISP A. Suponga
que B y C tienen una relación de pares y que A es cliente tanto de B como de C. Suponga
también que A preferiría que el tráfico destinado a W procediera solo de B, y que el tráfico
destinado a V procediera de B o de C. ¿Cómo podría anunciar A sus rutas a B y C? ¿Qué rutas
del sistema autónomo recibe C?
P20. Suponga que los sistemas autónomos X y Z no están directamente conectados sino que se
conectan a través del sistema autónomo Y. Suponga también que X tiene un acuerdo de
comunicación entre pares con Y, y que Y tiene un acuerdo similar con Z. Por último, suponga
358 CAPÍTULO 5 • LA CAPA DE RED: EL PLANO DE CONTROL
que Z desea transferir todo el tráfico de Y pero no el de X. ¿Permite BGP implementar esta
política a Z?
P21. Considere las dos formas en que tiene lugar la comunicación entre una entidad gestora y un
dispositivo gestionado: el modo solicitud-respuesta y TRAP. ¿Cuáles son las ventajas y los
inconvenientes de estos dos métodos, en términos de (1) costes, (2) tiempo de notificación
cuando se producen sucesos excepcionales y (3) robustez con respecto a los mensajes perdi-
dos entre la entidad gestora y el dispositivo?
P22. En la Sección 5.7 hemos visto que era preferible transportar mensajes SNMP en datagramas
UDP no fiables. ¿Por qué cree que los diseñadores de SNMP eligieron UDP en lugar de TCP
como protocolo de transporte para SNMP?
Tarea de programación
En esta tarea de programación tendrá que escribir un conjunto “distribuido” de procedimientos
que implemente un enrutamiento asíncrono distribuido por vector de distancias para la red que se
muestra más abajo.
Tendrá que escribir las siguientes rutinas que se “ejecutarán” de forma asíncrona dentro del
entorno emulado proporcionado para esta tarea. Para el nodo 0, escribirá las rutinas siguientes:
1
0 1
7 1
3
3 2
2
• rtinit0(). Se llamará a esta rutina una vez al principio de la emulación. rtinit0() no tiene
argumentos. Debe inicializar su tabla de distancias en el nodo 0 para reflejar los costes directos
PROBLEMAS 359
Para los nodos 1, 2 y 3 se definen rutinas similares. Por tanto, tendrá que escribir ocho procedi-
mientos en total: rtinit0(), rtinit1(), rtinit2(), rtinit3(), rtupdate0(), rtupdate1(), rtupdate2() y
rtupdate3(). Estas rutinas implementarán conjuntamente un cálculo asíncrono y distribuido de las
tablas de distancias para la topología y los costes mostrados en la figura anterior.
Puede encontrar todos los detalles acerca de esta tarea de programación, así como el código
C que tendrá que crear en el entorno hardware/software simulado en http://www.pearsonhighered.
com/cs-resource. También hay disponible una versión Java de la tarea.
Jennifer Rexford
Jennifer Rexford es profesora en el departamento de Ciencias de
la Computación de la Universidad de Princeton. Sus investigacio-
nes se centran en conseguir que las redes de computadoras sean
más fáciles de diseñar y gestionar, con un énfasis especial en
los protocolos de enrutamiento. Entre 1996 y 2004 formó parte
del departamento de Rendimiento y Gestión de Red de AT&T
Labs–Research. Mientras trabajaba en AT&T diseñó técnicas y
herramientas para la realización de medidas de red, ingeniería
de tráfico y configuración de routers, que fueron implantadas
en la red troncal de AT&T. Jennifer es coautora del libro “Web
Protocols and Practice: Networking Protocols, Caching, and Traffic
Measurement,” publicado por Addison-Wesley en mayo de 2001.
Ha sido la moderadora de ACM SIGCOMM entre 2003 y 2007.
Se graduó en Ingeniería Eléctrica en la Universidad de Princeton
en 1991, doctorándose en Ingeniería Eléctrica y Ciencias de la
Computación en la Universidad de Michigan en1996. En 2004,
Jennifer fue galardonada con el premio Grace Murray Hopper de
la ACM por su excelencia como joven profesional en el campo de
las Ciencias de la Computación y fue incluida en la lista TR-100
del MIT de principales innovadores de menos de 35 años.
¿Podría describirnos uno o dos de los proyectos más excitantes en los que haya trabajado
durante su carrera? ¿Cuáles fueron los principales desafíos de diseño?
Cuando trabajaba como investigadora en AT&T, varios de nosotros diseñamos una nueva forma de gestionar
el enrutamiento en las redes troncales de los ISP. Tradicionalmente, los operadores de red configuran cada
router individualmente, y estos routers ejecutan protocolos distribuidos para calcular las rutas a través de la red.
Estábamos convencidos de que la gestión de red sería más simple y flexible si los operadores de red pudieran
ejercer un control directo sobre el modo en que los routers reenvían el tráfico, basándose en una visión global
de la topología y el tráfico de toda la red. La plataforma de control de enrutamiento RCP (Routing Control
Platform) que diseñamos y construimos podía calcular las rutas para toda la red troncal de AT&T usando
una única computadora barata y permitía controlar los routers heredados sin necesidad de modificaciones.
Para mi, este proyecto fue muy excitante, porque tuvimos una idea provocadora, desarrollamos un sistema
funcional y, al final, realizamos una implantación real en una red que estaba en operación. Si saltamos adelante
unos cuantos años, vemos que las redes definidas por software (SDN) se han convertido en una tecnología
dominante, y existen protocolos estándar (como OpenFlow) que facilitan mucho la tarea de decir a los
conmutadores subyacentes qué tienen que hacer.
¿Cómo cree que deberían evolucionar en el futuro las redes definidas por software?
En una ruptura radical con respecto al pasado, el software del plano de control puede ser creado por muchos
programadores diferentes, no solo por las empresas que desarrollan equipos de red. Sin embargo, a diferencia
de las aplicaciones que se ejecutan en un servidor o en un teléfono inteligente, esas aplicaciones controladoras
deben trabajar juntas para gestionar el mismo tráfico. Los operadores de red no desean realizar un equilibrado
de carga con una parte del tráfico y un enrutamiento con otra parte del tráfico, sino que quieren realizar tanto
360 el equilibrado de carga como el enrutamiento de un mismo tráfico. Las futuras plataformas controladoras
SDN deberían ofrecer buenas abstracciones de programación para componer múltiples aplicaciones controladoras
escritas independientemente, de forma que trabajen juntas. Hablando en términos más generales, las buenas
abstracciones de programación pueden hacer que resulte más fácil crear aplicaciones controladoras, sin tener que
preocuparse de detalles de bajo nivel como las entradas de las tablas de flujo, los contadores de tráfico, los patrones
de bits en las cabeceras de los paquetes, etc. Asimismo, aunque un controlador SDN está lógicamente centralizado,
la red sigue consistiendo en una colección distribuida de dispositivos. Los controladores futuros deberían ofrecer
buenas abstracciones para actualizar las tablas de flujo en toda la red, de modo que las aplicaciones puedan razonar
acerca de lo que les sucede a los paquetes en tránsito mientras los dispositivos están siendo actualizados. La de
las abstracciones de programación para el software del plano de control es un área excitante de investigación
interdisciplinar entre las redes de computadoras, los sistemas distribuidos y los lenguajes de programación, con
una posibilidad real de tener un impacto práctico en los años venideros.
¿Qué recomendaría a los estudiantes que quieran desarrollar una carrera profesional en el
campo de las ciencias de la computación y las redes?
El de las redes es un campo inherentemente interdisciplinar. A las redes se les aplican técnicas derivadas de los
avances en otras muchas disciplinas, de áreas tan diversas como la teoría de colas, la teoría de juegos, la teoría
de control, los sistemas distribuidos, la optimización de redes, los lenguajes de programación, el aprendizaje de
máquinas, los algoritmos, las estructuras de datos, etc. Creo que ser experto en un campo relacionado, o colaborar
estrechamente con expertos en esos campos, es una excelente manera de reforzar los fundamentos de las redes,
361
para aprender a construir redes que sean merecedoras de la confianza de la sociedad. Más allá de las disciplinas
teóricas, las redes son excitantes porque creamos sistemas reales que son utilizados por la gente real. Dominar
la manera de diseñar y construir sistemas —obteniendo experiencia en sistemas operativos, arquitectura de
computadoras, etc.— es otra fantástica manera de ampliar nuestros conocimientos de redes para ayudar a hacer
del mundo un lugar mejor.
362