Ingeniería de Tráfico en Redes MPLS

Anuncio
Ingeniería de Tráfico en
Redes MPLS
Proyecto Final de Carrera
Integrantes: Adrián Delfino, Sebastián Rivero, Marcelo San Martín
Tutor: Ing. Pablo Belzarena
Instituto de Ingeniería Eléctrica
Facultad de Ingeniería de la República
Prefacio
El presente documento constituye la documentación final del Proyecto de Fin de
Carrera titulado “Ingeniería de Tráfico en Redes MPLS”, realizado para el Instituto de
Ingeniería Eléctrica de la Facultad de Ingeniería, Universidad de la República. Los
integrantes del grupo de trabajo son Sebastián Rivero, Adrián Delfino y Marcelo San
Martín. Todos ellos, estudiantes de Ingeniería, opción Telecomunicaciones.
El proyecto en cuestión se llevo a cabo en el período comprendido entre Marzo de
2004 y Agosto de 2005, bajo la tutoría del Ing. Pablo Belzarena.
El objetivo del proyecto fue desarrollar una herramienta de software que permite
al usuario realizar lo siguiente: diseñar la topología de la red a su gusto por medio de una
interfaz gráfica, tanto de manera manual o cargándola de manera automática a la misma,
disponer de diversos algoritmos para el establecimiento de LSPs (Label Switched Paths)
(objetivo principal de éste proyecto) así como de herramientas de visualización del estado
actual de la red. En cuanto a los métodos de búsqueda de caminos, se utilizó el
establecimiento explícito del LSP por parte del usuario, CSPF (Constraint Shortest Path
First), una versión modificada del algoritmo MIRA (Minumum Interference Routing
Algorithm) y algoritmos usados en las llamadas Fair Networks que se explicarán más
adelante.
El trabajo se divide en 4 partes. Primero se presenta el Objetivo del proyecto, la
Motivación que llevo a su creación y una breve descripción de cómo está organizado el
mismo. Luego se presentan los conceptos principales sobre TE (Traffic Engineering) de
manera que el lector este familiarizado con los conceptos básicos en los que se basa éste
proyecto. A continuación pasamos a una segunda parte donde exponemos las principales
herramientas teóricas que tuvieron que ser estudiadas durante todo el desarrollo del
proyecto para poder alcanzar los objetivos marcados. En la tercer parte se comenta de
manera profunda los diferentes packages que conforman el software NET-TE
(Networking Traffic Engineering), explicando con detenimiento como fueron
implementados. Finalmente, en una última y cuarta parte se realizan las conclusiones del
proyecto y plantean los posibles casos a futuro.
Con la presente documentación se adjunta un disco compacto conteniendo:
•
El archivo instalador del software NET-TE.
•
Un Manual del Usuario.
•
Documentación completa del Proyecto.
•
Documentación del código de software (JavaDoc).
Agradecimientos:
•
A nuestro tutor, Pablo Belzarena
2
•
A Paola Bermolen, por su amable ayuda en la compresión de los
algoritmos de Fair Networks.
•
Al grupo de proyecto del EasySim (Mauricio García, Gastón Madruga y
Víctor Paladino) por brindarnos su proyecto como base para la interfaz
gráfica del nuestro.
3
Índice General
I Presentación del Problema
1. Introducción y objetivos
………………………………………
1.1. Objetivos del proyecto
………………………………………
1.2. Motivación
………………………………………
1.3. Especificación funcional del proyecto
………………………
1.4. Esquema organizacional del proyecto
………………………
8
8
9
12
14
2. Casos de Uso
………………………………………………………
Caso de Uso#1: Construcción de la topología ………………………
Caso de Uso#2: Establecimiento de los LSPs ………………………
Caso de Uso#3: Visualización del estado actual de la red
………
16
16
18
25
3. Ingeniería de Tráfico ………………………………………………
3.1. Introducción
………………………………………………
3.2. Componentes de la Ingeniería de Tráfico ………………………
27
27
28
II Principios y Bases teóricas
4. Constraint Shortest Path First (CSPF)
………………………
4.1. Principios básicos de CBR
........…………………………
4.2. CSPF
………………………………………………………
4.3. Ruteo basado en QoS. WSP y SWP
………………………
32
32
33
34
5. Minimum Interference Routing Algorithm (MIRA)
………
5.1. Presentación del algoritmo
………………………………
5.2. Modelado del sistema
………………………………………
5.3. Algoritmo propuesto
………………………………………
37
37
38
38
6. Redes Justas (“Fair Networks”)
………………………………
6.1. Introducción
………………………………………………
6.1.1. Nociones de Justicia ………………………………………
6.2. Algoritmo 1: Max-Min Fairness básico para caminos fijos ………
6.2.1. Formulación completa del Algoritmo 1
………………
6.2.2. Pasos para resolver el Algoritmo 1
………………………
6.3. Algoritmo 2: Max-Min Fairness para caminos fijos con cotas ……
6.3.1. Formulación del Algoritmo 2
………………………
6.3.2. Pasos para resolver el Algoritmo 2
………………………
6.4. Algoritmo 3: Max-Min Fairness para múltiples caminos ………
6.4.1. Pasos para resolver el Algoritmo 3 (usando NBT1) ………
6.5. Algoritmo 4: Max-Min Fairness para múltiples caminos acotado ...
40
40
41
41
42
43
44
44
45
46
48
49
4
III Arquitectura de Software
7. Representación de la red e interacción con ARCA ………………
7.1. El package topología
………………………………………
7.2. La clase Elemento
………………………………………
7.3. Las clases LER y LSR
………………………………………
7.4. La clase Link
………………………………………………
7.5. La clase LSP
………………………………………………
7.6. El Package Arca.InterfazGráfica
………………………………
7.6.1. Compatibilidad con ARCA – Analizador de Redes de Caminos
Virtuales
………………………………………………
52
52
54
54
54
54
54
8. Interfaz Gráfica
………………………………………………
8.1. El package Programa
………………………………………
8.2. Clase Principal y VentanaConf
………………………………
8.3. Clase Intérprete
………………………………………………
8.4. Clases TxtFileFilter y ArcFileFilter
………………………
8.5. Clase ConfLink
………………………………………………
8.6. Clase Cargar topología
………………………………………
8.7. Clases Estadísticas y Propiedades
………………………
8.8. Clase Utilización
………………………………………………
57
57
58
59
60
61
62
62
64
9. Carga automática de la topología ……………………………………
9.1. El package CargarRed – Implementación ………………………
65
65
10. Computación de caminos
………………………………………
10.1. El package CrearLSPs
………………………………………
10.2. La clase Ruteo Explícito ………………………………………
10.3. La clase CSPF
………………………………………………
10.4. La clase Algoritmo
………………………………………
10.5. La clase CarConf
………………………………………
10.6. La clase MIRA
………………………………………………
70
70
71
72
75
76
77
11. Algoritmos de justicia y el MIRA
………………………………
11.1. El package MT
………………………………………………
11.2. La clase Caminos
………………………………………
11.3. La clase InterpreteMT
………………………………………
11.4. La clase GeneroMT
………………………………………
11.5. La clase FairnessNetwork
………………………………
11.6. La clase LasDemandas
………………………………………
11.7. La clase OfflineMira
………………………………………
78
78
79
79
80
81
83
84
5
55
IV Conclusiones
12. Conclusiones y tareas a futuro
………………………………
12.1. Supuestos y objetivos
………………………………………
12.2. Conclusiones
………………………………………………
12.3. Tareas a futuro
………………………………………………
87
87
88
89
APÉNDICES
A. Multi Protocol Label Switching (MPLS)
………………
A.1. Descripción funcional de MPLS
………………………
A.2. Componentes y funcionamiento de una red
………………
A.3. Método de distribución de etiquetas
………………
91
91
92
94
B. Simple Network Management Protocol (SNMP) & Management
Information Base (MIB)
………………………………………
B.1. SNMP y Management Information Base
………………
B.2. ASN.1
………………………………………………
B.3. SNMP v1
………………………………………………
B.3.1. Operaciones básicas
………………………………
B.4. SNMP v2
………………………………………………
97
97
98
100
101
101
C. Ejemplo de Fairness con múltiples caminos
………………
C.1. Ejemplo
………………………………………………
102
102
D. Software
………………………………………………………
D.1. Menú Archivo y Barra de Herramientas ………………………
D.2. Crear Matriz de Tráfico ………………………………………
D.3. Barra Vertical
………………………………………………
107
108
110
110
Bibliografía
Glosario de términos
………………………………………………………
116
………………………………………………
117
6
Parte I
Presentación del Problema
7
Capítulo 1
Introducción y Objetivos
En este capítulo expondremos los objetivos, motivaciones y los distintos casos de
uso de manera que se pueda entender en forma clara lo que hace el software y cuál es su
utilidad.
1.1 Objetivos del proyecto
El objetivo general de este proyecto es desarrollar una herramienta que permita
analizar las distintas prestaciones que se pueden obtener al aplicar algoritmos de
Ingeniería de Tráfico sobre una red de computadoras basadas en Multi Protocol Label
Switching (MPLS).
En general se pueden identificar cuatro diferentes objetivos a lo largo de todo este
proyecto.
El primer objetivo específico fue el formar una sólida base teórica sobre MPLS y
TE (Traffic Engineering), entendiendo la razón de su existencia y su funcionamiento. El
enfoque brindado se basará en el estudio de algoritmos de TE “offline” y “online”,
orientados a brindar garantías de Calidad de Servicio (QoS), las cuales permitan
asegurarle al cliente que obtendrá el grado de servicio esperado en términos del ancho de
banda solicitado. Asimismo se estudiaron también métodos de optimización asociados al
reparto “justo” de carga de las demandas de los clientes, lo que constituye las llamadas
“fair networks”. Y por último, y también a destacar, se estudiaron los principales
conceptos que abarcan las MIBs (Management Information Bases), con el objetivo en
particular de determinar cómo descubrir los routers presentes en cierta red, que estén
intercambiando información de ruteo mediante el protocolo OSPF.
Un segundo objetivo, fue el desarrollo de la herramienta de software, llamada
NET-TE (Networking Traffic Engineering), la cual en primera instancia le permitiera al
usuario el poder ingresar manualmente la topología de la red en estudio, devolviéndole el
programa por medio de una interfaz gráfica, el estado actual de la red. Se buscó también
implementar un algoritmo para la computación de caminos (LSPs en nuestro caso),
comúnmente usado en algoritmos de ruteo estilo Constraint Base Routing (CBR), el cual
le ofrecerá también al usuario diferentes criterios de priorización al momento de elegir un
camino. El algoritmo elegido fue el Constraint Shortest Path First (CSPF).
Posteriormente, se puede señalar como tercer objetivo el agregar una
funcionalidad al software que le permitiera al usuario el cargar la topología de la red en
estudio en forma automática.
Finalmente, como cuarto objetivo, se busco el darle la posibilidad al usuario de
poder determinar, teniendo como dato de entrada la matriz de tráfico conteniendo todos
los pares origen-destino con sus respectivos anchos de banda, cuál es la mejor manera de
distribuir la carga de forma tal que la mayoría de las demandas se vean cubiertas de
manera satisfactoria siguiendo diferentes pautas de “justicia” en el reparto de la carga.
8
La realización de este proyecto esta contenida en un marco más amplio de trabajo,
que cuenta con el financiamiento del BID y del PDT, y que tiene por objeto la
implementación de una red multi-servicio, utilizando infraestructura similar a la que
soporta los servicios de datos ofrecidos por ANTEL (ANTELDATA), con el objetivo de
probar aplicaciones/servicios que pueda ser implantados en el futuro con garantías de
calidad de servicio.
1.2 Motivación
El crecimiento actual de la Internet le da una oportunidad a los Internet Service
Providers (ISPs) de ofrecer nuevos servicios como VoIP, Videoconferencia, etc., además
de los ya tradicionales servicios de datos como email, ftp y web browsing. Todos estos
nuevos servicios tienen grandes requerimientos en lo que a throughput, tasa de pérdida,
delay y jitter se refiere.
La Internet no fue diseñada para trabajar con este tipo de requerimientos,
trabajando desde sus comienzos, bajo el paradigma “Best Effort” de IP. Esto significa
que el usuario manda paquetes a la red y la red va a tratar de hacerlos llegar a destino sin
garantía alguna.
A pesar que protocolos como TCP han agregado mecanismos de reenvío que
tratan de solucionar el problema de la pérdida de paquetes generado por el
congestionamiento en la red, estos no solucionan las pérdidas en aplicaciones interactivas
de tiempo real, donde no es posible esperar a que un paquete sea reenviado.
Es por ello que la comunidad de Internet ha hecho grandes esfuerzos en los
pasados años para poder ofrecer garantías de calidad de servicio (QoS) a Internet, con el
objetivo de transformarla en una red convergente para todos los servicios de
telecomunicaciones. Entre los primeros modelos podemos destacar el de Servicios
Integrados (IntServ) y el de Servicios Diferenciados (DiffServ). Debido principalmente a
problemas de escalabilidad en el primer caso y al no poder ofrecer las suficientes
garantías de QoS en el segundo (el actual paradigma de ruteo IP de la Internet provoca la
hiper-agregación de flujos en ciertas partes de la red y sub-utilización de recursos en
otras), es que se necesita de la Ingeniería de Tráfico en las redes IP para asegurar QoS.
Los ISPs necesitan así de sofisticadas herramientas de gestión de redes que
apunten a un uso óptimo de los recursos de la red que son compartidos entre clases de
servicios con diferentes requerimientos de QoS. La tecnología de Multi Protocol Label
Switching (MPLS) es un buen ejemplo que ayuda a realizar TE en sistemas autónomos
(AS) (ver Apéndice A por más información). Se basa en la idea de enviar paquetes a
través de Label Switched Paths (LSPs) haciendo uso de etiquetas que son adjuntadas a los
paquetes en los routers de ingreso de al red (puntos de interconexión entre la red MPLS y
la red de acceso). Esas etiquetas son a su vez asignadas a los paquetes de acuerdo a su
Forwarding Equivalence Class (FEC) (representación de un conjunto de paquetes que
comparten los mismos requerimientos para su transporte) que son entonces mandados a
través de uno de los LSPs asociado con esa FEC en particular.
La práctica de TE hoy en día abarca el establecimiento y uso de esos LSPs como
tuberías de determinado ancho de banda entre dos puntos. Dichos LSPs pueden ser
seteados a través de varios routers, ya sea de forma manual por parte del usuario
9
eligiendo las rutas deseadas o por medio de una herramienta que los compute. Las rutas
pueden ser computadas tanto offline usando alguna herramienta de software, o a través
del uso de algún algoritmo de computación online basado en restricciones (CSPF).
Como podemos ir viendo, la Ingeniería de Tráfico (TE) intenta optimizar la
performance de las redes, a través de tres actividades integradas: medición del tráfico,
modelado de la red, y selección de mecanismos para el control del tráfico.
Desafortunadamente, grandes Proveedores de Servicios de Internet (ISPs) tienen pocos
sistemas de software y herramientas que soporten la medición del tráfico y el modelado
de la red, pilares básicos de una ingeniería de tráfico efectiva. De manera similar,
preguntas sencillas sobre la topología, tráfico y ruteo son sorprendentemente difíciles de
contestar en las redes IP de hoy en día. Una gran cantidad de trabajo ha sido dedicado al
desarrollo de mecanismos y protocolos para el control del tráfico. Como ejemplo de ello,
la mayor parte del trabajo de la Internet Engineering Task Force (IETF) está relacionado
al control del tráfico en lo que a la ingeniería de tráfico concierne.
Existen determinados factores que indican la necesidad de más y mejores
herramientas de ingeniería de tráfico para las redes. Entre ellos se destacan la calidad del
servicio, los parámetros ajustables interdependientes, el crecimiento de las redes y la
variabilidad del tráfico (Referirse a [1] por más información).
En cuanto a la Calidad del Servicio, los clientes son cada vez más exigentes en el
cumplimiento de la performance, confiabilidad y seguridad, que se manifiestan en forma
de Service Level Agreements (SLAs). Los clientes desarrollan más procedimientos de
certificación y testeos continuos, para asegurar el cumplimiento de dichos SLAs.
Aplicaciones como Voz sobre IP, las cuales por su naturaleza, requieren del transporte de
datos de alta calidad, medido por el retardo, tasa de pérdida de paquetes y jitter, están
emergiendo hoy en día. Por eso es muy importante para los operadores de redes el
coordinar cuidadosamente por dónde fluye el tráfico de cada demanda y ver si pueden o
no tolerar la llegada de futuras nuevas demandas sin afectar las ya existentes y por ende,
viendo comprometido el cumplimiento de los SLAs pertinentes.
En lo que a los Parámetros ajustables Interdependientes se refiere, hoy en día,
los proveedores de equipos de red, proveen a los ISPs con poco o ningún control sobre
los mecanismos básicos responsables de la coordinación de paquetes, gestión de buffers y
selección de caminos. En su lugar, los proveedores de backbones son forzados a entender
una larga cantidad de parámetros interrelacionados que de una manera u otra afectan la
configuración y operación. Hasta el día de hoy, un ISP debe gestionar su red de
backbone, y sus complicadas relaciones de frontera con proveedores vecinos, ajustando
los asuntos mencionados anteriormente a través de una combinación de intuición, testeo y
pruebas de intento y error.
El Crecimiento de las Redes se ve reflejado en que por un lado, redes de
backbones individuales están creciendo rápidamente en tamaño, velocidad y espectro
abarcado; mientras que por otro lado, la industria intenta unir redes discordes entre sí, en
redes integradas más grandes. Como resultado, las funciones de gestión de red que una
vez pudieron ser manejadas por un grupo reducido de personas, basándose en la intuición
y experimentación, deben ser ahora soportadas por herramientas efectivas de ingeniería
de tráfico que unen información de configuración y de uso de una variedad de fuentes.
Por último, la Variabilidad del Tráfico. El tráfico de Internet es complejo. La
carga ofrecida entre pares origen-destino es típicamente desconocida. Asimismo, la
10
distribución del tráfico IP usualmente fluctúa ampliamente a través del tiempo. Esto
introduce una gran complejidad a la ingeniería de tráfico sin alivianar las demandas de
los clientes por una performance de comunicación predecible. Herramientas efectivas de
TE deben soportar la identificación rápida de potenciales problemas de performance y un
ambiente flexible para experimentar posibles soluciones.
Es por los motivos expuestos anteriormente que se decidió la creación del
software NET-TE, como un aporte más en cuanto a las herramientas que puede encontrar
un usuario para poder realizar tests de ingeniería de tráfico en un ambiente simulado. La
idea clave detrás de este software es la de ofrecer al usuario de una plataforma donde
pueda visualizar la topología de su red de estudio conjuntamente con datos sobre el uso
de los enlaces, qué enlaces se encuentran saturados, establecer afinidades que distingan el
tráfico que pasa por cierto grupo de enlaces del resto. Una vez enfrente a la topología, el
poder inferir sobre ella y visualizar las implicaciones de cambios locales en el tráfico y
determinar por dónde se rutean las distintas demandas a medida que van llegando, de
acuerdo al estado actual de la red. También el poder realizar una mirada general sobre
todo el grupo de demandas que se tienen hasta el momento y determinar cuál es la mejor
manera de ubicar los LSPs en la red de manera que todas vean sus requerimientos
satisfechos. En el caso de no ser posible satisfacerlas a todas, es deseable el poder
determinar cómo lograr cubrirlas de la manera “más justa” posible a todas ellas.
Entendiendo por “justicia”, la elección por parte del usuario de determinado criterio en
cuanto a la manera en que se debe tratar de repartir la carga entre las diferentes demandas
(clientes).
Usando esta herramienta, un proveedor de red pude claramente experimentar con
cambios en la configuración de la red en un ambiente simulado, en vez en una red
operacional, basándose en una plataforma para investigaciones del tipo “what-if” de
ingeniería de tráfico.
11
1.3 Especificación Funcional del proyecto
La herramienta de software desarrollada, se puede describir en rasgos generales
por medio del diagrama de bloques mostrado en la Figura 1.1.
Router más
próximo
Objetivos de Performance
(restricciones)
MIBs
Descripción de
la Red
Cargar Matriz
de Tráfico
usuario de la
Red
Cálculo de Caminos
Candidatos (Dijkstra)
Algoritmos MIRA o
FairNetworks
Selección de
Camino
LSPs establecidos
LSP establecido
Visualización
Estado Actual de la Red
Figura 1.1: Diagrama de bloques del Proyecto
A continuación pasamos a comentar brevemente cada uno de los bloques
funcionales.
Descripción de la Red:
La función de este bloque es la de generar “un objeto Red”, el cual representará a
la red sobre la cual el usuario trabajará. Se construirá manualmente por parte del usuario
de la Red, ingresando datos como ser la lista de nodos y links con sus respectivos
atributos, los LSPs ya existentes, etc. También se tendrá la opción de cargarla
automáticamente extrayendo la información necesaria de las MIBs del router más
próximo al cual esta conectada la estación de trabajo donde se encuentra instalado el
software NET-TE.
12
Cálculo de caminos candidatos (Dijkstra):
En este bloque el usuario podrá establecer restricciones que los futuros LSPs
deberán cumplir, como ser el ancho de banda (BW) que deberán soportar y el pertenecer
a una determinada Afinidad previamente establecida (P2P, UDP, etc.).
Objetivos de Performance (restricciones):
Acá el usuario podrá ingresar restricciones como el asegurarse que los caminos
encontrados pasen por un determinado enlace y/o no lo hagan por otro, o el elegir el tipo
y valor de los pesos que desea tengan los mismos, determinando así el criterio de
optimización que establecerá la elección de caminos.
Selección de camino:
A partir del estado actual de la red y de los “candidatos”, se podrán establecer
nuevos LSPs mediante la utilización de un algoritmo del tipo Shortest Path First (SPF)
que tome además en consideración un conjunto de restricciones que deben ser cumplidas,
teniendo como objetivo encontrar caminos de origen a destino que satisfagan esas
restricciones impuestas por el usuario previamente, y de ser posible, optimizar la
elección. El usuario también dispondrá de más de un criterio de TE para aplicar antes de
mostrar cuál es/son las soluciones posibles encontradas, a manera de elegir la opción que
más óptima le resulte.
Cargar Matriz de Tráfico:
Aquí se ingresara la matriz de tráfico conteniendo toda la lista de las demandas
que hay sobre la red para los distintos clientes. Se especificarán todos los pares origendestino así como el valor del ancho de banda requerido para cada una de esas demandas.
Algoritmos MIRA o FairNetworks:
Una vez ingresada la matriz de tráfico o cargada una ya creada previamente, se
podrán aplicar diversos algoritmos de ruteo offline que mostrarán la manera de alojar a
todas esas demandas en la red en forma conjunta e indicando cuánto se puede satisfacer a
cada una de ellas.
Estado Actual de la Red:
Simplemente se refiere al estado en el que se encuentra la red en un determinado
instante, con los LSPs ya establecidos en caso que los haya, qué enlaces están saturados,
13
y cuáles tienen sus recursos sobre o sub-utilizados. Se podrá apreciar el porcentaje de
utilización de cada enlace también.
Visualización:
En este bloque se visualizan los nuevos LSPs establecidos, así como el estado
actual de la red.
1.4 Esquema organizacional del proyecto
El objetivo de esta sección es el mostrarle al lector las áreas teóricas analizadas y
principales tareas que se realizaron durante todo el transcurso de este proyecto así como
la manera en que está distribuida la información en el presente documento.
En primer lugar, la tarea de este grupo de trabajo fue la de ponerse en contacto
con los principales conceptos que encierra MPLS y la Ingeniería de Tráfico en Internet
(TE). Para ello nos informamos sobre lo que motivo la aparición de MPLS, sus ventajas,
cómo es el mecanismo de intercambio de etiquetas, entre otras cosas. Asimismo se
estudió TE, su relación con MPLS, los objetivos que busca la ingeniería de tráfico así
como también los pasos que debe seguir un Administrador para poder hacer una
aprovechamiento eficiente de los recursos que ofrece la red en la que opera. Se estudiaron
diversos algoritmos de ruteo que hacen ingeniería de tráfico tanto offline como online.
También se vieron algoritmos de búsqueda de caminos, haciendo principal hincapié en el
Constraint Shortest Path First (CSPF), analizando su uso junto con diferentes tipos de
restricciones.
Una vez conseguida la base teórica deseada, se empezó a desarrollar la
herramienta de software. En una primera instancia, se buscó ofrecerle al usuario la
posibilidad de que creara la topología de la red a su gusto, pudiendo agregar o quitar
nodos y enlaces a su deseo y especificando el ancho de banda, peso y afinidad de los
mismos; todo por medio de una interfaz gráfica. También se crearon herramientas
mediante las cuales el usuario puede visualizar el estado actual de la red en todo
momento. Algunos de los ejemplos de lo anterior son el observar el porcentaje de
ocupación de los enlaces o la lista de los LSPs creados hasta el momento con sus
respectivos anchos de banda. En cuanto a los mecanismos para el establecimiento de los
LSPs, el primero en implementar fue el Ruteo Explícito, mediante el cual el usuario
puede crear un LSP de manera manual, eligiendo los enlaces hasta llegar a formar el
camino de origen a detino. El paso siguiente fue implementar un algoritmo de
computación de caminos (usado en protocolos tipo CBR en su primera etapa de búsqueda
de caminos). El elegido fue el Constaint Shortest Path First (CSPF). Si bien en un
principio se implementó para que sólo desplegara la primera ruta que encontraba de
origen a destino y que cumpliera además con las restricciones ingresadas por el usuario,
luego esto se extendió para que mostrara todas las soluciones posibles (se despliegan
todos los caminos con la distancia más corta del origen a fin, refiriéndonos por distancia
al peso de los enlaces, los cuales representan diversas cosas de acuerdo a lo que el
usuario desee) brindando así al usuario una mayor gama de posibilidades sobre la cual
trabajar y una mayor flexibilidad en la búsqueda de las rutas posibles.
14
Posteriormente se agregaron más funciones, siempre con el objetivo de darle al
usuario una mayor participación en la elección de los caminos y dándole al programa una
mayor o menor participación en esa búsqueda. De ésta manera, cuantas más opciones
tenga el usuario, podrá crear una mayor variedad de escenarios “what-if”. Claros
ejemplos de la flexibilidad que se le intenta dar al usuario son los distintos tipos de pesos
que le puede asignar a los enlaces al momento de usar el CSPF, dándole prioridad a la
distancia o al ancho de banda disponible en los enlaces o a cierto peso administrativo que
es fijado por el usuario. También se ofrecen distintos criterios de TE, que hacen una
especie de filtrado sobre los resultados brindados por el algoritmo CSPF, ayudando
también a incrementar las combinaciones de escenarios que se pueden crear.
El siguiente paso fue el empezar a idear la manera de agregarle al programa la
funcionalidad de poder cargar la topología de la red a la que está conectada la PC vía
Simple Network Management (SNMP) de manera automática. Vale destacar que con
cargar la topología de red se entiende como descubrir todos los routers presentes en cierta
red que estén intercambiando información de ruteo mediante el protocolo OSPF. En
nuestro caso la componente de gestión SNMP fue implementada en el software usando el
API de Adventnet. Se tuvo que hacer nuevamente una fuerte investigación teórica,
enfocándose esta vez en la estructura en forma de árbol usada por SNMP para organizar
la gestión de datos; con esto nos estamos refiriendo a las llamadas Bases de gestión de
Información (MIBs) (ver Apéndice B por más información).
En la próxima etapa surgió la idea de agregar un nuevo algoritmo para el ruteo
dinámico de los LSPs con ancho de banda garantido, en donde las demandas de ruteo van
llegando una por una y no hay conocimiento previo acerca de futuras demandas. Este
problema es motivado por la necesidad de los ISPs de desarrollar rápidamente servicios
de ancho de banda garantidos y la consecuente necesidad en los backbones de redes de un
aprovisionamiento rápido de caminos con ancho de banda garantido. El algoritmo elegido
fue una pequeña variante del conocido algoritmo Minimun Interference Routing
Algorithm (MIRA), el cual se basa en el principio de que cada nuevo túnel ruteado (LSP)
debe seguir una ruta que no “interfiera demasiado” con una ruta que pueda ser
posiblemente crítica para satisfacer una futura demanda. Previo a su elección se
analizaron otros posibles algoritmos y luego de compararlos se decidió usar éste.
Finalmente, en una última etapa, asumimos que el volumen de carga (BW) para
cada demanda deja de ser una cantidad fija y pasa a ser una especie de demanda elástica.
Así nos planteamos la siguiente pregunta: ¿cuál debería ser el principio que gobierne la
distribución de los volumenes de esas demandas entre ciertos recursos de red (capacidad
de los links) que llevan a asignaciones que cumplen con determinado criterio de justicia?
Nos encontramos así con un nuevo tema abarcado por las llamadas “redes justas” (Fair
Networks), del cual estudiamos sus aspectos más generales e incorporamos cuatro
diferentes algoritmos, con el objetivo de determinar si el usuario podrá alojar en la red
todas las demandas que fueron solicitadas, o en caso de no ser posible, cuál es la manera
“más justa” de distribuirlas entre los recursos de la misma.
Demos paso entonces, en los próximos capítulos, a introducir los conceptos
principales que deberá poseer el lector sobre MPLS y TE.
15
Capítulo 2
Casos de Uso
Veamos ahora cuáles son los usos y las distintas funcionalidades que el software
NET-TE tiene para ofrecer.
Se distinguen tres principales utilidades o casos de uso dentro de NET-TE:
construcción de la topología de la red de trabajo, establecimiento de los LSPs por los
cuáles pasará el tráfico de cada demanda y visualización del estado actual de la red. A su
vez, han de destacarse los cuatro mecanismos usados por NET-TE para el
establecimiento de los LSPs: ruteo explícito, CSPF, MIRA y FairNetworks.
Explicaremos más adelante qué ventaja ofrece cada uno de ellos y los
compararemos.
C
Caso de Uso# 11: Construcción de la topología
Para empezar a trabajar, lo primero que necesita hacer el usuario es construirse la
topología de la red sobre la cual va a trabajar. NET-TE ofrece dos maneras de realizar
esto: una manual y otra automática.
La interfaz gráfica donde se apoya NET-TE está formada por dos barras de
herramientas, desde las cuales el usuario puede acceder a las distintas funciones del
software y una pantalla que es el marco de trabajo donde se crea o carga la topología de
la red.
Empecemos por el método manual de construcción. En este caso, el usuario
dispone de dos posibles objetos para crear su topología: routers y links. Como la red
donde se trabaja es basada en MPLS, los routers que se ofrecen son de dos tipos: LERs y
LSRs.
NET-TE permite manipular los objetos dentro de la pantalla con total libertad,
pudiéndolos colocar y desplazándolos de un lugar a otro a gusto del usuario, de manera
que éste pueda diseñar la red con la forma que desee y pudiéndola guardar luego en un
archivo en su computadora, en caso de querer reutilizarla luego, si así lo desease.
Esto resulta muy cómodo ya que el usuario puede cargar una vieja topología que
tenia guardada, y cambiarla a su gusto, para reflejar el estado más reciente de la misma,
agregando o quitando enlaces o routers de la red.
Los campos que ofrece NET-TE para configurar los enlaces son los siguientes:
ancho de banda, peso administrativo y afinidad. Como se puede apreciar en la Figura 2.1,
el usuario puede describir con bastantes detalles las características de los elementos de la
red. La opción del uso de pesos administrativos es especialmente útil en los casos en los
que el usuario desea darle más prioridad a ciertos enlaces sobre otros. Son varios los
motivos que pueden llevar a un usuario el querer priorizar cierto grupo de enlaces sobre
otros. Como ejemplo, podemos mencionar razones de política interna por parte del cliente
que regulen el uso de los recursos sobre cierto enlace o grupo de enlaces. También
pueden existir tráficos que satisfacen demandas que son críticas o de mayor importancia,
16
con lo cual resultaría particularmente útil el evitar que futuros LSPs a ser establecidos
pasen por los enlaces que las conforman, a menos que
sea
necesario. Otra
característica de suma utilidad es poder
Figura 2.1: Pantalla principal de NET-TE y ventana de configuración de enlace.
seleccionar una Afinidad determinada para ciertos grupos de enlaces. NET-TE le da al
usuario la posibilidad de crear como grupos de enlaces que se diferencien unos a otros de
acuerdo al tipo de tráfico que pasa a través de ellos. Es muy común en una red el tener
distintos tipos de tráfico circulando por la misma (P2P, TCP, UDP, Low Delay, etc.) y es
deseable quizás para un usuario el establecer LSPs sólo sobre los enlaces que dejan pasar
determinado tráfico por ellos. El concepto de Afinidad brindado por NET-TE permite
éste tipo de cosas.
Basta con hacer un simple click en el enlace deseado y el usuario será capaz de
visualizar las propiedades de cada enlace y router, así como apreciar cuáles LSPs pasan
por ellos. De la misma manera y con la misma facilidad, el usuario será capaz de
modificar los parámetros de los enlaces nombrados anteriormente, para poder reflejar así
cualquier cambio que haya ocurrido en la topología.
En todo momento, si el usuario realizó algún cambio el cual quisiera deshacer, o
viceversa, NET-TE le ofrece esa posibilidad por medio del uso de dos flechas de poder ir
hacia adelante como hacia atrás en cambios ocurridos en la topología. Ver Figura 2.2.
Figura 2.2: Botones para deshacer o rehacer cambios.
17
Pero supongamos que el usuario no tiene conocimiento sobre cómo es la
topología de la red a la cual esta conectado, y sin embargo quiere poder obtenerla para
poder así crear distintos escenarios sobre la misma. Obviamente la solución manual no es
la adecuada. Es por ello que NET-TE ofrece también un mecanismo automático,
mediante el cual, tras ingresar determinados parámetros obligatorios tal como la Figura
2.3 nos muestra, comienza a iterar hasta descubrir completamente la red. Vale destacar
que para NET-TE, el cargar la topología se entiende como descubrir todos los routers
presentes en la red, que estén intercambiando información de ruteo mediante el protocolo
OSPF.
Dentro de los parámetros obligatorios se
encuentra la dirección IP de algún router de la red (en
general es la del router a la que la computadora está
directamente conectada), la versión SNMP que se desea
ejecutar (NET-TE ofrece las versiones 1 y 2) y el
“community” o password usado por SNMP para permitir
sólo el acceso al router a personas con permiso. También
se ofrecen parámetros opcionales, que el usuario es libre
de modificar, como el puerto (NET-TE usa el 161 por
defecto), número de reintentos y timeout. Además se
tiene la posibilidad de seleccionar la opción de
“Continuar carga de red”, útil cuando llegamos a un área
de la red la cual tiene un community distinto, el cual
poseemos y queremos ingresar al programa para que
continúe su descubrimiento de la red.
Figura 2.3: Ventana Cargar Red.
Obviamente, esto es sumamente útil si la red es una red de gran tamaño, ya que
consumiría mucho tiempo el crearla manualmente. De esta manera se obtiene el mismo
resultado, pero de una manera mucho más rápida.
Una vez cargada la topología en forma automática, el usuario vuelve a ser libre de
poder modificarla a su gusto, tal como lo hace si la cargara manualmente.
C
Caso de Uso# 2
2: Establecimiento de los LSPs
En MPLS, como todos ya sabemos, el tráfico para determinada demanda sigue
determinados LSPs desde que entra a la red MPLS hasta que sale. Es de esa manera que
se puede clasificar los servicios según la QoS que desee cada usuario. Por eso, es tan
importante el establecimiento de los LSPs, cómo elegirlos y dónde ubicarlos de manera
de cubrir de la mejor manera posible las demandas. NET-TE tiene por ende cuatro
distintos mecanismos para ofrecer al usuario, al momento de elegir cómo y por dónde
ubicar a los LSPs.
18
Ruteo Explícito:
El primer mecanismo es el más sencillo de los propuestos (en lo que a cálculos
se refiere): el ruteo explícito. Se le ofrece al usuario una ventana (ver Figura 2.4) en la
cual, a partir de la elección del nodo de origen, se le van desplegando los posibles enlaces
para que pueda ir creando salto a salto, el LSP de manera explícita de origen a fin. En
NET-TE, la demanda se expresa en términos del ancho de banda. Es decir, cada demanda
se representa por medio del nodo origen, destino y un determinado ancho de banda que
satisfacer. El usuario debe por ello ingresar también en primer lugar el ancho de banda
que desea tenga el LSP a crear. NET-TE entonces va chequeando el ancho de banda
disponible de los enlaces que contienen el nodo en el que esta parado el usuario y
despliega sólo aquellos que cumplan con la condición de tener un BW mayor o igual al
requerido por el LSP.
Esta
es
una
manera que como vemos
no utiliza algoritmo
alguno, sino que sólo se
basa en la decisión que
tome el usuario y
depende exclusivamente
del camino que éste
desee. Un ejemplo de
una situación de este tipo
es cuando el usuario, ya
sea o porque la red tiene
suficiente ancho de
banda como para no
restringir ningún posible
LSP o porque posee
un conocimiento muy
Figura 2.4: Ventana para el Ruteo Explícito.
grande de la red, cree saber ya de entrada por que camino es mejor que vaya el LSP.
Quizás haya un acuerdo con el cliente, el cual obligue al LSP a seguir cierto camino
explícito de manera obligatoria, con lo cual ésta sería la manera más sencilla de
establecerlo.
CSPF:
El segundo mecanismo ofrecido es el CSPF. Supongamos el caso donde el
usuario tiene una red sobre la cual ya existen determinadas demandas siendo ruteadas por
ciertos LSPs. Supongamos también que hay más de un tipo de tráfico circulando por la
red y que eso está siendo reflejado por las afinidades creadas por el usuario. Aparece
entonces un nuevo cliente queriendo conseguir un LSP por el cual rutear su tráfico y
19
requiere que le aseguren determinado BW. Entonces, salvo que sea una red de tamaño
pequeño y sea muy evidente el camino a usar, el usuario necesitará de algún algoritmo
que le halle ese LSP que está buscando, teniendo en cuenta el estado actual de la red.
NET-TE le muestra al usuario cuales son todos los posibles caminos por los
cuales puede rutear su tráfico, asegurándose que cumplan con el BW solicitado por el
cliente, además de un conjunto pre-definido de restricciones que puede él mismo ingresar
y comentaremos más adelante. Finalmente, será decisión del usuario el elegir el camino
que más le convenga, dentro de toda la gama de soluciones.
Dentro de los parámetros obligatorios a ingresar (ver Figura 2.5) por parte del
usuario, se encuentran obviamente, el nodo de origen, el nodo destino y el BW
requerido por el cliente. En caso que se desee buscar soluciones sólo por aquellos
enlaces que soportan cierto tipo de tráfico se incorporó al NET-TE la posibilidad de
elegir la Afinidad, como parámetro opcional.
Puede suceder que por razones político-administrativas de parte del cliente, o por
determinado SLA que debe cumplirse, el usuario necesite que los caminos posibles pasen
por un determinado enlace en particular y no lo hagan por otro, por ejemplo. A manera de
tener en cuenta este tipo de solicitudes, se incorporaron también otros dos parámetros
opcionales a elegir, que son: Enlace Presente y Enlace Ausente. NET-TE se encarga de
esta manera de asegurar al cliente que las soluciones a mostrar (en el caso que existan)
cumplirán con estas restricciones.
Ahora bien, ya que el CSPF se basa en el algoritmo Dijkstra, se debe determinar
cuál es la métrica a usar para elegir el camino “más corto” (con más corto, nos referimos
no al camino de menos saltos, sino al camino cuya suma de pesos es la menor). Acá,
NET-TE ofrece 4 diferentes tipos de pesos a asignar a los enlaces: Ruteo Mínimo por
Pesos Administrativos, Ruteo por Mínima Cantidad de Saltos, 1/(BWreservado) y
1/(BWlibre).
El primero de todos es básicamente basarse en los pesos que fueron pre-definidos
por el usuario para cada enlace. El usuario, al tener la posibilidad de asignar pesos a los
enlaces, puede influir en la toma de decisión de cuál es el mejor camino por donde
establecer el LSP.
El segundo, es simplemente establecer la cantidad de saltos, como la métrica
elegida. NET-TE se fijará solamente en la cantidad de saltos del origen al destino y
buscará los caminos que tengan la menor cantidad de saltos de principio a fin.
La tercera, tal como lo indica su nombre, usa pesos que equivalen al inverso del
BWreservado en cada enlace. Supongamos que el cliente, tiene ya varios LSPs
establecidos sobre la red, los cuales consumen determinado BW de los enlaces por los
que pasan. Esto hace que hayan enlaces más ocupados y otros más libres en la red. Llega
un nuevo LSP que necesita ser ubicado en la red y el usuario quiere que éste tienda a usar
los enlaces más ocupados en la red, de manera tal de dejar a los que están más libres,
disponibles para futuras demandas. Es una manera de procurar seguir usando los enlaces
que ya están siendo más utilizados por otros LSPs, y no tocar los que están más libres.
NET-TE brinda esta posibilidad, con tan sólo seleccionar este tipo de peso.
Finalmente, supongamos que el usuario quiere exactamente lo opuesto a lo
anterior. Es decir, quiere que el nuevo LSP a crearse tienda a pasar por aquellos enlaces
que están más libres en la red, no tocando aquellos que ya tienen recursos consumidos o
LSPs pasando por ellos. O sea, dicho con otras palabras, que se tienda a ubicar al LSP por
20
aquellas zonas de la red que no han sido usadas aún, de manera de no sobrecargar
aquellas que sí lo están siendo. Esto es lo que NET-TE permite si el usuario elige la
cuarta opción de peso.
Se puede ver que NET-TE ofrece una amplia gama de criterios de pesos, de
manera que el usuario pueda elegir cuál desea sea usado por el algoritmo para el cálculo
de la nueva ruta, pudiendo jugar así con las distintas combinaciones y viendo cómo afecta
una u otra elección. Vale decir que estos son parámetros obligatorios que debe ingresar el
usuario.
Por último, NET-TE le ofrece al usuario, como última opción, la posibilidad de
usar o no determinado criterio de TE, sobre los caminos encontrados: Elegir
manualmente, No saturación enlaces críticos y Minhop.
Supongamos que luego de que el usuario haya ingresado todos los parámetros
anteriores, NET-TE encuentra más de un camino que satisfaga los requerimientos de BW,
Afinidad y demás. Y supongamos ahora que el usuario no quiere ver uno a uno cada uno
de ésos caminos, analizando sus diferencias, sino que por otro lado, desea aplicarle una
especie de “filtro” y que sólo se desplieguen aquellas soluciones que no contienen a los
enlaces más críticos, o por aquellas que, dentro del grupo de soluciones posibles, tengan
la menor cantidad de saltos.
Es por lo anterior que se incorporaron tres criterios de TE al software.
El primer criterio, simplemente le indica a NET-TE que despliegue todas las
soluciones posibles que encontró Dijkstra, tomando en cuenta las restricciones y pesos
seleccionados. De esta manera el usuario ve todas las soluciones y él es quien determina
con cuál quedarse.
Figura 2.5: Ventanas de CSPF y de información sobre resultados hallados.
21
Con el segundo criterio, NET-TE lo que hace es comparar las soluciones
encontradas y se queda sólo con aquella cuyos enlaces que la componen, tiene el mayor
ancho de banda disponible. De esta manera, no sólo se muestra el camino que cumple con
las restricciones y que según la métrica elegida es el más “corto”, sino que se muestra
aquel que “molesta” menos a los enlaces más saturados.
Finalmente, el último criterio de TE es el de Minhop, el cual, tal como su
nombre lo indica, de todas las soluciones encontradas, se queda sólo con aquellas que
tienen la menor cantidad de saltos de origen a destino. Esto es especialmente útil si se
combina con ciertos tipos de pesos, pudiendo encontrar por ejemplo, no sólo las posibles
soluciones que van por la parte más o menos ocupada de la red, sino también, por la más
corta.
Vale destacar que otra práctica funcionalidad que el NET-TE ofrece al elegir el
segundo o tercer criterio de TE, es una ventana que despliega, en caso de existir múltiples
soluciones, valores como la Capacidad, BW usado y Porcentaje de Utilización de los
enlaces que las conforman. Se distinguen las soluciones ofrecidas de aquellas que fueron
descartadas. Esto es muy útil para poder visualizar numéricamente la razón de la decisión
tomada por NET-TE.
MIRA:
Ya habiendo visto los criterios de Ruteo Explícito y CSPF, pasemos ahora al
mecanismo conocido como MIRA (Minimum Interefence Routing Algorithm), para el
establecimiento de los LSPs.
El usuario por ejemplo se puede encontrar en la situación de querer establecer
varios caminos de acceso a Internet para clientes a los que no se les garantiza ningún tipo
de calidad de servicio (tráfico Best Effort). Pero a la vez querer establecer caminos con
altos requerimientos de calidad de servicio para ofrecer por ejemplo servicios
corporativos de voz y video.
Con los algoritmos clásicos como el
SPF, los caminos se mapearán
indistintamente por el camino más corto degradando el servicio de los clientes
corporativos ya establecidos e interfiriendo con futuras demandas (nuevos clientes).
La solución ideal en este caso sería correr un algoritmo que tenga como entrada
los puntos (localidades, nodos, etc.) que el usuario considera críticos y mapear los
caminos de Internet por enlaces que no sean críticos para las demandas que se les quiere
dar prioridad.
Con NET-TE, el usuario podrá cargar todas las demandas que corresponden a
caminos de acceso a Internet y mapearlas en la red corriendo el algoritmo MIRA. Así, se
22
mapearán todos
los caminos de
acceso a Internet
por los caminos
más largos, o
hasta
que
no
exista
otra
posibilidad (sature
por ejemplo algún
enlace). Luego el
usuario podrá por
ejemplo
correr
CSPF
para
establecer
los
caminos
de
servicios
corporativos.
Figura 2.6: Ventana del algoritmo MIRA.
La idea básica de este tipo de algoritmos es la de minimizar la interferencia que
provoca el establecimiento de un nuevo LSP a potenciales nuevos LSPs que son
desconocidos de modo de reservar recursos para demandas a las que considero más
importantes. Se puede apreciar la ventana de dicho algoritmo en la Figura 2.6.
Fairness:
Así llegamos al último mecanismo ofrecido por NET-TE, Fairness.
Supongamos ahora que el usuario ya no tiene que preocuparse por ver cómo
colocar determinado LSP para cada demanda nueva entrante. Ahora, lo que desea es,
teniendo una matriz de tráfico que contiene a todas las demandas que desean establecerse
sobre la red (la cual ya puede contener viejos LSPs establecidos), ver cómo satisfacerlas a
todas ellas de una manera lo más “justa” posible.
El usuario posee la lista de todas las demandas correspondientes a cada uno de
sus clientes, especificadas por sus pares origen-destino y BW mínimo requerido por cada
una de ellas. La pregunta que le podría resultar interesante de hacerse sería: ¿Cuántos
recursos me puede ofrecer la red en su estado actual, para cada uno de los caminos que
satisfacen las demandas de los clientes? Esos caminos solución son los hayados por el
algoritmo CSPF. El usuario dispone de dos tipos de pesos a elección: minhop o pesos
administrativos. Una vez hayados todos los caminos posibles que cumplen con la
restricción del ancho de banda para todas las demandas, el objetivo es ver cómo se
asignan los recursos de la red, a cada una de ellas, de manera que se obtenga el máximo
aprovechamiento posible de la red.
Una aplicación puede ser cuando se tiene determinada red utilizada para brindar
servicios exclusivamente a un determinado número de clientes. Se quiere entonces
23
“arrojar” sobre ella los LSPs que van a cubrir cada una de esas demandas y darles a ellos
la máxima cantidad de recursos que la red me puede brindar, de manera que se haga un
uso de ellos “justo” entre las demandas.
NET-TE brinda la información anterior al usuario, y le da a elegir cuatro
algoritmos a usar distintos: fairness básico, acotado, con múltiples caminos y con
múltiples caminos acotado. Observar la Figura 2.7.
El primero y el tercero brindan
información sobre cuál es la cantidad
máxima de BW que puedo tomar de la red
para cada una de las demandas. La única
diferencia es que el primer algoritmo sólo
me considera un camino solución fijo para
cada demanda, mientras que el tercero toma
todos los caminos solución posibles. Para el
caso en que hayan múltiples caminos
posibles en el primero, se le brinda la
posibilidad al usuario de elegir el que guste
de entre una lista de posibles opciones, de
manera tal que se quede con uno solamente,
tal como debe ser.
El segundo considera también sólo
un camino solución fijo por demanda (tal
Figura 2.7: Ventana de algoritmos Fairness
como en el primero, el usuario puede elegir el que desee en caso de haber más de una
opción disponible), pero le brinda al usuario la opción de ingresar prioridades a las
demandas y le permite elegir una cota inferior de BW para cada demanda. Si bien el
concepto de incorporar prioridades parece oponerse al de ofrecer un reparto de ancho de
banda justo entre las demandas, es útil para aquellos casos en donde deseamos poder
diferenciar a los clientes desde un punto de vista económico, priorizando a aquellos que
por ejemplo pagan más de los que pagan menos. También es útil cuando el usuario debe
asegurarse que las demandas lleguen a obtener al menos un BW mínimo obligatorio en el
reparto.
Como ejemplo, supongamos que tiene una demanda que requiere 10MB. Como
sabe que quizás el LSP que se cree para esa demanda, tenga que compartir recursos con
otros LSPs de otras demandas, puede suceder que no llegue a obtener esos 10MB. Lo que
puede hacer es poner un mínimo de 5MB por ejemplo y de esa manera se asegura que de
haber solución, el BW que va a obtener va a estar entre esos dos valores con seguridad.
El cuarto algoritmo es similar al tercero. La diferencia es que en vez de
detenerse el cálculo cuando ya no quedan más recursos que la red pueda ofrecer, se
detiene cuando se llegó a cumplir con el ancho de banda requerido para cada demanda.
Obviamente que en caso de saturar primero la red antes que se llegue al ancho de banda
requerido, también se detendrá el cálculo.
24
Éste es particularmente útil para un usuario cuando no desea ver cuál es la
cantidad máxima de recursos que le puede ofrecer la red para satisfacer sus demandas,
sino saber si puede llegar a cumplirlas, deteniéndose una vez que fueron satisfechas.
Para la mejor visualización del usuario, aquellas demandas que no lograron
satisfacer el BWrequerido, se pintarán de color rojo, a diferencia de aquellas que si lo
lograron satisfacer o superar. Asimismo, para el tercer y cuarto algoritmo, se tiene la
posibilidad de apreciar cada una de las sub-demandas o caminos que conforman las
demandas principales en forma separada, pudiendo ver cuánto ancho de banda rutean
cada una de ellas, así como apreciarlas en forma gráfica.
Asimismo, se dispondrá también de una ventana que despliega los resultados
obtenidos en forma numérica para todas las demandas, teniendo el usuario de ésta
manera, otra forma sencilla de visualizar cuántas demandas satisfacen y cuántas no, el
ancho de banda requerido.
C
Caso de Uso# 3: Visualización del estado actual de la red
El último caso de uso consiste en los métodos que tiene el usuario con el software
NET-TE de poder ver el estado de la red.
Básicamente lo puede hacer de dos formas posibles: por medio del uso del botón
Estadísticas o bien del botón Utilización.
Con tan sólo apretar el botón Estadísticas (ver Figura 2.8), en cualquier momento,
al usuario se le desplegará una pantalla donde figurarán todos los nodos que conforman la
red, los enlaces, así como los LSPs establecidos hasta ahora. Podrá ver las características
de cada uno de ellos, así como también por cuál o tal nodo o enlace pasa cierto LSP, entre
otros valores. Si así lo desea, se le brinda la posibilidad de visualizar al mismo tiempo
todos los enlaces de la red, y ver el porcentaje de utilización de cada uno de ellos. Debido
a la manera en que esta desplegada la información, resulta muy práctico a la vista el
comparar unos con otros.
Al usuario también le podría
interesar el poder clasificar a los enlaces
de la red, de acuerdo al porcentaje de
utilización que tienen y visualizar esa
clasificación de una manera rápida y
sencilla en pantalla. NET-TE permite
realizar eso por medio de la herramienta
Utilización (ver Figura 2.9).
Figura 2.8: Ventana Estadísticas.
25
Basta tan sólo ingresar dos valores de porcentajes, una cota inferior y otra
superior, y NET-TE pintará de colores distintos cada uno de los tres niveles de utilización
para cada enlace.
Esta es una manera sencilla de visualizar en pantalla qué zonas de la red están
más saturadas que otras. Es en especial práctico para redes de gran tamaño, donde ver
valores numéricos no sea tan intuitivo como esto.
Figura 2.9: Ventana Utilización.
En caso de no ingresarse ningún número, se asignan dos valores por defecto.
26
Capítulo 3
Ingeniería de Tráfico (TE)
3.1 Introducción
La Ingeniería de Tráfico (TE) es una disciplina que procura la optimización de
la performance de las redes operativas. La Ingeniería de Tráfico abarca la aplicación de la
tecnología y los principios científicos a la medición, caracterización, modelado, y control
del tráfico que circula por la red. Las mejoras del rendimiento de una red operacional, en
cuanto a tráfico y modo de utilización de recursos, son los principales objetivos de la
Ingeniería de Tráfico. Esto se consigue enfocándose a los requerimientos del rendimiento
orientado al tráfico, mientras se utilizan los recursos de la red de una manera fiable y
económica.
Una ventaja práctica de la aplicación sistemática de los conceptos de Ingeniería de
Tráfico a las redes operacionales es que ayuda a identificar y estructurar las metas y
prioridades en términos de mejora de la calidad de servicio dado a los usuarios finales de
los servicios de la red. También la aplicación de los conceptos de Ingeniería de Tráfico
ayuda en la medición y análisis del cumplimiento de éstas metas.
La ingeniería de tráfico se subdivide en dos ramas principalmente diferenciadas
por sus objetivos:
Orientada a tráfico: ésta rama tiene como prioridad la mejora de los indicadores
relativos al transporte de datos, como por ejemplo: minimizar la pérdida de paquetes,
minimizar el retardo, maximizar el throughput, obtener distintos niveles de acuerdo para
brindar calidad de servicio, etc.
Orientada a recursos: ésta rama se plantea como objetivo, la optimización de la
utilización de los recursos de la red, de manera que, no se saturen partes de la red
mientras otras permanecen subutilizadas, tomando principalmente el ancho de banda
como recurso a optimizar.
Ambas ramas convergen en un objetivo global, que es minimizar la congestión.
Un reto fundamental en la operación de una red, especialmente en redes IP públicas a
gran escala, es incrementar la eficiencia de la utilización del recurso mientras se
minimiza la posibilidad de congestión.
Los paquetes luchan por el uso de los recursos de la red cuando se transportan a
través de la red. Un recurso de red se considera que está congestionado si la velocidad de
entrada de paquetes excede la capacidad de salida del recurso en un intervalo de tiempo.
La congestión puede hacer que algunos de los paquetes de entrada sean retardados
e incluso descartados. La congestión aumenta los retardos de tránsito, las variaciones del
retardo, la pérdida de paquetes, y reduce la previsión de los servicios de red. Claramente,
la congestión es un fenómeno nada deseable y es causada por ejemplo por la insuficiencia
27
de recursos en la red. En casos de congestión de algunos enlaces, el problema se resolvía
a base de añadir más capacidad a los enlaces.
La otra causa de congestión es la utilización ineficiente de los recursos debido al
mapeado del tráfico. El objetivo básico de la Ingeniería de Tráfico es adaptar los flujos
de tráfico a los recursos físicos de la red. La idea es equilibrar de forma óptima la
utilización de esos recursos, de manera que no haya algunos que estén sobre-utilizados,
creando cuellos de botella, mientras otros puedan estar subutilizados. En general, los
flujos de tráfico siguen el camino más corto calculado por el algoritmo IGP
correspondiente. La Ingeniería de Tráfico consiste en trasladar determinados flujos
seleccionados por el algoritmo IGP sobre enlaces más congestionados, a otros enlaces
más descargados, aunque estén fuera de la ruta más corta (con menos saltos).
En resúmen la Ingeniería de Tráfico provee por ende, de capacidades para realizar
lo siguiente:
•
Mapear caminos primarios alrededor de conocidos cuellos de botella o puntos de
congestionamiento en la red.
•
Lograr un uso más eficiente del ancho de banda agregado disponible, asegurando
que subgrupos de la red no se vuelvan sobre-utilizados, mientras otros subgrupos
de la red son inutilizados a lo largo de caminos potenciales alternativos.
•
Maximizar la eficiencia operacional.
•
Mejorar las características de la performance del tráfico orientado de la red,
minimizando la pérdida de paquetes, minimizando períodos prolongados de
congestión y maximizando el throughput.
•
Mejorar las características estadísticas de los límites de la performance de la red
(como ser tasa de pérdidas, variación del delay y delay de transferencia).
•
Proveer de un control preciso sobre cómo el tráfico es re-enrutado cuando el
camino primario se enfrenta con una sola o múltiples fallas.
3.2 Componentes de la Ingeniería de Tráfico
Hay cuatro componentes que se pueden destacar dentro de la Ingeniería de
Tráfico: la componente del packet fowarding, la componente de distribución de
información, la componente de selección de camino y la componente de señalización
(Por más información ver [2], RFC 3272).
Dentro de la primera componente tenemos a MPLS, responsable de dirigir un
flujo de paquetes IP a lo largo de un camino predeterminado a través de la red. Esa es una
de las principales diferencias entre MPLS e IP, ya que en IP, en vez de seguir los
paquetes un camino ya preestablecido, lo hacen salto a salto. Antes de continuar con la
segunda componente veamos una breve descripción sobre MPLS.
28
La clave detrás de MPLS es el mecanismo de asignación e intercambio de
etiquetas en que se basa. Esas etiquetas son las que permiten que se establezcan las rutas
que siguen los paquetes entre dos nodos de la red. Esa ruta a seguir se la conoce como
ruta conmutada de etiquetas (LSP). Se crea concatenando uno o más saltos (hops) en los
que se produce el intercambio de etiquetas, de modo que cada paquete se envía de un
“conmutador de etiquetas” (Label-Switching Router, LSR) a otro, a través de la red
MPLS.
Los routers en este tipo de redes pueden ser de dos tipos, routers de frontera de
etiquetas (LERs) y routers de conmutación de etiquetas (LSRs). Los LERs operan en
los extremos de la red MPLS y se encarga de interconectar a ésta con la red de acceso. Al
llegar un paquete a un LER, éste examina la información entrante y chequeando una base
de datos, le asigna una etiqueta. A la salida de la red MPLS, éstos mismos dispositivos se
encargan de remover la etiqueta para entregar así el paquete tal como fue recibido.
Los paquetes, una vez etiquetados por el LER, viajan por la red MPLS a través de
los routers de conmutación de etiquetas (LSRs). Estos se encargan básicamente de dirigir
el tráfico en el interior de la red, según sea la etiqueta que contenga el paquete. Al llegar
un paquete a un LSR, éste examina su etiqueta y usándola como índice en una tabla,
determina el siguiente “salto” y una nueva etiqueta para el paquete. Cambia una por otra
y lo envía hacia el siguiente router, formando así el LSP.
Un conjunto de paquetes que comparten los mismos requerimientos para su
transporte, pertenecen a la misma FEC (Forwarding Equivalence Class). Las FECs son
una manera de distinguir un tipo de tráfico de otro. Todos los paquetes que pertenezcan a
la misma FEC seguirán el mismo LSP para llegar a destino. A diferencia del
enrutamiento IP convencional, la asignación de un paquete a determinado FEC se hace
sólo una vez. Otra diferencia con IP, es que las etiquetas en MPLS no contienen una
dirección IP, sino un valor numérico acordado entre dos nodos consecutivos para brindar
una conexión a través de un LSP. Este valor se asocia a una determinada FEC.
Finalmente, luego que cada router tiene sus tablas de etiquetas puede comenzar el
direccionamiento de paquetes a través de los LSPs preestablecidos por un determinado
FEC.
Habiendo señalado las principales características de MPLS, proseguimos con la
segunda componente de TE. Ésta consiste en requerir de un conocimiento detallado de
la topología de la red así como también información dinámica de la carga en la red. La
componente de distribución de información es implementada definiendo extensiones
relativamente simples a los IGPs, tal que los atributos de los enlaces son incluídos como
parte de cada aviso del estado de enlace en cada router.
Cada router mantiene atributos de los enlaces de la red e información de la
topología de la red en una base de datos de TE especializada (TED). La TED es usada
exclusivamente para el cálculo de rutas explícitas, para la ubicación de LSPs a lo largo de
la topología física. En forma aparte, una base de datos es mantenida, de manera que el
cálculo subsiguiente de la ingeniería de tráfico sea independiente del IGP y de la base de
datos del estado de enlace del IGP. Mientras tanto, el IGP continúa su operación sin
ninguna modificación, realizando el cálculo tradicional del camino más corto, basado en
información contenida en la base de datos del estado de enlace en el router.
29
En cuanto a la componente de selección de caminos, luego que los atributos de
los enlaces y la información de la topología han sido inundados por IGP y localizados en
la TED, cada router de ingreso utiliza la TED para calcular los caminos de su propio
conjunto de LSPs a lo largo del dominio de ruteo. El camino para cada LSP puede ser
representado tanto por lo que se denomina, una ruta explícita estricta o sin trabas(“strict
or loose explicit route”). El router de ingreso determina el camino físico para cada LSP
aplicando por ejemplo, un algoritmo de restricciones de camino más corto (CSPF,
Constrained Shortest Path First) a la información en la TED.
A pesar de que se reduce el esfuerzo de administración (resultado del cálculo
online del camino) una herramienta de planeamiento y análisis offline es necesaria si se
quiere optimizar la TE globalmente. En el cálculo online se toma en consideración las
restricciones de los recursos y se va calculando un LSP a la vez, a medida que van
llegando las demandas. Esto implica que el orden en que los LSPs son calculados es muy
importante, ya que depende de los LSPs ya establecidos, por dónde se dirigirá cada nuevo
LSP que llega. Si se cambiara el orden de llegada de los LSPs, es muy probable que los
caminos elegidos para establecerlos cambien también. De esta manera, los LSPs que se
calculan primero tienen más recursos disponibles para utilizar que los que llegan más
tarde, ya que todo LSP calculado previamente consume recursos.
Por otro lado, una herramienta de planeamiento y análisis offline, examina en
forma simultánea las restricciones de recursos de cada enlace y los requerimientos de
cada LSP. Si bien el acercamiento offline puede tardar varias horas en completarse,
realiza cálculos globales comparando los resultados de cada cálculo y selecciona
entonces la mejor solución de la red tomada como un conjunto. La salida del cálculo es
un conjunto de LSPs que optimizan la utilización de los recursos de la red. Una vez
finalizado el cálculo offline, el LSP puede ser establecido en cualquier orden ya que cada
uno ha sido instalado siguiendo las reglas para una solución óptima global.
Por último, la componente de señalización es la responsable de que el LSP sea
establecido para que sea funcional mediante el intercambio de etiquetas entre los nodos
de la red. La arquitectura MPLS no asume un único protocolo de distribución de
etiquetas; de hecho se están estandarizando algunos existentes con las correspondientes
extensiones como son RSPV y LDP.
30
Parte II
Principios y Bases Teóricas
31
Capítulo 4
Constraint Shortest Path First (CSPF)
4.1 Principios básicos de CBR
Para poder entender el concepto de Constraint Based Routing (CBR), debemos
mirar primero al sistema de ruteo convencional usado en redes IP, como la Internet. Una
red es modelada como una colección de Sistemas Autónomos (AS), donde las rutas
dentro de un AS son determinadas por ruteo intradominio y las rutas que atraviesan
múltiples ASs son determinadas por ruteo interdominio. Ejemplos de protocolos
intradominio son RIP, OSPF y IS-IS. El protocolo de ruteo interdominio usado hoy en día
en redes IP es BGP. Nos enfocaremos de ahora en más al ruteo intradominio ya que
utiliza para el cálculo de los caminos algoritmos que buscan minimizar cierta métrica en
particular, como es el caso de CSPF usado en NET-TE.
La computación de caminos para cualquiera de los protocolos de ruteo
intradominio que mencionamos anteriormente, se basa como ya indicamos, en un
algoritmo que optimiza (minimiza) una métrica escalar en particular. En el caso de RIP,
dicha métrica es el número de saltos. En el caso de OSPF o IS-IS la métrica es la métrica
administrativa de un camino. Esto es, con OSPF (o IS-IS), un administrador de red asigna
a cada enlace en la red una métrica administrativa. Dada la opción de múltiples caminos a
un destino dado, OSPF (o IS-IS) usa el algoritmo de Dijkstra del camino más corto (SPF)
para computar el camino que minimiza la métrica administrativa del camino, donde la
métrica administrativa del camino se define como la suma de las métricas administrativas
en todos los enlaces a lo largo del camino.
La diferencia principal entre el ruteo IP convencional y el ruteo basado en
restricciones (CBR) es la siguiente. Algoritmos de ruteo plano IP intentan encontrar un
camino que optimiza una determinada métrica escalar, mientras que los algoritmos
basados en CBR intentar encontrar un camino que optimice cierta métrica escalar y al
mismo tiempo que no viole un conjunto de restricciones. Es precisamente la habilidad de
encontrar un camino que no viole un conjunto de restricciones lo que distingue al ruteo
basado en restricciones del ruteo plano IP.
Los mecanismos claves necesarios para soportar ruteo basado en restricciones son
a grandes rasgos los enumerados a continuación.
El primer mecanismo que necesitamos es la habilidad de computar un camino,
y de hacerlo de manera tal que no tome sólo en cuenta determinada métrica escalar usada
como criterio de optimización, sino también un conjunto de restricciones que no deben
ser violadas. Esto requiere que la fuente tenga toda la información necesaria para
computar dicho camino.
El segundo mecanismo es la habilidad de distribuir la información sobre la
topología de la red y atributos asociados a los enlaces a través de la red. Esto porque ya
que cualquier nodo en la red es potencialmente capaz de generar tráfico que tenga que ser
ruteado vía ruteo basado en restricciones, la información que usa la fuente para computar
el camino debe estar disponible a cualquier nodo de la red.
32
Una vez computado el camino, también necesitaremos el soportar el envío a
través de dicho camino. Por lo que el tercer mecanismo es aquel que sea capaz de
soportar el ruteo explícito.
Por último, el establecer una ruta para un conjunto particular de tráfico, puede
requerir la reserva de recursos a lo largo de esa ruta, alterando quizás el valor de los
atributos asociados a enlaces individuales de la red. Por lo que el último mecanismo es
uno a través del cual se puedan reservar recursos de la red y sean modificados los
atributos de los enlaces como resultado de cierto tráfico tomando ciertas rutas.
De ahora en más nos basaremos en comentar el algoritmo Constraint Shortest
Path First (CSPF), el cual, como mencionamos anteriormente, es usado por CBR para
computar un camino.
Figura 4.1: Modelo del servicio CBR
4.2 CSPF
Como se dijo anteriormente, CBR requiere la habilidad de computar un camino de
manera tal que
•
•
Sea óptimo respecto a alguna métrica escalar (por ejemplo el minimizar la
cantidad de saltos o un métrica administrativa)
No viole un conjunto de restricciones
Una manera de lograr esos objetivos es usar el algoritmo de shortest path first
(SPF). El algoritmo SPF plano, computa un camino que es óptimo con respecto a cierta
métrica escalar. Entonces, para computar un camino que no viole restricciones, todo lo
que necesitamos es el modificar el algoritmo de manera tal que pueda tomar en cuenta
33
esas restricciones. Nos referiremos a tal algoritmo como constraint shortest path first
(CSPF) (Ver [3] por más información).
Para entender como SPF debe ser modificado para tomar restricciones en cuenta,
miremos primero como es la operación del SPF plano. El algoritmo SPF plano trabaja
empezando de un nodo llamado raíz, y creando luego a partir del mismo, una estructura
en forma de árbol que contiene el camino más corto. En cada iteración del algoritmo, hay
una lista de posibles nodos “candidatos” (inicialmente esta lista contiene sólo a la raíz).
En general, los caminos de la raíz a los nodos candidatos no son los más cortos. Sin
embargo, para el nodo candidato que esta más cerca de la raíz (con respecto a la distancia
usada por SPF), el camino a ese nodo es el más corto garantizadamente. Entonces, en
cada iteración, el algoritmo toma de la lista de candidatos, al nodo con la distancia más
corta a la raíz. Este nodo es entonces agregado al árbol del camino más corto y removido
de la lista de nodos candidatos. Una vez que el nodo ha sido agregado al árbol del camino
más corto, los nodos que no están en el árbol, pero son adyacentes a ese nodo, son
examinados para una posible adición o modificación de la lista de candidatos. El
algoritmo entonces itera nuevamente. Para el caso en donde se desee encontrar el camino
más corto de la raíz a todo el resto de los nodos, el algoritmo termina cuando la lista de
candidatos esta vacía. Para el caso en que se desee simplemente encontrar el camino más
corto de la raíz a algún otro nodo especifico, el algoritmo termina cuando este otro nodo
es agregado al árbol del camino más corto.
Figura 4.2: Proceso de computación del CSPF
En la Figura 4.2 se puede apreciar el proceso total de computación del algoritmo
CSPF. Vale destacar que la TED es la Base de Datos de Ingeniería de Tráfico, la cual
provee a CSPF con información actual sobre la topología de la red.
Dadas las operaciones del SPF plano, es bastante sencillo el observar la
modificación que debemos hacerle al mismo de manera de convertirlo a CSPF. Todo lo
que tenemos que hacer es modificar el paso que maneja la adición o modificación de la
lista de candidatos. Específicamente, cuando agregamos un nodo al árbol del camino más
corto y nos fijamos en los enlaces adyacentes a ese nodo, nos fijamos primeramente si
34
esos enlaces satisfacen todas las restricciones planteadas. Sólo si el enlace satisface todas
las restricciones, recién ahí examinamos el nodo que esta ubicado en el otro extremo del
enlace.
En general, el procedimiento por el cual chequeamos si un enlace satisface una
restricción en particular, es específico de la naturaleza de la restricción. Por ejemplo,
cuando la restricción que queremos satisfacer es al ancho de banda disponible, entonces
el chequeo es si el ancho de banda disponible en el enlace es mayor o igual al ancho de
banda especificado por la restricción; sólo si lo es, es que examinamos el nodo ubicado
en el otro extremo del enlace.
También observar que el chequear si un enlace satisface una restricción en
particular, asume que hay una información de restricción relacionada, asociada con el
enlace. La naturaleza de esta información relacionada a la restricción. Por ejemplo,
cuando la restricción que queremos satisfacer es el ancho de banda disponible, la
información que necesitamos es tener al ancho de banda disponible en un enlace.
Notar que el algoritmo CSPF requiere que el router que realiza la computación del
camino, tenga información sobre todos los enlaces en la red. Esto impone una restricción
en el tipo de protocolo de ruteo que podemos usar para soportar el ruteo basado en
restricciones (CBR). Tenemos que usar protocolos de estado de enlace como IS-IS u
OSPF, ya que protocolos de ruteo de vector distancia como RIP no son capaces de
encontrar estos requerimientos.
Como comentario sobre uno del resto de los mecanismos restantes necesarios para
soportar CBR, la capacidad de ruteo explícito necesaria es provista por MPLS.
En el caso del software NET-TE en este proyecto, se utilizó CSPF para computar
los caminos para los LSPs obligando a que cumplan ciertos requerimientos. El
requerimiento usado en este proyecto fue el ancho de banda disponible en cada enlace de
la red. Además se le agregó la posibilidad de que el usuario pueda obligar al LSP hayado
que pase por cierto enlace de la red así como que no pase por otro en particular. La razón
por la cual se puede desear querer obligar que un LSP pase por cierto enlace y no lo haga
por otro depende totalmente del usuario y de la forma en que él gestione su red. Además
es importante destacar que con respecto a los pesos asignados a los enlaces al momento
de correr el SPF, se le ofrece al usuario la oportunidad de usar distintos pesos,
dependiendo de cual sea la métrica en la que él este interesado de usar (por ejemplo la
cantidad mínima de saltos, minimizar los pesos administrativos asignados por el mismo a
los enlaces o hacer la métrica en función del ancho de banda disponible en los enlaces,
entre otros).
4.3 Ruteo basado en QoS. WSP y SWP.
El ruteo basado en QoS ha sido un área de investigación muy activa por muchos
años. Selecciona rutas en la red que satisfagan la QoS requerida para una conexión o
grupo de conexiones. Además, el ruteo basado en QoS logra una eficiencia global en la
utilización eficiente de los recursos. Un ejemplo de esto es al algoritmo ShortestWidest-Path (WSP), el cual usa al ancho de banda como una métrica y selecciona los
caminos que tienen un cuello de botella de ancho de banda mayor. El cuello de botella de
35
ancho de banda representa la capacidad mínima no usada de todos los enlaces en el
camino. En el caso de dos caminos con el mismo cuello de botella de ancho de banda, el
camino con la mínima cantidad de saltos es seleccionado (Ver [4] por más información).
Los algoritmos de ruteo usados en CBR y la complejidad de los mismos, depende
del tipo y del número de métricas que son incluídas en el cálculo de la ruta. Algunas de
las restricciones pueden ser contradictorias (por ejemplo costo vs. ancho de banda, delay
vs. throughput). Resulta que el ancho de banda y la cuenta de saltos son en general
restricciones más útiles en comparación con el delay y jitter, ya que muy pocas
aplicaciones no pueden tolerar una ocasional violación de dichas restricciones, y como el
delay y jitter se pueden determinar por medio del ancho de banda alojado y número de
saltos del camino donde va el flujo, éstas restricciones pueden ser mapeadas en
restricciones de ancho de banda y número de saltos, en caso de ser necesario. Otro factor
es que muchas aplicaciones en tiempo real requieren un determinado ancho de banda. El
número de saltos de una ruta también es una métrica importante, ya que cuantos más
saltos atraviese un flujo, más recursos consumirá.
Con las implementaciones básicas del esquema de CBR, hay una especie de
balance y equilibrio entre la conservación de recursos y el balance de carga. Un esquema
de CBR puede seleccionar de las siguientes opciones para un camino viable para un flujo:
•
•
•
Shortest-Distance Path (SDP): éste acercamiento es básicamente el mismo
que el ruteo dinámico. Hace énfasis en preservar los recursos de la red por
medio de la selección de los caminos más cortos.
Widest-Shortest Path (WSP): éste acercamiento hace énfasis en balancear
la carga por medio de la elección de caminos más “anchos” en cuanto al ancho
de banda. Encuentra caminos con el mínimo número de saltos y, si encuentra
múltiples caminos, se queda con el que tiene ancho de banda mayor.
Shortest-Widest Path (SWP): éste acercamiento hace una especie de
intercambio entre los dos extremos. Favorece a los caminos más cortos
cuando la carga de la red es pesada y a los caminos más “anchos” cuando la
carga de la red es moderada. Encuentra un camino con el ancho de banda más
grande y, en caso de haber múltiples caminos, se queda con el que tiene la
mínima cantidad de saltos.
En los últimos dos casos se consumen más recursos, lo cual no es eficiente
cuando la utilización de la red es alta. Se debe hacer un balance o equilibrio entre la
conservación de recursos y el balance de carga (Ver [5] por más información).
Vale hacer notar en este momento, que cualquiera de las 3 opciones superiores se
pueden implementar en el software NET-TE, combinando correctamente la elección del
tipo de pesos para los enlaces con la elección del criterio de TE.
36
Capítulo 5
Minimum Interference Routing
Algorithm (MIRA)
5.1 Presentación del algoritmo
La idea de éste tipo de algoritmos es la de minimizar la “interferencia” que
provoca el establecimiento de un nuevo LSP a potenciales nuevos LSPs que son
desconocidos. Mapear un LSP en la red puede reducir el máximo ancho de banda
disponible entre algunos pares de nodos ingreso-egreso críticos en la red, dependiendo de
por dónde se dirija el mismo. Este fenómeno es conocido como “interferencia”. Esto nos
lleva a pensar que si los caminos que reducen la cantidad de ancho de banda disponible
entre otros nodos ingreso-egreso son evitados, entonces la creación de los cuellos de
botella puede ser evitada también.
Para llevar a cabo esto, se asocia a cada enlace de la red un peso y luego se aplica
SPF a la red. Este peso es proporcional a cuán crítico es el enlace para el establecimiento
de LSPs entre pares de nodos ingreso-egreso. De esta manera futuras demandas entre
estos nodos tendrán baja probabilidad de ser rechazadas.
En este tipo de algoritmos es necesario conocer la topología actual y las
capacidades disponibles. Se asume que la topología es conocida administrativamente o
que un protocolo de ruteo de estado de enlace está operacional (OSPF, IS-IS, etc.) y que
la base de datos de los estados de los enlaces es accesible. Además, desde cierto nodo
ingreso, pueden ser permitidos LSPs a ciertos egresos solamente Esto se debe por
ejemplo a restricciones de política o de servicio. Toda información de este tipo es
conocida, y se asume que no varía frecuentemente.
Existen varios trabajos respecto a algoritmos que disminuyen la interferencia,
pero el algoritmo que implementamos en nuestro software esta basado en el algoritmo
MIRA (por más información ver Referencias [6] y [7]).
En la Figura 5.1 se muestra en que casos éste tipo de algoritmo soluciona los
problemas causados por los algoritmos clásicos como el min-hop algorithm.
37
Figura 5.1: Ejemplo de uso del MIRA
Consideramos que los nodos ingreso-egreso son (A, G), (B, G), (C, G). Se puede
dar la situación en que se necesiten varios LSPs entre (A,G) y se utiliza el enfoque de
min-hop los LSPs serán mapeados en el camino con menor cantidad de saltos, saturando
los enlaces A-D y D-G y bloqueando futuras demandas entre (B,G) y (C,G), siendo lo
ideal un algoritmo que tenga en consideración lo crítico que son estos enlaces en éstas
futuras demandas, de modo de mapear la demanda entre (A,G) por A-E-F-G aunque éste
camino sea más largo (en lo que a número de saltos se refiere).
5.2 Modelado del sistema
Se considera una red de n nodos representados por un grafo G = (V, E), donde V
es el conjunto de nodos en la red y E el conjunto de m enlaces de la red. Un subconjunto
de estos nodos es considerado como nodos ingreso-egreso de futuras demandas y se
denota a este subconjunto como L. Sin embargo, no es necesario conocer este
subconjunto para que el algoritmo funcione, ya que se puede considerar que L=V de
modo que cada par de nodos pueden ser los nodos ingreso-egreso para futuras demandas.
La capacidad disponible R (l) de cada enlace l se asume conocida (mediante alguna
extensión del protocolo de enlace de estado operacional).
5.3 Algoritmo propuesto
El pseudo código del algoritmo para el establecimiento de un LSP entre (s, d) se
presenta a continuación:
1- Calcular el MNF (Maximum Network Flow) entre todos los pares ingreso-egreso
(s' , d ') ∈ L .
2- Calcular el peso w(l) para todos los enlaces l ∈ E .
38
3- Eliminar todos los enlaces que tienen ancho de banda disponible menor al
requerido por el LSP y formar una nueva topología con los nodos y enlaces
restantes.
4- Correr SPF con la topología reducida.
5- Establecer el LSP entre (s, d ) y actualizar los anchos de banda disponible en cada
enlace.
Específicamente, dada una nueva demanda entre (s, d ) , se considera el impacto
de mapear esta demanda en futuras demandas entre nodos ingreso-egreso. Este impacto
es caracterizado al asignarle pesos a los enlaces que pueden ser usados por estas futuras
demandas. Cuando consideramos un par de nodos ingreso-egreso (s ' , d ') ∈ L , primero
calculamos el MNF (maximum network flow) θ s 'd ' [3] entre s’ y d’. El MNF representa
el máximo ancho de banda que puede traficar la red entre el par de nodos (s, d), ya sea
por varios caminos o por uno sólo. Luego para cada enlace l ∈ E se calcula la
f s 'd '
contribución del enlace a este MNF entre s’ y d’ que es representado como ls 'd ' , donde
θ
s 'd '
f l es la cantidad de tráfico de MNF que pasa por l. También se necesita caracterizar el
ancho de nada disponible en el enlace l de modo de incorporar la capacidad de mapear
futuras demandas por el enlace. Hacemos esto calculando la contribución normalizada de
ancho de banda del enlace l como sigue,
f l s 'd '
(5.1a)
θ s 'd ' R(l )
Ésta es la diferencia principal de este algoritmo con respecto a otros, como
versiones anteriores del MIRA, en las cuales sólo se considera si los enlaces son críticos
o no en futuras demandas ( f l s 'd ' =1 ó 0). De ésta manera se considera la importancia del
enlace pero también el cuantificar esta importancia con la contribución normalizada de
ancho de banda.
Luego se asigna a cada enlace el peso total debido a todas las contribuciones de
todos los pares ingreso-egreso (s ' , d ') ∈ L que pueden originar LSPs en el futuro:
w(l ) =
f l s 'd '
∑ s 'd ' R(l ) , l ∈ E
( s ', d ')∈L θ
(5.2a)
Una vez que los pesos son calculados y asignados, se eliminan los enlaces en E
que tienen el ancho de banda disponible menos al requerido por la demanda
obteniéndose una topología reducida con los pesos asignados incambiados. Luego se
corre el SPF basado en Dijkstra para obtener el LSP entre s y d y se actualiza el ancho de
banda disponible en los enlaces que pertenecen al nuevo LSP.
39
Capítulo 6
Redes Justas (“Fair Networks”)
6.1 Introducción
Debido a que la distribución del tráfico en las redes de datos cambia rápidamente,
es complicado para los operadores de una red, el determinar cuándo y dónde incrementar
la capacidad de la misma, lo cual puede llevar a problemas de sobrecarga.
La toma de decisión sobre cuántos usuarios pueden ser atendidos y cuánto tráfico
puede generar cada uno de ellos, es un tema del que se encarga el proceso de admisión de
tráfico. El mismo, es responsable de garantizar que los usuarios tengan un acceso justo a
los servicios de la red, al mismo tiempo de minimizar la probabilidad de negar un
servicio a un cliente.
El determinar cuánto tráfico de cada flujo debe ser admitido por la red y por
dónde rutear al mismo una vez que ingresa, satisfaciendo los requerimientos de alta
utilización de la red y garantizando justicia a los usuarios, es uno de los retos más
grandes en el diseño de las redes de telecomunicaciones de hoy en día.
Así nos encontramos frente a la pregunta de cómo distribuir económicamente
cierto volúmen de demanda sobre una red, bajo cierto conjunto de restricciones de ruteo y
flujo.
La primera hipótesis es que las demandas entre pares de nodos origen-destino,
pueden utilizar cualquier ancho de banda asignado a ellas en términos de sus flujos de
caminos, quizás bajo ciertos límites.
La pregunta es: ¿qué principio debemos seguir al alojar las demandas entre los
recursos que la red tiene pare ofrecer, de manera de cumplir con algún criterio de
justicia?
Una primera solución que se nos podría ocurrir es asignar la mayor cantidad de
recursos a cada demanda, al mismo tiempo que se intenta mantener los recursos
asignados lo más similares posible. Esto nos lleva al principio de asignación llamado
Max-Min Fairness (MMF), usado para formular el esquema de asignación de recursos
(Ver [10] por más información).
La noción de justicia se presenta en el contexto de redes basadas en el intercambio
de paquetes, transportando demandas elásticas entre pares de nodos. Con elasticidad nos
referimos a que cada demanda puede consumir cualquier ancho de banda agregado
asignado a sus caminos individuales, quizás dentro de determinados límites predefinidos.
En las próximas secciones de éste capítulo mostraremos los enunciados
principales de los problemas MMF, analizando cómo usar sus nociones para expresar la
justicia en el proceso de admisión de tráfico. Se presentarán los cuatro diferentes métodos
que fueron implementados en el software NET-TE.
40
*La información, así como los enunciados y métodos presentados en éste
capítulo, fueron extraídos del libro "Routing, Flow and Capacity Design in
Communication and Computer Networks", de Michal Pioro y Deepankar Medhi [10].
6.1.1
Nociones de Justicia
Consideremos una red con demandas elásticas. Un problema general con este tipo
de redes es cómo asignar flujos (BW) a los caminos de las demandas, de manera que las
capacidades de los links no son excedidas y que los actuales volumenes de ancho de
banda agregado asignados a las demandas sean distribuídos de una manera justa.
6.2
Algoritmo 1: Max-Min Fairness básico para
caminos fijos
Consideremos una red con enlaces de capacidades fijas y con caminos prefijados
únicos asignados para transportar los flujos de las demandas (o sea que en caso de existir
varios caminos posibles entre determinado par de nodos, nos quedamos solamente con
uno sólo de ellos, pudiendo éste ser elegido por el usuario a su gusto).
Antes de seguir con el planteo del primer método utilizado de asignación justa de
recursos, debemos introducir una definición:
Definición 6.1:
Un vector de n componentes x = (x1, x2,…, xn) ordenado en orden ascendente (x1 ≤ x2 ≤…
≤ xn) es lexicográficamente mayor que otro vector de n componentes y = (y1, y2,…, yn)
ordenado ascendentemente (y1 ≤ y2 ≤… ≤ yn) si existe un índice k, 0 ≤ k ≤ n, tal que xi = yi
para i=1, 2,…, k y xk > yk.
Ahora presentemos la formulación del primer algoritmo.
Índices
d = 1, 2,…, D demandas
e = 1, 2,…, E enlaces
Constantes
δ ed = 1 si el enlace e pertenece al camino fijo de la demanda d; 0 en otro caso
ce Capacidad del enlace e
Variables
xd Flujo asignado a la demanda d, x = (x1, x2,…, xD)
Objetivo
Hayar el vector de asignación x, el cual, cuando ordenado en orden ascendente, es
lexicográficamente máximo entre todos los vectores de asignación ordenados en orden
ascendente.
41
Restricciones
∑δ
ed
xd ≤ ce
e = 1, 2,..., Ε
(6.2.1a)
d
x≥0
(6.2.1b)
Obviamente, como es simple de ver, la ecuacion (6.2.1a) quiere decir que, para
cada enlace, la suma de los anchos de banda de cada demanda que pase por ese enlace, no
puede ser mayor que la capacidad de dicho enlace, lo cual es razonable.
De acuerdo a la Definición 6.1, la solución x* de éste problema tiene la propiedad
de que para cualquier otro posible vector x = (x1, x2,…, xD), cuando ambos vectores están
ordenados ( xi*(1) ≤ xi*(2) ≤ ... ≤ xi*( D )
y
x j (1) ≤ x j (2) ≤ ... ≤ x j ( D ) ) entonces existe un índice
d, 0 ≤ d ≤ D, tal que xi*(l ) = x j (l ) para l = 1, 2,…, d y xi*( d +1) > x j ( d +1) .
Para establecer la equivalencia de la caracterización lexicográfica de la solución
óptima al problema MMF/FIXSP (Max-Min Fairness for Fixs Paths; problema que
estamos actualmente analizando) con una caracterización justa max-min más conocida,
para el caso considerado de camino fijo único, debemos introducir a continuación una
nueva definición y proposición.
Definición 6.2
Un posible vector de asignación de flujo x que satisfaga (6.2.1a y 6.2.1b) es max-min
justo si para cada demanda d existe un enlace saturado e ( ∑ δ ed xd = ce ) perteneciente al
d
camino que satisface la demanda d ( δ ed = 1 ) de manera tal que el flujo xd es máximo en e
( xd = max { xd ' : d ' = 1, 2,..., D; δ ed ' = 1}) .
Proposición 6.1
Un vector de asignación x* resuelve el problema anterior si y sólo si es max-min justo en
el sentido señalado por la Definición 6.2. La solución x* de este problema es única.
Finalmente, la formulación completa del problema de MMF con caminos fijos
únicos es la siguiente:
6.2.1 Formulación completa del Algoritmo 1:
Variables
xd
ued
ze
flujo asignado a la demanda d
variable auxiliar binaria, ued = 0 si el enlace e pertenece al camino de la
demanda d, e esta saturado y xd es máximo en e; ued = 1 en cualquier otro
caso
variable auxiliar del flujo para el enlace e
42
Restricciones
∑δ
ed
xd ≤ ce
∑δ
ed
(1 − υed ) ≥ 1
e = 1, 2,..., Ε
(6.2.2a)
d
(6.2.2b)
d = 1, 2,..., D
e
υed ce ≥ ce − ∑ δ ed ' xd '
e = 1, 2,..., Ε
(6.2.2c)
d ' = 1, 2,..., D
d'
υed ce ≥ ze − xd
xd ≥ ze
e = 1, 2,..., Ε
e = 1, 2,..., Ε
d = 1, 2,..., D
d = 1, 2,..., D
y
y
δ ed = 1
δ ed = 1
(6.2.2d)
(6.2.2e)
con todas las xd y ze continuas no negativas y todas las ued binarias (6.2.2f)
Como comentarios que podemos hacer al respecto de la formulación de las
ecuaciones anteriores, si observamos la ecuación (6.2.2b) podemos ver que lo que
básicamente quiere decir es que para cada demanda, si consideramos sólo los enlaces que
la conforman, existe alguno para el cual ued es igual a 0, lo cual implica que ése enlace e
está saturado y xd es máximo en el mismo (dicho de otra manera, que llegué a obtener al
mayor ancho de banda posible para ésa demanda y me doy cuenta de ello, ya que alguno
de los enlaces que conforman la demanda saturó ya). Luego, la ecuación (6.2.2c),
básicamente nos hace ver que si ued es igual a cero para un determinado enlace, entonces
la parte de la derecha de ésa ecuación es cero también, indicando que ya ha saturado el
enlace, debido a que la suma de todos los anchos de banda de todas las demandas que
pasan por el mismo ha igualado a su capacidad. Finalmente, de las ecuaciones (6.2.2d) y
(6.2.2e) sacamos que si ued es igual a cero, entonces xd = max{xd’: d’=1,2,…D, y
δ ed ' = 1 } (dicho en otras palabras, si ued=0 entonces xd es el máximo flujo en el enlace e.
Por ende, usando la Preposición 6.1, el problema (6.2.2) tiene una solución única
x* = ( x1* , x2* ,..., xD* ) , idéntica a la solución inicial del problema (6.2.1)).
Finalmente, el único vector justo max-min (máximo vector de asignación
lexicográfico) x* = ( x1* , x2* ,..., xD* ) , puede ser hayado usando el siguiente algoritmo 1.
6.2.2 Pasos para resolver el Algoritmo 1
Paso 0:
Poner x* = 0
Paso 1:


t := min ce / ∑ δ ed : e = 1, 2,..., E 
d


Paso 2:


ce := ce − t  ∑δed 
d

para
e = 1,2,..., E;
43
xd* := xd* + t
para
d = 1,2,..., D
Remover todos los enlaces saturados (todos los enlaces e con ce=0). Para
cada enlace removido e, remover todos los caminos y correspondientes
demandas que usan ese enlace removido (todas las d con δ ed = 1 ).
Paso 3:
Si no queda ninguna demanda más, entonces detenerse. En caso
contrario ir al paso 1.
Observar que la cantidad t calculada en el paso 1, es la solución del siguiente
problema de programación lineal (LP):
maximizar
t
(6.2.3a)
sujeto a


t  ∑ δ ed  ≤ ce
 d

e = 1, 2,..., E
(6.2.3b)
Esa observación nos permitirá a nosotros extender la noción y solución de algoritmos
para problemas más generales MMF como el que veremos más adelante.
6.3
Algoritmo 2: Max-Min Fairness para
caminos fijos con cotas
Ahora seguiremos considerando el caso del MMF para caminos fijos, pero
agregándole ahora pesos a las demandas y cotas superior e inferior a los flujos asignados
a esas demandas.
6.3.1
Formulación del Algoritmo 2:
Índices
d = 1, 2,…, D demandas
e = 1, 2,…, E enlaces
Constantes
δ ed = 1 si el enlace e pertenece al camino fijo de la demanda d; 0 en caso
contrario
ce
capacidad del enlace e
wd
peso de la demanda d
hd
límite inferior para el flujo de la demanda d
Hd
límite superior para el flujo de la demanda d
Variables
xd
flujo asignado a la demanda d, x = (x1, x2,…, xD)
Objetivo
Encontrar el vector de asignación x, el cual, cuando está ordenado en orden
ascendente, es lexicográficamente máximo entre todos los vectores de asignación
ordenados ascendentemente.
44
Restricciones
hd ≤ xd ≤ H d
∑δ
ed
d = 1, 2,..., D
wd xd ≤ ce
(6.3.1a)
(6.3.1b)
e = 1, 2,..., E
d
(6.3.1c)
x≥0
En la restricción (6.3.1b) la carga del enlace e inducida por el flujo xd es igual a
δ ed wd xd , lo cual implica que el flujo actual asignado a la demanda d es igual a wdxd.
Debido a la presencia de límites inferiores, el problema se puede tornar irresoluble.
La solución al problema del Algoritmo 2 (MMF/EFIXSP), x* = ( x1* , x2* ,..., xD* ) ,
puede ser encontrada usando el algoritmo 6.3.2 que enunciaremos a continuación. Este
algoritmo es similar al algoritmo 6.2.2 visto anteriormente. Hace uso también del
siguiente problema LP:
6.3.2
Paso 0:
maximizar
t
(6.3.2a)
sujeto a


t  ∑ wd δ ed  ≤ ce
 d

e = 1, 2,..., E
(6.3.2b)
Pasos para resolver el Algoritmo 2:
Poner xd* = hd para d = 1, 2,…, D y
ce := ce − ∑δ ed wd hd
para
e = 1, 2,..., E;
d
Paso 1:
Paso 2:
Paso 3:
Remover todos los enlaces saturados (todos los e con ce = 0). Para cada
enlace removido e remover todos los caminos y correspondientes
demandas que usan el enlace removido (todas las d con δ ed = 1 ).
Resolver el problema LP (6.3.2) para obtener t.


ce := ce − t  ∑ δ ed wd 
 d

para
e = 1, 2,..., E;
xd* := xd* + t
para
d = 1, 2,..., D
Remover todos los enlaces saturados (todos los e con ce=0). Para cada
enlace removido e remover todos los caminos y correspondientes
demandas que usen el enlace removido (todas las d con δ ed = 1 ).
Si no quedan más demandas entonces detenerse. En caso contrario ir al
paso 1.
45
Observación
La implementación de este algoritmo consiste básicamente en agregar un enlace
y nodo ficticio para cada demanda, de manera de asegurarse que por dicho enlace pase
solamente ésa demanda en particular. O sea que cada demanda tendrá un enlace y nodo
ficiticio propio de ella. La capacidad de dicho enlace ficticio será igual al ancho de banda
requerido para la demanda en cuestión. De esta manera, nos aseguramos que el ancho de
banda no se aumente más que el ancho de banda requerido por el usuario. Es una manera
de poner un tope superior al ancho de banda.
En las próximas secciones consideraremos un problema más general para MMF,
que involucrará optimización simultánea de caminos y flujos. Nos referimos a este tipo
de problemas como problemas de caminos flexibles, en contraste con los problemas de
caminos fijos vistos hasta ahora. En particular, el problema analizado a continuación es
con capacidades para caminos flexibles.
Se considerará ahora el caso donde múltiples caminos son posibles candidatos en
la lista de ruteo asignada a cada demanda. Esto implica por ende que, los flujos que
satisfacen el volumen de cada demanda son divididos entre los posibles caminos, lo cual
resultará, en general, en un vector de asignación lexicográficamente mayor que el que
resuelve el caso de los caminos fijos.
6.4
Algoritmo 3: Max Min Fairness para
múltiples caminos
El siguiente problema es para múltiples caminos flexibles (MMF/FLMP, MaxMin Fairness for Flexible Multiple Paths).
Índices
d = 1, 2,…, D
p = 1, 2,…, Pd
e = 1, 2,…, E
demandas (pares de nodos)
caminos candidatos para la demanda d
enlaces
Constantes
δ edp = 1 si el enlace e pertenece al camino p de la demanda d; 0 en caso contrario
ce
Variables
xdp
Xd
XD)
capacidad del enlace e
flujo (ancho de banda) asignado al camino p de la demanda d
flujo total (ancho de banda) asignado a la demanda d, X = (X1, X2,…,
46
Objetivo
Encontrar el vector de asignación de flujo total X, el cual, cuando ordenado en
orden ascendente, es lexicográficamente máximo entre todos los vectores de
asignación ordenados en orden ascendente.
Restricciones
∑ xdp = X d
d = 1, 2,..., D
(6.4.1a)
p
∑∑ δ
d
x = ce
edp dp
e = 1, 2,..., E
(6.4.1b)
p
todos los xdp ≥ 0.
(6.4.1c)
El problema con el que ahora tratamos es más difícil de resolver que su
contraparte de camino único MMF/FIXSP, debido a que ahora las soluciones de la
apropiada extensión al problema LP (6.2.3) son, en general, no únicas. La extensión es
como sigue.
maximizar
sujeto a
t
(6.4.2a)
X d = ∑ xdp
d = 1, 2,..., D
p
t − Xd ≤ 0
∑∑ δ
d
d = 1, 2,..., D
x = ce
edp dp
e = 1, 2,..., E
p
todos los xdp ≥ 0
(6.4.2b)
(6.4.2c)
(6.4.2d)
(6.4.2e)
La función objetivo (6.4.2a), junto con la restricción (6.4.2c) es equivalente al
objetivo en el que estamos interesados en realidad:
maximizar
min {Xd : d = 1, 2,…, D}
Eso se debe a que por la ecuación (6.4.2c), si queremos maximizar t, esto
equivale a querer maximizar el mínimo de Xd. Es decir, max{t, t- Xd ≤ 0, d: 1,2,…D} =
max min{ Xd, d:1,2,…D}.
El problema (6.4.2) puede tener múltiples soluciones.
La solución de MMF/FLMP, tal como el Algoritmo 3 que se expondrá a
continuación es substancialmente más complicada. Consiste también en una aplicación
iterativa de una extensión del problema LP (6.4.2), pero el uso de la extensión incluye un
47
paso que chequea qué demanda de asignación Xd puede seguir siendo incrementada sin
afectar al resto de las demandas.
La eficacia del Algoritmo 3 depende de la eficiencia del test de no bloqueo (NBT)
usado en el Paso 1. El test llamado NBT1 consiste en resolver el siguiente problema LP
para cada demanda fija d ∈ Z1:
maximizar
Xd
(6.4.3a)
sujeto a
X d ' = ∑ xd ' p
d ' = 1, 2,..., D
(6.4.3b)
p
td ' − X d ' ≤ 0
∑∑ δ
d'
x
ed ' p d ' p
d ' = 1, 2,..., D
≤ ce
e = 1, 2,..., E
p
todos los xd ' p ≥ 0
(td ' − const ) (6.4.3c)
(6.4.3d)
(6.4.3e)
6.4.1 Pasos para resolver el Algoritmo 3 (usando NBT1):
Paso 0:
Resolver el problema LP (6.4.2) y nombremos (t*, x*, X*) a la
solución óptima del mismo. Pongamos n := 0, Z0 := ∅ , Z1 := {1, 2,…,
D}, y td := t* para cada d ∈ Z1.
Paso 1:
Pongamos n := n + 1. Empecemos considerando las demandas d ∈ Z1 una
por una, para chequear si el volumen total de asignación X d* puede hacerse mayor a t*,
sin decrementar las máximas asignaciones ya encontradas td’ para el resto de todas las
demandas d’. El chequeo es llevado a cabo por un test de no bloqueo (6.4.3). Si no hay
demandas que bloqueen en Z1 (demanda d ∈ Z1 se considera que bloquea, si Xd no puede
incrementarse más) entonces ir al Paso 2. En caso contrario, cuando la primer demanda
que bloquee se encuentre, digamos demanda d, agregar d al conjunto Z0 y borrarla del
conjunto Z1 (Z0 := Z0 ∪ {d}, Z1 := Z1\{d}). Si Z1 = ∅ , entonces detenerse (el vector
X * = ( X 1* , X 2* ,..., X D* ) = (t1 , t2 ,..., t D ) es la solución para el Problema (6.4.1); en caso
contrario proceder al Paso 2.
Paso 2:
Solucionar el problema LP siguiente (modificación del (6.4.2)) para
mejorar las mejores asignaciones totales actuales:
maximizar
t
48
sujeto a
X d = ∑ xdp
d = 1, 2,..., D
(6.4.4a)
p
t − Xd ≤ 0
td − X d ≤ 0
∑∑ δ
d
edp
d = Z1
d = Z0
(td − const )
e = 1, 2,..., E
(6.4.4b)
(6.4.4c)
(6.4.4d)
p
xdp ≤ ce
(6.4.4e)
todos los xdp ≥ 0
(6.4.4f)
Nombremos (t*, x*, X*) a la solución de (6.4.4). Pongamos td := t* para cada d ∈
Z1 y vayamos entonces al Paso 1 nuevamente.
Observar que puede suceder que la solución óptima de (6.4.4) no incremente al t*
porque puede que haya más demandas que bloqueen además de la detectada en el Paso 1.
La salida de NBT1 (6.4.3) es positiva, lo cual significa que la demanda d es no
bloqueadora si el óptimo Xd es estrictamente mayor que t*. En otro caso, la demanda
considerada resulta ser bloqueadora en realidad. Notar también que la solución de NBT1
para algunos d ∈ Z1 puede mostrar que para algunas otras d’ ∈ Z1 el volumen resultante
Xd’ es mayor que t*. Esas demandas d’ son no bloqueadoras y no necesitan de tests
separados. Los cálculos deben ser realizados usando la solución resultante del Paso 0 (o
Paso 2) como solución inicial de NBT1 para cada d ∈ Z1.
Cerramos finalmente esta sección con la siguiente proposición.
Proposición 8.2:
El vector final de volumenes de asignación total X * = ( X 1* , X 2* ,..., X D* ) , que
resulta de la solución del Problema (6.4.4) obtenida en la última iteración del Algoritmo
3, es único.
6.5
Algoritmo 4: Max Min Fairness para
múltiples caminos acotado
El siguiente problema es para múltiples caminos flexibles (MMF/FLMP, MaxMin Fairness for Flexible Multiple Paths).
La idea detrás de este algoritmo es la siguiente. Es básicamente el mismo
algoritmo que el expuesto anteriormente. La principal diferencia es que se detiene una
vez que se llega a obtener el ancho de banda requerido por el usuario. En el algoritmo
anterior, se veía cuánto era la mayor cantidad de recursos que la red me podía ofrecer
49
para cada demanda, determinando a su vez cuánta carga llevaría cada sub-demanda. En
este caso lo que se hace, es una especie de tratamiento sobre el resultado arrojado por el
algoritmo 3. Se toman todas las demandas y sus respectivas sub-demandas (resultados
obtenidos del algoritmo 3), y se ordenan de mayor a menor, según el ancho de banda que
portan. Supongamos que analizamos primero la primer demanda. Tenemos ya sus subdemandas ordenadas de mayor a menor. Entonces comparamos el ancho de banda que
lleva la primer sub-demanda con el ancho de banda requerido (valor dado por el usuario).
En caso que el ancho de banda de la sub-demanda ya sea mayor que el requerido para la
demanda número uno, se resta el ancho de banda requerido al que porta la sub-demanda y
se descartan el resto de las sub-demandas (ya que al ancho de banda requerido ya fue
satisfecho). Ahora, en caso de no ser mayor, se prosigue a la siguiente sub-demanda y se
ve si el ancho de banda de la primer sub-demanda conjuntamente con el que lleva la
segunda sub-demanda es mayor o no que el requerido. En caso de serlo se descartan el
resto de las sub-demandas y se realiza la resta. Sino, se prosigue de la misma manera, una
y otra vez.
Este proceso se repite para todas las demandas.
Como vemos entonces, los pasos para resolver el algoritmo 4 son los mismos que
los usados en el algoritmo 3. La única diferencia es que se hace un tratamiento de los
resultados arrojados por el algoritmo 3 de manera de, en caso de ser suficiente el ancho
de banda que porta cada demanda, detenerse en cuanto se llega al valor del ancho de
banda requerido.
50
Parte III
Arquitectura de Software
51
Capítulo 7
Representación de la red e
interacción con ARCA
En los próximos capítulos presentaremos la estructura en la que fue creado el
software NET-TE. Se presentarán los packages utilizados y especificará las principales
tareas de las clases que los conforman, así como su implementación.
El orden en el que se presentaran los packages será el siguiente.
En un principio, se empezará en este Capítulo 7 con el Package correspondiente a
la topología de la red en donde se presentarán los elementos que la constituyen así como
una breve descripción de los mismos. En una diferente sección dentro de este mismo
capítulo, también se presentará al package encargado de la interacción con el ARCA. El
mismo tiene como objetivo el poder crear un área común entre ambas aplicaciones para
poder así utilizar el archivo de salida del ARCA como entrada al nuestro y que exista así,
compatibilidad entre ambas aplicaciones.
Pasamos posteriormente a presentar en el Capítulo 8 al Package Programa. El
mismo se encarga de la interfaz gráfica de la aplicación. Se encarga de ofrecerle al
usuario, por medio del modo gráfico, la manera de acceder a las distintas funcionalidades
del software, como ser ingresar la topología manualmente, configurar los parámetros de
los enlaces, desplegar los LSPs ya creados y eliminar los que se desee, obtener
información sobre el porcentaje de utilización de cada enlace en la red y observar de
manera gráfica por medio de la diferenciación de colores los distintos rangos de
utilización que el usuario desee analizar, etc.
Luego en el Capítulo 9 describimos el Package Cargar Red, encargado de
implementar la funcionalidad de cargar la topología de la red sobre la cual se esta
trabajando de manera automática.
Más adelante, en el Capítulo 10, presentamos el Package Crear LSPs, que es
donde se implementa el algoritmo CSPF de computación de caminos para hayar los
LSPs.
Por último, en el Capítulo 11, se trata el Package MT, el cual se encarga de crear
o cargar (en caso de que exista una ya creada) la matriz de tráfico de la red, en donde el
usuario especifica todos las demandas representadas por los pares origen-destino, para
luego darla como parámetro de entrada a los algoritmos de redes justas y MIRA.
7.1 El Package topología
Una parte fundamental del presente proyecto consistió en abstraer la arquitectura
de la red en estudio y representarla de una manera simple mediante un conjunto de
clases.
52
El package Topología fue el primer package desarrollado en el proyecto y en él
se encuentran las clases con las que representamos los elementos de una red MPLS,
que cuenta con los atributos necesarios para poder aplicar algoritmos de TE.
En la Figura 7.1 podemos ver el diagrama UML del package.
Figura 7.1: Diagrama UML del package Topología
A continuación se describe más en detalle las clases anteriormente mencionadas.
53
7.2 La clase Elemento
Esta clase define un objeto Elemento del cual heredarán los objetos LER, LSR y
Link y define los atributos comunes a ellos. Esto sirve para poder referirnos a estos
objetos como si fueran de la clase Elemento, y mantener así un nivel de abstracción.
7.3 Las clases LER y LSR
Los LERs y LSRs representan dentro de nuestra arquitectura de red un elemento
de poca complejidad, ya que cada instancia de ellos sólo lleva registros de los enlaces
que en él convergen y los LSPs que por él pasan. Debido a esto es que cuando el usuario
crea un nuevo nodo en la red no se desplegará ninguna ventana de configuración.
Aunque las clases LER y LSR son muy similares, al tomar nuestro proyecto
como referencia las redes MPLS es que se decidió crear dos clases por separado y no una
sola, logrando por ejemplo que la representación en la interfaz gráfica sea distinta.
7.4 La clase Link
La clase Link es el elemento fundamental de nuestra arquitectura de red. Esta
clase concentra la mayoría de los atributos necesarios para hacer TE como ser
capacidad, capacidad reservada, pesos administrativos, afinidades, etc. Cada instancia de
Link representa una conexión bidireccional entre dos instancias de LER o LSR que recibe
en su construcción y lleva un registro de los LSPs que por él pasan.
La clase Link cuenta con métodos que permiten determinar si es un posible
candidato para la creación de un nuevo LSP basado en el ancho de banda que tiene
disponible mediante el ruteo explícito o corriendo alguno de los algoritmos desarrollados
en el software.
7.5 La clase LSP
La clase LSP, modela los caminos virtuales, que se pueden establecer en las redes
MPLS y que permiten dirigir un flujo agregado de tráfico. Cada LSP consta de un vector
de links, a la cual se le agrega el Nodo desde el cual se origina el LSP y el ancho de
banda requerido, atributos necesarios a la hora de correr los distintos algoritmos de
SNMP que en el software se implementan.
7.6 El Package Arca.InterfazGráfica
Debido a que este package está exclusivamente relacionado con la compatibilidad
entre el NET-TE y el ARCA, realizamos los comentarios sobre ésta relación en la sección
7.6.1.
54
7.6.1 Compatibilidad con ARCA - Analizador de Redes de
Caminos Virtuales
ARCA es el nombre del software que realizaron Darío Buschiazzo Malveira,
Andrés Ferragut Varela y Alejandro Vázquez Paganini con motivo de su proyecto de fin
carrera para el Instituto de Ingeniería Eléctrica de la Facultad de Ingeniería, Universidad
de la República. El proyecto se llevó a cabo en el período comprendido entre el mes de
Junio de 2003 y el mes de Mayo de 2004 en Montevideo, bajo la tutoría del Ing. Pablo
Belzarena.
El proyecto analiza el problema de brindar garantías de Calidad de Servicio
(QoS), así como realizar Ingeniería de Tráfico sobre redes de datos. En dicho proyecto se
desarrolló una herramienta de software que permite relevar el funcionamiento de una red
dada, estimando parámetros de QoS permitiendo predecir el comportamiento de la red en
presencia de carga y evaluar el impacto de diferentes políticas en dicho funcionamiento,
así como conocer las garantías de QoS que la red está en condiciones ofrecer.
Por ser un proyecto que está relacionado con el nuestro, es que se decidió hacer
que sean compatibles en el sentido que un usuario podrá con nuestro software crear
topologías que luego podrán ser usadas en el software ARCA.
Cuando se decide guardar cierta topología con todas sus características (LSPs,
nodos, enlaces, etc.) se abre una ventana en el que el usuario puede elegir guardarla con
formato .txt o con formato .arc (de ARCA). El formato .txt es el formato elegido por
nosotros para guardar las configuraciones, en las que simplemente se escriben en formato
de texto simple los elementos de la red y atributos, que luego son leídos por el software
para representarlas gráficamente. Cuando el usuario elige guardar la topología en formato
.arc (de ARCA) para luego abrirla con el software ARCA, el software llama a un
intérprete que lo que hace es “convertir” las clases de NET-TE en el formato específico
que utiliza el ARCA. De este modo un usuario podrá abrir y guardar archivos en formato
.arc para poder luego utilizarlos en el ARCA.
En la Figura 7.2 podemos apreciar el diagrama UML de este package.
55
Figura 7.2: Diagrama UML del Package Arca.InferfazGráfica
56
Capítulo 8
Interfaz Gráfica
Este capítulo se dedica en su mayoría a la interfaz gráfica de la aplicación. En el
package Programa, se implementan las distintas ventanas que permitirán al usuario el
acceso a las distintas funcionalidades que posee el software. Entre ellas se puede
enumerar por ejemplo todo lo relacionado al abrir y guardar distintas configuraciones
topológicas con sus respectivos parámetros; también la barra de herramientas ubicada a la
derecha de la pantalla que es la principal herramienta para acceder a las utilidades del
software; además, la ventana en la cual se introduce la información requerida para poder
cargar la red automáticamente, así como las utilizadas para ver el estado actual de la red
en cuanto a lo que utilización y características de los LSPs creados hasta el momento se
refiere.
Se procuró agrupar los botones de acuerdo a la tarea que cumplen: ingreso de
elementos de red, algoritmos para el establecimiento de los LSPs y herramientas de
visualización del estado actual de la red. Todo esto, por medio de una interfaz gráfica
sencilla e intuitiva, que sea de fácil manejo para el usuario.
Pasemos ahora a describir el package Programa.
8.1 El package Programa
Las clases que contiene el package Programa definen las funcionalidades de la
Interfaz de Usuario, y concentra todas las tareas referentes al despliegue del programa a
través de una interfaz gráfica mediante el uso de elementos como ser ventanas, menúes,
diálogos, etc.
A continuación se presenta el diagrama de clases UML del package y luego se
detallan las clases que lo componen.
57
Figura 8.1: Diagrama de clases del Package Programa
8.2 Clase Principal y VentanaConf
La clase Principal genera el marco principal que contiene las barras de menú y
herramientas con el que se pueden crear, abrir y modificar distintas topologías de red.
La clase VentanaConf implementa los dos paneles principales del software que
son el panel gráfico en el que se representan los elementos que componen la red y el
panel que contiene los botones que implementan todas las funcionalidades del software
como ser, crear elementos de red, ver estadísticas o correr distintos algoritmos de
ingeniería de tráfico.
58
Figura 8.2: Marco Principal del software
8.3 Clase Intérprete
Esta clase permite al usuario generar un archivo de salida, que guarda en forma de
texto todos los elementos de la red y sus atributos. De esta manera el usuario podrá
simular varias topologías y guardar los diferentes estados de la red en un archivo .txt que
luego podrá abrirlo para que la clase Intérprete lo convierta en elementos gráficos de una
forma sencilla.
59
Formato del archivo según el elemento de red:
Enlace
Link
name Link_4
coord 208 125 372 87
connection LSR_1 LSR_2
ipinterfaz 10.10.10.1
bw 155.0
delay 0.0
down 0.0
peso 1.0
end
Nodo
LSR
name LSR_1
coord 208 125
routerid 10.10.10.1
ip 10.10.10.1
comunnity xxxxxxxx
descubierto
end
LSP
LSP
name LSP_1
nodoOrigen LER_1
ancho 100.0
Link_8
Link_11
end
Observaciones: el atributo coord refiere a las coordenadas espaciales (x, y) que en
que el elemento gráfico asociado al elemento se ubicará en la pantalla. End es utilizado
por el intérprete para indicar que se terminaron los atributos del elemento.
8.4 Clases TxtFileFilter y ArcFileFilter
Las
clases
TxtFileFilter
y
ArcFileFilter
heredan
de
la
clase
javax.swing.filechooser.FileFilter y son filtros que al abrirse una ventana de diálogo del tipo
jFileChooser cuando un usuario decide abrir o guardar un archivo, permiten que sólo se
muestren los archivos con los formatos específicos de entrada-salida del software. La extensión
.txt corresponde al formato de texto simple elegido para nuestro software y el formato arc
corresponde al software ARCA. Ver Figura 8.3.
Figura 8.3: Formatos de salida del software
60
8.5 Clase ConfLink
Esta clase implementa el marco en el cual el usuario podrá al crear un enlace
nuevo en la red configurar todos sus atributos como ser el nombre, ancho de banda, peso
asociado al enlace (usado como costo en CSPF) y afinidades. El mismo marco permite al
usuario crear un nuevo tipo de afinidad que luego podrá ser utilizada en todos los enlaces
de la red. Si en algún momento el usuario necesitase modificar alguno de los atributos, el
software creará una nueva instancia a ésta clase, pero cargando los atributos actuales del
enlace.
Figura 8.4: Ventana de configuración de enlaces
Al usuario crear un nuevo Link se abre la ventana que se muestra en la Figura 8.4,
asociando valores por defecto a los distintos atributos del nuevo enlace. El software
cuenta los enlaces ya creados en la red y le asigna el nombre correspondiente. En la parte
inferior de la ventana el usuario podrá asociar al enlace afinidades ya creadas en la red o
crear una, escribiendo la nueva afinidad en el campo Escribir Afinidad. Esta nueva
afinidad podrá luego ser asociada a todos los enlaces de la red. Se decidió agregar el
concepto de afinidad a los enlaces de modo de restringir usar ciertos enlaces por ejemplo
por tráfico del tipo Best Effort en enlaces críticos. De esta manera el usuario podrá correr
CSPF y usar como restricciones las afinidades creadas en la red.
61
8.6 Clase Cargar Topología
Esta clase implementa el marco en el cual el usuario podrá ingresar los
parámetros necesarios para poder “descubrir” la topología en estudio.
Figura 8.5: Ventana Cargar Topología
Algunos parámetros son obligatorios como la dirección IP de algún router de la
red (casi siempre el que tiene directamente conectado), para comenzar la iteración hasta
descubrir completamente la red. Otros parámetros obligatorios a ingresar, tal como se
puede apreciar en la Figura 8.5 son la versión SNMP que se desea ejecutar, teniéndose
como opciones en primera instancia la versión 1 y 2, pudiéndose agregar la versión 3 en
futuras versiones. Luego, el “community” que es el password que utiliza SNMP, que es
previamente configurado en los routers para impedir que se modifiquen los MIBs del
router por personas no autorizadas. Si este password es mal configurado (o es distinto) en
alguno de los routers el software lo reconocerá como un nodo que habla ospf pero no
podrá conocer a sus vecinos (ya que no tiene acceso a él). Como opcionales se pueden
modificar el puerto (por defecto 161 sino se ingresa ninguno), reintentos, timeout
(también con valores por defecto en caso de no ser ingresados por parte del usuario) y
continuar carga de red (para permitir se siga con la carga de la red una vez hallada una
zona donde el community es distinto y deba ser ingresado nuevamente por el usuario).
8.7 Clases Estadísticas y Propiedades
Estas clases son las que permiten al usuario conocer los atributos y estados de los
elementos que componen la red en estudio. La clase propiedades es una ventana que
muestra los atributos configurables de cada elemento de la red así como por ejemplo los
62
LSPs que pasan por el elemento, o en el caso de los enlaces su utilización. Ver Figura
8.6. Por otro lado la clase Estadísticas, genera un marco más general en el que se puede
Figura 8.6: Ventana Propiedades: a) para un enlace b) para un nodo
ver el estado actual de la red como ser los atributos de los elementos de la red, ver los
enlaces críticos y ver detalles de los LSPs establecidos en la red. Observar la Figura 8.7.
Figura 8.7: Ventana Estadísticas
63
8.8 Clase Utilización
Es otra de las clases creadas que permiten al usuario conocer el estado de la red
de una manera sencilla. La clase genera un marco al que el usuario puede ingresar valores
que se toman como referencia para definir rangos de utilización. Luego se llama a un
método que recorre todos los enlaces de la red y los pinta de un color que depende de la
utilización actual del enlace. Observar Figura 8.8.
Figura 8.8: Ventana Utilización
Esta ventana puede estar abierta siempre y con sólo apretar el botón Aceptar se
reflejará de un modo rápido los cambios de utilización en los enlaces debido a los nuevos
LSPs creados en la red.
64
Capítulo 9
Carga automática de la topología
Tal como el nombre del capítulo lo indica, presentaremos ahora el package
encargado de la funcionalidad de extraer la información necesaria de los routers para
poder cargar la topología automáticamente, y no de manera manual tal como lo podría
hacer el usuario al crear una topología desde cero o cargar una ya existente.
9.1 El package CargarRed - Implementación
En nuestro caso cargar la topología de red se entiende como descubrir todos los
routers presentes en la red que estén intercambiando información de ruteo mediante el
protocolo de enrutamiento OSPF.
Al ser OSPF un protocolo de estado de enlace cada router sólo conoce los routers
de la red con los que forma adyacencias e intercambia información de ruteo
(generalmente en ospf sólo se forman adyacencias entre los routers directamente
conectados).
Para conocer los vecinos de un router y las velocidades de las interfaces que lo
conectan es necesario acceder a los MIBs de los routers, específicamente a los definidos
en el RFC-1213 y en los OSPF-MIB. En la siguiente Figura 9.1 se pueden ver los grupos
y tablas que lo componen.
65
OSPF-MIB DEFINITIONS
RFC1213-MIB DEFINITIONS
ospfGeneralGroup
ospfAreaTable
mib-2
ospfStubAreaTable
system
ospfLsdbTable
interfaces
ospfAreaRangeTable
ifNumber
ospfHostTable
ifTable
ospfIfTable
at
ospfIfMetricTable
ip
ospfVirtIfTable
icmp
ospfNbrTable
tcp
ospfVirtNbrTable
udp
ospfExtLsdbTable
egp
ospfRouteGroup
transmission
ospfAreaAggregateTable
snmp
ospfConformance
Figura 9.1: Grupos y Tablas que componen los MIBs de OSPF y RFC-1213
Específicamente dada la red en la Figura 9.2, se conecta una PC con el software
instalado a uno de los routers que hablan ospf, que sería el NMS si tenemos en cuenta la
especificación del protocolo SNMP.
Figura 9.2: Ejemplo de una red
66
Lo primero que hace el software es cargar el RouterID del router, que es la
dirección IP que identifica unívocamente al router en la red. El software guarda el
RouterID en memoria de modo de saber que ya se conectó a este router y no volver a
conectarse. En ese momento carga la tabla ospfNbrTable, que es donde el router guarda
información de las adyacencias que forma con los demás routers de la red. El software
carga en memoria los RouterIDs y las direcciones IP de las interfaces por las cuales se
conecta.
En el caso del router directamente conectado tendríamos como respuesta a la
consulta del ospfNbrTable:
ospfNbrIpAddr
10.10.10.17
ospfNbrRtrId
10.10.10.1
ospfNbrState
Full(8)
En la tabla anterior sólo se muestran algunas de las variables. La variable
opsfNbrState muestra el estado de la adyacencia entre los dos routers De esta manera se
descubrió un nuevo router en la red con RouterID al que puedo llegar por la interfaz con
IP 10.10.10.17 y el software guarda en memoria que ya se conectó al 10.10.10.5 y que le
falta conectarse al 10.10.10.1.
Luego el software procede a conectarse a este nuevo router para descubrir a sus
vecinos, que son los 4 que se muestran en la siguiente tabla:
ospfNbrIpAddr
10.1.1.2
10.1.1.6
10.1.1.14
10.1.1.18
ospfNbrRtrId
10.10.10.2
10.10.10.3
10.10.10.4
10.10.10.5
OspfNbrState
Full(8)
Full(8)
Full(8)
Full(8)
Se comparan los RouterID de estos nuevos routers con los que el software tiene
en memoria como ya conectados. Si aparece en la lista se omite y se guardan los nuevos
routers descubiertos. De esta manera el software se va conectando a todos los routers,
carga a los vecinos, los compara para saber si son nuevos, si lo son los guarda en
memoria para conectarse luego y si no se omiten. Se sigue esta iteración hasta que no se
descubren routers nuevos y ya me conecté a todos los que tengo en memoria.
67
En resúmen,
1-
Me conecto al primer router y lo guardo en las listas RoutersRed y
RoutersDescubiertosNoConectados (en esta lista además guardo la IP por la que
llegó al router) que al principio están vacías.
2-
Cargo vecinos del router.
3-
Para cada vecino: no está en RoutersRed, entonces se agrega a RoutersRed y
RoutersDescubiertosNoConectados.
4-
Elimino el router de RoutersDescubiertosNoConectados.
5-
Si hay más routers en RoutersDescubiertosNoConectados, me conecto al primero
de la lista y vuelvo a 2. Si RoutersDescubiertosNoConectados no tiene elementos,
entonces ya descubrí toda la red y la lista de routers que la componen se encuentra
en RoutersRed
Un parámetro que es fundamental para correr algoritmos de TE es la capacidad de
los enlaces. Estos se cargan de la tabla ifTable definida en el RFC 1213 que tiene el
formato de la siguiente forma:
ifIndex
1
2
3
4
5
ifDescr
ATM4/0
FastEthernet0/0
FastEthernet1/0
Ethernet2/0
Ethernet2/1
ifType
sonet
ethernetCsmacd
ethernetCsmacd
ethernetCsmacd
ethernetCsmacd
ifMtu
4470
1500
1500
1500
1500
ifSpeed
149760000
100000000
100000000
10000000
10000000
ifAdminStatus
down
up
up
down
down
ifOperStatus
down
up
up
down
down
A la dirección IP que tiene asociada la interfaz se le asocia un número de interfaz
(ifIndex). Esta asociación se encuentra en la tabla ospfAddrTable que también se carga al
conectarse al router. Ya con el ifIndex entro al IfTable y cargo la capacidad del enlace.
Veamos por último el diagrama UML del package CargarRed.
68
Figura 9.3: Diagrama UML del package CargarRed.
69
Capítulo 10
Computación de caminos
El presente capítulo analiza los distintos mecanismos para la computación de
caminos que van a ser futuros LSPs. Se destaca el algoritmo Constraint Shortest Path
First (CSPF) utilizado para encontrar caminos basándose en el conocido algoritmo
Shortest Path First (SPF) o Dijkstra, con el requerimiento extra de que debe satisfacer
ciertas restricciones. Se le ofrecen al usuario además distintos criterios a aplicar de
Ingeniería de Tráfico (TE), de manera que pueda optimizar el resultado arrojado por el
CSPF, filtrando todas las soluciones posibles y dejando solamente las que más se
aproximan a lo que desea. También se presenta otro algoritmo online para el
establecimiento de rutas que es el MIRA. Se expone también el método manual en donde
el usuario establece los LSP de manera explícita indicando el camino que desee.
10.1 El package CrearLSPs
Este package esta conformado por 5 clases: Ruteo Explícito, CSPF, Algoritmo,
CarConf y MIRA.
Para poder visualizar mejor el relacionamiento entre dichas clases que componen
este package, a continuación se muestra el diagrama UML del mismo.
Figura 10.1: Diagrama UML del package CrearLSPs
70
A continuación pasamos a describir en más detalle cada una de las clases
mencionadas anteriormente.
10.2 La clase Ruteo Explícito
Esta es la clase usada cuando el usuario de la red desea establecer los LSPs de
manera manual, señalando enlace a enlace, cuál es el camino que desea conforme el LSP.
Como cualquier otro LSP, al momento de desplegarse la ventana, se le asigna un
nombre al LSP próximo a crearse.
El usuario debe ingresar como parámetro de entrada el ancho de banda que desea
tenga el LSP y cuál es el Nodo de Origen donde desea comience el LSP.
Podemos observar a continuación en la Figura 10.2 una imagen de cómo luce la
ventana desplegada.
Figura 10.2: Ventana usada para el Ruteo Explícito de un LSP.
Una vez ingresados ambos parámetros, el programa va desplegando en un combo
la lista de enlaces que contienen en uno de sus extremos al Nodo Origen elegido y que
cumplen con la condición del ancho de banda. Con esto último nos referimos a que sólo
se despliegan los enlaces que contienen al nodo origen y cuyo ancho de banda disponible
es mayor o igual al requerido por el futuro LSP. De la misma manera, a medida que el
usuario va creando el LSP manualmente, en pantalla se va pintando con color el mismo,
de manera que el usuario lo pueda apreciar también gráficamente.
Finalmente una vez presionado Aceptar, se guardará automáticamente dicho LSP
y se actualizarán los valores de ancho de banda disponibles en los enlaces que se vieron
afectados.
71
10.3 La clase CSPF
Esta clase es la usada para computar caminos para futuros LSPs por medio del
algoritmo CSPF explicado en el Capítulo 4.
Esta clase lo que básicamente hace es recolectar toda la serie de parámetros
ingresados por el usuario, necesarios para determinar cuáles son las restricciones que
desea cumpla el o los LSPs solución y qué criterio de ingeniería de tráfico desea usar.
Posteriormente, de acuerdo a las opciones elegidas, pasa a llamar a la clase Algoritmo
(explicada en la Sección 10.4) que es donde reside el método que implementa el Dijkstra
y los demás métodos encargados de ejecutar el criterio de ingeniería de tráfico, si es que
se eligió alguno.
Son varias las distintas opciones que se le presentan al usuario al momento de
ingresar los parámetros al sistema, de manera que pueda crear varias situaciones y
analizar cuál es la que más le conviene. Esto claramente aumenta la cantidad de
escenarios del tipo “what if” que puede plantearse. Todo esto con el objetivo de poder
ofrecerle al usuario tantas herramientas como sea posible para conseguir la solución que
más se ajuste a sus necesidades.
Podemos observar el aspecto de la ventana creada por esta clase en la Figura 10.3.
Figura 10.3: Ventana CSPF
72
Empecemos señalando cuáles son los distintos parámetros que debe ingresar el
usuario y las opciones que se le ofrecen para pasar luego a comentar ciertas
características de cómo fue implementada la clase CSPF.
Así como lo muestra la Figura 10.3, automáticamente que se abre la ventana el
programa ya le asigna un nombre determinado al LSP a crearse.
Paso siguiente, el usuario debe ingresar, como es usual, el ancho de banda que va
a requerir el LSP que desea establecer.
Asimismo tiene la posibilidad de elegir una Afinidad determinada, del grupo de
Afinidades que hayan sido creadas. Esto permite al usuario el poder correr el algoritmo
CSPF sólo sobre los enlaces que pertenecen a una determinada Afinidad, lo cual es
práctico en caso de tener distintos tipos de tráficos circulando por los enlaces de la red y
desear correr el algoritmo sólo sobre los que portan un determinado tipo.
Finalmente, los siguientes parámetros obligatorios a ingresar son el Nodo de
Origen y de Destino.
Como comentario al margen, vale destacar que la ventana fué diseñada para que
las opciones se vayan habilitando a medida que los parámetros vayan siendo ingresados
en orden. Esto obliga al usuario a ingresar si o si los parámetros que son obligatorios para
correr el Dijkstra o SPF.
Ahora pasamos a la parte en donde el usuario debe elegir qué criterio usar para
asignar los pesos a los enlaces. Esto es particularmente importante ya que determina la
métrica en la cual se basará luego el SPF para el cálculo de los caminos solución.
Las opciones presentadas son las siguientes;
•
•
•
•
Ruteo Mínimo por Pesos Administrativos: en este caso se le asigna a cada
enlace un determinado peso que es elegido por el usuario. El peso en este caso
es un valor numérico entero mayor que 0. Este valor es una manera de
priorizar determinados enlaces frente a otros. Cuanto más grande este valor,
menor será la probabilidad de que el camino pase por ese enlace. Básicamente
el camino tendera a utilizar los enlaces con menor peso.
Ruteo por Mínima Cantidad de Saltos: en este caso se le asigna un peso igual
a 1 a cada enlace. De esta manera, al utilizar el Dijkstra, éste calcula los
caminos basándose en la cantidad de saltos. Básicamente, se desplegará como
resultado los caminos con la menor cantidad de saltos de origen a destino.
1/(Bwreservado): en este caso, tal como lo sugiere el nombre, asigno a los
pesos el valor correspondiente a 1/(BW reservado). Esto quiere decir que los
caminos solución tenderán a ir por los enlaces más ocupados (con menos
ancho de banda disponible). De esta manera se intenta no usar los enlaces más
libres (dejándolos para futuros LSPs), sino que terminar de ocupar los más
utilizados.
1/(BWlibre): en este caso, tal como lo indica el nombre, asigno a los pesos el
valor correspondiente a 1/(BW disponible). Esto quiere decir que los caminos
solución tenderán a ir por los enlaces más libres, no molestando a los más
ocupados. Es una manera de establecer los LSPs por lugares de baja
utilización.
73
A continuación, una vez elegida la métrica que se va a tomar en cuenta, el usuario
tiene la posibilidad de elegir un determinado enlace por el que pase el o los caminos
solución si o si. De esta manera se obliga a las posibles soluciones que contengan
determinado enlace aún cuando este no estaría contenido en los caminos arrojados por el
Dijkstra. Además se le da también la posibilidad de lo opuesto, que no pase por
determinado enlace, aún cuando éste estuviera contenido en los caminos arrojados por el
Dijkstra. La razón de estas dos opciones es que quizás por razones políticas o de
determinado Service Level Agreement (SLA), el usuario esté obligado a que se pase o no
por determinado enlace.
Por último, se le da la posibilidad al usuario de elegir entre no usar criterio de
Ingeniería de Tráfico alguno, o usar dos posibles.
De la primer manera, no se usa criterio de TE alguno, lo cual implica que las
soluciones desplegadas al usuario serán las arrojadas por el algoritmo SPF en su totalidad
y que cumplen con las restricciones elegidas por el usuario previamente.
La segunda opción es usar un criterio de TE basado en filtrar los caminos solución
brindados por el SPF y desplegar de entre esas soluciones, sólo aquellas que no utilizan a
los enlaces más críticos contenidos en los caminos (de ahí el nombre “no saturación de
enlaces críticos”).
Y por último, se tiene el MINHOP, el cual, simplemente de todas las soluciones
arrojadas por el SPF, se queda con las más cortas en cuanto a lo que a cantidad de saltos
se refiere.
Lo único que resta es correr el Algoritmo y se desplegarán en pantalla todas las
posibles soluciones.
En caso de haber elegido el segundo o tercer criterio de TE, se despliega en
pantalla una ventana que muestra los caminos que fueron elegidos y los descartados
luego de aplicar esos criterios de TE. Esta ventana muestra además la utilización y otros
útiles datos de los enlaces que conforman los caminos elegidos y descartados.
Se comentará más en detalle el algoritmo SPF, criterios de TE y la ventana
mencionada anteriormente, en las próximas secciones.
Pasemos ahora a comentar los métodos más importantes y características de la
implementación de la clase CSPF.
El primer método a destacar es el método podar(). Dicho método es el encargado
de “podar” todos los enlaces de la red para pasar como parámetro de entrada al algoritmo
SPF (Dijkstra) solamente a aquellos que cumplen con la condición del ancho de banda
requerido y pertenecen al mismo tiempo a la Afinidad seleccionada en caso de haberse
elegido una.
Para el caso de haber elegido algún enlace del combo Enlace Ausente,
simplemente retiro a ese enlace de la lista de enlaces a considerar que entran como
parámetro de entrada al algoritmo SPF.
La situación es más complicada cuando se elige un Enlace Presente. En este caso,
se debe empezar dividiendo el problema en dos. En caso que no se elija esta opción,
simplemente se redefinen los pesos de los enlaces de acuerdo a la opción de métrica
elegida. Luego se corre el Dijkstra. Si encuentra una solución ya de entrada, entonces en
ese caso ya la despliega en pantalla. Si se encuentra más de una, se pasa a fijar si se eligió
algún criterio de TE en particular y de ser así, se aplica ese criterio y despliega en
74
pantalla el resultado conjuntamente con los datos de los caminos descartados, en caso de
haberlos.
Sin embargo en caso de haber elegido la opción Enlace Presente, se debe tener
más cuidado en la manera de correr el Dijkstra y cómo hacerlo. Primeramente se
redefinen los pesos de los enlaces de acuerdo a la métrica elegida. Se deben tomar en
cuenta casos particulares como que uno de los nodos que conforman al Enlace Presente
sea de casualidad el Nodo de Origen o Nodo de Destino, o que justo Enlace Presente sea
el enlace que une al Nodo Origen con el Destino, en cuyo caso ya sería la solución. En
todos estos casos en particular, se corre el SPF sólo 1 vez. Ahora, si no caemos en
ninguno de estos casos en particular, entonces se deberá correr el SPF 4 veces. Si
llamamos al Nodo Origen, nodoA; y al Nodo Destino, nodoB. Y supongamos que los
nodos que conforman a Enlace Presente son nodo1 y nodo2. Entonces se corre primero el
Dijkstra entre el NodoA y el nodo1 y luego entre el nodo2 y el NodoB. Así se deben
tomar en cuenta todos los posibles caminos que surjan en cada pasada del Dijkstra, y en
caso de haber un error en alguna pasada, también se debe tomar en cuenta ya que quizás
no se encuentre camino alguno. Se agrega el Enlace Presente entonces a cada una de
todas las posibles combinaciones que surjan entre todas las soluciones encontradas en las
2 pasadas. Posteriormente, corremos el Dijkstra entre el nodoA y el nodo2 y luego entre
el nodo1 y el nodoB. Acá tomamos también en cuenta todos los caminos posibles que
surjan en cada pasada. Y repetimos el razonamiento. En caso de haber encontrado
soluciones en el primer par de pasadas del Dijkstra y en el segundo, se deben juntar todas
y ésa es la solución a mostrar. En todo caso se deberá tener especial cuidado con la
aparición de errores en alguna pasada debido a la no existencia de una solución.
Finalmente, recurre a la clase Algoritmo en caso de haber más de una solución
posible arrojada por el SPF y elegido algún criterio de TE en particular.
Una vez elegida la solución deseada, quedará guardada con el resto de los LSPs
ya establecidos.
10.4 La clase Algoritmo
En esta clase se encuentra la implementación del algoritmo Dijkstra, y los de
SNMP SNMP.
En cuanto al algoritmo de Dijkstra, éste es implementado por medio del método
shortestPath(), el cual es encargado de calcular todos los caminos solución del origen a
destino, con la métrica más chica. Recibe como parámetros de entrada, la lista de nodos
de la red a tomar en cuenta, la lista de enlaces, el Nodo Origen y Destino y una variable
booleana que indica si fue elegida la opción de Enlace Presente. Ya ambas listas de nodos
y enlaces fueron filtradas con las restricciones de ancho de banda y Afinidad ingresadas
por el usuario.
Otro método a destacar es el podar2(). Este es encargado de aplicar el segundo
criterio de TE (no saturación de enlaces críticos). Básicamente lo que procura es descartar
a aquellas soluciones que poseen los enlaces más críticos. Con eso nos referimos a
aquellos enlaces que están casi saturados y que poseen muy poco ancho de banda
disponible, lo cual causaría que de pasar el LSP por ellos, queden prácticamente
inutilizables para futuros LSPs. Lo que se hace es tomar de cada camino solución
75
arrojado por el Dijkstra, el enlace con menor ancho de banda disponible (llamemos
enlaceCrítico al valor de ancho de banda de dicho enlace). Se compara cada
enlaceCrítico de cada solución y se descartan los caminos con el enlaceCrítico más
pequeño. En caso de quedar aún más de una solución posible, significa que el
enlaceCrítico para cada uno de estos caminos tiene el mismo valor. Entonces se pasa a
ver cuántos enlaces en cada uno de esos caminos, tienen un ancho de banda similar al
guardado en enlaceCrítico. Los caminos que tengan más cantidad de enlaces con ese
valor, se descartan (ya que se estaría perjudicando a un número mayor de enlaces en esos
caminos). Y si aún después de eso, seguimos con más de una posible solución, buscamos
el siguiente valor más pequeño que sea mayor que enlaceCrítico y redefinimos
enlaceCrítico para cada solución. Repetimos así el proceso iterativamente hasta
quedarnos con una solución solamente o con varias que sean indistintas unas de las otras
en lo que a este criterio se refiere.
Por último, se debe destacar el método podar3(), el cual se encarga de filtrar
también las soluciones arrojadas por el Dijkstra, quedándose sólo con las más cortas en
cuanto a lo que número de saltos se refiere.
10.5 La clase CarConf
Esta clase es la que implementa la ventana que se despliega cuando tenemos más
de un camino posible y se eligió algún criterio de TE en particular.
Podemos apreciar la ventana en la Figura 10.4.
Figura 10.4: Ventana CarConf
Presenta dos botones. Uno de ellos muestra los caminos que son solución luego de
aplicar alguno de los criterios de TE. El otro muestra información sobre los caminos que
76
fueron descartados (éstos son los caminos que pertenecían a la solución brindada por el
Dijkstra, pero que no cumplieron el requerimiento de TE elegido).
La información desplegada es la siguiente para cada camino: los enlaces que
conforman dicho camino, la capacidad de cada uno de los enlaces, la cantidad de Mbps
que está siendo usada en ellos y el porcentaje de utilización.
10.6 La clase MIRA
Debido a los packages ya utilizados en nuestro software se decidió calcular el
MNF corriendo el SPF repetidamente y actualizando el MNF hasta que no se encuentren
caminos y por ende ancho de banda disponible entre los dos nodos en cuestión. Existen
varios algoritmos para calcular el MNF como el presentado por Goldberg Tarjan [8] o el
algoritmo de Gomory-Hu [9], pero debido a lo complejo de estos algoritmos se optó por
una solución más sencilla pero computacionalmente más costosa.
Por más información referirse al Capítulo 5. La implementación de la ventana
usada para el algoritmo MIRA se comenta en el Capítulo 11.
77
Capítulo 11
Algoritmos de justicia y el MIRA
En este capítulo se analiza el package MT. El mismo tiene varias tareas de las
cuales es responsable. En primer lugar, se encarga de crear la Matriz de Tráfico (MT) que
contiene todas las demandas y sus respectivos anchos de banda. En caso de que ya exista
un archivo de MT, se implementó un Intérprete que pudiera leer dicho archivo y lo
cargue en el software. Se muestra el formato de salida del archivo MT.
También contiene los tres algoritmos implementados para el cálculo de caminos
en las llamadas redes justas. Con esto se trata de ofrecerle al usuario distintos criterios en
la búsqueda de caminos para el establecimiento de los LSPs de manera de poder distribuir
todas las demandas solicitadas de la mejor manera posible. En la búsqueda de ese mismo
objetivo se presenta también la ventana que implementa el algoritmo online MIRA.
11.1 El package MT
El package MT concentra todas las tareas referentes a calcular los mejores
caminos posibles para la topología de red cargada y una matriz de tráfico dada.
En este package se encuentran las clases con las que representamos los caminos
encontrados para cada ruta y cuenta con los atributos necesarios para poder asignar el
ancho de banda a cada camino de forma justa. La ruta indica entre qué nodos, qué ancho
de banda y qué afinidad deberá tener el LSP que se quiere establecer y el camino indica
por los enlaces deberá pasar el LSP.
En la siguiente figura podemos ver el diagrama UML del package:
78
Figura 11.1: Diagrama UML del package MT.
A continuación se describe más en detalle las clases anteriormente mencionadas.
11.2 La clase Caminos
La clase Caminos, modela el camino virtual que se puede establecer para una ruta
dada.
Cada camino consta de un nombre, nodo origen, nodo destino, ancho de banda
deseado, ancho de banda final (es el ancho de banda que se le asigna al camino), afinidad
y de un arraylist enlacesGr (en donde se guardan los enlaces por donde pasa el camino).
Tiene dos atributos más que son prioridad (es la prioridad del camino, por defecto es 1) y
demandamin (demanda mínima del camino, por defecto es 0), estos atributos sólo son
usados en la clase FairnessNetwork al elegir el método algoritmo2() (correspondiente al
Fairness acotado).
11.3 La clase InterpreteMT
Esta clase permite al usuario generar un archivo de salida, que guarda en forma de
texto una lista de rutas con sus atributos que representan la matriz de tráfico. De esta
manera el usuario podrá simular para una topología dada y posibles variantes de ésta,
como quedan los LSPs para la misma matriz de tráfico.
79
11.4 La clase GeneroMT
Esta clase implementa el marco en el cual el usuario podrá crear el archivo que
representa la matriz de tráfico. Al crear cada ruta se debe configurar sus atributos como
ser el nombre (tiene por defecto Ruta seguido de un número que se incrementa al crear
una ruta nueva), ancho de banda deseado, nodo origen, nodo destino y afinidad (es
opcional, el camino sólo puede pasar por los enlaces con esa afinidad).
Figura 11.2: Ventana GeneroMT
A cada ruta creada se le puede modificar todos sus atributos excepto el nombre,
o se puede borrar la ruta completa.
El archivo que se crea es con terminación “.txt” y será usado por las clases
FairnessNetwork y OffLineMira y también por GeneroMT cuando se desea modificar un
archivo de matriz de tráfico ya creado.
Formato del archivo:
Matriz de tráfico
Camino
name Ruta_1
connection LER_1 LER_2
ancho 1.0
afinidad: no tiene
end
80
El archivo comienza con Matriz de tráfico que es utilizado por el intérprete para
indicar que es un archivo generado por la clase GeneroMT.
End es utilizado por el intérprete para indicar que se terminaron los atributos del
elemento.
11.5 La clase FairnessNetwork
Esta clase permite al usuario correr los distintos algoritmos Fairness, comparar
sus resultados para después crear los LSPs para las distintas rutas. Primero se llama al
método que carga el archivo de matriz de tráfico al oprimir el botón Cargar Matriz y se
llama al método shortestPath() de la clase Algoritmo que calcula todos caminos posibles
con la menor métrica para las distintas rutas de la matriz de tráfico.
Figura 11.3: Ventana FairnessNetwork
Después de calcular todos los caminos posibles para cada ruta, se elige uno de
los cuatro algoritmos Fairness. Se selecciona la métrica a utilizar entre Peso o Minhop y
al apretar el botón Correr se calcula el ancho de banda final de cada camino. Para los
últimos dos algoritmos no se usan los parámetros Peso o Minhop, por lo que no se
habilitan en ése caso. También, en caso de elegir uno de los dos primeros algoritmos, si
existen varios caminos posibles para cada demanda, se le ofrece la posibilidad al usuario
de elegir el que desee por medio del combobox Caminos posibles.
Los métodos algoritmo1() (que implementa el Fairness Básico) y algoritmo2()
(que implementa el Fairness acotado) usan un sólo camino de los calculados para cada
ruta a diferencia del algoritmo3() (que implementa el Fairness con múltiples caminos) y
algoritmo4() (que implementa el Fairness con múltiples caminos acotado) que usan todos
los caminos calculados para cada ruta.
81
El método algoritmo1() corre el método buscar() que cuenta los caminos que
pasan por cada enlace y el método mínimo1() que incrementa el ancho de banda
reservado de todos los enlaces por donde pasa algún camino, esto lo hace hasta que satura
al menos un enlace de cada camino, a ese enlace le fija su ancho de banda. El método
termina cuando todos caminos tienen fijo su ancho de banda.
El ancho de banda final de cada camino puede ser menor, igual o hasta mayor que
el ancho de banda deseado.
El método algoritmo2() corre el método buscar(), pero antes de llamar al método
mínimo1() se abre una ventana que genera un marco donde el usuario puede ingresar los
valores de prioridad y demandamin de cada ruta.
Figura 11.4: Ventana para el Fairness acotado
Después se crean por cada camino un enlace virtual con el ancho de banda
deseado para esa ruta y se llama método mínimo1(). Los enlaces virtuales creados no se
muestran en pantalla y son necesarios para que el ancho de banda final de cada camino no
sea mayor que el ancho de banda deseado.
Estas diferencias con el método algoritmo1() permiten que el ancho de banda
final de cada camino sea como mínimo igual a demandamin y como máximo igual al
ancho de banda deseado.
El método algoritmo3() corre el método calculatodos() que calcula todos los
caminos posibles para cada ruta, sin considerar métrica alguna, ni el ancho de banda de
los enlaces. Después corre los siguientes métodos creaMatrizFairLink(),
OptimizacionLineal(), OptimizacionLinealChequeo(). Estos métodos son los encargados
de maximizar las demandas, asignando a cada sub-demanda el ancho de banda calculado.
El ancho de banda final de cada demanda es la suma de los anchos de banda de sus subdemandas.
El método algoritmo4() corre los métodos calculatodos(), creaMatrizFairLink(),
OptimizacionLineal(), OptimizacionLinealChequeo(), igual que en el algoritmo3().
La única diferencia es que después de tener calculado el ancho de banda final de
todas las demandas y sub-demandas, busca las demandas que su ancho de banda final
supera el ancho de banda deseado y setea éste igual al ancho de banda deseado.
82
Esto lo hace seteando el ancho de banda final de cada sub-demanda de forma que
la suma de éstas no supere el ancho de banda deseado de la demanda a la que pertenecen.
Se pueden correr los cuatro algoritmos sin cerrar la ventana y así poder comparar
los resultados obtenidos para cada uno de ellos. Los resultados obtenidos de cada ruta
para el algoritmo seleccionado se pueden ver al elegir una ruta de Lista de rutas. En
pantalla muestra los enlaces por donde pasa y en la misma ventana muestra sus atributos
como se observa en la siguiente figura.
Figura 11.5: Ventana que despliega resultados
Para el caso del tercer y cuarto algoritmo, donde se pueden tener múltiples
caminos para cada ruta, se muestran en la pantalla ubicada a la izquierda, las subdemandas o caminos que conforman cada ruta. Al hacer click en cada camino, se pinta en
pantalla el mismo y en la pantalla de la derecha se muestran sus atributos en particular. Si
se quieren apreciar todos los caminos que constituyen cierta demanda al mismo tiempo,
nuevamente, conjuntamente con sus atributos, basta hacer click en la ruta deseada otra
vez.
Aquellas demandas que no llegan a obtener el ancho de banda requerido, se
pintarán de color rojo a rayas en pantalla, para su diferenciación.
11.6 La clase LasDemandas
Esta clase se encarga de desplegar una ventana cuando se elige el tercer algoritmo
de fairness (fairness con múltiples caminos). La misma exhibe datos numéricos sobre
cada una de las demandas, de manera que sea más fácil para el usuario el poder apreciar
cuáles demandas llegó a satisfacer y sobrepasar el ancho de banda requerido, y cuáles no.
Los datos que despliega son los siguientes: nombre de la ruta o demanda, ancho
de banda deseado, ancho de banda final, diferencia de ancho de banda (la resta entre los
dos valores anteriores) y cantidad de caminos o sub-demandas que contiene cada ruta.
83
Figura 11.6: Ventana de la clase LasDemandas
11.7 La clase OfflineMira
Esta clase implementa el marco en el cual el usuario podrá correr el algoritmo
MIRA para una matriz de tráfico previamente configurada y guardada en un archivo .txt
con el formato que se explicó anteriormente. Luego de haber cargado la matriz de tráfico
el usuario tiene que elegir cuáles son los pares de nodos que se van a tomar como
referencia como los futuros generadores de LSPs en el sector de la ventana Nodos
ingreso-egreso. El usuario puede optar entre tres opciones, todos los nodos de la red, sólo
los LER`s o elegirlos manualmente.
Figura 11.7: Ventana configuración MIRA
84
En el último caso la clase desplegará una ventana en que el usuario podrá
seleccionar los nodos individualmente.
Figura 11.8: Seleccionar manualmente los nodos
Luego de haber seleccionado qué nodos quiero ingresar como entrada al
algoritmo, se corre el algoritmo. Primero se asocia pesos a los enlaces de acuerdo a lo
visto en secciones anteriores y luego se corre el algoritmo CSPF con los pesos calculados
y los requerimientos de ancho de banda por las demandas como entrada. Si por algún
motivo no se encontrase ningún posible camino para la demanda, un mensaje de
advertencia alertará de este evento. Antes de mapear las demandas en la red, el usuario
podrá visualizar gráficamente las posibles rutas en la red y si así lo quisiera, se mapearán
las demandas al apretar el botón Crear LSPs.
85
Parte IV
Conclusiones
86
Capítulo 12
Conclusiones y tareas a futuro
12.1 Supuestos y objetivos
El único supuesto que podemos considerar importante al momento de instalar el
software, es que se debe hacer sobre una red MPLS cuyos routers manejen el protocolo
de ruteo OSPF. Este supuesto es necesario en caso de desear utilizar NET-TE para
levantar la red en forma automática y desplegarla en pantalla.
La hipótesis sobre la red MPLS no afecta ninguna otra funcionalidad del software,
ya que es principalmente una herramienta de trabajo offline, usada por el usuario para
analizar distintos métodos de búsqueda de caminos para el establecimiento de LSPs.
En cuanto a los objetivos marcados durante el desarrollo de este proyecto, éstos se
fueron dando a medida que el proyecto avanzaba, no teniéndolos determinados desde un
principio.
Antes de empezar a trabajar formalmente en el proyecto, sabíamos que la idea era
en rasgos generales, el crear un software que le permitiera al usuario el visualizar su red y
poder brindarle ciertos mecanismos de ingeniería de tráfico al momento de establecer los
LSPs a modo de poder satisfacer los distintos niveles de QoS solicitados.
Llegado el final de este proyecto y mirando hacia atrás, podemos ahora distinguir
claramente cuatro distintos objetivos. El primero fue el desarrollar una herramienta que
permita la creación de una red, visualizar su estado actual y poder modificarla de acuerdo
a las necesidades del usuario. El segundo fue el ofrecer varios algoritmos que permitieran
al usuario distintas posibilidades de por dónde rutear el LSP que cubrirá a cada nueva
demanda entrante a la red, de manera que se ajuste de la mejor manera a sus necesidades.
Esto es para el caso donde tenemos una red con varios LSPs ya establecidos y queremos
determinar por dónde irán los nuevos LSPs a medida que llegan una a la vez las nuevas
demandas. Como tercer objetivo, se tuvo el implementar otros algoritmos que permitan, a
diferencia de los anteriores, el poder considerar todas las demandas de la red en forma
conjunta y ubicarlas de la mejor manera posible en la red, de tal manera que se vean todas
cubiertas, o en caso de no ser posible, el cubrirlas de la manera más “justa” a todas ellas.
Finalmente, como cuarto y último objetivo, se planteó la incorporación de una
funcionalidad que le permitiera al usuario el poder levantar la red a la que está conectado
de manera automática y visualizarla en pantalla.
Es importante destacar que en todo momento, con respecto a la validación de los
datos que son devueltos al aplicar los distintos algoritmos de Fairness, se comprobó su
correcto funcionamiento basándose en distintas pruebas y ensayos realizados por nuestra
parte. También se comparó con ejemplos de los cuales ya se conocían de manera
confiable los resultados y viendo así que obteníamos los valores esperados.
Finalmente, en cuanto a la escalabilidad de los algoritmos a medida que la red
crece de tamaño, pudimos corroborar en la práctica, que el tercer y cuarto algoritmo de
fairness son los que consumen más tiempo de operación debido a la gran cantidad de
iteraciones que se realizan. De cualquier manera, probamos con topologías de 30 nodos
aproximadamente, y vimos que el tiempo que demora en desplegar los resultados es
87
prácticamente al instante y no considerable (poco más de un par de segundos cuando
máximo).
12.2 Conclusiones
En cuanto a los objetivos planteados, podemos decir que se llegó a cumplirlos
todos de manera satisfactoria.
Se logró implementar una interfaz gráfica sencilla y fácil de usar por cualquier
usuario, la cual le otorga una amplia flexibilidad al momento de diseñar o modificar su
red. Además, se le brindó al usuario varios mecanismos para poder visualizar el estado
actual de la red, pudiendo ver información de elementos en particular o de la red en
general. Pensando en la comodidad del usuario en la manera de cómo apreciar esa
información, se brinda toda esa información tanto en forma numérica como gráfica.
El problema del establecimiento de los LSPs fue solucionado utilizando el
algoritmo CSPF. Realizamos varias pruebas sobre distintas topologías y situaciones, y
pudimos apreciar el correcto funcionamiento del mismo. Pudimos también comprobar
que es muy útil el tener varias opciones a elegir, ya que esto nos permitió crear múltiples
escenarios y tener así un abanico más grande de soluciones de entre las cuales elegir.
También pudimos comprobar la gran utilidad que ofrece el algoritmo MIRA. Se
hicieron pruebas de chequeo sobre topologías en las cuales habían claramente ciertos
enlaces que eran críticos para futuras posibles demandas, y pudimos apreciar como el
algoritmo tendía a evitar dichos enlaces críticos.
Finalmente, nos planteamos escenarios donde el algoritmo CSPF no encontraba
ningún camino posible para ubicar a cierta nueva demanda, y probamos en ese caso los
algoritmos de fairness. Pudimos apreciar con éxito como, con el uso de éstos últimos, se
lograba ubicar esa demanda sobre la red, cosa imposible de realizar usando el CSPF.
Además, comprobamos con éxito como NET-TE lograba asignar los recursos de una
manera justa en aquellos casos donde no era posible satisfacer por completo a todas las
demandas.
Con respecto a la carga automática de la red, se pudo comprobar con éxito su
funcionamiento en la red multiservicio del PDT desde el IIE de la Facultad. Se conectó
una laptop que tenía el software NET-TE instalado, a la red. Una vez conectada, y luego
de ingresar la información requerida, se pudo apreciar en consola, como el software se
conectaba a los routers vecinos e iba descubriendo la red. Finalmente, y tal como era de
esperarse, se dibujó en pantalla la topología descubierta. Debido a restricciones de
seguridad, no pudimos descubrir la red entera, ya que sólo teníamos visibilidad hasta los
routers más próximos de la PC de donde estabamos conectados. De cualquier manera se
pudo comprobar el correcto funcionamiento de esta funcionalidad.
Es por todo lo anterior que creemos que NET-TE es una útil herramienta que
puede ser usada por cualquier usuario que desee realizar pruebas y crear distintos
escenarios de Ingenieria de Tráfico, sin temor de afectar de alguna manera la red real, ya
que se está en todo momento trabajando sobre escenarios de prueba y no sobre la red en
cuestión.
Como conclusión global se puede afirmar que se lograron realizar con éxito todos
los objetivos trazados, juntando diversos criterios y algoritmos para el establecimiento de
88
LSPs en un sólo software, el cual puede ahora ser usado como pilar para el desarrollo de
un software más completo y grande, que agregue más funcionalidades a las ya presentes.
12.3 Tareas a futuro
Si bien se completaron todos los objetivos trazados, existen varias cosas que se
pueden agregar, de manera que el usuario tenga aún más posibilidades y algoritmos a los
cuales acceder.
En cuanto a la carga automática de la red, actualmente NET-TE se encarga
solamente de levantar la topología conjuntamente con la velocidad de cada enlace. Son
varios los datos que un usuario puede querer extraer de la red. En primer lugar, podría
levantar y mostrar los estados de las adyacencias entre nodos de la red. En esta primera
versión del software, no nos preocupamos de dichos estados. También se podría levantar
las métricas de OSPF y el ancho de banda libre de los enlaces. Uno de los datos más
útiles que interesaría extraer en una posible segunda versión del software, son los LSPs
ya establecidos. Datos como el ancho de banda que consume cada uno de esos LSPs, o la
afinidad que presenta tal o cual enlace, pueden resultar muy útiles, en especial ya que son
usados como datos de entrada en los algoritmos implementados en NET-TE. A su vez, el
avisar de cambios en los estados de las adyacencias entre nodos, mediante los traps de
SNMP, resultaría bastante práctico.
Otra posible tarea a realizar a futuro, es aumentar la variedad de algoritmos
usados para el cálculo de los LSPs. Se pueden agregar tantos algoritmos como el usuario
desee y que se ajusten a sus necesidades particulares. Asimismo, se pueden agregar
nuevos pesos, que por ejemplo reflejen el delay de cada enlace, y calcular así el CSPF en
base al retardo de los mismos.
Por último, actualmente NET-TE lo que nos permite es cargar la topología de la
red y extraer la velocidad de los enlaces, para así luego determinar dónde se ubicarán
cada uno de los LSPs de manera que se logre la QoS requerida. Pero no hay una forma de
“arrojar” esos LSPs a la red real. Por ende, una útil implementación en futuras versiones,
es desarrollar una interfaz que permita cargar en los routers de la red real los LSPs que
fueron calculados por NET-TE durante las distintas pruebas. De esa manera se cerraría el
ciclo que comienza con la carga automática de la red conjuntamente con los LSPs ya
establecidos, continúa con el cálculo realizado por NET-TE de las nuevas rutas que
satisfacerán las nuevas demandas y finaliza con la descarga de dichos LSPs a los routers
de la red, de manera que se vean reflejados los cambios y nuevas rutas establecidas.
89
Apéndices
90
Apéndice A
Multi Protocol Label Switching
(MPLS)
MPLS es un estándar emergente del IETF (RFC 3031) que surgió para consensuar
diferentes soluciones de conmutación multinivel, propuestas por distintos fabricantes a
mitad de los 90s. Ante todo, debemos considerar MPLS como el avance más reciente en
la evolución de las tecnologías de routing y forwarding en las redes IP, lo que implica
una evolución en la manera de construir y gestionar estas redes. Los problemas que
presentan las soluciones actuales de IP sobre ATM, tales como la expansión sobre una
topología virtual superpuesta, así como la complejidad de gestión de dos redes separadas
y tecnológicamente diferentes, quedan resueltos con MPLS. Al combinar lo mejor de
cada nivel (la inteligencia del routing con la rapidez del switching) en un único nivel,
MPLS ofrece nuevas posibilidades en la gestión de backbones, así como en la provisión
de nuevos servicios de valor añadido.
A.1 Descripción funcional de MPLS
La base del MPLS está en la asignación e intercambio de etiquetas, que permiten
el establecimiento de los LSP por la red. Cada LSP se crea a base de concatenar uno o
más saltos (hops) en los que se intercambian las etiquetas, de modo que cada paquete se
envía de un "conmutador de etiquetas" (Label-Swiching Router) a otro, a través de la red
MPLS. Un LSR no es sino un router especializado en el envío de paquetes etiquetados
por MPLS.
MPLS separa las dos componentes funcionales de control (routing) y de envío
(forwarding). Del mismo modo, el envío se implementa mediante el intercambio de
etiquetas en los LSPs. Sin embargo, MPLS no utiliza ninguno de los protocolos de
señalización ni de encaminamiento definidos por el ATM Forum; en lugar de ello, en
MPLS o bien se utiliza el protocolo RSVP o Label Distribution Protocol, LDP, del que
se tratará más adelante). Pero, de acuerdo con los requisitos del IETF, el transporte de
datos puede ser cualquiera. Si éste fuera ATM, una red IP habilitada para MPLS es ahora
mucho más sencilla de gestionar que la solución clásica IP/ATM. Ahora ya no hay que
administrar dos arquitecturas diferentes a base de transformar las direcciones IP y las
tablas de encaminamiento en las direcciones y el encaminamiento ATM: esto lo resuelve
el procedimiento de intercambio de etiquetas MPLS. El papel de ATM queda restringido
al mero transporte de datos a base de celdas. Para MPLS esto es indiferente, ya que puede
utilizar otros transportes como Frame Relay, o directamente sobre líneas punto a punto.
91
A.2 Componentes y funcionamiento de una red
MPLS
Los dispositivos que participan en un ambiente como éste pueden clasificarse en
routers frontera de etiquetas (LER) y en routers de conmutación de etiquetas (LSR).
Un LER es un dispositivo que opera en los extremos de las redes MPLS y funciona como
el punto de interconexión entre ésta y la red de acceso. Cuando un paquete llega a uno de
estos routers, el LER examina la información entrante y, de acuerdo con una base de
datos, asigna al paquete una etiqueta. En el extremo de salida de una red MPLS se
presenta la situación opuesta, siendo estos dispositivos los responsables de remover la
etiqueta para entregar el paquete en la forma en que fue recibido.
Después de que los paquetes han sido etiquetados por el LER, éstos comienzan su
viaje a través de la red MPLS, encontrándose en su trayectoria con los routers de
conmutación de etiquetas (LSRs). Estos son los encargados de dirigir el tráfico en el
interior de la red, de acuerdo con las etiquetas asignadas. Cuando un paquete arriba a un
LSR, éste examina su etiqueta y la utiliza como un índice en una tabla propia que
especifíca el siguiente "salto" y una nueva etiqueta. El LSR intercambia entonces ésta
etiqueta por la que contenía el paquete y lo envía hacia el siguiente router. La ruta que
sigue un paquete entre dos nodos de la red MPLS se conoce como ruta conmutada de
etiquetas (LSP). En la Figura A.1 se puede observar el esquema funcional de MPLS.
Figura A.1: Esquema funcional de MPLS
92
Como se comentó anteriormente, los LERs se encargan de clasificar paquetes con
base en un nivel de calidad de servicio. A este proceso de clasificación se le conoce como
Clase Equivalente de Direccionamiento (FEC, por sus siglas en inglés). Un FEC es la
representación de un conjunto de paquetes que comparten los mismos requerimientos
para su transporte, de manera que todos los paquetes que pertenezcan a un FEC seguirán
el mismo LSP para llegar a su destino. Contrario a lo que sucede en el enrutamiento IP
convencional, la asignación de un paquete a un determinado FEC en MPLS se hace una
sola vez.
Los LERs utilizan diferentes métodos para etiquetar el tráfico. Bajo el esquema
más simple, los paquetes IP son ligados a una etiqueta y a un FEC utilizando tablas
preprogramadas como la que se muestra en la Figura A.2. Cuando los paquetes
abandonan el LER e ingresan al LSR correspondiente, la etiqueta MPLS es examinada y
comparada contra una tabla de conectividad conocida como Base de Información de
Etiquetas (LIB) para determinar la acción a seguir. El intercambio de instrucciones se
llevará a cabo dependiendo de las instrucciones del LIB. Un ejemplo de esta tabla de
conectividad se muestra en la Figura A.3. Debe señalarse que las etiquetas poseen
únicamente un significado local dentro del router correspondiente.
Figura A.2: Ejemplo de una tabla preprogramada para LERs.
Figura A.3: Ejemplo de un LIB para LSRs.
Un router frontera lleva a cabo distintas funciones de análisis: mapear un
protocolo de la capa 2 del modelo OSI a MPLS, mapear MPLS a la capa 3 del modelo y
clasificar el tráfico con gran flexibilidad. Adicionalmente, un LER define qué tráfico
deberá ser tratado como MPLS y qué paquetes deberán tratarse como tráfico IP ordinario.
A diferencia de un encabezado IP, las etiquetas en MPLS no contienen una
dirección IP, sino más bien un valor numérico acordado entre dos nodos consecutivos
para proporcionar una conexión a través de un LSP. La etiqueta es un identificador corto
de longitud fija empleado para asociar un determinado FEC, normalmente de significado
local.
93
Algunas etiquetas o encabezados de determinados medios de transporte pueden
utilizarse como etiquetas de MPLS. Tal es el caso del identificador de ruta
virtual/identificador de circuito virtual (VPI / VCI) empleado en ATM y el
identificador de conexión de enlace de datos (DLCI) de Frame Relay. Otras
tecnologías, como Ethernet y enlaces punto a punto, requieren de una "etiqueta de
inserción" (shimlabel) que se ubica entre el encabezado de la capa de enlace de datos y el
encabezado de la capa de red (capas 2 y 3) del modelo OSI de un paquete. Aún cuando la
"etiqueta de inserción" no es parte de ninguno de estos encabezados, ésta provee un
medio de relación entre ambas capas.
Figura A.4: Esquema de una etiqueta MPLS
La etiqueta MPLS tiene una longitud de 32 bits divididos en cuatro secciones. Los
primeros 20 bits corresponden a la etiqueta en sí. Los 3 bits que siguen son considerados
de uso experimental. El siguiente bit es utilizado para denotar la presencia de "stack" y,
finalmente, los 8 bits restantes indican el tiempo de vida del paquete, es decir, un
parámetro que decrementa su valor por cada nodo recorrido hasta llegar a cero.
Obsérvese en la Figura A.4 cómo está compuesta la "etiqueta de inserción" y cuál es su
ubicación dentro de los paquetes IP.
A.3 Método de distribución de etiquetas
Es también importante conocer la forma en que se lleva a cabo la distribución de
etiquetas hacia los routers y los protocolos que pueden utilizarse para hacer esto. Un
router MPLS debe conocer las "reglas" para poder asignar o intercambiar etiquetas. Aún
cuando los routers convencionales suelen ser programados para determinar qué es lo que
harán con un determinado paquete, es preferible contar con una asignación dinámica de
reglas que permita mayor flexibilidad. Existen dos alternativas diferentes para hacer esta
distribución. Cuando los routers son capaces de "escuchar" estas reglas, crear una base de
datos interna y distribuir esta información a otros routers, sin necesidad de contar con un
administrador de etiquetas previamente designado, el control se hace de manera
independiente. La otra alternativa, preferida en MPLS, es el control ordenado. En este
método de distribución, el LER de salida es, por lo regular, el encargado de la
distribución de etiquetas, siendo este proceso en sentido contrario al direccionamiento de
paquetes. El control ordenado ofrece como ventajas una mejor Ingeniería de Tráfico y
94
mayor control de la red, aunque, en comparación con el control independiente, presenta
tiempos de convergencia mayores y el router de salida se convierte en el único punto
susceptible a fallas.
Figura A.5: Alternativas de distribución de etiquetas con control ordenado.
La distribución con control ordenado puede darse, a su vez, de dos maneras
distintas. Una alternativa consiste en distribuir las etiquetas sin que éstas sean solicitadas
por otros routers, desde el LER en el extremo de salida de la red y "empujándolas" hacia
arriba. Este método de distribución, conocido como transferencia de bajada no
solicitada ("downstream unsolicited”), puede hacerse cada determinado tiempo o cada
vez que cambie la Base de Información de Etiquetas de un router cualquiera. La segunda
opción, denominada transferencia de bajada por demanda ("downstream ondemand"), requiere que un router en particular solicite sus tablas, siendo éstas
posteriormente distribuidas por el LER de salida. Véase la Figura A.5.
Adicionalmente, existen dos métodos en que los routers retienen sus tablas de
etiquetas. En el modo conservativo, un router retiene exclusivamente las etiquetas que
necesita en ese momento. En el modo liberal, un LSR retiene todas las tablas que le
fueron asignadas, aún cuando éstas no le sean útiles en ese momento. Después de que
cada router posee sus tablas de etiquetas puede comenzar el direccionamiento de paquetes
a través de los LSPs preestablecidos por un determinado FEC.
Actualmente existe una amplia variedad de protocolos utilizados para la
distribución de etiquetas. La arquitectura MPLS no especifica uno de estos en particular,
sino que, más bien, recomienda su elección dependiendo de los requerimientos
específicos de la red. Los protocolos utilizados pueden agruparse en dos grupos:
95
protocolos de enrutamiento explícito y protocolos de enrutamiento implícito. El
enrutamiento explícito es idóneo para ofrecer Ingeniería de Tráfico y permite la creación
de túneles. El enrutamiento implícito, por el contrario, permite el establecimiento de
LSPs pero no ofrece características de Ingeniería de Tráfico.
El Protocolo de Distribución de Etiquetas (LDP) es uno de los protocolos de
enrutamiento implícito que se utilizan con frecuencia. LDP define el conjunto de
procedimientos y mensajes a través de los cuales los LSRs establecen LSPs en una red
MPLS. Otros protocolos de enrutamiento implícito incluyen al Protocolo de Compuerta
de Frontera (BGP) y al protocolo de Sistema Intermedio a Sistema Intermedio (ISIS).
Por otro lado, entre los protocolos de enrutamiento explícito más comunes
encontramos al protocolo LDP de Ruta Restringida (CR-LDP) y al Protocolo de
Reservación de Recursos con Ingeniería de Tráfico (RSVP-TE). El primero de estos
protocolos ofrece, en adición a LDP, características de Ingeniería de Tráfico, de manera
que sea posible negociar con anticipación una ruta en especial. Esto permite establecer
LSPs punto a punto con calidad de servicio en MPLS. CR-LDP es un protocolo de estado
sólido, es decir, que después de haberse establecido la conexión, ésta se mantiene
"abierta" hasta que se le indique lo contrario.
RSVP-TE opera de manera similar que CR-LDP, pues permite negociar un LSP
punto a punto que garantice un nivel de servicio de extremo a extremo. El protocolo es
una extensión de la versión original RSVP, aunque incorpora el respaldo para MPLS. A
diferencia de CR-LDP, este protocolo permite negociar una ruta para la transmisión de
información, misma que debe "refrescarse" constantemente para que ésta se mantenga
activa (estado blando). Mediante estos últimos protocolos y la aplicación de distintas
estrategias de ingeniería de tráfico es posible asignar diferentes niveles de calidad de
servicio en redes MPLS.
96
Apéndice B
Simple Network Management
Protocol (SNMP) & Management
Information Base (MIB)
B.1 SNMP y Management Information Base
El protocolo SNMP forma parte de la capa de aplicación y facilita el intercambio
de información de gestión entre elementos de la red y es parte del stack de protocolos
TCP/IP.
Una red administrada con SNMP consta de tres componentes básicos: estaciones
administradas, los agentes y la estación administradora NMS (Network Management
System).
Las estaciones administradas son elementos de red que contienen un agente
SNMP y pertenecen a la red administrada. Estos elementos pueden ser routers, switches,
hubs, impresoras, etc. y lo que hacen es recolectar y guardar información que hacen
disponible al NMS vía SNMP. El agente SNMP es un proceso de administración que
reside en la estación administrada
Cada agente mantiene uno o varias variables que describen su estado. En la
documentación SNMP, estas variables se llaman objetos. El conjunto de todos los objetos
posibles se da en la estructura de datos llamada MIB (Management Information Basebase de información de administración). La MIB es una colección de información que es
organizada jerárquicamente, y los objetos (también llamados MIBs) son accedidos por un
NMS usando SNMP .Este protocolo permite al NMS consultar el estado de los objetos
locales de un agente, y cambiarlo de ser necesario. La mayor parte de SNMP consiste en
este tipo de comunicación consulta-respuesta.
Sin embargo, a veces ocurren sucesos no planeados. Los nodos administrados
pueden caerse y volver a activarse, las líneas pueden desactivarse y levantarse de nuevo,
pueden ocurrir congestionamientos, etc. Cada suceso significativo se define en un
módulo MIB. Cuando un agente nota que ha ocurrido un evento significativo, de
inmediato le informa a todas las estaciones administradoras de su lista de configuración.
La seguridad y la validación de identificación desempeñan un papel
preponderante en el SNMP. Un NMS también tiene la capacidad de aprender mucho
sobre cada nodo que está bajo su control, y también puede apagarlos. Por lo tanto los
agentes tienen que estar seguros de que las consultas supuestamente originadas por la
estación administradora realmente vienen de la estación administradora. En el SNMPv1 y
SNMPv2, la estación administradora comprobaba su identidad poniendo una contraseña
(de texto normal) en cada mensaje. En el SNMPv3 se mejoró considerablemente la
seguridad usando técnicas criptográficas modernas.
97
B.2 ASN.1
Como ya se mencionó, el corazón del modelo SNMP es el conjunto de objetos
administrados por los agentes y leídos por la estación administradora. Para hacer posible
la comunicación multiproveedor, es esencial que estos objetos se definan de una manera
estándar y neutral desde el punto de vista de los proveedores. Es más, se requiere una
forma estándar de codificarlos para su transferencia a través de la red. Por esta razón, se
requiere un lenguaje de definición de objetos estándar, así como reglas de codificación.
El lenguaje usado por el SNMP se toma del OSI y se llama ASN.1 (Abstract Syntax
Notation One-notación de sintaxis abstracta uno).
Los tipos de datos básicos del ASN.1 se muestran en la Figura B.1.
Tipo primitivo
Significado
INTEGER
Entero de longitud arbitraria
BIT STRING
OCTET STRING
NULL
OBJECT IDENTIFIER
Cadena de 0 o más bits
Cadena de 0 o más bytes sin signo
Marcador de lugar
Tipo de datos definido oficialmente
Figura B.1: Tipos de datos básicos de ASN.1
Los OBJECT IDENTIFIER ofrecen una manera de identificar objetos. En
principio cada objeto definido en cada estándar oficial puede identificarse de manera
única. El mecanismo consiste en definir un árbol de estándares, y colocar cada objeto en
cada estándar en una localidad única del árbol. La parte del árbol que incluye la MIB del
SNMP se muestra en la figura NÚMERO.
El nivel superior lista todas las organizaciones de estándares importantes del
mundo y en los niveles bajos las organizaciones asociadas. Cada arco de la figura
NÚMERO tiene tanto un nombre como un número. Por tanto, todos los objetos de la
MIB de SNMP se identifican unívocamente por su nombre o número:
iso.identified.organization.dod.internet.private.enterprise.enterprise.cisco.temporaryvari
ables.AppleTalk.atInput. o por su equivalente 1.3.6.1.4.1.9.3.3.1.
Los proveedores pueden definir subconjuntos para administrar sus productos.
MIBs que no han sido estandarizados generalmente se posicionan dentro del
subconjunto experimental, 1.3.6.1.4.
Pero SNMP usa sólo algunas partes del ASN.1. Las partes del ASN.1 que usan el
SNMP se agrupan en un subconjunto, que recibe el nombre de SMI (Structure of
Management Information). El SM1 es en lo que en realidad describe la estructura de
datos del SNMP.
98
Esto es necesario ya que hay que definir algunas reglas si los productos de cientos
de proveedores han de hablar entre sí y realmente entender lo que dicen.
En el nivel más bajo, las variables SNMP se definen como objetos individuales.
Los objetos relacionados se reúnen en grupos, y los grupos se integran en módulos. Por
ejemplo existen grupos para los objetos IP y los objetos TCP. Un router puede
Figura B.2: Diferentes jerarquías asignadas a diferentes organizaciones.
Reconocer los grupos IP, dado que a su administrador le interesa tener
información por ejemplo de la cantidad de paquetes perdidos. Por otra parte, un router de
bajo nivel podría no reconocer el grupo TCP, dado que no necesita usar TCP para
desempeñar sus funciones de enrutamiento.
99
Todos los módulos MIB comienzan con una invocación de la macro MODULEIDENTITY que proporciona el nombre y la dirección del implementador, la historia de
modificaciones y otra información administrativa. Luego le sigue una invocación de la
macro OBJECT-TYPE que tiene cuatro parámetros requeridos y cuatro opcionales:
SYNTAX:
MAX-ACCESS:
escritura, lectura).
STATUS:
obsoleto)
DESCRIPTION:
define el tipo de datos de la variable
información de acceso a la variable (los más usados lecturaestado de la variable respecto a SNMP (los más usados actual y
cadena ASCII que indica lo que hace la variable.
Un ejemplo sencillo se da en la siguiente tabla. La variable se llama RouterID del
módulo OSPF y grupo ospfGeneralGroup que es usada en el software:
ospfRouterId ObjectType
Syntax
RouterID
MaxAccess
read-write
Status
current
Description
A 32-bit integer uniquely identifying
router in the Autonomous System.
the
By convention, to ensure uniqueness,
this
should default to the value of one of the
router's IP interface addresses.
Figura B.3: Ejemplo
También SM1 define una gran variedad de tablas estructuradas que son usadas
para agrupar objetos que tienen múltiples variables.
B.3 SNMP v1
SNMP v1 es la implementación inicial del protocolo SNMP. Es descrito en el
RFC 1157. Opera bajo protocolos tales como User Datagram Protocol (UDP), Internet
Protocol (IP), OSI Connectionless Network Service (CLNS), AppleTalk DatagramDelivery Protocol (DDP) y Novell Internet Packet Exchange (IPX). Esta versión es la
más extendida en su uso y es el protocolo de facto en la comunidad de Internet.
100
B.3.1 Operaciones Básicas
SNMP es un protocolo simple de consulta-respuesta. El NMS hace la consulta y
la estación administrada responde. Este comportamiento es implementado usando una de
las 4 operaciones del protocolo: Get, GetNext, Set and Trap.
Get
GetNext
Set
Trap
Usado por el NMS para consultar el valor
de una variable de un objeto.
Usado por el NMS para consultar el valor
de la siguiente variable de un objeto.
Usado por el NMS para setear valores de
un objeto.
Usado por los agentes para informar al
NMS de eventos significativos.
Figura B.4: Operaciones básicas de SNMP
B.4 SNMP v2
Es una evolución de la versión inicial. SNMP v2 ofrece muchas mejoras así como
opciones adicionales: GetBulk e Inform.
GetBulk
Inform
Usado por el NMS para consultar
eficientemente grandes cantidades de
datos, por ejemplo varias filas de una tabla.
Usado por el NMS para enviar traps a otro
NMS y obtener una respuesta.
Figura B.5: Mejoras en SNMP v2
101
Apéndice C
Ejemplo de Fairness con múltiples
caminos
C1
Ejemplo
Veremos ahora un ejemplo para que el usuario pueda entender mejor el
procedimiento llevado a cabo para aplicar el algoritmo de fairness con múltiples caminos
(es decir, para la búsqueda de la asignación de los flujos considerando que se toman todos
los caminos posibles para cada demanda). Vale destacar antes de exponerlo que dicho
ejemplo fue facilitado al grupo gracias a Paola Bermolen, quien nos ayudó en la
comprensión de los algoritmos de fairness.
Es también importante comentar que los valores expuestos fueron calculados
usando MatLab. Debajo de cada uno de los resultados hallados, exponemos también los
valores arrojados por NET-TE, de manera de poder así compararlos.
Empecemos mirando en la siguiente figura la topología a considerar en este
ejemplo.
Figura C.1: topología a usar en el ejemplo
Consideraremos 2 demandas, d = 1 y d = 2, tal que,
• d = 1 es entre los nodos 1 y 2
• d = 2 es entre los nodos 1 y 4
Si resolvemos el problema anterior encontramos 2 caminos posibles para cada
demanda.
Para la demanda d = 1 encontramos los posibles caminos:
P1 = {2}
y
P2 = {1,3} demanda1
Para la demanda d = 2 encontramos los posibles caminos:
P1 = {1, 4}
y
P2 = {2,3, 4} demanda 2
Si resolviéramos este problema siguiendo los pasos indicados por el algoritmo
llegaríamos al siguiente resultado:
102
x11 =1 en el camino P1 = {2}
x12 =1 en el camino P2 = {1,3}
x12 =1 en el camino P1 = {1, 4}
x22 =0 en el camino P2 = {2,3, 4}
dónde la notación xij representa el BW asignado a la demanda i por el posible camino j.
La demostración de cómo se llega a ese resultado se exhibe a continuación.
Empezamos observando que la cantidad total de BW asignado a la demanda 1
(X1) y a la demanda 2 (X2) es lo siguiente:
X 1 = x11 + x12 demanda 1
X 2 = x12 + x22 demanda 2
Si X es el vector de BW total, entonces X = ( X 1 , X 2 ) .
Si consideramos f ( x) = ( f1 ( x), f 2 ( x) ) = ( X 1 , X 2 ) , llegamos a que fi ( x) = X i .
El objetivo es el buscar un vector X 0 (= ( X 10 , X 20 )) ,
tal
que
f ( x0 ) ≥ LEX f ( x)
∀x ∈ Q
Las restricciones con las que trabajaremos son, expresadas en términos generales,
las siguientes:
∑ xdp = X d
d
∀demanda
 p

∀enlace
e
∑∑ δ edp xdp ≤ ce
d p
 x ≥ 0 ∀demanda
y todo camino
 dp
Lo anterior, aplicado a nuestro problema en particular, se traduce en:
x + x = X1
1
1
2
1
x12 + x22 = X 2
x12 + x12 ≤ 2
x11 + x22 ≤ 1
lo que nos lleva al primer cálculo de maximización:
x12 + x22 ≤ 2
x12 + x22 ≤ 1
xij ≥ 0
i = 1, 2
j = 1, 2
103
ℑ
max

1
2
ℑ ≤ x1 + x1
ℑ ≤ x1 + x 2
2
2

2
1
 x1 + x2 ≤ 2
* 1 2
 x1 + x2 ≤ 1
 x2 + x2 ≤ 2
2
 1
1
 x2 + x22 ≤ 1
 j
 xi ≥ 0 i = 1, 2
con
x ∈Q
j = 1, 2
Haciendo cuentas, 2ℑ ≤ x11 + x12 + x12 + x22 = ( x11 + x22 ) + ( x12 + x12 ) ≤ 3
≤1
≤2
2ℑ ≤ 3 ⇒ ℑ ≤ 1.5 ⇒ ℑ0 = 1 es el máximo (NET-TE en su caso arroja el valor 1).
Observar que hay múltiples valores de xij para los cuales se da que
f1 ( x) = f 2 ( x) = ℑ0 = 1
Por ejemplo,
a ) x11 = 1
x12 = 0
y
x =1
y
x =0
b) x11 = 0.5
y
x12 = 0.5
1
2
2
2
cumple con todas las restricciones y f1 ( x) = f 2 ( x) = ℑ0
También cumple con las restricciones. Además, siguen
x12 = 1
y
x22 = 0
habiendo más posibles soluciones.
Ahora que hayamos el máximo valor de ℑ , el siguiente paso es tratar de
maximizar cada demanda d por separado, y ver si puede hacerse más grande que ese
valor ℑ hayado anteriormente, con la restricción que no se vean afectadas el resto de las
demandas. Según el algoritmo, si encontramos alguna demanda la cual no se puede hacer
mayor que el valor de ℑ encontrado, entonces decimos que esa es una demanda
bloqueadora y la apartamos del grupo, guardando su índice en un conjunto aparte B.
Así entonces procedemos a elegir k = 1 (correspondiente a la demanda d = 1) y
testeamos:
max f1 ( x) = x11 + x12
max x11 + x12
 0

1
2
1
2
ℑ = 1 ≤ f 2 ( x) = x2 + x2 ⇒ 1 ≤ x2 + x2
x ∈ Q
x ∈ Q


104


La solución a problema LP anterior es: X 0 = 0.9214,1.0786,
0.9214,
0.0786

 x11

x12
x12
x22
(NET-TE en su caso arroja los valores [1, 1, 1, 0])
Si observamos cuanto quedo el X1 finalmente vemos que
f1 ( X 0 ) = 0.9214 + 1.0786 = 2 ≠ ℑ0 (= 1) , entonces aumento!
Pasamos ahora a resolver el problema LP para la segunda demanda (d = 2).
Eligiendo k = 2, testeamos:
max f 2 ( x) = x12 + x22

1
2
1 ≤ x1 + x1
x ∈ Q



0
lo cual nos lleva a la solución:
X 0 =  0.7436,
0.6066,
0.8663,
0.1337
 ⇒ f 2 ( X ) = 1
 x11

x12
x12
x22
(NET-TE en su caso arroja los valores [1, 0, 1, 0])
Esto demuestra que permaneció igual que el valor de ℑ hayado previamente.
No aumento!
Según el algoritmo, tenemos que pasar entonces el índice k = 2 al grupo B.
Por lo que, B = {2} y
B ' = {1}
con
t2B = ℑ0 = 1 , siendo B el conjunto que
contiene a las demandas que son bloqueadoras.
El siguiente paso es resolver el siguiente problema LP, tratando de hayar un
nuevo valor de ℑ , pero esta vez considerando las nuevas restricciones que surgen de
saber que las demandas bloqueadoras no pueden hacerse mayores a determinado valor.
Resolvemos:
ℑ
max

1
2
ℑ ≤ x1 + x1
1 ≤ x1 + x 2
ℑ
max
2
2


2
1
1
2

2
x
x
+
≤
ℑ ≤ f1 ( x) = x1 + x1
 1
2
⇒


1
2
B
1
2
1 = t2 ≤ f 2 ( x) = x2 + x2
 x1 + x2 ≤ 1
x ∈ Q
 x2 + x2 ≤ 2

2
 1
1
 x2 + x22 ≤ 1
 j
 xi ≥ 0 i = 1, 2
j = 1, 2
Resolviendo, obtenemos un ℑ = 2 (NET-TE arroja el mismo valor).
¿Hay una solución tal que f1 ( x) = x11 + x12 = 2 ?
105
La repuesta es Si:
x11 = x12 = 1
x12 = 1
y
x22 = 0
Debemos ver ahora si se pueden maximizar las demandas que quedan en el
conjunto B’ de manera que sean mayores que el valor de ℑ hayado previamente.
Haciendo el test siguiente para k = 1
( B = {2}
y
B ' = {1}
t2B = 1) , lo
averiguamos:
max f1 ( x) = x11 + x12
max x11 + x12
B

1
2
1
2
t2 = 1 ≤ f 2 ( x) = x2 + x2 ⇒ 1 ≤ x2 + x2
x ∈ Q
x ∈ Q




La solución obtenida es: X = 0.9214,1.0786,
0.9214,
0.0786

 x11

x12
x12
x22
(NET-TE en su caso arroja los valores [1, 1, 1, 0]).
Como podemos apreciar, X1 es igual a 2. Por lo tanto no se pudo hacer mayor que
el último valor de ℑ hayado.
Pasamos como es debido el índice k = 2 al conjunto B. Tenemos entonces que
t =2.
B
1
El conjunto B’ ha quedado entonces vació. Hemos llegado entonces al fin del
algoritmo y hayado la solución final del vector de asignación X.
La solución final es: t1B = 2 y t2B = 1 . O lo que es igual, X = (2, 1), con cada
camino para cada demanda teniendo el siguiente BW:
x11 =1 en el camino P1 = {2}
x12 =1 en el camino P2 = {1,3}
x12 =1 en el camino P1 = {1, 4}
x22 =0 en el camino P2 = {2,3, 4}
En el caso de NET-TE, arroja los mismos valores que los señalados
anteriormente.
106
Apéndice D
Software
Las acciones principales que pueden realizarse en el simulador se encuentran
distribuidas en el menú Archivo, en la barra de herramientas debajo del menú Archivo y
en la barra vertical a la derecha. Una vez iniciado el programa se visualizará una ventana
principal como se muestra a continuación en la Figura D.1.
Figura D.1: Ventana principal.
Dentro del menú Archivo se encuentran las opciones:
•
•
Abrir, para abrir un archivo mediante el método abrirArch() de la clase Principal.
Nuevo, para crear un nuevo archivo mediante el método nuevoArch() de la clase
Principal.
107
•
•
•
Guardar y Guardar como, para guardar un archivo, mediante los métodos
guardarArch() y guardarNeverSaved() de la clase Principal.
Cerrar, para cerrar una archivo usando el método cerrarArch() de la clase Principal.
Salir, para salir del programa usando el método processWindowEvent(WindowEvent
e) de la clase Principal.
Dentro de la barra de herramientas las opciones son:
•
•
•
•
Abrir,
para
abrir
un
archivo
mediante
el
método
botonOpen_actionPerformed(ActionEvent e) de la clase Principal.
Nuevo,
para
crear
un
nuevo
archivo
mediante
el
método
botonNew_actionPerformed(ActionEvent e) de la clase Principal.
Guardar,
para
guardar
un
archivo,
mediante
el
método
botonSave_actionPerformed(ActionEvent e) de la clase Principal.
Crear matriz de tráfico, para crear un archivo de una matriz de tráfico mediante el
método botonRuteo_actionPerformed(ActionEvent e) la clase Principal.
D.1 Menú Archivo y Barra de Herramientas
Abrir:
Es posible abrir un archivo existente por medio de la barra de herramientas o por
el menú Archivo. Por defecto los archivos que se muestran para abrir son aquellos cuya
extensión sea .txt. Se puede elegir para que muestre los archivos con extensión .arc o
todos los archivos. Esto se logró definiendo las clases ArcFileFilter y TxtFileFilter
pertenecientes al package Programa, las cuales heredan de la clase
javax.swing.filechooser.FileFilter_.
Al producirse un evento sobre el ítem que llama al método abrirArch() de la clase
Principal, se chequea si hay algún archivo abierto. Si lo hay, se hace una llamada el
método cerrarArch() de la clase Principal.
En caso que no halla algún archivo abierto o que se halla cerrado el archivo
abierto (aprovado=true), se despliega una ventana por la cual el usuario puede navegar a
través del sistema de archivos con el fin de seleccionar el deseado. Si el archivo
seleccionado es con extensión .arc el método abrirArch() llama al método cargar().
Después de haber elegido el archivo y de haber presionado Abrir se intenta abrir.
En caso que se logre realizar dicha acción, se muestra el contenido en la pantalla.
Además se escribe la ruta de acceso del archivo en la barra de Título y se guarda
la ruta de acceso al archivo seleccionado para que las futuras ventanas de diálogo del tipo
javax.swing. JFileChooser se inicien en dicho directorio.
Nuevo:
Es posible crear un nuevo archivo por medio de la barra de herramientas o por el
menú Nuevo. Para ello se debe realizar un evento sobre alguno de los ítems que llama al
método nuevoArch() de la clase Principal. Al llamar a este método, se chequea si hay
algún archivo abierto. En caso que lo halla, se llama al método cerrarArch() de la clase
108
Principal. En caso que este método devuelva aprovado=true, se genera un nuevo
archivo. Si aprovado=false el programa no realizará acción alguna, volviendo al estado
anterior al llamado del método nuevoArch() de la clase Principal.
Guardar y GuardarComo:
Es posible guardar un archivo por medio de la barra de herramientas Guardar o
por el menú Guardar o GuardarComo.
Hay doy formas distintas para guardar archivos de configuración. En caso que se
elija el ítem Guardar, se llama el método guardarArch() de la clase Principal. Este
chequea si el archivo ha sido anteriormente guardado mediante el atributo booleano
neverSaved de la clase Principal. En caso que su valor sea true, se llama al método
guardarNeverSaved() de la clase Principal quien dará la opción al usuario de elegir la
ubicación y el nombre con el que desee guardar el archivo. Si el archivo ya ha sido
guardado (neverSaved=false) se llama al método guardarSaved() de la clase Principal
que sobrescribe el archivo existente. En la figura 3 puede verse el diagrama de
colaboración del método guardarArch() de la clase Principal. Las acciones realizadas al
llamar guardarNeverSaved() de la clase Principal son similares.
Si el evento se realiza sobre GuardarComo, se invocará el método
guardarNeverSaved() de la clase Principal.
Si el archivo que se quiere guardar es con extensión .arc los métodos
guardarSaved() y guardarNeverSaved() llaman al método salvar().
Cerrar:
Para cerrar un archivo es necesario realizar un evento que llame al método
cerrarArch() de la clase Principal. Esto se puede hacer seleccionando Cerrar en el menú
Archivo.
En caso que halla algún archivo abierto se da la elección de:
•
•
•
salvar y cerrar
cerrar sin salvar
cancelar
Si se elige la primera opción y el archivo nunca ha sido guardado se llama al
método guardarNeverSaved() de la clase Principal. Si ya ha sido guardado se llama al
método guardarSaved() de la clase Principal. Luego se llama al método clear() de la
clase Principal. En caso de elegir cerrar sin salvar se llama directamente al método
clear() de la clase Principal. Si se presiona en Cancelar no se realiza acción alguna.
Salir
Al seleccionar este ítem, se genera el evento, presionado del botón salir, el cual es
tomado por el método salirArch_actionPerformed(e) de la clase Principal, que a su vez
invoca al método processWindowEvent(WindowEvent e) de la clase Principal, método
109
que se encarga de cerrar el programa dando las opciones correspondientes para guardar
un archivo abierto.
D.2 Crear matriz de tráfico
Después de tener una topología de la red, es posible crear una matriz de tráfico.
, se llama al método
Al realizar un evento sobre el ítem
botonRuteo_actionPerformed(ActionEvent e) de la clase Principal el cual crea una
instancia de la clase GeneroMT.
En la clase GeneroMT se configuran los parámetros de cada ruta de la matriz de
tráfico.
En esta clase dentro del método jbInit() se llenan los combo de nodo origen, nodo
destino con el vector nodes el cual contiene todos los nodos de la red y el combo afinidad
se llena con las afinidades de todos los enlaces que se encuentran en links.afinidad.
Después de asignar los parámetros de cada ruta:
•
•
•
•
BW deseado: jTextFieldNombre.getText()
Nodo Origen: comboNodoOrigen_actionPerformed(ActionEvent e)
Nodo Destino: comboNodoDestino_actionPerformed(ActionEvent e)
Afinidad: comboAfinidad_actionPerformed(ActionEvent e)
se crea la ruta al apretar el botón Agregar que llama al método
jButtonInsertar_actionPerformed(ActionEvent e).
Si se desea modificar una ruta ya creada, se debe seleccionar la ruta y después de
hacer las modificaciones deseadas se debe apretar el botón Cambiar que llama al método
jButtonEditar_actionPerformed(ActionEvent e).
Si se desea borrar una ruta se debe apretar el botón Borrar que llama al método
jButtonBorrar _actionPerformed(ActionEvent e).
Si se desea modificar una matriz de tráfico ya creada, se debe apretar el botón
Cargar que llama al método jButtonCargar_actionPerformed(ActionEvent e) que a su ves
llama al método stringToVectors de la clase InterpreteMT.
Para crear la matriz de tráfico se debe apretar el botón Guardar que llama al
método jButtonGuardar_actionPerformed(ActionEvent e) que a su ves llama al método
guardarArch() el cual llama al método EditarTexto de la clase InterpreteMT.
D.3 Barra Vertical
Dentro de la barra vertical las opciones son:
Cargar
red,
para
cargar
la
topología
de
red
carConfActionPerformed(ActionEvent e) el método de la clase VentanaConf.
•
LER,
para
crear
un
LER
mediante
el
botonLER_actionPerformed(ActionEvent e) de la clase VentanaConf.
•
LSR,
para
crear
un
LSR
mediante
el
botonLSR_actionPerformed(ActionEvent e) de la clase VentanaConf.
•
110
mediante
método
método
LINK,
para
crear
un
LINK
mediante
el
método
botonLink_actionPerformed(ActionEvent e) de la clase VentanaConf.
•
Eliminar, para
eliminar el objeto seleccionado mediante el método
botonDel_actionPerformed(ActionEvent e) de la clase VentanaConf.
•
Atrás/Adelante, para deshacer la última acción realizada mediante los métodos
restBack() y restForw()de la clase VentanaConf.
•
LSP explicito, para crear un LSP manualmente mediante el método
crearLspActionPerformed(ActionEvent e) de la clase VentanaConf.
•
CSPF, para crear un LSP con la menor métrica posible mediante el método
botonCSPFActionPerformed(ActionEvent e) de la clase VentanaConf.
•
Fair Network, para crear los LSPs de la matriz de tráfico elegida mediante el método
botonMTActionPerformed(ActionEvent e) de la clase VentanaConf.
•
MIRA, para crear los LSPs de la matriz de tráfico elegida mediante el método de
botonMIRAActionPerformed(ActionEvent e) de la clase VentanaConf.
•
Lista de LSPs, para mostrar la lista de LSPs creados mediante el método
listaLsps_actionPerformed(ActionEvent e) de la clase VentanaConf.
•
Borrar LSP, para borrar el LSP seleccionado mediante el método
borrarLspActionPerformed(ActionEvent e) de la clase VentanaConf.
•
Estadísticas, para mostrar las estadísticas de la topología de red mediante el método
botonEstadActionPerformed(ActionEvent e) de la clase VentanaConf.
•
Utilización, para mostrar en pantalla la utilización de los enlaces mediante el método
botonUtilActionPerformed(ActionEvent e) de la clase VentanaConf.
•
A continuación se detallan los métodos de la lista anterior más significativos.
botonCSPFActionPerformed(ActionEvent e) crea una instancia de la clase CSPF.
En la clase CSPF primero se debe indicar el BW, nodo origen, nodo destino, la métrica y
el criterio TE a utilizar y es opcional indicar afinidad, enlace presenten y enlace ausente.
En esta clase dentro del método jbInit() se llenan los combo de nodo origen, nodo
destino, con el vector nodes el cual contiene todos los nodos de la red, los combos enlace
presente y enlace ausente se llenan con todos los enlaces de la red que se encuentran en el
vector links y el combo afinidad se llena con las afinidades de todos los enlaces que se
encuentran en el vector afinidad de la clase Link.
Luego al oprimir el botón Aplicar Algoritmo, se llama al método
jButtonAlgoritmo_actionPerformed(ActionEvent e). Este método primero se fija en la
variable booleana pinto. Ver Figura D.2.
111
Figura D.2: Diagrama de razonamiento al apretar el botón Algoritmo.
Si pinto=false es porque se selecciono enlace presente. Supongamos que el enlace
seleccionado esta conectado al nodo A y al nodo B. Para calcular los caminos posibles es
necesario llamar 4 veces al método shortestPath de la clase Algoritmo. Porque hay que
calcular el camino mas corto entre nodo origen y el nodo A, llamando al método
shortestPath de la clase Algoritmo y hay que calcular el camino mas corto entre nodo
destino y el nodo B, llamando al método shortestPath de la clase Algoritmo. Sumo las
dos distancias calculadas. Se hace el mismo procedimiento pero ahora entre el nodo
destino y el nodo A y entre el nodo origen y el nodo B. Se compara la distancia calculada
en el primer caso con la del segundo caso y se queda con la menor.
Si se encontró más de un camino posible se puede observar en pantalla los
distintos caminos encontrados al oprimir la flecha hacia la derecha que llama al método
jButtonAdelante_actionPerformed(ActionEvent e). Después de oprimir la flecha hacia la
derecha se puede ir hacia atrás al oprimir la flecha hacia la izquierda que llama al
método jButtonAtras_actionPerformed(ActionEvent e).
El método jButtonAceptar_actionPerformed(ActionEvent e), crea un LSP del
camino seleccionado con los dos métodos anteriormente mencionados, lo agrega en el
combo de LSPs y actualiza el ancho de banda reservado de cada enlace que pertenece al
camino calculado.
botonMIRAActionPerformed(ActionEvent e) crea una instancia de la clase
OfflineMira.
En la clase OfflineMira, para cargar el archivo de la matriz de tráfico se llama al
método jButtonCargar_actionPerformed(ActionEvent e) el cual llama al método
stringToVectors de la clase InterpreteMT. Luego al oprimir el botón Correr que llama al
método jButtonCorrer_actionPerformed(ActionEvent e) en donde se crea una instancia a
la clase MIRA. En la clase MIRA se llama al método hallamaxflows para calcular el
máximo ancho de banda entre los nodos, luego este método llama al método hallpesos
que calcula los pesos que asocia a cada enlace. Luego de asignar a todos los enlaces su
nuevo peso, dentro de la clase OfflineMira se llama al método correr, que para cada ruta
de la matriz de tráfico cargada llama al método podar, luego llama al método
shortestPath de la clase Algoritmo, para calcular un camino para cada ruta y guardar el
resultado en el array de vectores resultuno.
El método jComboBox_actionPerformed(ActionEvent e), pinta los enlaces por los
cuales pasa la ruta seleccionada en el combo Rutas posibles.
112
El método jButtonAceptar_actionPerformed(ActionEvent e), crea un LSP para
cada ruta, lo agrega en el combo de LSPs y actualiza el ancho de banda reservado de cada
enlace que pertenece al camino calculado.
botonMTActionPerformed(ActionEvent e) crea una instancia de clase
FairnessNetwork.
En la clase FairnessNetwork, para cargar el archivo de la matriz de tráfico se
llama al método jButtonCargar_actionPerformed(ActionEvent e) el cual llama al método
stringToVectors de la clase InterpreteMT. Luego se debe el elegir uno de los siguientes
algoritmos:
•
•
•
•
Fairness básico
Fairness acotado
Fairness con múltiples caminos
Fairness con mult. caminos acotado
Si se eligió unos de los 2 primeros algoritmos se debe elegir la métrica entre peso
o minhop.
Al marcar Elegir camino manualmente se puede elegir entre todos los caminos
con la menor métrica posible calculados de cada ruta, con cual quedarse. Esto se hace
llamando al método jCheckBox4_actionPerformed(ActionEvent e) que llena el combo
Lista de rutas con todas las rutas de la matriz de tráfico. Al seleccionar una ruta de este
combo se llama al método podar, luego al método shortestPath de la clase Algoritmo, se
llena el combo de Caminos posibles con los caminos calculados. Al seleccionar un
camino del combo se guarda los enlaces por donde pasa el camino seleccionado en el
vector enlacesGr de la clase Caminos.
Para correr los algoritmos se debe oprimir el botón Correr que llama al método
jButtonCorrer_actionPerformed(ActionEvent e). Este método primero se fija que
algoritmo se selecciono, esto lo hace fijándose cual JCheckBox fue seleccionado.
Si se eligió el algoritmo1, entonces JcheckBox().isSelected=trae. Ver Figura D.3.
Figura D.3: Diagrama de razonamiento al elegir el algoritmo a correr.
113
Si se eligió el algoritmo2, entonces JcheckBox1().isSelected=true . Se crea una
instancia de la clase Requerimientos, en donde se configuran la demanda mínima y la
prioridad del camino. Ver Figura D.4.
Figura D.4: Diagrama de razonamiento si se elige el Algortmo 2.
Si no se marca Elegir camino manualmente, el método correr llama para cada
ruta de la matriz de tráfico cargada al método podar, luego al método shortestPath de la
clase Algoritmo, si hay mas de un camino posible llama al método podar2 de la clase
Algoritmo y guarda un camino para cada ruta.
El método buscar, busca cuantos caminos pasan por cada enlace y lo guarda en la
variable delta de la clase Link.
El método mínimo calcula t, que es el paso en que se incrementa el ancho de
banda reservado de cada enlace por camino que pasa por él. Esto continúa hasta que
satura algún enlace. Al saturar un enlace se sacan todos los caminos que pasan por ese
enlace y se fija el ancho de banda del camino. Termina cuando se fijan todos los anchos
de banda de cada camino.
Si se eligió el algoritmo 3, entonces JcheckBox()2.isSelected=true o si se eligió el
algoritmo 4, entonces JcheckBox()3.isSelected=true.
Figura D.5: Diagrama de razonamiento si se elige el Algoritmo 3.
114
El método calculatodos, calcula todos los caminos posibles entre el nodo origen y
el nodo destino sin considerar BW, métrica ni afinidad.
El método OptimizacionLineal, calcula el valor de la variable auxiliar tau.
El método OptimizacionLinealChequeo, maximiza de a una demanda y compara
su valor con el valor de la variable auxiliar tau calculado en OptimizacionLineal.
Los métodos OptimizacionLineal y OptimizacionLinealChequeo son los
encargados de maximizar las demandas, asignando a cada sub-demanda el ancho de
banda calculado. El ancho de banda final de cada demanda es la suma de los anchos de
banda de todas sus sub-demandas.
Si se eligió el algoritmo 4, después de tener el ancho de banda final de cada
demanda se llama al método ordenar, que ordena de mayor a menor las sub-demandas de
cada demanda según su ancho de banda. Esto se hace para asignar a las demandas que su
ancho de banda final es mayor que su ancho de banda deseado, asignarle como ancho de
banda final el ancho de banda deseado.
El método jComboBox_actionPerformed(ActionEvent e), pinta los enlaces por los
cuales pasa la ruta seleccionada en el combo Lista de rutas. Si la ruta tiene subdemandas
permite mostrar en pantalla cada una de ellas por separado.
El método jButtonAceptar_actionPerformed(ActionEvent e), crea un Lsp para
cada ruta, lo agrega en el combo de LSPs y actualiza el ancho de banda reservado de cada
enlace que pertenece al camino calculado.
115
Bibliografía
[1] NetScope: Traffic Engineering for IP Networks. Paper de AT&T Labs. Autores:
Anja Feldmann, Albert Greenberg, Carsten Lund, Nick Reingold y Jennifer
Rexford. Marzo 2000.
[2] Request for Comments (RFC): 3272. Visión y Principios de la Ingeniería de
Tráfico en Internet. Autores: D. Awduche, A. Chiu, A. Elwalid, I. Widjaja, X.
Xiao. Mayo 2002.
[3] MPLS: Technology and Applications. Capítulo 7: Constraint-Based Routing.
Autores: Bruce Davie y Yakov Rekhter. Año 2000.
[4] Engineering Internet QoS. Capítulo 12: Future. Autores: Sanjay Jha y Mahbub
Hassan. Año 2002.
[5] Data Networks: Routing, Security, and Performance Optimization. Capítulo 8:
Quality of Service. Autor: Tony Kenyon. Año 2002.
[6] Minimum interference routing with applications to MPLS traffic engineering.
Proceedings of International Workshop on QoS, Pennsylvania. Autores: M.
Kodialam y T.V.Lacksham. Junio 2000.
[7] A New Bandwidth Guaranteed Routing Algorithm for MPLS Traffic
Engineering. Autores: Bin Wang, Xu Su y C.L. Philip Chen. Noviembre 2002.
[8] Network Flows. Autores: R.K Ahuja, T.L Magnanti y J.B. Orlin . Prentice Hall.
Año 1993.
[9] Multi-terminal network flows, Journal of SIAM. Autores: R.E. Gomory y T.C.
Hu. Año 2002.
[10] Routing, Flow and Capacity Design in Communication and Computer
Networks. Capítulo 8: Fair Networks. Autores: Michal Pioro y Deepankar
Medhi. Año 2004.
116
Glosario de términos
ARCA: Analizador de Redes de Caminos Virtuales, software que analiza el problema de
brindar garantías de Calidad de Servicio (QoS) así como realizar Ingeniería de Tráfico sobre redes de
datos.
AS: Autonomous System, áreas que en su conjunto modelan a una red y dentro de las cuales las
rutas son determinadas por el ruteo intradominio.
ASN.1: Abstract Syntax Notation 1, lenguaje de definición de objetos estándar usado por SNMP.
BGP: Border Gateway Protocol, protocolo de ruteo interdominio.
CBR: Constraint Based Routing, ruteo que intenta encontrar un camino que optimice cierta
métrica escalar y al mismo tiempo no viole un conjunto de restricciones.
CLNS: OSI Connectionless Network Service, protocolo bajo el cual opera SNMP v1.
CR-LDP: Constraint Route LDP, protocolo de distribución de etiquetas del tipo enrutamiento
explícito que ofrece características de Ingeniería de Tráfico.
CSPF: Constraint Shortest Path First, algoritmo para la computación de caminos que toma en
cuenta al mismo tiempo un conjunto de restricciones.
DDP: AppleTalk Datagram-Delivery Protocol, protocolo bajo el cual opera SNMP v1.
DLCI: Data Link Connection Identificator, ejemplo de etiqueta o encabezado que pueden
utilizarse como etiqueta de MPLS.
FEC: Forwarding Equivalence Class, representación de un conjunto de paquetes que comparten
los mismos requerimientos para su transporte en MPLS.
IETF: Internet Engineering Task Force, grupo de trabajo dedicado en su mayoría al control del
tráfico en lo que a la ingeniería de tráfico se refiere.
IPX: Novell Internet Packet Exchange, protocolo bajo el cual opera SNMP v1.
IS-IS: Intermediate System to Intermediate System, protocolo de ruteo intradominio.
ISP: Internet Service Provider, proveedor de acceso a Internet.
LDP: Label Distribution Protocol, protocolo responsable de que el LSP sea establecido para que
sea funcional mediante el intercambio de etiquetas entre los nodos de la red.
LER: Label Edge Router, router encargado de la distribución de etiquetas.
LIB: Label Information Base, tabla de conectividad contra la cual es examinada y comparada la
etiqueta MPLS al llegar del LER al LSR, determinando la acción a seguir.
LSP: Label Switched Paths, ruta que sigue un paquete entre dos nodos de la red MPLS.
LSR: Lable Switch Router, router encargado de dirigir el tráfico dentro de la red MPLS.
MIB: Management Information Base, colección de información organizada jerárquicamente
donde los objetos son accedidos usando SNMP y la cual reside en el elemento de red.
MIRA: Minumum Interference Routing Algorithm, algoritmo de ruteo de caminos que
intenta minimizar la “interferencia” que provoca el establecimiento de un nuevo camino a potenciales
nuevos caminos que son desconocidos.
MMF: Max-Min Fairness, principio de asignación usado para formular el esquema de asignación
de recursos en donde se intenta asignar la mayor cantidad de recursos a cada demanda, al mismo tiempo
que se intenta mantenerlos lo más similares posible.
MNF: Maximum Network Flow, máximo ancho de banda que puede traficar la red entre
determinado par de nodos ya sea por un único camino o varios.
MPLS: Multi Protocol Label Switching, tecnología de ruteo y reenvío de paquetes en redes IP
que se basa en la asignación e intercambio de etiquetas, que permiten el establecimiento de caminos a
través de la red.
NET-TE: Networking Traffic Engineering, nombre del software diseñado en este proyecto que
hace alusión a la Ingeniería de Tráfico en redes; tema principal de éste trabajo.
117
NMS: Network Management System, estación administradora o, lo que es similar, elemento de
red que contiene un agente SNMP y pertenece a la red administrada.
QoS: Quality of Service, distintos niveles de servicio que son ofrecidos al cliente en términos del
ancho de banda o algún otro parámetro.
RSVP-TE: Reservation Protocol with Traffic Engineering, protocolo de enrutamiento
explícito. En éste caso en particular, es una extensión de la versión original RSVP que incorpora el
respaldo para MPLS.
SDP: Shortest Distance Path, ruteo basado en preservar los recursos de la red por medio de la
selección de los caminos más cortos.
SLA: Service Level Agreement, acuerdo sobre el nivel de servicio con el cliente donde se
especifican parámetros como performance, confiabilidad y seguridad.
SMI: Structure of Management Information, partes del ASN.1 que usan SNMP. Es lo que en
realidad describe la estructura de datos del SNMP.
SNMP: Simple Network Management Protocol, protocolo de la capa de aplicación que
facilita el intercambio de información de gestión entre elementos de la red y es parte del stack de
protocolos TCP/IP.
SWP: Shortest Widest Path, ruteo que se basa en la búsqueda del camino con el ancho de banda
más grande y, en caso de haber múltiples caminos, se queda con el que tiene la mínima cantidad de saltos.
TE: Traffic Engineering, disciplina que procura la optimización de la performance de las redes
operativas.
TED: Traffic Engineering Especialized Data Base, base de datos contenida en cada router, la
cual mantiene atributos de los enlaces de la red e información de la topología.
UDP: User Datagram Protocol, protocolo de transporte que provee servicios de datagramas por
encima de IP.
VPI/VCI: Virtual Circuit Identificator used in ATM, etiqueta o encabezado que puede
utilizarse como etiqueta de MPLS en redes ATM.
WSP: Widest Shortest Path, ruteo que se basa en la búsqueda de caminos con el mínimo número de
saltos y, si encuentra múltiples caminos, se queda con el que tiene ancho de banda mayor.
118
Descargar