11.05.2013 Views

Evaluación de Algoritmos de Ruteamiento Multipunto en Redes de ...

Evaluación de Algoritmos de Ruteamiento Multipunto en Redes de ...

Evaluación de Algoritmos de Ruteamiento Multipunto en Redes de ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA<br />

DEPARTAMENTO DE ELECTRONICA<br />

<strong>Evaluación</strong> <strong>de</strong> <strong>Algoritmos</strong> <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong><br />

<strong>Multipunto</strong> <strong>en</strong> Re<strong>de</strong>s <strong>de</strong> Computadores<br />

Tesis <strong>de</strong> Grado pres<strong>en</strong>tada por:<br />

Verónica Andrea Gacitúa Decar<br />

como requisito parcial para optar al grado <strong>de</strong><br />

Magíster <strong>en</strong> Electrónica m<strong>en</strong>ción Telecomunicaciones y Sistemas Computacionales<br />

Profesor Guía<br />

Ph.D. Reinaldo Vallejos


Índice<br />

Índice..........................................................................................................................................................2<br />

Listado <strong>de</strong> Figuras....................................................................................................................................3<br />

Listado <strong>de</strong> Tablas .....................................................................................................................................5<br />

1 Introducción......................................................................................................................................8<br />

2 Taxonomía <strong>de</strong> la Comunicación <strong>Multipunto</strong> ............................................................................10<br />

2.1 Caracterización <strong>de</strong>l Grupo ...................................................................................................10<br />

2.2 Estructura <strong>de</strong> las Rutas <strong>de</strong> Comunicación.........................................................................11<br />

2.3 Construcción <strong>de</strong> las Rutas <strong>de</strong> Comunicación....................................................................13<br />

2.4 Manejo <strong>de</strong> la Información.....................................................................................................13<br />

3 Mo<strong>de</strong>lo <strong>de</strong> Red y Formulación <strong>de</strong>l Problema <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong>........................15<br />

3.1 Mo<strong>de</strong>lo <strong>de</strong> Red .......................................................................................................................15<br />

3.2 Funciones Objetivo y Restricciones ....................................................................................16<br />

3.3 Problemas <strong>en</strong> el <strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong> ........................................................................18<br />

3.4 Algunos Problemas Particulares .........................................................................................18<br />

3.4.1 Definiciones ....................................................................................................................18<br />

3.4.2 Árboles <strong>de</strong> Camino más Corto sin Restricciones .....................................................19<br />

3.4.3 Árboles <strong>de</strong> Steiner sin Restricciones...........................................................................20<br />

3.4.4 Árboles <strong>de</strong> Camino más Corto con Restricción <strong>de</strong> Retardo ...................................20<br />

3.4.5 Árboles <strong>de</strong> Steiner con Restricción <strong>de</strong> Retardo.........................................................20<br />

3.4.6 Compromiso <strong>en</strong>tre Costo y Retardo...........................................................................20<br />

3.4.7 Efici<strong>en</strong>cia Multicast .......................................................................................................20<br />

4 <strong>Algoritmos</strong> <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong> ...................................................................................22<br />

4.1 Protocolos <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong> Multicast y <strong>Algoritmos</strong> Asociados ....................................22<br />

4.1.1 DVMRP [23]....................................................................................................................22<br />

4.1.2 MOSPF [25] .....................................................................................................................23<br />

4.1.3 CBT [26] ...........................................................................................................................23<br />

4.1.4 PIM ...................................................................................................................................24<br />

4.1.5 BGMP [32] .......................................................................................................................27<br />

4.1.6 Algoritmo RPF................................................................................................................29<br />

4.1.7 Algoritmo Dijkstra.........................................................................................................29<br />

4.1.8 Algoritmo Bellman‐Ford ..............................................................................................29<br />

4.2 <strong>Algoritmos</strong> <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong> aparecidos <strong>en</strong> la Literatura................................................30<br />

4.2.1 KMB [35]..........................................................................................................................30<br />

4.2.2 BC [36]..............................................................................................................................32<br />

4.2.3 CDKS [37]........................................................................................................................38<br />

4.2.4 CAO [38]..........................................................................................................................38<br />

4.2.5 BSMA [39] .......................................................................................................................40<br />

4.2.6 KPP [14] ...........................................................................................................................42<br />

4.2.7 QDMR [40]......................................................................................................................45<br />

5 Métodos <strong>de</strong> Comparación <strong>de</strong> <strong>Algoritmos</strong> .................................................................................48<br />

5.1 Analítica...................................................................................................................................48<br />

5.2 Simulación...............................................................................................................................49<br />

5.2.1 G<strong>en</strong>eración <strong>de</strong> Esc<strong>en</strong>arios <strong>de</strong> Simulación..................................................................52<br />

5.2.2 Implem<strong>en</strong>tación <strong>de</strong> <strong>Algoritmos</strong> ..................................................................................52<br />

5.2.3 Configuración <strong>de</strong> los Experimi<strong>en</strong>tos <strong>de</strong> Simulación ...............................................53<br />

5.3 Experim<strong>en</strong>tal...........................................................................................................................54<br />

2


6 Comparación <strong>de</strong> <strong>Algoritmos</strong> mediante Simulación.................................................................56<br />

6.1 Herrami<strong>en</strong>ta <strong>de</strong> Simulación .................................................................................................56<br />

6.2 <strong>Algoritmos</strong> Evaluados ..........................................................................................................57<br />

6.3 Medidas <strong>de</strong> R<strong>en</strong>dimi<strong>en</strong>to .....................................................................................................58<br />

6.3.1 Costo <strong>de</strong>l árbol ...............................................................................................................58<br />

6.3.2 Retardo Promedio <strong>en</strong>tre fu<strong>en</strong>te y <strong>de</strong>stino..................................................................58<br />

6.3.3 Número <strong>de</strong> Conexiones Exitosas ................................................................................58<br />

6.4 Configuración <strong>de</strong> los Experim<strong>en</strong>tos <strong>de</strong> Simulación.........................................................58<br />

6.4.1 Primer Experim<strong>en</strong>to ......................................................................................................58<br />

6.4.2 Segundo Experim<strong>en</strong>to...................................................................................................60<br />

7 Resultados <strong>de</strong> la Simulación ........................................................................................................61<br />

8 Conclusiones...................................................................................................................................77<br />

9 Agra<strong>de</strong>cimi<strong>en</strong>tos ............................................................................................................................78<br />

10 Refer<strong>en</strong>cias ......................................................................................................................................78<br />

ANEXO A : Función Complejidad <strong>de</strong> Tiempo & NP Completitud...............................................82<br />

ANEXO B: Breve Tutorial <strong>de</strong> NS‐2......................................................................................................85<br />

ANEXO C: Breve Manual <strong>de</strong> Uso MCRSIM....................................................................................101<br />

ANEXO D: Código BC para MCRSIM .............................................................................................104<br />

Listado <strong>de</strong> Figuras<br />

Fig. 1 Ejemplo que ilustra la difer<strong>en</strong>cia <strong>en</strong>tre árboles <strong>de</strong> fu<strong>en</strong>te específica y árboles compartidos. ..... 12<br />

Fig. 2 Taxonomía <strong>de</strong> Comunicación <strong>Multipunto</strong> ................................................................................... 14<br />

Fig. 3 Ejemplo <strong>de</strong> Red repres<strong>en</strong>tada por un grafo................................................................................... 16<br />

Fig. 4 Ejemplo que muestra el árbol compartido y rama <strong>de</strong> fu<strong>en</strong>te específica que el protocolo BGMP<br />

pue<strong>de</strong> construir <strong>en</strong>tre sistemas autónomos, los cuales pue<strong>de</strong>n estar utilizando algún otro protocolo<br />

multicast al interior <strong>de</strong> ellos...................................................................................................................... 28<br />

Fig. 5 Ejemplo Pasos Algoritmo KMB .................................................................................................. 31<br />

Fig. 6 Iteraciones Heurística BC con función <strong>de</strong> contribución que consi<strong>de</strong>ra una métrica <strong>de</strong> saltos ... 34<br />

Fig. 7a Pseudocódigo Heurística BC...................................................................................................... 36<br />

Fig. 8b Pseudocódigo Heurística BCL ................................................................................................... 37<br />

Fig. 9 Ejemplo para visualizar la operación <strong>de</strong>l algoritmo CDKS. ....................................................... 39<br />

Fig. 10 Red utilizada como ejemplo <strong>de</strong> visualización <strong>de</strong> las iteraciones <strong>de</strong> BSMA .............................. 40<br />

Fig. 11 Refinami<strong>en</strong>to <strong>de</strong> los caminos Fu<strong>en</strong>te a Destinos condicionado al límite <strong>de</strong> retardo. ............... 41<br />

Fig. 12 Red <strong>de</strong> ejemplo para ilustrar la operación <strong>de</strong> KPP y el árbol <strong>de</strong> Steiner asociado al grupo<br />

multicast .................................................................................................................................................... 43<br />

Fig. 13 Grafo cerrado G’, las sucesivas iteraciones y el árbol final <strong>en</strong>contrado utilizando la función<br />

objetivo fC.................................................................................................................................................. 43<br />

Fig. 14 Sucesivas iteraciones y el árbol final <strong>en</strong>contrado utilizando la función objetivo fCD ............... 44<br />

Fig. 15 Ejemplo que muestra la difer<strong>en</strong>cia <strong>en</strong>tre DMMC y QDMR: (a) Ejemplo <strong>de</strong> red y Árbol<br />

DDMC; (b) Árbol <strong>de</strong> m<strong>en</strong>or Retardo (LDT); (c) Árbol DDMC + LDP (Least Delay Path); (d) Árbol<br />

QDMR....................................................................................................................................................... 46<br />

Fig. 16 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5<br />

y 125 Mbps. (<strong>Algoritmos</strong> No Restringidos)............................................................................................. 64<br />

Fig. 17 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual<br />

a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> No Restringidos) ................................... 64<br />

Fig. 18 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45<br />

y 85 Mbps. (<strong>Algoritmos</strong> No Restringidos)............................................................................................... 65<br />

3


Fig. 19 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual<br />

a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> No Restringidos) ................................... 65<br />

Fig. 20 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre<br />

100 y 120 Mbps. (<strong>Algoritmos</strong> No Restringidos)...................................................................................... 66<br />

Fig. 21 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual<br />

a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> No Restringidos) ................................ 66<br />

Fig. 22 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5<br />

y 125 Mbps. (<strong>Algoritmos</strong> Restringidos)................................................................................................... 67<br />

Fig. 23 Exceso sobre BSMA para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio<br />

igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> Restringidos) ................................. 67<br />

Fig. 24 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45<br />

y 85 Mbps. (<strong>Algoritmos</strong> Restringidos)..................................................................................................... 68<br />

Fig. 25 Exceso sobre BSMA para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio<br />

igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> Restringidos) ................................. 68<br />

Fig. 26 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre<br />

100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos)............................................................................................ 69<br />

Fig. 27 Exceso sobre BSMA para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio<br />

igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos)............................. 69<br />

Fig. 28 Resum<strong>en</strong>: Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol (<strong>Algoritmos</strong> Restringidos y No<br />

Restringidos). Red <strong>de</strong> 20 nodos, con grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre: 5 y 125<br />

Mbps; 45 y 85 Mbps; 100 y 120 Mbps..................................................................................................... 70<br />

Fig. 29 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 100 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre<br />

100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos) ............................................................. 71<br />

Fig. 30 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 100 nodos, grado promedio igual<br />

a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)........ 71<br />

Fig. 31 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)..................... 72<br />

Fig. 32 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20<br />

nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> Restringidos<br />

y No Restringidos) .................................................................................................................................... 72<br />

Fig. 33 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)..................... 73<br />

Fig. 34 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20<br />

nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> Restringidos<br />

y No Restringidos) .................................................................................................................................... 73<br />

Fig. 35 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos) ................ 74<br />

Fig. 36 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20<br />

nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong><br />

Restringidos y No Restringidos)............................................................................................................... 74<br />

Fig. 37 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 100 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos) ................ 75<br />

Fig. 38 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 50<br />

nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong><br />

Restringidos y No Restringidos)............................................................................................................... 75<br />

Fig. 39 Número <strong>de</strong> Conexiones Exitosas fr<strong>en</strong>te a Solicitu<strong>de</strong>s. Red <strong>de</strong> 20 nodos con grado promedio<br />

igual a 4. Número total <strong>de</strong> solicitu<strong>de</strong>s igual a 3000. ................................................................................ 76<br />

Fig. 40 Número <strong>de</strong> Conexiones Exitosas fr<strong>en</strong>te a Solicitu<strong>de</strong>s. Red <strong>de</strong> 50 nodos con grado promedio<br />

igual a 4. Número total <strong>de</strong> solicitu<strong>de</strong>s igual a 3000. ................................................................................ 76<br />

4


Listado <strong>de</strong> Tablas<br />

Tabla 1 Problemas <strong>en</strong> el <strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong>............................................................................18<br />

Tabla 2: <strong>Algoritmos</strong> y Protocolos <strong>de</strong> ruteami<strong>en</strong>to Multicast. ...........................................................47<br />

Tabla 3 Escalami<strong>en</strong>to dim<strong>en</strong>sional y su efecto <strong>en</strong> el consumo <strong>de</strong> recursos computacionales. ........50<br />

Tabla 4 Algunas Herrami<strong>en</strong>tas <strong>de</strong> Simulación para Re<strong>de</strong>s <strong>de</strong> Computadores ................................51<br />

Tabla 5 Algunas Herrami<strong>en</strong>tas <strong>de</strong> Monitoreo Multicast exist<strong>en</strong>tes..................................................55<br />

Tabla 6 Ejemplo <strong>de</strong> Or<strong>de</strong>n <strong>de</strong> complejidad <strong>de</strong> Varios <strong>Algoritmos</strong> hipotéticos................................83<br />

Tabla 7 Varias Funciones <strong>de</strong> complejidad <strong>de</strong> Tiempo <strong>en</strong> función <strong>de</strong>l Tamaño <strong>de</strong> un Problema.....83<br />

Tabla 8 Archivos <strong>de</strong> MCRSIM.......................................................................................................103<br />

5


6<br />

A mi familia e Iván<br />

por su constante apoyo y compresión


Miembros <strong>de</strong> la Comisión<br />

Ph.D. Reinaldo Vallejos<br />

Ph.D. Marta Barría<br />

Ph.D. Hector All<strong>en</strong><strong>de</strong><br />

7


H<br />

1 Introducción<br />

istóricam<strong>en</strong>te las telecomunicaciones se <strong>de</strong>sarrollaron bajo dos paradigmas: la<br />

comunicación punto a punto (industria <strong>de</strong> la telefonía y las re<strong>de</strong>s <strong>de</strong> computadores)<br />

y la comunicación broadcast (industria <strong>de</strong> la televisión). Sin embargo, <strong>en</strong> la última<br />

década, bajo la masificación <strong>de</strong> las re<strong>de</strong>s <strong>de</strong> computadores, se han estado <strong>de</strong>sarrollando<br />

aplicaciones que involucran a un grupo que pue<strong>de</strong> consistir <strong>de</strong> uno o más emisores y uno<br />

o más receptores. El tipo <strong>de</strong> comunicación que permite ejecutar estas aplicaciones es<br />

conocida como comunicación multipunto. La comunicación multipunto es algo natural<br />

para miembros <strong>de</strong> un grupo que se <strong>en</strong>cu<strong>en</strong>tran <strong>en</strong> un mismo lugar, sin embargo, replicar<br />

esta situación para miembros que se <strong>en</strong>cu<strong>en</strong>tran geográficam<strong>en</strong>te distantes, involucra un<br />

estado <strong>en</strong> la tecnología <strong>de</strong> las comunicaciones que aún dista <strong>de</strong> ser efici<strong>en</strong>te.<br />

Los avances <strong>en</strong> el <strong>de</strong>sarrollo <strong>de</strong> la tecnología que permite establecer la comunicación<br />

multipunto ha abierto posibilida<strong>de</strong>s más concretas a algunas i<strong>de</strong>as que han surgido<br />

<strong>de</strong>s<strong>de</strong> hace ya más <strong>de</strong> una década, tal como: la educación y trabajo a distancia,<br />

telemedicina, vi<strong>de</strong>oconfer<strong>en</strong>cias, simulación interactiva distribuida o DIS, <strong>en</strong>tre otras<br />

aplicaciones.<br />

La comunicación multicast permite que un paquete dirigido a un grupo se transmita a<br />

través <strong>de</strong> una única ruta hasta ciertos puntos <strong>en</strong> la red <strong>en</strong> don<strong>de</strong> tal paquete <strong>de</strong>be ser<br />

replicado para permitir alcanzar a todos los <strong>de</strong>stinos. La comunicación multicast, a<br />

difer<strong>en</strong>cia <strong>de</strong> muchas conexiones unicast <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a todos los <strong>de</strong>stinos, es v<strong>en</strong>tajosa<br />

principalm<strong>en</strong>te porque hace uso <strong>de</strong> un m<strong>en</strong>or <strong>de</strong> los recursos <strong>de</strong> la red (especialm<strong>en</strong>te:<br />

ancho <strong>de</strong> banda). Sin embargo, una <strong>de</strong>sv<strong>en</strong>taja <strong>de</strong> multicast y broadcast es que sólo son<br />

soportadas <strong>en</strong> transmisiones UDP, perdi<strong>en</strong>do la confiabilidad que transmisiones TCP<br />

pue<strong>de</strong>n otorgar. Hay iniciativas que int<strong>en</strong>tan otorgar ext<strong>en</strong>siones multicast a TCP, tal<br />

como SCE [1], TCP‐SMO [2], M/TCP [3], TCP‐XM [4].<br />

Multicast fue probado a gran escala <strong>en</strong> 1992 durante un “audiocast” a 20 sitios <strong>en</strong><br />

Internet <strong>de</strong>s<strong>de</strong> una reunión <strong>de</strong>l Internet Engineering Task Force (IETF) [5]. Des<strong>de</strong> esta<br />

época se han realizado numerosos esfuerzos para sobrellevar los <strong>de</strong>safíos que la<br />

comunicación multipunto pres<strong>en</strong>ta. Mi<strong>en</strong>tras se <strong>de</strong>sarrollan nuevos servicios multicast<br />

para la Internet, las <strong>de</strong>mandas por una infraestructura que soporte a<strong>de</strong>cuadam<strong>en</strong>te tales<br />

servicios se hac<strong>en</strong> cada vez más pres<strong>en</strong>tes. Sin embargo ¿Son mayores los b<strong>en</strong>eficios que<br />

los servicios multicast aportan, comparados con las exig<strong>en</strong>cias que impone sobre la<br />

infraestructura?. Esta pregunta es abierta y <strong>de</strong>bería respon<strong>de</strong>rse tomando <strong>en</strong> cu<strong>en</strong>ta las<br />

economías <strong>de</strong> escala naturales <strong>en</strong> Internet.<br />

Uno <strong>de</strong> los <strong>de</strong>safíos básicos <strong>de</strong> la comunicación multipunto, es el establecimi<strong>en</strong>to <strong>de</strong> las<br />

rutas por don<strong>de</strong> la información <strong>de</strong>be fluir. Este problema es conocido con el nombre <strong>de</strong><br />

ruteami<strong>en</strong>to multipunto (RM), y cuando éste involucra restricciones sobre ciertas<br />

medidas <strong>de</strong> interés para los usuarios, tal como límite <strong>en</strong> el retardo <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino,<br />

jitter, etc., se habla <strong>de</strong> RM con calidad <strong>de</strong> servicio (QoS). El problema <strong>de</strong> RM no es nuevo,<br />

sin embargo las soluciones implem<strong>en</strong>tadas <strong>en</strong> Internet ti<strong>en</strong><strong>de</strong>n a g<strong>en</strong>erar árboles <strong>de</strong><br />

distribución (responsables <strong>de</strong> conectar a los miembros <strong>de</strong>l grupo) que cargan algunos<br />

sectores <strong>de</strong> la red más que otros. Al saturar algunos <strong>en</strong>laces <strong>de</strong> la red, es posible que un<br />

mayor número <strong>de</strong> solicitu<strong>de</strong>s <strong>de</strong> conexión sean rechazadas. La capacidad <strong>de</strong> algortimos<br />

8


<strong>de</strong> ruteami<strong>en</strong>to multipunto (ARM) para permitir un mayor número <strong>de</strong> conexiones fr<strong>en</strong>te<br />

a solicitu<strong>de</strong>s es una capacidad <strong>de</strong>seada. Esta capacidad parece ser m<strong>en</strong>or <strong>en</strong> soluciones<br />

implem<strong>en</strong>tadas <strong>en</strong> protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast, <strong>en</strong> comparación con algunas<br />

propuestas <strong>en</strong> la literatura. Los algoritmos <strong>de</strong> ruteami<strong>en</strong>to multipunto, y <strong>en</strong> particular la<br />

comparación <strong>de</strong> éstos son el foco <strong>de</strong>l estudio <strong>de</strong> este trabajo.<br />

El resto <strong>de</strong>l escrito está organizado como sigue: <strong>en</strong> el capítulo 2, se expone una<br />

taxonomía para la comunicación multipunto, la cual permite clasificar los algoritmos.<br />

Dicha taxonomía basa sus dim<strong>en</strong>siones <strong>en</strong> una taxonomía propuesta <strong>en</strong> [6]. En el capítulo<br />

3 se <strong>de</strong>scribe el mo<strong>de</strong>lo <strong>de</strong> red y se <strong>de</strong>fine formalm<strong>en</strong>te el problema <strong>de</strong> ruteami<strong>en</strong>to<br />

multipunto. Luego, <strong>en</strong> el capítulo 4 se <strong>de</strong>scrib<strong>en</strong> algunos algoritmos <strong>de</strong> RM: algunos<br />

vinculados a protocolos <strong>de</strong> RM y otros propuestos <strong>en</strong> la literatura. En el capítulo 5 se<br />

<strong>de</strong>scrib<strong>en</strong> los métodos <strong>de</strong> comparación <strong>de</strong> algoritmos <strong>de</strong> RM. En el capítulo 6 se realiza<br />

una comparación <strong>de</strong> algunos <strong>de</strong> los algoritmos <strong>de</strong>scritos <strong>en</strong> 4 mediante simulación.<br />

Finalm<strong>en</strong>te, <strong>en</strong> los capítulos 7 y 8 se pres<strong>en</strong>tan los resultados, interpretación y<br />

conclusiones <strong>de</strong>l trabajo.<br />

9


E<br />

2 Taxonomía <strong>de</strong> la Comunicación <strong>Multipunto</strong><br />

n las re<strong>de</strong>s <strong>de</strong> computadores, ya sea <strong>en</strong> re<strong>de</strong>s <strong>de</strong> datagramas o <strong>en</strong> re<strong>de</strong>s que están<br />

ori<strong>en</strong>tadas a la conexión, la comunicación multipunto consiste <strong>en</strong> la transmisión <strong>de</strong><br />

paquetes a un subgrupo <strong>de</strong> nodos <strong>en</strong> la red [7]. Dicha transmisión se efectúa a<br />

través <strong>de</strong> rutas que g<strong>en</strong>eralm<strong>en</strong>te son construidas <strong>de</strong> difer<strong>en</strong>tes maneras y que pose<strong>en</strong><br />

diversas estructuras. A su vez, el subgrupo <strong>de</strong> nodos <strong>de</strong> la red que recibe los paquetes es<br />

heterogéneo, y pue<strong>de</strong> ser clasificado <strong>en</strong> cada caso según sus características.<br />

Con el fin <strong>de</strong> ayudar a clasificar los algoritmos <strong>de</strong> ruteami<strong>en</strong>to estudiados <strong>en</strong> este<br />

trabajo, se <strong>de</strong>scribirá una taxonomía que permite: caracterizar el grupo multipunto; la<br />

estructura y construcción <strong>de</strong> las rutas que la información <strong>de</strong>be seguir; y conocer como se<br />

realiza el manejo <strong>de</strong> la información.<br />

Las dim<strong>en</strong>siones <strong>en</strong> la taxonomía fueron escogidas a partir <strong>de</strong> los requerimi<strong>en</strong>tos y<br />

naturaleza <strong>de</strong> las aplicaciones exist<strong>en</strong>tes, las cuales han dirigido el <strong>de</strong>sarrollo <strong>de</strong> varios<br />

algoritmos y protocolos <strong>de</strong> ruteami<strong>en</strong>to. Se <strong>de</strong>be aclarar que ésta taxonomía no pret<strong>en</strong><strong>de</strong><br />

ser exhaustiva, y se focaliza <strong>en</strong> el tema <strong>de</strong> ruteami<strong>en</strong>to multicast. Trabajos más completos<br />

<strong>en</strong> este ámbito pue<strong>de</strong>n examinarse <strong>en</strong> [8], [9], [10], [11].<br />

2.1 Caracterización <strong>de</strong>l Grupo<br />

La caracterización <strong>de</strong>l grupo está <strong>de</strong>finida bajo cinco lineami<strong>en</strong>tos, los cuales se<br />

<strong>de</strong>scrib<strong>en</strong> a continuación:<br />

Tipo <strong>de</strong> aplicación: los integrantes <strong>de</strong>l grupo pue<strong>de</strong>n cumplir difer<strong>en</strong>tes roles según la<br />

aplicación. Pue<strong>de</strong>n ser emisores (fu<strong>en</strong>tes) o receptores (<strong>de</strong>stinos). En este contexto la<br />

comunicación pue<strong>de</strong> realizarse <strong>de</strong>:<br />

Uno a Muchos (One‐to‐Many), tal como <strong>en</strong> audio y vi<strong>de</strong>o broadcast, actualizaciones <strong>de</strong><br />

bases <strong>de</strong> datos, <strong>en</strong>tre otras.<br />

Muchos a Muchos (Many‐to‐Many), como las vi<strong>de</strong>o confer<strong>en</strong>cias, Educación a<br />

distancia, juegos multiplayer, etc.<br />

Muchos a Uno (Many‐to‐One). Como <strong>en</strong> aplicaciones para búsqueda <strong>de</strong> recursos<br />

(normalm<strong>en</strong>te algún programa automatizado para examinar el cont<strong>en</strong>ido <strong>de</strong> sitios Web),<br />

recolección <strong>de</strong> datos, remates.<br />

Variación <strong>en</strong> el Tiempo: Los grupos pue<strong>de</strong>n ser perman<strong>en</strong>tes, <strong>en</strong> cuyo caso exist<strong>en</strong><br />

siempre o permanec<strong>en</strong> por un largo tiempo. Estos grupos permanec<strong>en</strong> aún cuando el<br />

número <strong>de</strong> miembros sea cero. El complem<strong>en</strong>to a estos grupos son los grupos<br />

transi<strong>en</strong>tes.<br />

Orig<strong>en</strong> <strong>de</strong> los Datos: Los grupos abiertos son aquellos <strong>en</strong> los cuales los emisores<br />

(fu<strong>en</strong>tes) no necesitan ser miembros <strong>de</strong>l grupo. A su vez los grupos cerrados son aquellos<br />

<strong>en</strong> que sólo se les permite a los miembros <strong>en</strong>viar información al grupo.<br />

Ubicación <strong>en</strong> la Red: Un grupo es <strong>de</strong>nso cuando los miembros <strong>de</strong>l grupo están sobre la<br />

mayor parte <strong>de</strong> los <strong>en</strong>laces o subre<strong>de</strong>s <strong>en</strong> la red, por lo contrario, un grupo disperso<br />

(sparse) manti<strong>en</strong>e miembros sólo sobre una pequeña porción <strong>de</strong> la red, y estos se<br />

<strong>en</strong>cu<strong>en</strong>tran separados ampliam<strong>en</strong>te.<br />

10


Dinámica: Los grupos estáticos son aquellos <strong>en</strong> don<strong>de</strong> los miembros permanec<strong>en</strong><br />

constantes. Los grupos dinámicos permit<strong>en</strong> a los miembros <strong>de</strong>jar o adjuntarse (join/leave)<br />

al grupo. Se <strong>de</strong>be notar que a difer<strong>en</strong>cia <strong>de</strong> la variación <strong>en</strong> el tiempo <strong>de</strong> los grupos, que<br />

se relaciona con la asignación <strong>de</strong> direcciones a los grupos multicast <strong>en</strong> el tiempo, la<br />

dinámica ti<strong>en</strong>e que ver con la <strong>en</strong>trada y salida <strong>de</strong> miembros <strong>de</strong>l grupo <strong>en</strong> el tiempo.<br />

La comparación <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to multipunto los conceptos <strong>de</strong> mayor<br />

relevancia <strong>en</strong> la caracterización <strong>de</strong>l grupo son la dinámica <strong>de</strong>l grupo y la ubicación <strong>de</strong><br />

los miembros <strong>de</strong>l grupo <strong>en</strong> la red.<br />

2.2 Estructura <strong>de</strong> las Rutas <strong>de</strong> Comunicación<br />

El <strong>en</strong>vío <strong>de</strong> información a todos los receptores <strong>de</strong> un grupo pue<strong>de</strong> realizarse <strong>de</strong> dos<br />

modos básicos: a través <strong>de</strong> tantas conexiones punto a punto como receptores <strong>de</strong>l grupo<br />

exist<strong>en</strong> (comunicación multicast a partir <strong>de</strong> conexiones unicast) o utilizar un árbol <strong>de</strong><br />

distribución multipunto (multicast distribution tree). En un árbol <strong>de</strong> distribución<br />

multipunto un paquete <strong>de</strong> información dirigido <strong>de</strong>s<strong>de</strong> una fu<strong>en</strong>te a un grupo <strong>de</strong> <strong>de</strong>stinos<br />

es replicado tantas veces como sea necesario, cada vez que llega a una bifurcación <strong>de</strong>l<br />

árbol. Los árboles <strong>de</strong> distribución pue<strong>de</strong>n clasificarse <strong>en</strong>:<br />

Árbol <strong>de</strong> Fu<strong>en</strong>te Especifica (Source‐Specific Tree): Se basan <strong>en</strong> una comunicación don<strong>de</strong><br />

un solo nodo <strong>en</strong>vía datos a todos los nodos receptores <strong>de</strong>l grupo.<br />

Árbol <strong>de</strong> Grupo compartido (Group‐Shared Tree): Cada nodo <strong>en</strong> el grupo pue<strong>de</strong> <strong>en</strong>viar<br />

o recibir datos <strong>de</strong> otros nodos <strong>de</strong>l grupo.<br />

La principal difer<strong>en</strong>cia <strong>en</strong>tre estas dos categorías <strong>de</strong> árbol, es que los árboles <strong>de</strong> fu<strong>en</strong>te<br />

específica, tal como su nombre lo indica, se diseñan para una comunicación que fluye<br />

<strong>de</strong>s<strong>de</strong> un sólo nodo (la fu<strong>en</strong>te) hacia los <strong>de</strong>stinos. En cambio, los árboles compartidos<br />

están diseñados para una comunicación <strong>en</strong> don<strong>de</strong> cualquiera <strong>de</strong> los nodos pue<strong>de</strong> actuar<br />

como fu<strong>en</strong>te o <strong>de</strong>stino <strong>en</strong> difer<strong>en</strong>tes instantes. La Fig. 1 ilustra un ejemplo <strong>de</strong> la<br />

difer<strong>en</strong>cia <strong>en</strong>tre estas dos categorías <strong>de</strong> árboles. El grafo <strong>en</strong> la Fig. 1 repres<strong>en</strong>ta una red,<br />

don<strong>de</strong> los nodos A, F, G y J pert<strong>en</strong>ec<strong>en</strong> a un mismo grupo. La primera coor<strong>de</strong>nada <strong>en</strong> los<br />

vectores escritos sobre cada <strong>en</strong>lace correspon<strong>de</strong> al retardo, y la segunda coor<strong>de</strong>nada<br />

correspon<strong>de</strong> al costo <strong>de</strong>l <strong>en</strong>lace. El árbol <strong>de</strong> fu<strong>en</strong>te específica <strong>de</strong> la Fig. 1 b, establecido<br />

<strong>de</strong>s<strong>de</strong> el nodo A, posee un retardo promedio para los caminos <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a cada<br />

<strong>de</strong>stino igual a 2.33. La Fig. 1 c, muestra un árbol compartido, don<strong>de</strong> el retardo<br />

promedio <strong>de</strong> los caminos <strong>de</strong>s<strong>de</strong> el nodo A a los otros nodos pert<strong>en</strong>eci<strong>en</strong>tes al grupo es<br />

3.33. Sin embargo, si se calcula el retardo promedio <strong>de</strong> los caminos <strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino,<br />

don<strong>de</strong> cualquier nodo <strong>de</strong>l grupo pue<strong>de</strong> tomar el rol <strong>de</strong> fu<strong>en</strong>te, el resultado <strong>de</strong>l árbol <strong>en</strong> la<br />

Fig. 1 b es igual a 3.5 y <strong>en</strong> la Fig. 1 c es 2.67. Adicionalm<strong>en</strong>te, el costo <strong>de</strong>l árbol (<strong>de</strong>finido<br />

como las suma <strong>de</strong> los costos <strong>de</strong> los <strong>en</strong>laces pert<strong>en</strong>eci<strong>en</strong>tes a él) consi<strong>de</strong>rando una<br />

comunicación <strong>de</strong>s<strong>de</strong> el nodo A (fu<strong>en</strong>te) a los <strong>de</strong>stinos F, G y J <strong>en</strong> la Fig. 1 b es igual a 9.8,<br />

y a 5.8 <strong>en</strong> la Fig. 1 c.<br />

Árboles compartidos y árboles basados <strong>en</strong> la fu<strong>en</strong>te ti<strong>en</strong><strong>en</strong> sus propias v<strong>en</strong>tajas y<br />

<strong>de</strong>sv<strong>en</strong>tajas. Una v<strong>en</strong>tajas <strong>de</strong> un árbol compartido es que el mant<strong>en</strong>imi<strong>en</strong>to <strong>de</strong> dicho<br />

árbol durante la sesión multicast es m<strong>en</strong>os costoso <strong>en</strong> términos <strong>de</strong> la computación<br />

requerida, pues cuando una fu<strong>en</strong>te comi<strong>en</strong>za a transmitir o un nuevo nodo quiere unirse<br />

al grupo, éste sólo <strong>de</strong>be <strong>en</strong>contrar un camino para unirse al árbol ya exist<strong>en</strong>te. En cambio,<br />

<strong>en</strong> el caso <strong>de</strong> árboles basados <strong>en</strong> la fu<strong>en</strong>te, cuando una fu<strong>en</strong>te comi<strong>en</strong>za a transmitir, un<br />

nuevo árbol es g<strong>en</strong>erado a partir <strong>de</strong> ésta.<br />

11


En el caso don<strong>de</strong> exist<strong>en</strong> varias fu<strong>en</strong>tes <strong>en</strong> una misma sesión multicast, las v<strong>en</strong>tajas <strong>de</strong><br />

los árboles basados <strong>en</strong> la fu<strong>en</strong>te es que diversifican los flujos sobre los difer<strong>en</strong>tes <strong>en</strong>laces,<br />

pues exit<strong>en</strong> tantos árboles <strong>de</strong> distribución como fu<strong>en</strong>tes. En cambio, <strong>en</strong> árboles<br />

compartidos, el tráfico ti<strong>en</strong><strong>de</strong> a conc<strong>en</strong>trarse sólo <strong>en</strong> los <strong>en</strong>laces <strong>de</strong>l único árbol asociado a<br />

la sesión.<br />

Una <strong>de</strong>sv<strong>en</strong>taja <strong>de</strong> los árboles compartidos fr<strong>en</strong>te a árboles basados <strong>en</strong> la fu<strong>en</strong>te, es que<br />

los primeros están diseñados para obt<strong>en</strong>er un bajo costo global <strong>de</strong>l árbol (o alguna otra<br />

medida), por ello pue<strong>de</strong>n ser inconv<strong>en</strong>i<strong>en</strong>tes respecto a algunas medidas evaluadas<br />

<strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a todos los <strong>de</strong>stinos, tal como se ilustró anteriorm<strong>en</strong>te con el retardo fin a<br />

fin <strong>en</strong> el ejemplo <strong>de</strong> la Fig. 1.<br />

(a) Grafo que mo<strong>de</strong>la la red<br />

(b) Árbol <strong>de</strong> fu<strong>en</strong>te específica A (<strong>en</strong> línea segm<strong>en</strong>tada)<br />

(c) Árbol compartido (<strong>en</strong> doble línea segm<strong>en</strong>tada)<br />

Fig. 1 Ejemplo que ilustra la difer<strong>en</strong>cia <strong>en</strong>tre árboles <strong>de</strong> fu<strong>en</strong>te específica y árboles compartidos.<br />

12


2.3 Construcción <strong>de</strong> las Rutas <strong>de</strong> Comunicación<br />

Para cualquiera <strong>de</strong> las estructuras <strong>de</strong> las rutas multipunto, la construcción <strong>de</strong> éstas<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> cuál sea el criterio usado para lograr un uso efici<strong>en</strong>te <strong>de</strong> los recursos. En el<br />

caso <strong>de</strong> construcción <strong>de</strong> árboles multipunto que busqu<strong>en</strong> <strong>en</strong>contrar caminos mínimos<br />

<strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a cada miembro <strong>de</strong>l grupo, el árbol resultante es llamado árbol <strong>de</strong><br />

camino más corto (shortest path tree). Otra categoría, son los árboles <strong>de</strong> Steiner (Steiner<br />

trees), <strong>en</strong> don<strong>de</strong> el costo total <strong>de</strong>l árbol multipunto es minimizado.<br />

El problema <strong>de</strong>l árbol <strong>de</strong> Steiner es un problema NP completo [12], [13]. Si <strong>en</strong> la<br />

construcción <strong>de</strong>l árbol <strong>de</strong> Steiner, el grupo <strong>de</strong> nodos <strong>de</strong>stinos incluye a todos los nodos <strong>de</strong><br />

la red, el problema se reduce a la construcción <strong>de</strong> un árbol <strong>de</strong> mínima expansión<br />

(minimum spanning tree), el cual pue<strong>de</strong> ser resuelto <strong>en</strong> tiempo polinomial [15].<br />

En ambos casos anteriores (shortest Path & Steiner trees) existe la posibilidad <strong>de</strong> incluir<br />

restricciones <strong>en</strong> la construcción <strong>de</strong> las rutas <strong>de</strong>l árbol (límite <strong>en</strong> el retardo fin a fin, límite<br />

<strong>de</strong> ancho <strong>de</strong> banda utilizado <strong>en</strong> los <strong>en</strong>laces, etc). En estos casos se habla <strong>de</strong> árboles <strong>de</strong><br />

camino más corto restringidos (Constrained shortest path tree) y árboles <strong>de</strong> Steiner<br />

restringidos (Constrained Steiner tree).<br />

2.4 Manejo <strong>de</strong> la Información<br />

La construcción <strong>de</strong>l árbol <strong>de</strong> distribución que conecta a los miembros <strong>de</strong> un grupo<br />

multicast pue<strong>de</strong> realizarse <strong>en</strong> función <strong>de</strong> información local o global. Información <strong>de</strong><br />

ruteami<strong>en</strong>to pue<strong>de</strong> ser por ejemplo: la topología <strong>de</strong> la red, la utilización <strong>de</strong> los <strong>en</strong>laces, el<br />

retardo, o las distancias <strong>de</strong> los caminos <strong>en</strong>tre los nodos, etc.<br />

Construir un árbol <strong>de</strong> distribución con información global requiere <strong>de</strong> algún<br />

mecanismo <strong>de</strong> intercambio <strong>de</strong> datos que permita al nodo o los nodos que realizarán el<br />

ruteami<strong>en</strong>to tomar <strong>de</strong>cisiones con información global <strong>de</strong> la red, y no sólo información<br />

que él o sus vecinos posean. El intercambio <strong>de</strong> datos necesario cuando se requiere<br />

información global para el ruteami<strong>en</strong>to pue<strong>de</strong> producir problemas <strong>de</strong> escalabilidad, por<br />

ejemplo cuando hay muchos grupos, muchas fu<strong>en</strong>tes, cuando los miembros pert<strong>en</strong>ec<strong>en</strong> a<br />

distintos sistemas autónomos, etc.<br />

Debido a los problemas <strong>de</strong> escalabilidad asociados al manejo <strong>de</strong> información global, las<br />

implem<strong>en</strong>taciones <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to normalm<strong>en</strong>te operan a partir <strong>de</strong><br />

información local. Por otro lado, la información <strong>de</strong> ruteami<strong>en</strong>to pue<strong>de</strong> estar almac<strong>en</strong>ada<br />

<strong>en</strong> forma c<strong>en</strong>tralizada o distribuida <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do <strong>de</strong>l algoritmo utilizado como motor <strong>de</strong>l<br />

protocolo o los protocolos <strong>de</strong> ruteami<strong>en</strong>to pres<strong>en</strong>tes <strong>en</strong> una red particular. Esta<br />

característica es relevante <strong>en</strong> términos <strong>de</strong>l mant<strong>en</strong>imi<strong>en</strong>to <strong>de</strong> información <strong>en</strong> cada router.<br />

La Fig. 2 muestra un esquema <strong>de</strong> la taxonomía pres<strong>en</strong>tada <strong>en</strong> este capítulo.<br />

13


Fig. 2 Taxonomía <strong>de</strong> Comunicación <strong>Multipunto</strong><br />

14


A<br />

3 Mo<strong>de</strong>lo <strong>de</strong> Red y Formulación <strong>de</strong>l Problema <strong>de</strong><br />

<strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong><br />

ntes <strong>de</strong> <strong>de</strong>finir formalm<strong>en</strong>te el mo<strong>de</strong>lo <strong>de</strong> red y formular el problema <strong>de</strong><br />

ruteami<strong>en</strong>to multipunto, se <strong>de</strong>scrib<strong>en</strong> las características <strong>de</strong>seadas <strong>de</strong> un algoritmo <strong>de</strong><br />

ruteami<strong>en</strong>to multipunto:<br />

• La carga que impone el algoritmo sobre la red <strong>de</strong>bería ser la m<strong>en</strong>or posible.<br />

• Debería facilitar la transmisión confiable. (Una transmisión confiable garantiza que<br />

todos los datos llegarán a todos los <strong>de</strong>stinos).<br />

• Debería ser capaz <strong>de</strong> seleccionar rutas t<strong>en</strong>di<strong>en</strong>tes a las óptimas, tomando <strong>en</strong> cu<strong>en</strong>ta<br />

difer<strong>en</strong>tes funciones <strong>de</strong> costo y restricciones impuestas por aplicaciones y/o usuarios.<br />

Las rutas <strong>de</strong>bieran mant<strong>en</strong>erse t<strong>en</strong>di<strong>en</strong>tes a las óptimas, a pesar <strong>de</strong> ocurrir cambios<br />

<strong>en</strong> el grupo o la red.<br />

• El algoritmo <strong>de</strong>bería minimizar la cantidad <strong>de</strong> información que almac<strong>en</strong>a <strong>en</strong> los<br />

routers, <strong>de</strong> tal forma que más grupos puedan ser soportados sin incurrir <strong>en</strong><br />

problemas <strong>de</strong> escalabilidad.<br />

• La transmisión <strong>de</strong> los datos <strong>de</strong>bería alcanzar sólo a los miembros <strong>de</strong>l grupo.<br />

Una vez pres<strong>en</strong>tadas las características i<strong>de</strong>ales <strong>de</strong> un algoritmo <strong>de</strong> ruteami<strong>en</strong>to<br />

multipunto, se <strong>de</strong>fine ahora formalm<strong>en</strong>te el problema <strong>de</strong> ruteami<strong>en</strong>to multipunto.<br />

3.1 Mo<strong>de</strong>lo <strong>de</strong> Red<br />

La red es repres<strong>en</strong>tada por un grafo dirigido G = (V, E), don<strong>de</strong> V <strong>de</strong>nota al conjunto <strong>de</strong><br />

nodos y E al conjunto <strong>de</strong> <strong>en</strong>laces dirigidos que conectan a los nodos. |V| y |E| <strong>de</strong>notan el<br />

número <strong>de</strong> nodos y <strong>en</strong>laces <strong>en</strong> la red, respectivam<strong>en</strong>te. Asociado a cada nodo y <strong>en</strong>lace<br />

exist<strong>en</strong> parámetros que <strong>de</strong>scrib<strong>en</strong> su estado. Por ejemplo, para un <strong>en</strong>lace los parámetros<br />

podrían ser: la ocupación <strong>de</strong> ese <strong>en</strong>lace, el costo <strong>de</strong> su utilización, el retardo que un<br />

paquete sufre al atravesarlo, etc.<br />

Se <strong>de</strong>nota por W(d1,d2) al vector que repres<strong>en</strong>ta al conjunto <strong>de</strong> parámetros que <strong>de</strong>scrib<strong>en</strong><br />

el estado <strong>de</strong>l <strong>en</strong>lace e = (d1, d2) que une al nodo d1 con el nodo d2, con d1, d2 ∈ V.<br />

Análogam<strong>en</strong>te, se llama Wd al vector <strong>de</strong> estado <strong>de</strong>l nodo d ∈ V. La dim<strong>en</strong>sión <strong>de</strong> los<br />

vectores <strong>de</strong> estado (nodo y <strong>en</strong>lace) <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> cuantos parámetros sean consi<strong>de</strong>rados.<br />

El conjunto <strong>de</strong> vectores <strong>de</strong> estado <strong>de</strong> <strong>en</strong>laces y nodos es llamado estado global <strong>de</strong> la<br />

red.<br />

En la Fig. 3 el vector <strong>de</strong> estado <strong>de</strong> <strong>en</strong>lace W(a, b) = (1, 0.02, 10), ti<strong>en</strong>e dim<strong>en</strong>sión tres. Su<br />

primera compon<strong>en</strong>te correspon<strong>de</strong> al costo <strong>en</strong> $/hr, que indica el precio (<strong>en</strong> alguna<br />

moneda) <strong>de</strong> utilizar el <strong>en</strong>lace durante una hora; la segunda compon<strong>en</strong>te correspon<strong>de</strong> al<br />

retardo promedio (<strong>en</strong> mseg) <strong>de</strong> un paquete atravesando el <strong>en</strong>lace; y finalm<strong>en</strong>te, la tercera<br />

compon<strong>en</strong>te correspon<strong>de</strong> a la capacidad <strong>de</strong>l <strong>en</strong>lace <strong>en</strong> Mbps.<br />

15


Fig. 3 Ejemplo <strong>de</strong> Red repres<strong>en</strong>tada por un grafo<br />

Sea M ⊆ V un conjunto <strong>de</strong> nodos participantes <strong>en</strong> una comunicación multipunto, al<br />

cual se le llamará grupo. Los paquetes originados <strong>en</strong> un nodo fu<strong>en</strong>te vs son <strong>en</strong>viados al<br />

conjunto <strong>de</strong> nodos receptores M – {vs}.<br />

Se <strong>de</strong>be notar que pue<strong>de</strong> suce<strong>de</strong>r que aplicaciones corri<strong>en</strong>do sobre la máquina que vs<br />

repres<strong>en</strong>ta, podrían requerir que la información también fluya hacia la misma vs, sin<br />

embargo, esto no es relevante para el problema <strong>de</strong> ruteami<strong>en</strong>to multipunto, pues interesa<br />

establecer las rutas para los paquetes que sal<strong>en</strong> <strong>de</strong>s<strong>de</strong> una máquina (fu<strong>en</strong>te) hacia otras<br />

máquinas (<strong>de</strong>stinos) pert<strong>en</strong>eci<strong>en</strong>tes al grupo.<br />

Un árbol multipunto T es un subgrafo <strong>de</strong> G que se expan<strong>de</strong> a todos los nodos <strong>en</strong> M, es<br />

<strong>de</strong>cir, conecta a todos los miembros <strong>de</strong>l grupo. T pue<strong>de</strong> incluir nodos que no son<br />

miembros <strong>de</strong>l grupo, pero que son necesarios para establecer la comunicación.<br />

P T( vs<br />

, d)<br />

<strong>de</strong>nota el camino <strong>de</strong>s<strong>de</strong> un nodo fu<strong>en</strong>te vs a un nodo <strong>de</strong>stino d ∈ M – {vs} <strong>en</strong> el<br />

árbol T.<br />

3.2 Funciones Objetivo y Restricciones<br />

Dado un grupo M, un conjunto <strong>de</strong> funciones objetivo <strong>de</strong> optimización O y un conjunto<br />

<strong>de</strong> restricciones R, el ruteami<strong>en</strong>to multipunto es el proceso <strong>de</strong> construir, basado <strong>en</strong> la<br />

topología y estado <strong>de</strong> la red, un árbol multipunto T que optimice las funciones objetivo<br />

<strong>en</strong> O y respete al conjunto <strong>de</strong> restricciones R.<br />

Se <strong>de</strong>be notar que optimizar las funciones objetivo, sujeto o no a restricciones,<br />

normalm<strong>en</strong>te conlleva una gran utilización <strong>de</strong> recursos computacionales. Esto obliga a,<br />

<strong>en</strong> la práctica, utilizar heurísticas que provean <strong>de</strong> una bu<strong>en</strong>a solución, si<strong>en</strong>do ésta no<br />

óptima.<br />

En el capítulo 4 se <strong>de</strong>scrib<strong>en</strong> variadas heurísticas para solucionar el problema <strong>de</strong><br />

ruteami<strong>en</strong>to multipunto.<br />

Funciones Objetivo y Restricciones: Los objetivos <strong>de</strong> optimización usualm<strong>en</strong>te se <strong>de</strong>fin<strong>en</strong><br />

<strong>en</strong> términos <strong>de</strong> minimizar el costo <strong>de</strong> un árbol multipunto, don<strong>de</strong> el costo podría ser: la<br />

suma <strong>de</strong> los anchos <strong>de</strong> banda ocupados por cada <strong>en</strong>lace que forma parte <strong>de</strong>l árbol; el<br />

precio <strong>de</strong> los <strong>en</strong>laces que conforman el árbol; el retardo promedio <strong>en</strong>tre la fu<strong>en</strong>te y los<br />

receptores; la efici<strong>en</strong>cia multipunto (δ), la cual repres<strong>en</strong>ta el porc<strong>en</strong>taje <strong>de</strong> ganancia <strong>de</strong> la<br />

efici<strong>en</strong>cia multicast sobre la unicast (ver 3.4.7); <strong>en</strong>tre otras medidas.<br />

Las restricciones impuestas para la construcción <strong>de</strong> los árboles multipunto pue<strong>de</strong>n<br />

16


clasificarse <strong>en</strong> dos categorías principales: Restricciones <strong>de</strong> <strong>en</strong>lace (link constraints) y,<br />

Restricciones <strong>de</strong> árbol (tree constraints).<br />

Las restricciones <strong>de</strong> <strong>en</strong>lace son restricciones sobre el uso <strong>de</strong> <strong>en</strong>laces <strong>en</strong> la selección <strong>de</strong><br />

las rutas <strong>de</strong>l árbol. Por ejemplo, el ancho <strong>de</strong> banda utilizado <strong>en</strong> un <strong>en</strong>lace pue<strong>de</strong> estar<br />

cercano a un límite previam<strong>en</strong>te establecido, y por lo tanto, establecer un camino a través<br />

<strong>de</strong> éste violaría las restricciones impuestas, <strong>en</strong> cuyo caso tal <strong>en</strong>lace es <strong>de</strong>scartado como<br />

parte <strong>de</strong>l árbol.<br />

Las restricciones <strong>de</strong> árbol, pue<strong>de</strong>n ser tanto límites sobre una medida <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to a<br />

lo largo <strong>de</strong> los caminos individuales <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a receptores, como pue<strong>de</strong>n ser límites<br />

sobre la “difer<strong>en</strong>cia” <strong>de</strong> medidas <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to a lo largo <strong>de</strong> los caminos <strong>de</strong> una misma<br />

fu<strong>en</strong>te a cualquier par <strong>de</strong> <strong>de</strong>stinos difer<strong>en</strong>tes. Por ejemplo, se <strong>de</strong>fine como límite <strong>de</strong> retardo<br />

<strong>en</strong>tre paquetes hacia un par <strong>de</strong> receptores como la “difer<strong>en</strong>cia” <strong>en</strong>tre los retardos fin a fin <strong>en</strong><br />

los caminos <strong>de</strong>s<strong>de</strong> una misma fu<strong>en</strong>te a esos dos <strong>de</strong>stinos. La medida <strong>de</strong>scrita es conocida<br />

como Inter‐receiver <strong>de</strong>lay‐jitter bound.<br />

Según [10], <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do <strong>de</strong> cómo es <strong>de</strong>rivado un árbol restringido a partir <strong>de</strong> las<br />

métricas <strong>de</strong> <strong>en</strong>lace, se pue<strong>de</strong>n clasificar tres tipos <strong>de</strong> restricciones:<br />

A) Restricciones <strong>de</strong> Árbol Aditivas:<br />

Para cualquier camino P T(<br />

u,<br />

v)<br />

= (u, i, j, ..., k, v), se dice que el árbol es aditivam<strong>en</strong>te<br />

restringido si:<br />

m(u, v) = m(u, i) + m(i, j) + ... + m(k, v)<br />

don<strong>de</strong> m(x, y) repres<strong>en</strong>ta una medida <strong>en</strong>tre un par <strong>de</strong> nodos cualquiera x, y ∈ T. Por<br />

ejemplo, el retardo fin a fin <strong>de</strong>notado por d(u, v) <strong>de</strong>s<strong>de</strong> el nodo u al nodo v, es aditivo, e<br />

igual a la suma <strong>de</strong>l retardo <strong>de</strong> los <strong>en</strong>laces individuales d(i, j) sobre el camino P T(<br />

u,<br />

v)<br />

.<br />

B) Restricciones <strong>de</strong> Árbol Multiplicativas:<br />

Se dice que un árbol es multiplicativam<strong>en</strong>te restringido si:<br />

m(u, v) = m(u, i) x m(i, j) x ... x m(k, v)<br />

don<strong>de</strong> m(x, y) repres<strong>en</strong>ta una medida <strong>en</strong>tre un par <strong>de</strong> nodos cualquiera x, y ∈ T. Así por<br />

ejemplo, la probabilidad <strong>de</strong> que un paquete alcance al nodo v <strong>de</strong>s<strong>de</strong> el nodo u a través <strong>de</strong>l<br />

camino P T(<br />

u,<br />

v)<br />

, <strong>de</strong>notada por 1 – pL(u, v), es multiplicativa e igual al producto <strong>de</strong> las<br />

probabilida<strong>de</strong>s <strong>de</strong> los <strong>en</strong>laces individuales (1 ‐ pL(i, j)) sobre el camino P T(<br />

u,<br />

v)<br />

, suponi<strong>en</strong>do<br />

que la congestión <strong>en</strong> cada uno <strong>de</strong> los <strong>en</strong>laces individuales pert<strong>en</strong>eci<strong>en</strong>tes al árbol son<br />

in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tes <strong>en</strong>tre sí.<br />

C) Restricciones <strong>de</strong> Árbol Cóncavas:<br />

Se dice que un árbol ti<strong>en</strong>e restricciones cóncavas si:<br />

m(u, v) = min[m(u, i), m(i, j), ... , m(k, v)]<br />

don<strong>de</strong> m(x, y) repres<strong>en</strong>ta una medida <strong>en</strong>tre un par <strong>de</strong> nodos cualquiera x, y ∈ T. Por<br />

ejemplo, el ancho <strong>de</strong> banda disponible <strong>en</strong> un camino <strong>de</strong>s<strong>de</strong> el nodo u al nodo v, <strong>de</strong>notado<br />

por bw(u, v), es cóncavo e igual al mínimo ancho <strong>de</strong> banda disponible <strong>en</strong>tre todos los<br />

<strong>en</strong>laces pert<strong>en</strong>eci<strong>en</strong>tes al camino P T(<br />

u,<br />

v)<br />

.<br />

17


3.3 Problemas <strong>en</strong> el <strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong><br />

Los problemas <strong>de</strong> ruteami<strong>en</strong>to multipunto pue<strong>de</strong>n visualizarse como una coor<strong>de</strong>nada<br />

<strong>de</strong>ntro <strong>de</strong> una tabla multidim<strong>en</strong>sional [10]. La Tabla 1 permite clasificar <strong>de</strong> forma simple<br />

los problemas <strong>de</strong> ruteami<strong>en</strong>to multipunto a partir <strong>de</strong> dos dim<strong>en</strong>siones: tipo <strong>de</strong><br />

optimización y tipo <strong>de</strong> restricción. Cada uno <strong>de</strong> los elem<strong>en</strong>tos <strong>en</strong> la tabla pue<strong>de</strong> adoptar<br />

una tercera dim<strong>en</strong>sión relativa a la cantidad <strong>de</strong> restricciones o funciones objetivo que se<br />

<strong>de</strong>sean respetar o alcanzar, respectivam<strong>en</strong>te.<br />

Tipo <strong>de</strong> Optimización<br />

Tipo <strong>de</strong> Restricción<br />

Tabla 1 Problemas <strong>en</strong> el <strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong><br />

No existe optimización Optimización <strong>de</strong> <strong>en</strong>laces Optimización <strong>de</strong> árbol<br />

Sin restricciones Un problema <strong>de</strong><br />

optimización <strong>de</strong> <strong>en</strong>lace<br />

(or<strong>de</strong>n polinomial)<br />

Restricciones <strong>de</strong> Enlace<br />

Restricciones <strong>de</strong> Árbol<br />

Restricciones <strong>de</strong> Enlace<br />

y <strong>de</strong> Árbol<br />

Un problema <strong>de</strong><br />

restricción <strong>de</strong> <strong>en</strong>lace<br />

(or<strong>de</strong>n polinomial)<br />

Un problema <strong>de</strong><br />

Múltiples Restricciones<br />

<strong>de</strong> <strong>en</strong>lace (or<strong>de</strong>n<br />

polinomial)<br />

Un problema <strong>de</strong><br />

restricción <strong>de</strong> árbol<br />

(tiempo polinomial)<br />

Un problema <strong>de</strong><br />

Múltiples Restricciones<br />

<strong>de</strong> árbol (NP‐completo)<br />

Un problema <strong>de</strong><br />

restricción <strong>de</strong> <strong>en</strong>lace y<br />

restricción <strong>de</strong> árbol<br />

(tiempo polinomial)<br />

3.4 Algunos Problemas Particulares<br />

18<br />

Un problema <strong>de</strong><br />

restricción <strong>de</strong> <strong>en</strong>lace y<br />

optimización <strong>de</strong> <strong>en</strong>lace<br />

(or<strong>de</strong>n polinomial)<br />

Un problema <strong>de</strong><br />

restricción <strong>de</strong> árbol y<br />

optimización <strong>de</strong> <strong>en</strong>lace,<br />

(or<strong>de</strong>n polinomial)<br />

Un problema <strong>de</strong><br />

optimización <strong>de</strong> árbol<br />

(NP‐completo)<br />

Un problema <strong>de</strong><br />

restricciones <strong>de</strong> <strong>en</strong>lace y<br />

optimización <strong>de</strong> árbol<br />

(NP‐completo)<br />

Un problema <strong>de</strong><br />

restricciones <strong>de</strong> árbol y<br />

optimización <strong>de</strong> árbol<br />

(NP‐completo)<br />

Un problema <strong>de</strong><br />

restricciones <strong>de</strong> <strong>en</strong>lace y<br />

árbol, y optimización <strong>de</strong><br />

árbol (NP‐completo)<br />

En esta sección se pres<strong>en</strong>tan algunos problemas particulares asociados a la<br />

construcción <strong>de</strong> árboles <strong>de</strong> distribución para grupos multipunto.<br />

3.4.1 Definiciones<br />

Sean dos funciones con valores no negativos asociadas a cada <strong>en</strong>lace e ∈ E: R(e) y C(e).<br />

+<br />

El retardo <strong>de</strong> <strong>en</strong>lace R(e), con R : E → ℜ , es el retardo medio que los paquetes <strong>de</strong><br />

datos experim<strong>en</strong>tan <strong>en</strong> el correspondi<strong>en</strong>te <strong>en</strong>lace (retardo <strong>de</strong> propagación +<br />

<strong>en</strong>colami<strong>en</strong>to).<br />

+<br />

El costo <strong>de</strong> <strong>en</strong>lace C(e), con C : E → ℜ , es una medida <strong>de</strong> la utilización <strong>de</strong> los recursos<br />

<strong>en</strong> el correspondi<strong>en</strong>te <strong>en</strong>lace. Mayor utilización implica mayor costo.


En g<strong>en</strong>eral, los <strong>en</strong>laces <strong>de</strong> la red son asimétricos, por lo tanto el costo y retardo <strong>de</strong> un<br />

<strong>en</strong>lace <strong>de</strong>s<strong>de</strong> un nodo u a un nodo v, e = (u, v), es distinto al costo y retardo <strong>de</strong>l <strong>en</strong>lace<br />

<strong>de</strong>s<strong>de</strong> el nodo v al nodo u, e’ = (v, u).<br />

+<br />

Se <strong>de</strong>fine δ : R → ℜ como la función restricción <strong>de</strong> retardo. La restricción es válida<br />

para los caminos <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a cada <strong>de</strong>stino. El retardo <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te vs al <strong>de</strong>stino i,<br />

δ (i)<br />

, pue<strong>de</strong> ser difer<strong>en</strong>te a δ (j)<br />

(retardo <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te vs al <strong>de</strong>stino j), con<br />

i ≠ j,<br />

i,<br />

j ∈ M − { vs<br />

} .<br />

Cuando la restricción <strong>de</strong> retardo es la misma para todos los <strong>de</strong>stinos, <strong>en</strong>tonces<br />

δ ( i) = ∆,<br />

∀i<br />

∈ M − { vs<br />

} .<br />

Para un nodo fu<strong>en</strong>te vs y un nodo <strong>de</strong>stino d, el grupo <strong>de</strong> <strong>en</strong>laces: e1 = (vs, v1), e2 = (v1, v2),<br />

..., ek = (vk, d), constituy<strong>en</strong> un camino dirigido P(vs, d) <strong>de</strong>s<strong>de</strong> vs a d. El costo <strong>de</strong>l camino<br />

dirigido P(vs, d) se <strong>de</strong>fine como:<br />

C ( P(<br />

v , d))<br />

=<br />

s<br />

19<br />

∑<br />

C(<br />

e)<br />

e∈P(<br />

vs<br />

, d)<br />

Análogam<strong>en</strong>te, el retardo fin a fin (o retardo fu<strong>en</strong>te a <strong>de</strong>stino) <strong>de</strong>l camino P(vs, d) se<br />

<strong>de</strong>fine como:<br />

R ( P(<br />

v , d))<br />

=<br />

s<br />

∑<br />

R(<br />

e)<br />

e∈P(<br />

vs<br />

, d)<br />

La <strong>de</strong>finición que sigue se aplica a sesiones multicast con una sola fu<strong>en</strong>te. Sea un<br />

grupo multicast M = { d1<br />

,..., dn<br />

} ⊆ V , con n = M ≤ V . Sea vs ∈ V una fu<strong>en</strong>te multicast<br />

para el grupo M. Un árbol <strong>de</strong> fu<strong>en</strong>te especifica T( vs<br />

, M)<br />

es un árbol con raíz <strong>en</strong> vs y que<br />

se expan<strong>de</strong> a todos los miembros <strong>de</strong>l grupo M. El costo total <strong>de</strong>l árbol T( vs<br />

, M)<br />

es<br />

simplem<strong>en</strong>te la suma <strong>de</strong> los costos <strong>de</strong> todos los <strong>en</strong>laces pert<strong>en</strong>eci<strong>en</strong>tes a él:<br />

Costo ( T(<br />

v , M))<br />

=<br />

s<br />

∑<br />

C(<br />

e)<br />

e∈T<br />

( vs<br />

, M)<br />

En g<strong>en</strong>eral, un algoritmo que int<strong>en</strong>te minimizar el costo total <strong>de</strong>l árbol multicast<br />

promoverá la exist<strong>en</strong>cia <strong>de</strong> <strong>en</strong>laces que se dirijan hacia más <strong>de</strong> un miembro <strong>en</strong> M.<br />

3.4.2 Árboles <strong>de</strong> Camino más Corto sin Restricciones<br />

La construcción <strong>de</strong> estos árboles int<strong>en</strong>ta reducir la suma <strong>de</strong> los largos (<strong>en</strong> términos <strong>de</strong><br />

saltos) <strong>de</strong> los caminos <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a cada uno <strong>de</strong> los <strong>de</strong>stinos. Las propieda<strong>de</strong>s <strong>de</strong>l<br />

árbol <strong>de</strong>p<strong>en</strong><strong>de</strong>n <strong>de</strong> la métrica <strong>de</strong> interés sobre cada <strong>en</strong>lace. Por ejemplo, si la métrica <strong>de</strong><br />

<strong>en</strong>lace es costo, <strong>en</strong>tonces la función objetivo es:<br />

min C T s<br />

T( vs<br />

, M)<br />

∈τ<br />

( vs<br />

, M)<br />

( P ( v , d))<br />

∀ d ∈ M ,<br />

don<strong>de</strong> τ(vs, M) es el conjunto <strong>de</strong> los posibles árboles que se expan<strong>de</strong>n <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te vs<br />

a todos los <strong>de</strong>stinos <strong>en</strong> M.<br />

Se <strong>de</strong>be notar que el costo total <strong>de</strong> un árbol <strong>de</strong> camino más corto no necesariam<strong>en</strong>te es<br />

mínimo, dado que el objetivo <strong>en</strong> este caso es minimizar el largo <strong>de</strong> los caminos <strong>de</strong>s<strong>de</strong> la<br />

fu<strong>en</strong>te a los <strong>de</strong>stinos y no el costo total.


3.4.3 Árboles <strong>de</strong> Steiner sin Restricciones<br />

La función objetivo <strong>de</strong>l árbol <strong>de</strong> Steiner correspon<strong>de</strong> a minimizar el costo total <strong>de</strong>l<br />

árbol multicast:<br />

min Costo s<br />

T( vs<br />

, M)<br />

∈τ<br />

( vs<br />

, M)<br />

20<br />

( T(<br />

v , M))<br />

Es conocido el hecho <strong>de</strong> que el árbol <strong>de</strong> St<strong>en</strong>ier mínimo es un problema NP completo.<br />

Para probar la NP completitud <strong>de</strong>l problema <strong>de</strong>l árbol <strong>de</strong> St<strong>en</strong>ier éste pue<strong>de</strong> ser<br />

transformado al problema clásico <strong>de</strong> la cubierta exacta <strong>de</strong> 3 grupos (Exact Cover by 3‐<br />

sets) [13].<br />

3.4.4 Árboles <strong>de</strong> Camino más Corto con Restricción <strong>de</strong> Retardo<br />

Estos árboles minimizan la suma <strong>de</strong> los largos <strong>de</strong> los caminos individuales <strong>de</strong>s<strong>de</strong><br />

fu<strong>en</strong>te a cada uno <strong>de</strong> los <strong>de</strong>stinos, sujetos a un límite <strong>de</strong> retardo. La función objetivo es la<br />

misma que <strong>en</strong> 3.4.2 , pero sujeto a la restricción:<br />

R T s<br />

s<br />

s<br />

( P ( v , d))<br />

≤ ∆ ∀d<br />

∈ M,<br />

T(<br />

v , M)<br />

∈τ<br />

( v , M)<br />

.<br />

Don<strong>de</strong> ∆ es el límite <strong>de</strong> retardo para todos los caminos <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a cada <strong>de</strong>stino.<br />

3.4.5 Árboles <strong>de</strong> Steiner con Restricción <strong>de</strong> Retardo<br />

La función objetivo <strong>en</strong> este caso es minimizar el costo total <strong>de</strong>l árbol como <strong>en</strong> 3.4.3,<br />

pero sin violar la restricción <strong>de</strong> retardo impuesta, tal como <strong>en</strong> 3.4.4.<br />

El problema <strong>de</strong> árbol <strong>de</strong> Steiner <strong>de</strong> fu<strong>en</strong>te específica con restricción <strong>de</strong> retardo fue<br />

formulado por primera vez <strong>en</strong> [14], allí los autores prueban que el problema es NP<br />

completo.<br />

3.4.6 Compromiso <strong>en</strong>tre Costo y Retardo<br />

De acuerdo a [34] <strong>en</strong>contrar un único árbol multicast <strong>de</strong> fu<strong>en</strong>te específica que optimice<br />

al mismo tiempo costo y retardo no es posible. Por ejemplo, para un árbol <strong>de</strong> Steiner <strong>de</strong><br />

fu<strong>en</strong>te específica <strong>en</strong>contrado con la heurística KMB <strong>de</strong>scrita <strong>en</strong> 4.2.1, el retardo promedio<br />

<strong>de</strong>l árbol está limitado a (|M|‐1)/2 veces el promedio mínimo, don<strong>de</strong> |M| es el tamaño<br />

<strong>de</strong>l grupo multicast. Similarm<strong>en</strong>te, el árbol <strong>de</strong> camino más corto que minimiza el retardo<br />

promedio árbol pue<strong>de</strong> ser |M| veces más costoso que el árbol Steiner, aun cuando datos<br />

empíricos muestran que los árboles <strong>de</strong> camino más corto son levem<strong>en</strong>te (20%) más<br />

costosos que los árboles <strong>de</strong> Steiner <strong>en</strong>contrados con algoritmos aproximados, tal como<br />

KMB. Por otro lado, el retardo promedio <strong>de</strong>l árbol <strong>de</strong> fu<strong>en</strong>te especifica <strong>en</strong>contrado con<br />

KMB, típicam<strong>en</strong>te es 50% mayor que un árbol <strong>de</strong> camino más corto.<br />

3.4.7 Efici<strong>en</strong>cia Multicast<br />

En la introducción <strong>de</strong> este trabajo se m<strong>en</strong>cionó las v<strong>en</strong>tajas que multicast ofrece sobre<br />

unicast, resaltando el hecho <strong>de</strong> que multicast reduce la utilización <strong>de</strong>l recurso ancho <strong>de</strong><br />

banda <strong>de</strong> la red, dado que multicast utiliza árboles <strong>de</strong> distribución para el <strong>en</strong>vío <strong>de</strong> los<br />

paquetes <strong>de</strong> datos a los <strong>de</strong>stinos <strong>de</strong> un grupo. Las secciones previas se refirieron a<br />

distintos problemas respecto a la construcción <strong>de</strong> los árboles multicast. Sin embargo, ¿son<br />

sufici<strong>en</strong>tes las métricas <strong>de</strong> costo y retardo, consi<strong>de</strong>radas <strong>en</strong> variadas heurísticas, para<br />

configurar la construcción <strong>de</strong> los árboles multicast?.


Por otro lado, apar<strong>en</strong>tem<strong>en</strong>te la v<strong>en</strong>taja <strong>de</strong> multicast sobre unicast se ve opacada por el<br />

hecho <strong>de</strong> que muchas aplicaciones multicast involucran grupos dinámicos, don<strong>de</strong><br />

miembros pue<strong>de</strong>n unirse o <strong>de</strong>jar al grupo muy frecu<strong>en</strong>tem<strong>en</strong>te. Este hecho lleva a<br />

preguntarse acerca <strong>de</strong> la efici<strong>en</strong>cia que multicast ti<strong>en</strong>e sobre unicast para manejar el<br />

recurso <strong>de</strong> ancho <strong>de</strong> banda.<br />

En [20] por primera vez se provee <strong>de</strong> una comparación <strong>de</strong>finitiva <strong>en</strong>tre multicast y<br />

unicast, asignando un valor monetario a multicast. El trabajo se focaliza <strong>en</strong> la razón <strong>en</strong>tre<br />

el número total <strong>de</strong> <strong>en</strong>laces multicast <strong>en</strong> el árbol <strong>de</strong> distribución y el largo promedio <strong>de</strong> los<br />

caminos unicast. Los autores <strong>de</strong>terminan que esta razón pue<strong>de</strong> ser concisam<strong>en</strong>te<br />

expresada como una ʺpower lawʺ <strong>en</strong> términos <strong>de</strong>l número <strong>de</strong> recibidores.<br />

L m k<br />

= N , don<strong>de</strong> N es el número <strong>de</strong> <strong>de</strong>stinos, L u es el largo promedio <strong>de</strong> un camino<br />

Lu<br />

<strong>en</strong>tre un par <strong>de</strong> nodos cualesquiera, L u es el número total <strong>de</strong> <strong>en</strong>laces multicast <strong>en</strong> el<br />

árbol, y k es un factor <strong>de</strong> escala económica que varía <strong>en</strong>tre 0 y1.<br />

Para evaluar efectivam<strong>en</strong>te la vali<strong>de</strong>z <strong>de</strong> la relación <strong>de</strong>finida <strong>en</strong> [20] <strong>en</strong> re<strong>de</strong>s reales, <strong>en</strong><br />

[22] se realizó un trabajo experim<strong>en</strong>tal. En este trabajo se <strong>en</strong>contró que <strong>en</strong> grupos <strong>de</strong> 20 a<br />

40 recibidores, multicast ofrece <strong>de</strong> un 60 a 70% <strong>de</strong> reducción <strong>de</strong> la utilización <strong>de</strong> <strong>en</strong>laces,<br />

<strong>en</strong> comparación con el <strong>en</strong>vío <strong>de</strong> información <strong>en</strong> flujos unicast separados a cada <strong>de</strong>stino.<br />

La métrica utilizada <strong>en</strong> [22] no es precisam<strong>en</strong>te la relación <strong>de</strong>finida <strong>en</strong> [20], pero se basa<br />

<strong>en</strong> ésta. La efici<strong>en</strong>cia multicast es repres<strong>en</strong>tada como el porc<strong>en</strong>taje <strong>de</strong> ganancia <strong>de</strong><br />

multicast sobre unicast, <strong>de</strong>finida como:<br />

Lm<br />

δ = 1−<br />

, don<strong>de</strong> Lm es el número <strong>de</strong> <strong>en</strong>laces multicast y Lu la suma <strong>de</strong> los largos <strong>de</strong><br />

Lu<br />

los caminos unicast.<br />

Exist<strong>en</strong> numerosas heurísticas que int<strong>en</strong>tan <strong>en</strong>contrar solución a los problemas<br />

<strong>de</strong>scritos <strong>en</strong> esta sección. La sección 4.2 <strong>de</strong>scribe algunos protocolos <strong>de</strong> ruteami<strong>en</strong>to<br />

multicast y diversas propuestas aparecidas <strong>en</strong> la literatura. En el capítulo 6 se muestra<br />

una comparación mediante simulación <strong>de</strong> varios algoritmos <strong>de</strong> ruteami<strong>en</strong>to multipunto.<br />

21


E<br />

4 <strong>Algoritmos</strong> <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong> <strong>Multipunto</strong><br />

n este capítulo se <strong>de</strong>scrib<strong>en</strong> algunos protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast (4.1) y<br />

algunos algoritmos <strong>de</strong> ruteami<strong>en</strong>to multipunto aparecidos <strong>en</strong> la literatura (4.2), tales<br />

como KMB, CAO, KPP o BSMA.<br />

Entre los algoritmos propuestos <strong>en</strong> la literatura se m<strong>en</strong>ciona una heurística propuesta<br />

reci<strong>en</strong>tem<strong>en</strong>te <strong>en</strong> [36] llamada Best Contribution (BC). El capítulo 6 es <strong>de</strong>dicado a la<br />

comparación <strong>de</strong> variadas heurísticas, c<strong>en</strong>trando el interés <strong>en</strong> BC.<br />

La <strong>de</strong>scripción <strong>de</strong> los protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast (PRM) <strong>en</strong> 4.1 no incluye una<br />

<strong>de</strong>scripción <strong>de</strong> los protocolos <strong>de</strong> ruteami<strong>en</strong>to unicast (PRU) sobre los cuales los PRM se<br />

basan. Sólo se hace m<strong>en</strong>ción <strong>de</strong> ellos.<br />

4.1 Protocolos <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong> Multicast y <strong>Algoritmos</strong> Asociados<br />

A inicios <strong>de</strong>l año 1997 se com<strong>en</strong>zó a adoptar la concepción <strong>de</strong> Internet como un<br />

conjunto <strong>en</strong>lazado <strong>de</strong> sistemas autónomos (SAs). Des<strong>de</strong> esa fecha, los protocolos <strong>de</strong><br />

ruteami<strong>en</strong>to <strong>de</strong>sarrollados hasta ese mom<strong>en</strong>to pasaron a ser las propuestas <strong>de</strong><br />

ruteami<strong>en</strong>to al interior <strong>de</strong> los Sas. Adicionalm<strong>en</strong>te, se com<strong>en</strong>zaron a realizar esfuerzos<br />

para construir estándares <strong>en</strong> el ruteami<strong>en</strong>to <strong>en</strong>tre SAs [18]. A continuación se <strong>de</strong>scrib<strong>en</strong><br />

algunos protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast que operan tanto al interior <strong>de</strong> un sistema<br />

autónomo (SA), como <strong>en</strong>tre SAs.<br />

4.1.1 DVMRP [23]<br />

El Distance Vector Multicast Routing Protocol (DVMRP) es un protocolo <strong>de</strong> vector<br />

distancia, utilizado <strong>en</strong> el Mbone, y que originalm<strong>en</strong>te fue <strong>de</strong>rivado <strong>de</strong>l protocolo <strong>de</strong><br />

ruteami<strong>en</strong>to unicast RIP (Routing Information Protocol). RIP calcula cada próximo paso<br />

hacia un <strong>de</strong>stino utilizando el algoritmo Bellman‐Ford, <strong>en</strong> cambio DVMRP computa cada<br />

paso <strong>de</strong>s<strong>de</strong> los <strong>de</strong>stinos hacia la fu<strong>en</strong>te (hacia atrás), basándose <strong>en</strong> las tablas unicast que<br />

RIP provee. DVMRP construye árboles <strong>de</strong> fu<strong>en</strong>te específica, basándose <strong>en</strong> una métrica <strong>de</strong><br />

saltos. Los árboles son construidos bajo <strong>de</strong>manda, y su creación se inicia cuando una<br />

fu<strong>en</strong>te <strong>en</strong>vía su primer paquete usando el algoritmo Reverse Path Forwarding (RPF).<br />

RPF usa la técnica <strong>de</strong> “Inundar y Podar” (Flood and Prune). Esta técnica consiste <strong>en</strong> el<br />

<strong>en</strong>vió <strong>de</strong> paquetes <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a todos los routers <strong>en</strong> la red (flood) bajo un árbol <strong>de</strong><br />

expansión mínima (minimum spanning tree) conformado por dichos routers. Tal árbol es<br />

construido como un árbol <strong>de</strong> camino más corto inverso (reverse‐shortest path tree o<br />

RSPT). El algoritmo RPF toma v<strong>en</strong>taja <strong>de</strong> las tablas unicast exist<strong>en</strong>tes, y utilizando la<br />

información <strong>de</strong> estado exist<strong>en</strong>te <strong>en</strong> estas tablas, realiza las sigui<strong>en</strong>tes tareas:<br />

(a) Cuando un paquete multicast es recibido, se graba la dirección <strong>de</strong> la fu<strong>en</strong>te y el<br />

i<strong>de</strong>ntificador <strong>de</strong> la conexión <strong>de</strong> llegada (I).<br />

(b) Si I es una conexión utilizada para <strong>en</strong>viar un paquete unicast <strong>de</strong> regreso a la fu<strong>en</strong>te<br />

(RPF check), <strong>en</strong>tonces el paquete es <strong>en</strong>viado a todas las conexiones, excepto por<br />

don<strong>de</strong> llegó. Cuando un router <strong>de</strong>tecta que un paquete no está dirigido a ninguno<br />

<strong>de</strong> los hosts <strong>en</strong> su subred, <strong>en</strong>tonces él <strong>en</strong>vía un m<strong>en</strong>saje <strong>de</strong> “poda” (prune) al router<br />

padre <strong>de</strong>ntro <strong>de</strong>l RSPT. El m<strong>en</strong>saje <strong>de</strong> podado ti<strong>en</strong>e una edad asociada, y es<br />

actualizado cada vez que se supera un umbral <strong>de</strong> tiempo, inundando nuevam<strong>en</strong>te<br />

la red. Esto se realiza con la esperanza <strong>de</strong> que nuevos miembros puedan unirse<br />

22


(join) al grupo, y a<strong>de</strong>más permita al protocolo adaptarse a cambios topológicos <strong>de</strong><br />

la red. El Internet Group Managem<strong>en</strong>t Protocol (IGMP) [24] es usado para <strong>de</strong>tectar<br />

cuando un miembro <strong>de</strong>ja (leave) el grupo. Esta información se pasa “hacia arriba”,<br />

a los router padres, para podar las ramas <strong>de</strong>l árbol que no t<strong>en</strong>gan miembros.<br />

4.1.2 MOSPF [25]<br />

El protocolo Multicast Op<strong>en</strong> Shortest Path First (MOSPF) es una ext<strong>en</strong>sión <strong>de</strong>l<br />

protocolo unicast Op<strong>en</strong> Shortest Path First (OSPF), usado al interior <strong>de</strong> un SA. Cada<br />

router OSPF manti<strong>en</strong>e una base <strong>de</strong> datos con el estado <strong>de</strong> los <strong>en</strong>laces <strong>en</strong> el SA. Esta base<br />

<strong>de</strong> datos es construida a partir <strong>de</strong> cinco tipos <strong>de</strong> “anuncios” llamados LSAs (link‐state<br />

advertisem<strong>en</strong>ts) que inundan al SA. Cada uno <strong>de</strong> estos anuncios <strong>de</strong>scribe información<br />

local <strong>de</strong>l router o la red. En MOSPF se agrega un nuevo LSA que <strong>de</strong>scribe la membresía<br />

<strong>de</strong>l grupo (membership group). Esta información es obt<strong>en</strong>ida a partir <strong>de</strong>l protocolo<br />

IGMP. Cuando un router recibe un paquete multicast, éste computa un árbol <strong>de</strong> camino<br />

más corto con el algoritmo Dijkstra <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te que <strong>en</strong>vío el paquete, y lo re<strong>en</strong>vía (el<br />

paquete) a través <strong>de</strong>l árbol que recién computó. Los árboles <strong>en</strong> cada router son<br />

computados bajo <strong>de</strong>manda, sin embargo, aun bajo esta consi<strong>de</strong>ración, tal situación<br />

resulta poco escalable <strong>en</strong> el caso <strong>de</strong> mucha interactividad <strong>de</strong> los grupos multicast sobre la<br />

red (muchas fu<strong>en</strong>tes).<br />

4.1.3 CBT [26]<br />

El protocolo <strong>de</strong> ruteami<strong>en</strong>to multicast Core Based Tree (CBT) es un int<strong>en</strong>to para<br />

mejorar la poca escalabilidad <strong>de</strong> los protocolos DVMRP y MOSPF, los cuales requier<strong>en</strong><br />

mant<strong>en</strong>er información para el ruteami<strong>en</strong>to, por fu<strong>en</strong>te y por grupo. A<strong>de</strong>más,<br />

periódicam<strong>en</strong>te <strong>de</strong>b<strong>en</strong> inundar sectores <strong>de</strong> la red con el fin <strong>de</strong> activar la etapa <strong>de</strong> podado.<br />

CBT construye el árbol <strong>de</strong> distribución basándose <strong>en</strong> un núcleo, el cual es el c<strong>en</strong>tro <strong>de</strong>l<br />

grupo multicast. Cada vez que un nuevo miembro <strong>en</strong>vía un m<strong>en</strong>saje para unirse al<br />

grupo, este se <strong>en</strong>vía a través <strong>de</strong>l camino más corto hacia el c<strong>en</strong>tro, actualizando la<br />

información <strong>en</strong> los routers a lo largo <strong>de</strong> este camino. Si un router intermedio recibe <strong>de</strong><br />

algún nodo un m<strong>en</strong>saje <strong>de</strong> petición <strong>de</strong> unión al grupo, y este router ya pert<strong>en</strong>ece al árbol,<br />

<strong>en</strong>tonces un acuse <strong>de</strong> recibo a esta petición (join‐acknowledgem<strong>en</strong>t) es <strong>en</strong>viado hacia<br />

atrás por el mismo camino <strong>de</strong>s<strong>de</strong> don<strong>de</strong> se inició la petición. Cada nodo <strong>en</strong> este camino<br />

agrega a sus interconexiones <strong>de</strong> <strong>en</strong>trada y salida las interconexiones para el grupo, y crea<br />

una nueva <strong>en</strong>trada <strong>en</strong> la tabla <strong>de</strong> rutas. En CBT no se distingue <strong>en</strong>tre padres e hijos, aquí<br />

un router está o no está <strong>en</strong> el árbol. Cuando una fu<strong>en</strong>te <strong>en</strong>vía un paquete a un grupo <strong>de</strong>l<br />

cual no es miembro, esté es direccionado hacia el c<strong>en</strong>tro <strong>de</strong>l árbol (que reúne al grupo), y<br />

cuando alcanza al primer nodo <strong>en</strong> el árbol, <strong>de</strong>s<strong>de</strong> allí es <strong>en</strong>viado a todos los miembros <strong>de</strong>l<br />

grupo excepto <strong>de</strong>s<strong>de</strong> don<strong>de</strong> llegó. De esta manera no todos los paquetes necesitan ir al<br />

c<strong>en</strong>tro <strong>de</strong>l árbol.<br />

El algoritmo <strong>de</strong> ruteami<strong>en</strong>to asociado a CBT es equival<strong>en</strong>te a construir un árbol <strong>de</strong><br />

expansión mínima que alcanza a todos los miembros <strong>de</strong>l grupo más el c<strong>en</strong>tro. El árbol<br />

que forma CBT es un árbol compartido (<strong>en</strong>tre todas las fu<strong>en</strong>tes <strong>de</strong>l grupo multicast). La<br />

v<strong>en</strong>taja <strong>de</strong> utilizar un árbol compartido <strong>en</strong>tre varias fu<strong>en</strong>tes, <strong>en</strong> vez <strong>de</strong> usar un árbol <strong>de</strong><br />

fu<strong>en</strong>te específica por cada una <strong>de</strong> ellas, es que la información que <strong>de</strong>b<strong>en</strong> mant<strong>en</strong>er los<br />

router es sólo información por cada grupo, y no por cada par (fu<strong>en</strong>te, grupo), como<br />

DVRMP o MOSPF lo hac<strong>en</strong>. A<strong>de</strong>más, CBT usa las tablas unicast <strong>de</strong> cualquier protocolo<br />

unicast, <strong>en</strong> contraste con DVMRP y MOSPF que utilizan exclusivam<strong>en</strong>te RIP y OSPF<br />

23


espectivam<strong>en</strong>te. El problema con CBT es la conc<strong>en</strong>tración <strong>de</strong> tráfico que se g<strong>en</strong>era <strong>en</strong> las<br />

diversas fu<strong>en</strong>tes que <strong>de</strong>positan sus flujos sólo sobre los <strong>en</strong>laces <strong>de</strong>l árbol compartido.<br />

La selección óptima <strong>de</strong>l c<strong>en</strong>tro es un problema NP completo [27] y usualm<strong>en</strong>te se<br />

requiere conocer la totalidad <strong>de</strong> la topología <strong>de</strong> la red y <strong>de</strong>talles exactos <strong>de</strong> la membresía<br />

<strong>de</strong>l grupo.<br />

4.1.4 PIM<br />

Protocol In<strong>de</strong>p<strong>en</strong><strong>de</strong>nt Multicast (PIM) es un protocolo <strong>de</strong> ruteami<strong>en</strong>to multicast que<br />

fue creado buscando las características <strong>de</strong>seables <strong>de</strong> las dos categorías <strong>de</strong> estructuras <strong>de</strong><br />

árbol: árbol compartido y árbol <strong>de</strong> fu<strong>en</strong>te específica. PIM ti<strong>en</strong>e dos modos <strong>de</strong> operación<br />

PIM D<strong>en</strong>se Mo<strong>de</strong> (PIM‐DM), el cual emplea un árbol <strong>de</strong> camino más corto inverso,<br />

similar a DVMRP, y PIM Sparse‐Mo<strong>de</strong> (PIM‐SM) el cual emplea un árbol compartido<br />

unidireccional. A continuación se <strong>de</strong>scribe <strong>en</strong> más <strong>de</strong>talle ambos modos <strong>de</strong> operación <strong>de</strong><br />

PIM.<br />

4.1.4.1 PIM‐DM [28]:<br />

Protocol In<strong>de</strong>p<strong>en</strong><strong>de</strong>nt Multicast – D<strong>en</strong>se Mo<strong>de</strong> (PIM‐DM) es un protocolo que fue<br />

diseñado para ser usado <strong>en</strong> grupos con un gran número <strong>de</strong> miembros, <strong>de</strong> allí el nombre<br />

PIM <strong>de</strong> “modo <strong>de</strong>nso”. Tal como <strong>en</strong> DVRMP, PIM‐DM utiliza el algoritmo RPF con la<br />

técnica “inundar y podar”. Sin embargo, PIM‐DM es in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>te <strong>de</strong>l protocolo<br />

unicast pres<strong>en</strong>te <strong>en</strong> la red, él simplem<strong>en</strong>te asume que las tablas <strong>de</strong> ruteami<strong>en</strong>to unicast<br />

exist<strong>en</strong> y que son simétricas.<br />

En PIM‐DM, inicialm<strong>en</strong>te los datagramas multicast son inundados a todas las áreas <strong>de</strong><br />

la red. El algoritmo RPF es utilizado para prev<strong>en</strong>ir ciclos mi<strong>en</strong>tras se produce la<br />

inundación. Si alguna <strong>de</strong> las áreas <strong>de</strong> la red no ti<strong>en</strong>e miembros <strong>de</strong>l grupo, PIM‐DM<br />

podará las ramas <strong>de</strong> esta zona. Cuando un nuevo miembro aparece <strong>en</strong> un área podada,<br />

un router pue<strong>de</strong> “injertar” una nueva rama <strong>en</strong> el árbol. PIM‐DM ti<strong>en</strong>e un diseño más<br />

simple comparado con los protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast que ti<strong>en</strong><strong>en</strong> mecanismos<br />

embebidos <strong>de</strong> <strong>de</strong>scubrimi<strong>en</strong>to <strong>de</strong> la topología <strong>de</strong> la red, tal como DVRMP. PIM‐DM no<br />

requiere <strong>de</strong> información topológica <strong>de</strong> la red. Sin embargo, esta simplificación hace que<br />

PIM‐DM incurra <strong>en</strong> una mayor sobrecarga a causa <strong>de</strong> las “inundaciones y podas” que le<br />

ocurr<strong>en</strong> a algunos <strong>en</strong>laces, que no lo necesitarían si se tuviese mayor información acerca<br />

<strong>de</strong> la topología <strong>de</strong> la red, como por ejemplo, si una conexión es útil o no para alcanzar a<br />

miembro <strong>de</strong>l grupo. Básicam<strong>en</strong>te, la difer<strong>en</strong>cia <strong>en</strong>tre DVMRP y PIM‐DM es que <strong>en</strong><br />

DVMRP, antes <strong>de</strong>l <strong>en</strong>vío <strong>de</strong> los paquetes por un cierta conexión, se cerciora <strong>de</strong> que dicha<br />

conexión conduzca a un nodo que reconozca el nodo local como nodo que está <strong>en</strong> la<br />

trayectoria más corta <strong>en</strong>tre él y la fu<strong>en</strong>te (esto asegura que <strong>en</strong> DVRMP el <strong>en</strong>vío <strong>de</strong><br />

paquetes se realice a través <strong>de</strong>l camino más corto <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te al <strong>de</strong>stino). A difer<strong>en</strong>cia<br />

<strong>de</strong> DVMRP, PIM‐DM sacrifica una sobrecarga adicional sobre la red con el fin <strong>de</strong><br />

simplificar el algoritmo <strong>de</strong> <strong>en</strong>vío <strong>de</strong> paquetes. Aparte <strong>de</strong> esto, el protocolo es muy<br />

similar a DVMRP y así, todo lo indicado para DVMRP también se aplica a PIM‐DM.<br />

4.1.4.2 PIM‐SM [29]:<br />

El Protocol In<strong>de</strong>p<strong>en</strong><strong>de</strong>nt Multicast – Sparse Mo<strong>de</strong> (PIM‐SM) tal como su nombre lo<br />

indica está diseñado para grupos esparcidos. PIM‐SM es un protocolo que pue<strong>de</strong> usar la<br />

información unicast <strong>de</strong> ruteami<strong>en</strong>to subyac<strong>en</strong>te o construir su propia base <strong>de</strong><br />

información para el ruteami<strong>en</strong>to. PIM‐SM construye por cada grupo un árbol<br />

24


compartido unidireccional basados <strong>en</strong> un punto <strong>de</strong> <strong>en</strong>cu<strong>en</strong>tro (R<strong>en</strong><strong>de</strong>zvous Point, RP).<br />

A<strong>de</strong>más, opcionalm<strong>en</strong>te construye un árbol <strong>de</strong> camino más corto por cada fu<strong>en</strong>te. La<br />

principal función <strong>de</strong> las tablas <strong>de</strong> rutas <strong>en</strong> PIM‐SM es proveer el próximo paso <strong>en</strong> la ruta<br />

a lo largo <strong>de</strong> un posible camino multicast hacia cada subred <strong>de</strong>stino. La información <strong>de</strong><br />

las tablas <strong>de</strong> rutas es usada para <strong>de</strong>terminar el próximo paso que <strong>de</strong>be seguir un m<strong>en</strong>saje<br />

<strong>de</strong> unión o poda hacia un router vecino. Los datos fluy<strong>en</strong> a través <strong>de</strong>l camino inverso <strong>de</strong><br />

los m<strong>en</strong>sajes <strong>de</strong> unión. Los m<strong>en</strong>sajes <strong>de</strong> unión fluy<strong>en</strong> <strong>de</strong>s<strong>de</strong> <strong>de</strong>stino a fu<strong>en</strong>te,<br />

normalm<strong>en</strong>te a través <strong>de</strong>l RP. Análogam<strong>en</strong>te a todos los protocolos <strong>de</strong> ruteami<strong>en</strong>to que<br />

implem<strong>en</strong>tan el mo<strong>de</strong>lo <strong>de</strong> servicio <strong>de</strong>l RFC 1112 [30], PIM‐SM <strong>de</strong>bería ser capaz <strong>de</strong><br />

rutear los paquetes <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te hasta los <strong>de</strong>stinos sin que cualquiera <strong>de</strong> las fu<strong>en</strong>tes o<br />

<strong>de</strong>stinos conozca a priori la exist<strong>en</strong>cia <strong>de</strong> los otros. Esto se realiza es<strong>en</strong>cialm<strong>en</strong>te <strong>en</strong> tres<br />

fases, aun cuando fu<strong>en</strong>tes y <strong>de</strong>stinos podrían irse <strong>en</strong> cualquier mom<strong>en</strong>to, ocurri<strong>en</strong>do las<br />

tres fases al mismo tiempo.<br />

Primera fase, Árbol RP (RP Tree): Los <strong>de</strong>stinos expresan su interés <strong>en</strong> recibir tráfico<br />

<strong>de</strong>stinado a un cierto grupo multicast. Esto se hace típicam<strong>en</strong>te usando IGMP o MLD<br />

(Multicast List<strong>en</strong>er Discovery [31]. Alguno <strong>de</strong> los routers locales <strong>de</strong>l <strong>de</strong>stino es elegido<br />

como el “router <strong>de</strong>signado” (DR‐ Designated Router) <strong>de</strong> la subred. Cuando el DR recibe<br />

un m<strong>en</strong>saje que expresa el interés <strong>de</strong>l <strong>de</strong>stino por unirse a un grupo G, <strong>en</strong>tonces él <strong>en</strong>vía<br />

un join message que es conocido como (*, G) Join. El * indica que el grupo no ti<strong>en</strong>e<br />

solam<strong>en</strong>te una fu<strong>en</strong>te específica. El m<strong>en</strong>saje (*, G) Join viaja salto a salto hacia el RP <strong>de</strong>l<br />

grupo, y cada vez que este m<strong>en</strong>saje pasa por un router, el estado <strong>de</strong>l árbol multicast para<br />

el grupo G es actualizado. G<strong>en</strong>eralm<strong>en</strong>te el m<strong>en</strong>saje (*, G) Join alcanzará el RP o algún<br />

router que ya a recibido un m<strong>en</strong>saje (*, G) Join. Cuando varios <strong>de</strong>stinos han pedido<br />

unirse al grupo G, y sus m<strong>en</strong>sajes <strong>de</strong> unión han convergido al RP, éstos formarán un<br />

árbol <strong>de</strong> distribución para el grupo G, con orig<strong>en</strong> <strong>en</strong> el RP. Este árbol es conocido como<br />

RP Tree (RPT), el cual es compartido por todas las fu<strong>en</strong>tes que <strong>en</strong>vían datos a un mismo<br />

grupo. Los m<strong>en</strong>sajes <strong>de</strong> unión son re<strong>en</strong>viados periódicam<strong>en</strong>te a los <strong>de</strong>stinos que<br />

permanec<strong>en</strong> <strong>en</strong> el grupo. Cuando todos los <strong>de</strong>stinos sobre una red hoja <strong>de</strong>jan el grupo, el<br />

DR <strong>en</strong>vía un m<strong>en</strong>saje <strong>de</strong> poda (PIM (*, G) Prune) hacia el RP <strong>de</strong>l grupo multicast. No<br />

obstante, si por alguna razón el m<strong>en</strong>saje <strong>de</strong> poda no es <strong>en</strong>viado, el estado <strong>de</strong>l árbol<br />

caduca, ya que éste ti<strong>en</strong>e un tiempo <strong>de</strong> expiración asociado. Cuando una fu<strong>en</strong>te<br />

multicast comi<strong>en</strong>za a <strong>en</strong>viar paquetes <strong>de</strong>stinados a un grupo, el router local a la fu<strong>en</strong>te<br />

(DR) toma aquellos datos, los <strong>en</strong>capsula como unicast, y los <strong>en</strong>vía directam<strong>en</strong>te al RP. El<br />

RP <strong>de</strong>stino <strong>en</strong>tonces recibe los paquetes <strong>de</strong> datos <strong>en</strong>capsulados, los <strong>de</strong>s<strong>en</strong>capsula, y los<br />

<strong>en</strong>vía sobre el árbol compartido. Los paquetes <strong>en</strong>tonces sigu<strong>en</strong> las rutas establecida por<br />

el árbol multicast <strong>de</strong>l grupo (*, G), si<strong>en</strong>do replicados <strong>en</strong> todas las ramas <strong>de</strong>l tal árbol. Así<br />

normalm<strong>en</strong>te los paquetes alcanzarán todos los <strong>de</strong>stinos <strong>de</strong>l grupo multicast. El proceso<br />

<strong>de</strong> <strong>en</strong>capsulami<strong>en</strong>to <strong>de</strong> los paquetes <strong>de</strong> datos es llamado “registering” (registro) y los<br />

paquetes <strong>en</strong>capsulados son llamados “PIM register packets”. Al final <strong>de</strong> la fase uno, el<br />

tráfico multicast esta fluy<strong>en</strong>do <strong>en</strong>capsulado al RP, y <strong>de</strong>s<strong>de</strong> éste a los <strong>de</strong>stinos multicast.<br />

Fase dos, Parada <strong>de</strong> Registro (Register Stop): El registro <strong>de</strong> la <strong>en</strong>capsulación resulta<br />

inefici<strong>en</strong>te por dos razones:<br />

1) La <strong>en</strong>capsulación y <strong>de</strong>s<strong>en</strong>capsulación podría ser una operación relativam<strong>en</strong>te<br />

costosa <strong>de</strong> ejecutar para un router, <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do si el router ti<strong>en</strong>e o no un hardware<br />

apropiado para esta tarea.<br />

2) Viajar a través <strong>de</strong> todo el camino al RP, y sólo <strong>en</strong>tonces volver al árbol compartido<br />

podría provocar que los paquetes viaj<strong>en</strong> una distancia relativam<strong>en</strong>te larga para alcanzar<br />

los <strong>de</strong>stinos que están cercanos a una fu<strong>en</strong>te. Para algunas aplicaciones el increm<strong>en</strong>to <strong>de</strong><br />

25


la lat<strong>en</strong>cia (tiempo que transcurre hasta recibir correctam<strong>en</strong>te un paquete) es in<strong>de</strong>seable.<br />

Dado que el proceso <strong>de</strong> registro podría continuar in<strong>de</strong>finidam<strong>en</strong>te, el RP elegirá soportar<br />

un <strong>en</strong>vío nativo. Esto significa que cuando el RP recibe un paquete <strong>de</strong> datos <strong>de</strong> registro<br />

<strong>en</strong>capsulado <strong>de</strong>s<strong>de</strong> una fu<strong>en</strong>te S <strong>en</strong> un grupo G, <strong>en</strong>tonces será iniciado un m<strong>en</strong>saje (S, G)<br />

Source‐Specific Join hacia S. Este m<strong>en</strong>saje viaja salto a salto hacia S, instanciando el árbol<br />

multicast (S, G) <strong>en</strong> los routers a lo largo <strong>de</strong>l camino. La información <strong>de</strong> rutas <strong>de</strong>l árbol<br />

multicast (S, G) es usada sólo para <strong>en</strong>viar paquetes al grupo G si es que aquellos paquetes<br />

provi<strong>en</strong><strong>en</strong> <strong>de</strong> la fu<strong>en</strong>te S. Los m<strong>en</strong>sajes <strong>de</strong> unión que alcanc<strong>en</strong> la subred <strong>de</strong> S o algún<br />

router que ya ti<strong>en</strong>e la información <strong>de</strong>l árbol multicast (S, G), <strong>en</strong>tonces los paquetes <strong>de</strong> S<br />

comi<strong>en</strong>zan a fluir sigui<strong>en</strong>do por las rutas <strong>de</strong>l árbol (S,G) hacia el RP. Estos paquetes <strong>de</strong><br />

datos podrían alcanzar routers con estado (*, G) a lo largo <strong>de</strong>l camino hacia RP, si esto<br />

ocurre, ellos pue<strong>de</strong>n tomar un atajo sobre el árbol RP a éste punto. Mi<strong>en</strong>tras el RP está <strong>en</strong><br />

proceso <strong>de</strong> unir al árbol <strong>de</strong> fu<strong>en</strong>te específica <strong>de</strong> S, los paquetes <strong>de</strong> datos continuarán<br />

si<strong>en</strong>do <strong>en</strong>capsulados y <strong>en</strong>viados al RP. Cuando los paquetes <strong>de</strong> S también comi<strong>en</strong>zan a<br />

llegar “nativam<strong>en</strong>te” al RP, el RP estará recibi<strong>en</strong>do dos copias <strong>de</strong> cada paquete. En este<br />

instante, el RP comi<strong>en</strong>za a <strong>de</strong>scartar las copias <strong>en</strong>capsuladas, y <strong>en</strong>vía un m<strong>en</strong>saje<br />

Register‐Stop (hacia atrás) al DR <strong>de</strong> S para prev<strong>en</strong>ir el <strong>en</strong>capsulami<strong>en</strong>to innecesario <strong>de</strong><br />

paquetes. Al final <strong>de</strong> la etapa dos, el tráfico estará fluy<strong>en</strong>do nativam<strong>en</strong>te <strong>de</strong>s<strong>de</strong> S a través<br />

<strong>de</strong> un árbol <strong>de</strong> fu<strong>en</strong>te específica hacia los <strong>de</strong>stinos. En el lugar don<strong>de</strong> los dos árboles se<br />

interceptan, el tráfico podría ser transferido <strong>de</strong>l árbol <strong>de</strong> fu<strong>en</strong>te específica al árbol RP, y<br />

así se evita tomar la bifurcación a través <strong>de</strong>l RP. Se <strong>de</strong>be t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que una fu<strong>en</strong>te<br />

podría com<strong>en</strong>zar a <strong>en</strong>viar datos antes o <strong>de</strong>spués que un <strong>de</strong>stino se una al grupo, y <strong>de</strong> esta<br />

manera la fase dos podría suce<strong>de</strong>r antes <strong>de</strong> que el árbol compartido hacia los <strong>de</strong>stinos sea<br />

construido.<br />

Fase tres, Árbol <strong>de</strong> Camino más Corto (Shortest‐Path Tree): Aun cuando se ha<br />

removido el overhead <strong>de</strong> <strong>en</strong>capsulación, esto no significa que las rutas elegidas sean<br />

optimas. Para muchos <strong>de</strong>stinos, la ruta a través <strong>de</strong>l RP podría significar un <strong>de</strong>svío<br />

significativo comparado con el camino más corto <strong>de</strong> la fu<strong>en</strong>te a tal <strong>de</strong>stino. Para obt<strong>en</strong>er<br />

baja lat<strong>en</strong>cia, un router sobre una LAN <strong>de</strong> un <strong>de</strong>stino, típicam<strong>en</strong>te el DR, podría<br />

opcionalm<strong>en</strong>te iniciar la transfer<strong>en</strong>cia <strong>de</strong>l árbol compartido a un árbol <strong>de</strong> fu<strong>en</strong>te<br />

específica, <strong>de</strong> camino más corto (SPT). Al hacer esto, él <strong>en</strong>vía un (S, G) Join hacia S. Este<br />

m<strong>en</strong>saje instancia la situación <strong>en</strong> los routers a lo largo <strong>de</strong>l camino a S. Cuando el m<strong>en</strong>saje<br />

<strong>de</strong> unión alcanza la subred <strong>de</strong> S o algún router que ya ti<strong>en</strong>e la información <strong>de</strong>l estado <strong>de</strong><br />

(S, G), los paquetes <strong>de</strong> datos <strong>de</strong> S comi<strong>en</strong>zan a fluir sigui<strong>en</strong>do el las rutas <strong>de</strong>l árbol <strong>de</strong> (S,<br />

G) hasta alcanzar los <strong>de</strong>stinos. En este instante los <strong>de</strong>stinos (o un router camino a los<br />

<strong>de</strong>stinos) estarán recibi<strong>en</strong>do dos copias <strong>de</strong> datos, una <strong>de</strong>s<strong>de</strong> el SPT y otra <strong>de</strong>s<strong>de</strong> el RPT.<br />

Cuando el primer tráfico comi<strong>en</strong>za a llegar <strong>de</strong>l SPT, el DR o router <strong>en</strong> el camino<br />

(upstream) comi<strong>en</strong>za a <strong>de</strong>scartar los paquetes para G <strong>de</strong>s<strong>de</strong> S que llegan vía el árbol RP.<br />

A<strong>de</strong>más, él <strong>en</strong>vía un (S, G) Prune message (m<strong>en</strong>saje <strong>de</strong> poda (S, G)) hacia el RP. Esto se<br />

conoce como (S, G, rpt) Prune. El m<strong>en</strong>saje <strong>de</strong> poda viaja salto a salto, instanciando el<br />

estado a lo largo <strong>de</strong>l camino hacia el RP indicando que el tráfico <strong>de</strong> S para G no <strong>de</strong>bería<br />

ser <strong>en</strong>viado por este camino. El m<strong>en</strong>saje <strong>de</strong> poda es propagado hasta que alcanza al RP o<br />

a un router que requiera el tráfico <strong>de</strong> S para otros <strong>de</strong>stinos. Por ahora, los <strong>de</strong>stinos<br />

estarán recibi<strong>en</strong>do tráfico <strong>de</strong> S a través <strong>de</strong>l árbol <strong>de</strong> camino más corto <strong>en</strong>tre los <strong>de</strong>stinos y<br />

S. A<strong>de</strong>más, el RP estará recibi<strong>en</strong>do el tráfico <strong>de</strong> S, pero tal tráfico ya no estará alcanzando<br />

a los <strong>de</strong>stinos a través <strong>de</strong>l árbol RP. Para los <strong>de</strong>stinos, el árbol <strong>de</strong> camino más corto es el<br />

árbol <strong>de</strong> distribución final.<br />

26


4.1.5 BGMP [32]<br />

Bor<strong>de</strong>r Gateway Multicast Protocol (BGMP) es un protocolo que permite realizar<br />

ruteami<strong>en</strong>to <strong>en</strong>tre dominios. BGMP construye árboles compartidos para grupos multicast<br />

activos, y opcionalm<strong>en</strong>te permite a dominios <strong>de</strong>stino construir ramas <strong>de</strong> fu<strong>en</strong>te específica<br />

distribuidas <strong>en</strong>tre dominios si es necesario.<br />

Este protocolo sugiere que los árboles multicast construidos bajo una política <strong>de</strong> árbol<br />

compartido, ti<strong>en</strong><strong>en</strong> un mejor comportami<strong>en</strong>to cuando utilizan algún mecanismo que<br />

opera con un repres<strong>en</strong>tante <strong>de</strong>l grupo, <strong>en</strong> don<strong>de</strong> los miembros recib<strong>en</strong> los paquetes <strong>de</strong><br />

datos <strong>de</strong>s<strong>de</strong> las fu<strong>en</strong>tes sin que exista una inundación global, tal como PIM‐DM y<br />

DVRMP que inicialm<strong>en</strong>te inundan la red con paquetes <strong>de</strong> datos, o MOSPF que inunda la<br />

red con información <strong>de</strong> membresía <strong>de</strong>l grupo.<br />

PIM‐SM y CBT usan árboles compartidos, <strong>en</strong> don<strong>de</strong> todos los miembros <strong>de</strong>l grupo<br />

recib<strong>en</strong> noticias <strong>de</strong> todas las fu<strong>en</strong>tes, pero los nodos que no son miembros no ti<strong>en</strong><strong>en</strong><br />

información acerca <strong>de</strong> las fu<strong>en</strong>tes. Los árboles que construye BGMP sigu<strong>en</strong> el concepto<br />

<strong>de</strong> construcción <strong>de</strong> PIM‐SM y CBT (árbol compartido). BGMP requiere que cada grupo<br />

multicast global sea asociado con una sola raíz o repres<strong>en</strong>tante <strong>de</strong>l dominio, más que un<br />

solo router, para construir los árboles compartidos <strong>en</strong>tre dominios. BGMP asume que un<br />

<strong>de</strong>terminado rango <strong>de</strong>l espacio <strong>de</strong> direcciones ha sido asociado a un cierto grupo <strong>de</strong><br />

dominios seleccionados. Así, cada dominio t<strong>en</strong>drá un repres<strong>en</strong>tante (o raíz) <strong>en</strong> el árbol<br />

compartido (<strong>en</strong>tre dominios). En la Fig. 4 el dominio raíz correspon<strong>de</strong> al dominio D. La<br />

figura muestra como BGMP implem<strong>en</strong>ta multicast <strong>en</strong>tre seis sistemas autónomos. El<br />

grupo multicast exist<strong>en</strong>te consiste <strong>de</strong> las fu<strong>en</strong>tes S1 y S2 <strong>en</strong> los dominios B y A<br />

respectivam<strong>en</strong>te, más los <strong>de</strong>stinos R1, R2 y R3. El dominio B es el dominio raíz <strong>de</strong>l grupo<br />

multicast, y el árbol compartido (<strong>en</strong> línea continua bidireccional) es creado a partir <strong>de</strong> él.<br />

Puesto que el dominio C no ti<strong>en</strong>e nodos pert<strong>en</strong>eci<strong>en</strong>tes al grupo, este no es incluido <strong>en</strong> el<br />

árbol compartido. Se <strong>de</strong>be notar que los paquetes g<strong>en</strong>erados <strong>en</strong> el dominio B atraviesan<br />

el dominio F para alcanzar a los dominios A y E. Los paquetes originados <strong>en</strong> la fu<strong>en</strong>te S2<br />

<strong>en</strong> el dominio A alcanzan al <strong>de</strong>stino R3 <strong>en</strong> el dominio E vía el router bor<strong>de</strong> <strong>en</strong> el dominio<br />

F. Como los router bor<strong>de</strong>s <strong>en</strong> el dominio A y E están directam<strong>en</strong>te conectados, el <strong>de</strong>stino<br />

R3 pue<strong>de</strong> establecer una rama <strong>de</strong> fu<strong>en</strong>te específica (<strong>en</strong> línea segm<strong>en</strong>tada) a partir <strong>de</strong>l<br />

camino más corto <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te S2 al él. El <strong>de</strong>stino R3 podrá recibir paquetes <strong>de</strong>s<strong>de</strong> la<br />

fu<strong>en</strong>te S2 por la rama <strong>de</strong> fu<strong>en</strong>te específica, y <strong>de</strong>s<strong>de</strong> otras fu<strong>en</strong>tes a través <strong>de</strong>l árbol<br />

compartido.<br />

27


Fig. 4 Ejemplo que muestra el árbol compartido y rama <strong>de</strong> fu<strong>en</strong>te específica que el protocolo BGMP pue<strong>de</strong><br />

construir <strong>en</strong>tre sistemas autónomos, los cuales pue<strong>de</strong>n estar utilizando algún otro protocolo multicast al interior<br />

<strong>de</strong> ellos.<br />

Los protocolos antes <strong>de</strong>scritos son protocolos que operan <strong>en</strong> la capa <strong>de</strong> red, <strong>en</strong> cambio<br />

BGMP es un protocolo que opera <strong>en</strong> la capa <strong>de</strong> aplicación, y utiliza TCP (Transport<br />

Control Protocol) como protocolo <strong>de</strong> capa <strong>de</strong> transporte. Esta situación elimina la<br />

necesidad <strong>de</strong> implem<strong>en</strong>tar m<strong>en</strong>sajes <strong>de</strong> fragm<strong>en</strong>tación, retransmisión, acuses <strong>de</strong> recibo y<br />

secu<strong>en</strong>ciación. BGMP usa el puerto 264 <strong>de</strong> TCP para establecer las conexiones. Cada<br />

conexión TCP intercambia m<strong>en</strong>sajes para abrir y confirmar los parámetros <strong>de</strong> la conexión.<br />

Entonces, se <strong>en</strong>vían increm<strong>en</strong>talm<strong>en</strong>te actualizaciones <strong>de</strong> Join/Prune según los cambios<br />

<strong>en</strong> la membresía <strong>de</strong>l grupo. BGMP no requiere refrescar periódicam<strong>en</strong>te las <strong>en</strong>tradas<br />

individuales. Exist<strong>en</strong> m<strong>en</strong>sajes <strong>de</strong> expiración que son <strong>en</strong>viados periódicam<strong>en</strong>te para<br />

asegurar la subsist<strong>en</strong>cia <strong>de</strong> una conexión. También exist<strong>en</strong> m<strong>en</strong>sajes <strong>de</strong> notificación que<br />

son <strong>en</strong>viados <strong>en</strong> respuesta a errores o condiciones especiales. Si una conexión <strong>en</strong>cu<strong>en</strong>tra<br />

una condición <strong>de</strong> error, un m<strong>en</strong>saje <strong>de</strong> notificación es <strong>en</strong>viado y la conexión se cierra si se<br />

trata <strong>de</strong> un error con status <strong>de</strong> “fatal”.<br />

28


A continuación se m<strong>en</strong>cionan tres algoritmos que son utilizados por protocolos <strong>de</strong><br />

ruteami<strong>en</strong>to.<br />

4.1.6 Algoritmo RPF<br />

El algoritmo RPF, reverse path forwarding fue propuesto <strong>en</strong> [33] y usa la técnica <strong>de</strong><br />

inundar la red. Cada paquete es <strong>en</strong>viado <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a los <strong>de</strong>stinos sobre el camino<br />

más corto inverso (<strong>de</strong> <strong>de</strong>stino a fu<strong>en</strong>te). RPF pue<strong>de</strong> crear un árbol <strong>de</strong> camino más corto<br />

sólo <strong>en</strong> re<strong>de</strong>s simétricas.<br />

Dos ext<strong>en</strong>siones <strong>de</strong> RPF, el algoritmo TRPB (Truncated Reverse Path Broadcasting) y<br />

RPM (Reverse Multicast Path) son propuestas <strong>en</strong> [7]. RPF, TRPB y RPM son algoritmos<br />

distribuidos que se basan <strong>en</strong> información limitada <strong>de</strong> los nodos <strong>en</strong> la red, y ti<strong>en</strong><strong>en</strong><br />

implem<strong>en</strong>taciones que permit<strong>en</strong> operar con grupos dinámicos. Las características <strong>de</strong><br />

estos algoritmos les permit<strong>en</strong> ser soluciones escalables, aunque <strong>en</strong> muchos casos no sean<br />

efici<strong>en</strong>tes. Las características <strong>de</strong> escalabilidad <strong>en</strong> una algoritmo resultan (<strong>en</strong> la práctica)<br />

ser una factor <strong>de</strong>terminante para su futura implem<strong>en</strong>tación.<br />

4.1.7 Algoritmo Dijkstra<br />

Dijkstra es un algoritmo bastante conocido <strong>en</strong> el ámbito <strong>de</strong> los algoritmos que<br />

construy<strong>en</strong> árboles <strong>de</strong> fu<strong>en</strong>te específica y camino más corto. El protocolo PIM‐DM se<br />

basa <strong>en</strong> este algoritmo para <strong>en</strong>contrar el camino más corto <strong>de</strong>s<strong>de</strong> un <strong>de</strong>stino al RP. La<br />

estructura <strong>de</strong>l árbol resultante es un árbol <strong>de</strong> mínima expansión que alcanza a todos los<br />

nodos <strong>de</strong> la red, y se ejecuta <strong>en</strong> tiempo polinomial. Una implem<strong>en</strong>tación simple <strong>de</strong> este<br />

algoritmo se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> [12].<br />

4.1.8 Algoritmo Bellman‐Ford<br />

El algoritmo Bellman‐Ford, al igual que el algoritmo Dijkstra es un algoritmo bastante<br />

conocido <strong>en</strong> el ámbito <strong>de</strong> los algoritmos que construy<strong>en</strong> árboles <strong>de</strong> camino más corto y<br />

fu<strong>en</strong>te específica.<br />

El protocolo DVMRP basa sus tablas <strong>de</strong> ruteami<strong>en</strong>to <strong>en</strong> la tablas <strong>de</strong>l protocolo <strong>de</strong><br />

ruteami<strong>en</strong>to unicast RIP, las cuales son construidas a partir <strong>de</strong>l algoritmo Bellman‐ Ford.<br />

La difer<strong>en</strong>cia <strong>de</strong> este algoritmo con Dijkstra, es que consi<strong>de</strong>ra pesos negativos y<br />

positivos para los <strong>en</strong>laces <strong>de</strong>l grafo que repres<strong>en</strong>ta la red. Una implem<strong>en</strong>tación simple <strong>de</strong><br />

este algoritmo se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> [12].<br />

29


4.2 <strong>Algoritmos</strong> <strong>de</strong> <strong>Ruteami<strong>en</strong>to</strong> aparecidos <strong>en</strong> la Literatura<br />

En la sección 3.4 se m<strong>en</strong>cionaron diversos problemas asociados a la construcción <strong>de</strong>l<br />

árbol <strong>de</strong> distribución para un grupo multipunto. En la literatura han aparecido diversas<br />

propuestas que mediante heurísticas int<strong>en</strong>tan resolver el problema <strong>de</strong> minimizar el costo<br />

total <strong>de</strong>l árbol, con o sin restricciones. Esta sección, a difer<strong>en</strong>cia <strong>de</strong> la anterior que<br />

pres<strong>en</strong>ta protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast, <strong>de</strong>scribe algunos <strong>de</strong> los algoritmos <strong>de</strong><br />

ruteami<strong>en</strong>to multipunto propuestos <strong>en</strong> la literatura.<br />

4.2.1 KMB [35]<br />

Este algoritmo es una heurística que utiliza como función objetivo minimizar el costo<br />

<strong>de</strong>l árbol multicast, sin tomar <strong>en</strong> cu<strong>en</strong>ta alguna restricción. KMB se aprovecha <strong>de</strong>l hecho<br />

que la construcción <strong>de</strong> un árbol <strong>de</strong> expansión mínima se realiza <strong>en</strong> tiempo polinomial.<br />

Sea G = (V, E) el grafo que repres<strong>en</strong>ta la red. Sea M el conjunto <strong>de</strong> nodos <strong>de</strong>stino. El<br />

algoritmo opera bajo cinco pasos fundam<strong>en</strong>tales:<br />

1. Usando los nodos <strong>de</strong>l grupo multicast, se construye un grafo cerrado no dirigido G1,<br />

tal que para cada par <strong>de</strong> nodos (u, v) pert<strong>en</strong>eci<strong>en</strong>tes al grupo multicast M, G1 t<strong>en</strong>ga un<br />

camino P(u, v) tal que su costo sea igual al costo <strong>de</strong>l camino más corto <strong>en</strong>tre u y v <strong>en</strong><br />

G.<br />

2. Se <strong>en</strong>cu<strong>en</strong>tra el árbol <strong>de</strong> mínima expansión T1 <strong>de</strong>l grafo cerrado G1. (Si hay más <strong>de</strong><br />

uno se selecciona cualquiera).<br />

3. Se construye un grafo G2 que reemplaza cada <strong>en</strong>lace <strong>de</strong> T1 por el correspondi<strong>en</strong>te<br />

camino más corto <strong>en</strong> G. (si hay más <strong>de</strong> un camino más corto se elige alguno<br />

arbitrariam<strong>en</strong>te).<br />

4. Se <strong>en</strong>cu<strong>en</strong>tra el árbol <strong>de</strong> mínima expansión T2 <strong>de</strong>l grafo G2. (Si hay más <strong>de</strong> uno se<br />

selecciona cualquiera).<br />

5. Se construye el árbol <strong>de</strong> Steiner Tm, borrando <strong>en</strong>laces <strong>en</strong> T2, tal que las hojas <strong>de</strong> Tm<br />

alcanc<strong>en</strong> a todos los <strong>de</strong>stinos <strong>de</strong>l grupo M.<br />

La Fig. 5 ejemplifica las iteraciones <strong>de</strong> KMB. El grupo correspon<strong>de</strong> a M = {1, 2, 3, 4}. En<br />

Fig. 5a se muestra al grafo G que repres<strong>en</strong>ta la red. En Fig. 5b se muestra al grafo G1. En<br />

Fig. 5c se muestra árbol <strong>de</strong> mínima expansión T1 <strong>de</strong>l grafo G1. En Fig. 5d se muestra el<br />

grafo G2. En Fig. 5e se observa el correspondi<strong>en</strong>te árbol <strong>de</strong> mínima expansión T2 <strong>de</strong>l<br />

grafo G2. Finalm<strong>en</strong>te <strong>en</strong> la Fig. 5e se muestra el árbol resultante Tm.<br />

(a) Grafo que repres<strong>en</strong>ta la red<br />

30


(b) Grafo G1 (c) Árbol T1 <strong>de</strong> G1<br />

(d) Grafo G2 <strong>de</strong> G (e) Árbol T2 <strong>de</strong> G2<br />

(f) Árbol Tm<br />

Fig. 5 Ejemplo Pasos Algoritmo KMB<br />

31


4.2.2 BC [36]<br />

BC (Best Contribution) es una familia <strong>de</strong> heurísticas don<strong>de</strong> cada una <strong>de</strong> ellas utiliza<br />

distintas funciones objetivo. La metodología para construir árboles <strong>de</strong> distribución es la<br />

misma para todas las heurísticas <strong>en</strong> la familia y no son consi<strong>de</strong>radas restricciones.<br />

BC se basa <strong>en</strong> la i<strong>de</strong>a <strong>de</strong> que cada <strong>en</strong>lace <strong>en</strong> el árbol <strong>de</strong> distribución es un <strong>en</strong>lace que<br />

fue agregado porque <strong>en</strong> algún mom<strong>en</strong>to ofreció la mejor contribución para acercar a<br />

todos los miembros <strong>de</strong>l grupo simultáneam<strong>en</strong>te. BC opera bajo tres pasos<br />

fundam<strong>en</strong>tales:<br />

1. Inicialm<strong>en</strong>te se escoge <strong>en</strong> forma aleatoria algún miembro <strong>de</strong>l grupo, el cual<br />

constituye el árbol parcial inicial, que se va expandi<strong>en</strong>do hacia los <strong>de</strong>más miembros<br />

<strong>de</strong>l grupo.<br />

2. Se elige el <strong>en</strong>lace frontera <strong>de</strong>l árbol parcial que mejor contribuya a acercar a todos<br />

los miembros <strong>de</strong>l grupo que aun no forman parte <strong>de</strong>l árbol parcial. El <strong>en</strong>lace que<br />

mejor contribuye es aquel que maximiza (o minimiza) una función objetivo<br />

escogida. Si exist<strong>en</strong> dos o más <strong>en</strong>laces con la misma contribución se elige<br />

cualquiera. Nunca es elegido un <strong>en</strong>lace que conecta a un nodo que ya está <strong>en</strong> el<br />

árbol. Esta operación se repite hasta que todos los miembros <strong>de</strong>l grupo forman<br />

parte <strong>de</strong>l árbol <strong>de</strong> distribución.<br />

3. Finalm<strong>en</strong>te, <strong>en</strong> caso que el árbol <strong>de</strong> distribución posea algunas hojas que no son<br />

miembros <strong>de</strong>l grupo, <strong>en</strong>tonces éstas son podadas <strong>de</strong>l árbol.<br />

Sea G = (V, E) el grafo que repres<strong>en</strong>ta la red, M el conjunto <strong>de</strong> nodos <strong>de</strong>stino, T el árbol<br />

parcial que conecta uno o más miembros <strong>de</strong>l grupo, B el conjunto <strong>de</strong> <strong>en</strong>laces (u, v) tal que<br />

u ∈ T y v ∉ T, con B ⊆ E. A los <strong>en</strong>laces pert<strong>en</strong>eci<strong>en</strong>tes a B se les llama <strong>en</strong>laces frontera. Se<br />

<strong>de</strong>nominan nodos frontera los nodos conectados a un <strong>en</strong>lace frontera, pero que no están <strong>en</strong><br />

T.<br />

Sea O el conjunto <strong>de</strong> miembros aún no conectados a T y c(b) la contribución <strong>de</strong>l <strong>en</strong>lace b<br />

∈ B para conectar un nodo o ∈ O a T, <strong>en</strong>tonces:<br />

∑<br />

o∈O<br />

1<br />

c(<br />

b)<br />

= ,<br />

f ( b,<br />

o)<br />

don<strong>de</strong> f(b, o) es alguna función que correspon<strong>de</strong> al costo <strong>de</strong>l camino <strong>de</strong>s<strong>de</strong> T a O que<br />

comi<strong>en</strong>za <strong>en</strong> el <strong>en</strong>lace frontera b y termina conectando al nodo o ∈ O. El costo c(b) pue<strong>de</strong><br />

cont<strong>en</strong>er difer<strong>en</strong>tes métricas (suma <strong>de</strong> los anchos <strong>de</strong> banda <strong>de</strong>l camino, retardos <strong>de</strong> fu<strong>en</strong>te<br />

a <strong>de</strong>stinos, cantidad <strong>de</strong> saltos <strong>de</strong>l camino, etc.). Cada término <strong>de</strong> la suma, 1/f(b, o),<br />

correspon<strong>de</strong> a la contribución que el <strong>en</strong>lace b aporta para acercar el nodo o ∈ O a T.<br />

Si b* ∈ B es el <strong>en</strong>lace que es usado para expandir el árbol <strong>de</strong> distribución parcial,<br />

<strong>en</strong>tonces b* cumple la condición:<br />

c(<br />

b*)<br />

=<br />

max{<br />

c(<br />

b)}<br />

b∈B<br />

32


A modo <strong>de</strong> ejemplo, tres funciones f(b, o) son <strong>de</strong>scritas a continuación:<br />

f1(b, o) = 1 + d(adj(b), o), don<strong>de</strong> adj(b) es un nodo frontera que se contecta a T por medio<br />

<strong>de</strong> un <strong>en</strong>lace fontera b ∈ B. La distancia d(adj(b), o) es medida por el número <strong>de</strong> saltos <strong>en</strong><br />

el camino más corto que comi<strong>en</strong>za <strong>en</strong> el nodo frontera adj(b) y termina <strong>en</strong> el nodo o ∈ O.<br />

f2(b, o) = BW(adj(b),o), don<strong>de</strong> BW(adj(b), o) es la suma <strong>de</strong> los anchos <strong>de</strong> banda que están<br />

si<strong>en</strong>do utilizados <strong>en</strong> cada <strong>en</strong>lace que conforma el camino <strong>de</strong>s<strong>de</strong> el nodo adj(b) hasta el<br />

nodo o ∈ O.<br />

f3(b, o) = (1 + d(adj(b), o))⋅BW(adj(b)), don<strong>de</strong> BW(adj(b)) es el ancho <strong>de</strong> banda que está<br />

si<strong>en</strong>do utilizado por el <strong>en</strong>lace frontera b que conecta un nodo <strong>de</strong> T al nodo adj(b).<br />

Las heurísticas que utilizan funciones objetivo como f1(b, o) o f3(b, o), sólo requier<strong>en</strong><br />

información local para operar (utilizan como base las tablas <strong>de</strong> ruteami<strong>en</strong>to <strong>de</strong> algún<br />

protocolo unicast activo <strong>en</strong> la red), sin embargo si una heurística utiliza a f2(b, o) como su<br />

función objetivo, ésta requiere <strong>de</strong> información global para la operación, correspondi<strong>en</strong>te<br />

al ancho <strong>de</strong> banda utilizado <strong>en</strong> todos los <strong>en</strong>laces <strong>de</strong> la red. El mant<strong>en</strong>imi<strong>en</strong>to <strong>de</strong> esta<br />

información no sólo utiliza memoria <strong>en</strong> los routers <strong>en</strong> la red, si no que también carga los<br />

<strong>en</strong>laces al realizar las actualizaciones <strong>de</strong> información. A su vez, el manejar información<br />

global <strong>de</strong> la red, permite a la heurística tomar <strong>de</strong>cisiones que pue<strong>de</strong>n ser más cercanas a<br />

la obt<strong>en</strong>ción <strong>de</strong> un árbol <strong>de</strong> mínimo costo. En consecu<strong>en</strong>cia, la elección <strong>de</strong> la función <strong>de</strong><br />

contribución será un compromiso <strong>en</strong>tre el <strong>de</strong>sempeño que logre el algoritmo y el manejo<br />

que éste efectúe <strong>de</strong> la información.<br />

Para ejemplificar la secu<strong>en</strong>cia <strong>de</strong> iteraciones que realiza BC, se consi<strong>de</strong>ra como ejemplo<br />

la red (grafo) <strong>de</strong> la Fig. 1. La Fig. 6 muestra como la heurística BC con f1(b, o)<br />

correspondi<strong>en</strong>te a 1 + d(adj(b), o) construye el árbol <strong>de</strong> distribución <strong>de</strong>s<strong>de</strong> A hacia los<br />

<strong>de</strong>stinos F, J y G agregando un <strong>en</strong>lace al árbol parcial <strong>en</strong> cada iteración. Así por ejemplo,<br />

para el <strong>en</strong>lace b1 <strong>de</strong>finido como el <strong>en</strong>lace que conecta los nodos A y B, se ti<strong>en</strong>e que f1(b1, F)<br />

= 2, f1(b1, G) = 3, f1(b1, J) = 4, y por lo tanto:<br />

c ( b )<br />

1<br />

= ∑<br />

o∈O<br />

1<br />

=<br />

f ( b , o)<br />

Análogam<strong>en</strong>te para b2 = (A, D), b3 = (A, C) se ti<strong>en</strong>e que:<br />

1<br />

1<br />

1<br />

2<br />

33<br />

+<br />

1<br />

3<br />

+<br />

1<br />

4<br />

=<br />

1.<br />

083<br />

1 1 1 1<br />

c ( b2<br />

)<br />

= + + = 0.<br />

999 ,<br />

f ( b , o)<br />

3 3 3<br />

c ( b<br />

= ∑<br />

o∈O<br />

1<br />

2<br />

1<br />

=<br />

f ( b , o)<br />

3 ) = ∑<br />

o∈O<br />

1 3<br />

+ + = 1.<br />

083<br />

En consecu<strong>en</strong>cia, cualquiera <strong>de</strong> los <strong>en</strong>laces b1 y b3 pue<strong>de</strong> ser elegido como el <strong>en</strong>lace que<br />

ofrece la mejor contribución para expandir el árbol parcial (<strong>en</strong> la primera iteración) que<br />

conti<strong>en</strong>e solam<strong>en</strong>te al nodo A, <strong>de</strong>bido a que c ( b1)<br />

= c(<br />

b3)<br />

. Suponi<strong>en</strong>do que se elige el<br />

<strong>en</strong>lace b1, la Fig. 6, (a), (b), (c), (d) y (e), ilustran las <strong>de</strong>cisiones que toma el algoritmo<br />

sucesivam<strong>en</strong>te hasta g<strong>en</strong>erar completam<strong>en</strong>te el árbol <strong>de</strong> distribución.<br />

1<br />

2<br />

1<br />

3<br />

1<br />

4


(a) (b)<br />

(c) (d)<br />

Fig. 6 Iteraciones Heurística BC con una función <strong>de</strong> contribución que consi<strong>de</strong>ra una métrica <strong>de</strong> saltos<br />

34<br />

(e)


4.2.2.1 Simplificación Heurística BC<br />

La ejecución <strong>de</strong> BC <strong>en</strong> condiciones don<strong>de</strong> la red es <strong>de</strong> gran tamaño y el grupo multicast<br />

es relativam<strong>en</strong>te pequeño y disperso <strong>en</strong> la red, ti<strong>en</strong><strong>de</strong> a realizar muchas más iteraciones<br />

que <strong>en</strong> el caso <strong>de</strong> grupos <strong>de</strong>nsos y re<strong>de</strong>s <strong>de</strong> tamaño m<strong>en</strong>or. Esto se <strong>de</strong>be a que <strong>en</strong> cada<br />

iteración se evalúa la contribución <strong>de</strong> todos los nodos frontera al árbol parcial para<br />

acercar a <strong>de</strong>stinos que aun no son parte <strong>de</strong>l árbol <strong>de</strong> distribución. Con el fin <strong>de</strong> disminuir<br />

la cantidad <strong>de</strong> información que se procesa para ejecutar BC, se realizó una simplificación<br />

que consiste <strong>en</strong> evaluar sólo la contribución <strong>de</strong> los nodos frontera al último nodo<br />

agregado al árbol parcial, <strong>en</strong> el caso <strong>de</strong> que éste no sea un <strong>de</strong>stino. Si el último nodo<br />

agregado al árbol parcial es un <strong>de</strong>stino, <strong>en</strong>tonces se evalúa la contribución <strong>de</strong> todos los<br />

nodos frontera al árbol parcial, tal como BC opera <strong>en</strong> cada una <strong>de</strong> sus iteraciones. Se<br />

<strong>de</strong>be notar que la simplificación recién <strong>de</strong>scrita no requiere efectuar el tercer paso <strong>de</strong> la<br />

operación <strong>de</strong> BC.<br />

Esta simplificación se fundam<strong>en</strong>ta <strong>en</strong> que cuando se ha elegido agregar un cierto<br />

<strong>en</strong>lace frontera que conecta a un <strong>de</strong>terminado nodo, es bastante probable que el <strong>en</strong>lace<br />

que se agregará <strong>en</strong> la próxima iteración emane <strong>de</strong>s<strong>de</strong> el nodo recién agregado. Esto es así<br />

<strong>de</strong>bido a que el algoritmo evalúa una función objetivo ʺglobalʺ, que consi<strong>de</strong>ra acercarse a<br />

todos los <strong>de</strong>stinos aun no agregados al árbol parcial, por lo tanto, si se ha elegido agregar<br />

un cierto nodo, <strong>en</strong> la sigui<strong>en</strong>te iteración la contribución <strong>de</strong> los <strong>en</strong>laces que son adyac<strong>en</strong>tes<br />

a él, t<strong>en</strong>drán una contribución aun mayor que el <strong>en</strong>lace recién agregado pues se está más<br />

cerca <strong>de</strong>l objetivo global (acercar a todos los <strong>de</strong>stinos el árbol <strong>de</strong> distribución parcial).<br />

Intuitivam<strong>en</strong>te la simplificación que da orig<strong>en</strong> a BCL acelerará el proceso <strong>de</strong><br />

g<strong>en</strong>eración <strong>de</strong>l árbol <strong>de</strong> distribución final, dado que cada <strong>de</strong>stino es agregado <strong>en</strong> un<br />

m<strong>en</strong>or tiempo <strong>de</strong>bido a que las iteraciones <strong>de</strong> la heurística disminuy<strong>en</strong>. Por ejmplo, el<br />

número <strong>de</strong> iteraciones que la heurística BCL ejecuta para construir el árbol <strong>de</strong><br />

distribución final <strong>de</strong> la Fig. 6 es 31, a difer<strong>en</strong>cia <strong>de</strong> las 37 que ejecuta BC. A<strong>de</strong>más, ambas<br />

heurísticas obti<strong>en</strong><strong>en</strong> el mismo árbol final. Se espera que para grupos dispersos y re<strong>de</strong>s<br />

amplias la reducción <strong>en</strong> las iteraciones sea mucho más drástica.<br />

La Fig. 7 muestra el pseudocódigo <strong>de</strong> la heurística BC, y la Fig. 8<br />

Fig. 8 muestra el pseudocódigo <strong>de</strong> la heurística recién <strong>de</strong>scrita, a la que se ha<br />

<strong>de</strong>nominado Best Contribution Light (BCL).<br />

35


Pseudocódigo Huerística BC<br />

INPUT<br />

G(V, E) : Grafo que repres<strong>en</strong>ta la red<br />

s : nodo fu<strong>en</strong>te<br />

M : conjunto <strong>de</strong> nodos <strong>de</strong>stino<br />

Tj : Árbol parcial <strong>en</strong> la iteración j.<br />

Adyij : nodo adyac<strong>en</strong>te al ni(Tj).<br />

ni(Tj): nodo i pert<strong>en</strong>eci<strong>en</strong>te a Tj. Note que i pue<strong>de</strong> tomar valores <strong>en</strong>tre 0 y el número total <strong>de</strong> nodos <strong>en</strong> Tj.<br />

Tf : Árbol <strong>de</strong> distribución final: correspondi<strong>en</strong>te a Tj <strong>en</strong> la última iteración <strong>de</strong>l algoritmo <strong>de</strong>spués <strong>de</strong><br />

aplicar la PODA.<br />

Contr(Adyij) : Contribución <strong>de</strong> Adyij<br />

ElMejor : Nodo conectado a través <strong>de</strong>l <strong>en</strong>lace frontera con la mayor contribución <strong>en</strong> la iteración j<br />

MayorContr : Valor <strong>de</strong> la contribución <strong>de</strong> ElMejor<br />

Max : Contribución <strong>de</strong> un nodo Adyij cuando es inalcanzable <strong>de</strong>s<strong>de</strong> ni(Tj), (por saturación <strong>de</strong> <strong>en</strong>laces por<br />

ejemplo).<br />

FUNCIONES<br />

EVALCONTRIBUCION : Función que evalúa la contribución <strong>de</strong> un nodo según la HEURISTICA que <strong>de</strong>fina a BC.<br />

(HEURISTICA <strong>de</strong>fine la función f.o. que se utilizará para acercarse a un árbol <strong>de</strong> Steiner que minimice el objetivo)<br />

PODA : Función que poda las hojas <strong>de</strong>l árbol parcial <strong>en</strong> la última iteración. Su objetivo es eliminar aquellos nodos ʺhojaʺ que<br />

no son <strong>de</strong>stinos.<br />

OUTPUT<br />

Árbol <strong>de</strong> Distribución que alcanza a todos los nodos <strong>en</strong> M y a la fu<strong>en</strong>te (Tf)<br />

BC<br />

j ← 0;<br />

T0 ← s;<br />

MayorContr ← 0;<br />

AllDest ← 0;<br />

Termino = False;<br />

while (Termino = False ) {<br />

do {<br />

while (Adyij ≠ NULL) {<br />

if (Adyij ∈ Tj) th<strong>en</strong><br />

i++;<br />

<strong>en</strong>d if<br />

else<br />

Contr(Adyij) ← EVALCONTRIBUCION(Adyij);<br />

if (MayorContr


Pseudocódigo Huerística BCL<br />

INPUT<br />

G(V, E) : Grafo que repres<strong>en</strong>ta la red<br />

s : nodo fu<strong>en</strong>te<br />

M : conjunto <strong>de</strong> nodos <strong>de</strong>stino<br />

Tj : Árbol parcial <strong>en</strong> la iteración j.<br />

Adyij : nodo adyac<strong>en</strong>te al ni(Tj).<br />

ni(Tj): nodo i pert<strong>en</strong>eci<strong>en</strong>te a Tj. Note que i pue<strong>de</strong> tomar valores <strong>en</strong>tre 0 y el número total <strong>de</strong> nodos <strong>en</strong> Tj.<br />

Tf : Árbol <strong>de</strong> distribución final: correspondi<strong>en</strong>te a Tj <strong>en</strong> la última iteración <strong>de</strong>l algoritmo <strong>de</strong>spués <strong>de</strong><br />

aplicar la PODA.<br />

Contr(Adyij) : Contribución <strong>de</strong> Adyij<br />

ElMejor : Nodo conectado a través <strong>de</strong>l <strong>en</strong>lace frontera con la mayor contribución <strong>en</strong> la iteración j<br />

MayorContr : Valor <strong>de</strong> la contribución <strong>de</strong> ElMejor<br />

Max : Contribución <strong>de</strong> un nodo Adyij cuando es inalcanzable <strong>de</strong>s<strong>de</strong> ni(Tj), (por saturación <strong>de</strong> <strong>en</strong>laces por<br />

ejemplo).<br />

FUNCIONES<br />

EVALCONTRIBUCION : Función que evalúa la contribución <strong>de</strong> un nodo según la HEURISTICA que <strong>de</strong>fina a BC.<br />

(HEURISTICA <strong>de</strong>fine la función f.o. que se utilizará para acercarse a un árbol <strong>de</strong> Steiner que minimice el objetivo)<br />

OUTPUT<br />

Árbol <strong>de</strong> Distribución que alcanza a todos los nodos <strong>en</strong> M y a la fu<strong>en</strong>te (Tf)<br />

BCL<br />

j ← 0;<br />

T0 ← s;<br />

MayorContr ← 0;<br />

AllDest ← 0;<br />

Termino = False;<br />

DifBC = False;<br />

while (Termino = False ) {<br />

do {<br />

while (Adyij ≠ NULL) {<br />

if (Adyij ∈ Tj) th<strong>en</strong><br />

i++;<br />

<strong>en</strong>d if<br />

else<br />

Contr(Adyij) ← EVALCONTRIBUCION(Adyij);<br />

if (MayorContr


4.2.3 CDKS [37]<br />

Este algoritmo es una heurística que utiliza como función objetivo minimizar el costo<br />

<strong>de</strong>l árbol multicast, tomando <strong>en</strong> cu<strong>en</strong>ta una restricción <strong>de</strong> retardo para los caminos <strong>de</strong><br />

fu<strong>en</strong>te a <strong>de</strong>stinos.<br />

Sea G = (V, E) el grafo que repres<strong>en</strong>ta la red, M el conjunto <strong>de</strong> nodos <strong>de</strong>stino, ∆ el límite<br />

<strong>de</strong> retardo para los caminos <strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino. El algoritmo opera bajo tres pasos<br />

fundam<strong>en</strong>tales:<br />

1. Se int<strong>en</strong>ta computar un árbol <strong>de</strong> bajo costo T1 = (V1, E1) con raíz <strong>en</strong> la fu<strong>en</strong>te vs y que<br />

se expanda a todos los nodos <strong>de</strong>stinos pert<strong>en</strong>eci<strong>en</strong>tes a M usando el algoritmo<br />

Dijkstra <strong>de</strong> camino más corto y respetando el límite ∆ para el retardo <strong>de</strong> los<br />

caminos.<br />

2. Se computa el árbol basado <strong>en</strong> la fu<strong>en</strong>te con camino <strong>de</strong> m<strong>en</strong>or retardo T2 = (V2, E2)<br />

que se expan<strong>de</strong> a aquellos nodos <strong>de</strong>stino <strong>en</strong> M que no están <strong>en</strong> V1 (usando el<br />

algoritmo Dijkstra <strong>de</strong> camino más corto basado <strong>en</strong> la métrica <strong>de</strong> retardo).<br />

3. Se combinan T1 y T2 para construir el árbol multicast final que incluye todos los<br />

miembros <strong>de</strong>l grupo. Se <strong>de</strong>be notar que podrían aparecer ciclos al combinar T1 y<br />

T2. Esto ocurre porque T2 podría ser incluido <strong>en</strong> el árbol final, y algunos <strong>de</strong> los<br />

<strong>en</strong>laces <strong>en</strong> T1 podrían ser removidos cuando los ocurr<strong>en</strong> los ciclos. Los ciclos<br />

pue<strong>de</strong>n <strong>de</strong>tectarse fácilm<strong>en</strong>te chequeando si T1 y T2 conti<strong>en</strong><strong>en</strong> algún nodo <strong>en</strong><br />

común.<br />

La Fig. 9 muestra la operación el algoritmo mediante los pasos recién <strong>de</strong>scritos.<br />

4.2.4 CAO [38]<br />

CAO (Constrained Adaptive Or<strong>de</strong>ring) es una <strong>de</strong> las heurísticas (la <strong>de</strong> mejor<br />

r<strong>en</strong>dimi<strong>en</strong>to) propuestas <strong>en</strong> [38]. CAO es siempre capaz <strong>de</strong> construir un árbol <strong>de</strong> Steiner<br />

restringido, si es que este existe, ya que el algoritmo realiza una búsqueda exhaustiva.<br />

CAO utiliza como base el algoritmo CMIC (Constrained Minimum Increm<strong>en</strong>tal Cost),<br />

también propuesto <strong>en</strong> [38]. El algoritmo CMIC utiliza la estrategia <strong>de</strong> costo cero <strong>de</strong> la<br />

heurística MIC (Minimum Increm<strong>en</strong>tal Cost) [38].<br />

La heurística MIC toma v<strong>en</strong>taja <strong>de</strong>l hecho que el costo <strong>de</strong> un <strong>en</strong>lace pert<strong>en</strong>eci<strong>en</strong>te a<br />

varios caminos dirigidos a diversos <strong>de</strong>stinos es compartido (se contabiliza una sola vez).<br />

Cuando un <strong>en</strong>lace <strong>de</strong> este tipo es elegido para ser parte <strong>de</strong>l árbol, el costo que este <strong>en</strong>lace<br />

ti<strong>en</strong>e para los sigui<strong>en</strong>tes cálculos será consi<strong>de</strong>rado cero. Para minimizar el impacto <strong>de</strong>l<br />

costo <strong>de</strong> alcanzar un <strong>de</strong>stino no conectado al árbol, el algoritmo <strong>de</strong>bería <strong>en</strong>contrar un<br />

camino <strong>de</strong> mínimo costo increm<strong>en</strong>tal para que un <strong>de</strong>stino no conectado alcance el árbol.<br />

Esto se hace eligi<strong>en</strong>do el camino <strong>de</strong> m<strong>en</strong>or costo <strong>en</strong>tre el <strong>de</strong>stino y todos los nodos<br />

exist<strong>en</strong>tes <strong>en</strong> el árbol parcial.<br />

En CMIC, se ejecuta CBF (Constrained Bellman Ford) [38] para cada <strong>de</strong>stino es un<br />

or<strong>de</strong>n arbitrario. Después <strong>de</strong> cada ejecución el costo <strong>de</strong>l camino resultante es establecido<br />

a cero para el resto <strong>de</strong> los <strong>de</strong>stinos. El algoritmo CBF <strong>en</strong>cu<strong>en</strong>tra caminos in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tes<br />

<strong>de</strong> mínimo costo <strong>en</strong>tre la fu<strong>en</strong>te y un grupo <strong>de</strong> nodos <strong>de</strong>stinos, don<strong>de</strong> cada <strong>de</strong>stino<br />

establece una cierta restricción <strong>de</strong> retardo. CBF utiliza una búsqueda por cercanía<br />

(breadth‐first search), <strong>en</strong>contrando los caminos a partir <strong>de</strong> increm<strong>en</strong>tar monotónicam<strong>en</strong>te<br />

el retardo, mi<strong>en</strong>tras se registra y actualiza el camino <strong>de</strong> m<strong>en</strong>or costo a cada nodo visitado.<br />

CMIC termina cada iteración con CBF cuando se exce<strong>de</strong> la mayor restricción.<br />

38


(a) Grafo que repres<strong>en</strong>ta la red<br />

(b) Paso 1<br />

(c) Paso 2<br />

(d) Paso 3<br />

Fig. 9 Ejemplo para visualizar la operación <strong>de</strong>l algoritmo CDKS.<br />

39


4.2.5 BSMA [39]<br />

BSMA (Boun<strong>de</strong>d Shortest Multicast Algorithm) es una heurística que utiliza como<br />

función objetivo minimizar el costo <strong>de</strong>l árbol multicast, tomando <strong>en</strong> cu<strong>en</strong>ta una<br />

restricción <strong>de</strong> retardo para los caminos <strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stinos.<br />

Sea G = (V, E) el grafo que repres<strong>en</strong>ta la red, M el conjunto <strong>de</strong> nodos <strong>de</strong>stino y δi la<br />

restricción <strong>de</strong> retardo asociada a cada camino <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino. Note que si δi ti<strong>en</strong>e<br />

el mismo valor para todos los <strong>de</strong>stinos, <strong>en</strong>tonces δi = ∆, ∀ i ∈ M.<br />

BSMA opera bajo los sigui<strong>en</strong>tes tres pasos fundam<strong>en</strong>tales:<br />

1. Se construye un árbol inicial T0 basado <strong>en</strong> la fu<strong>en</strong>te con camino <strong>de</strong> m<strong>en</strong>or retardo a<br />

cada uno <strong>de</strong> los nodos <strong>en</strong> M, utilizando el algoritmo Dijkstra.<br />

2. Se evalúa si cada uno <strong>de</strong> los caminos <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino computados <strong>en</strong> (1)<br />

cumple la restricción <strong>de</strong> retardo impuesta.<br />

3. Si uno o más caminos no cumpl<strong>en</strong> las restricciones, se negocia con los <strong>de</strong>stinos un<br />

alza <strong>en</strong> la restricción. Si todas las restricciones son cumplidas, T0 es refinado<br />

iterativam<strong>en</strong>te para construir un árbol <strong>de</strong> bajo costo, sin violar las restricciones <strong>de</strong><br />

retardo.<br />

El árbol obt<strong>en</strong>ido <strong>en</strong> cada refinami<strong>en</strong>to <strong>en</strong> (3) es llamado árbol <strong>de</strong> configuración y el j‐<br />

ésimo árbol <strong>de</strong> configuración se <strong>de</strong>nota por Tj. El refinami<strong>en</strong>to <strong>de</strong> Tj a Tj+1 (don<strong>de</strong><br />

inicialm<strong>en</strong>te j = 0) es llevada a cabo por una operación llamada “<strong>de</strong>lay‐boun<strong>de</strong>d path<br />

switching” (cambio <strong>de</strong> camino limitado <strong>en</strong> retardo).<br />

La Fig. 10 muestra la red utilizada como ejemplo para <strong>de</strong>scribir la operación <strong>de</strong> las<br />

iteraciones que BSMA realiza para disminuir el costo <strong>de</strong>l árbol T0. La Fig. 11 ilustra las<br />

iteraciones llevadas a cabo por la operación “<strong>de</strong>lay‐boun<strong>de</strong>d path switching”.<br />

Fig. 10 Red utilizada como ejemplo <strong>de</strong> visualización <strong>de</strong> las iteraciones <strong>de</strong> BSMA<br />

40


(a)<br />

(b)<br />

Fig. 11 Refinami<strong>en</strong>to <strong>de</strong> los caminos Fu<strong>en</strong>te a Destinos condicionado al límite <strong>de</strong> retardo. (a) Árbol <strong>de</strong> camino<br />

<strong>de</strong> m<strong>en</strong>or retardo (T0). Remoción <strong>de</strong>l camino fu<strong>en</strong>te‐<strong>de</strong>stino <strong>de</strong> mayor costo 〈s, d, c〉 <strong>de</strong>s<strong>de</strong> T0. (b) Remoción <strong>de</strong>l<br />

camino fu<strong>en</strong>te‐<strong>de</strong>stino s c . T0 es particionado <strong>en</strong> dos árboles disjuntos 1<br />

T y 2<br />

0 T . (c) Se agrega el camino fu<strong>en</strong>te‐<br />

0<br />

<strong>de</strong>stino f c . Se reconecta 1<br />

T y 2<br />

0 T a través <strong>de</strong>l camino más corto 〈f, a, c〉 y <strong>en</strong>tre los dos árboles se obti<strong>en</strong>e T1.<br />

0<br />

41


4.2.6 KPP [14]<br />

KPP es una heurística que utiliza como función objetivo minimizar el costo <strong>de</strong>l árbol<br />

multicast, tomando <strong>en</strong> cu<strong>en</strong>ta una restricción <strong>de</strong> retardo para los caminos <strong>de</strong> fu<strong>en</strong>te a<br />

<strong>de</strong>stinos. KPP asume que la restricción <strong>de</strong> retardo toma un valor <strong>en</strong>tero, mi<strong>en</strong>tras que el<br />

costo <strong>de</strong> un <strong>en</strong>lace pue<strong>de</strong> tomar valores reales.<br />

Sea el camino más barato restringido (constrained cheapest path) <strong>en</strong>tre el nodo u y v, el<br />

camino <strong>de</strong> m<strong>en</strong>or costo <strong>de</strong>s<strong>de</strong> u a v, tal que el retardo sea m<strong>en</strong>or que δ(u,v) (restricción). Sea<br />

G’ un grafo <strong>en</strong> G = (V, E), tal que G’ cubre todos los nodos <strong>en</strong> V y los <strong>en</strong>laces son <strong>de</strong>l tipo<br />

constrained cheapest path.<br />

Dada una fu<strong>en</strong>te s y un conjunto <strong>de</strong> nodos <strong>de</strong>stinos M, KPP ejecuta fundam<strong>en</strong>talm<strong>en</strong>te<br />

los sigui<strong>en</strong>tes tres pasos:<br />

1. Se construye un grafo cerrado G’ sobre {vs} ∪ M, restringido <strong>en</strong> retardo.<br />

2. Usando el algoritmo Prim [15] se obti<strong>en</strong>e el árbol <strong>de</strong> expansión mínima <strong>de</strong>l grafo<br />

cerrado G’. Com<strong>en</strong>zando con el nodo fu<strong>en</strong>te vs, el árbol es increm<strong>en</strong>tado<br />

expandiéndose, agregando un <strong>en</strong>lace a la vez, hasta que todos los <strong>de</strong>stinos estén<br />

incluidos. El <strong>en</strong>lace seleccionado <strong>en</strong> cada iteración cumple con: (a) conectar a un<br />

nodo que esta <strong>en</strong> el árbol con uno que está fuera <strong>de</strong> él. (b) no viola la restricción <strong>de</strong><br />

retardo. (c) minimiza una cierta función objetivo.<br />

3. Se reemplazan los <strong>en</strong>laces <strong>en</strong> el árbol <strong>de</strong> expansión mínima con los caminos <strong>de</strong>l<br />

grafo original.<br />

KPP propone dos funciones objetivo: una <strong>de</strong> costo <strong>de</strong> <strong>en</strong>lace (fC) y otra que <strong>en</strong>cu<strong>en</strong>tra<br />

un compromiso <strong>en</strong>tre minimización <strong>de</strong> retardo y costo (fCD). KPP ti<strong>en</strong>e una versión<br />

c<strong>en</strong>tralizada y otra distribuida.<br />

Las funciones fC y fCD se muestra a continuación:<br />

f CD<br />

⎧ C(<br />

v,<br />

w)<br />

⎪<br />

( v,<br />

w)<br />

= ⎨∆<br />

− ( P(<br />

v)<br />

+ D(<br />

v,<br />

w))<br />

⎪<br />

⎩ ∞<br />

⎧C(<br />

v,<br />

w)<br />

fC ( v,<br />

w)<br />

= ⎨<br />

⎩ ∞<br />

don<strong>de</strong><br />

C(v,w) : Costo <strong>de</strong>l <strong>en</strong>lace (v,w)<br />

P(v) : Retardo <strong>de</strong>l camino <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a v<br />

D(v,w) : Retardo <strong>de</strong>s<strong>de</strong> el nodo v al nodo w<br />

∆ : Restricción <strong>de</strong> retardo<br />

si P(v) + D(v,w) < ∆<br />

<strong>en</strong> cualquier otro caso<br />

si P(v) + D(v,w) < ∆<br />

<strong>en</strong> cualquier otro caso<br />

La Fig. 12 muestra la red utilizada como ejemplo para ilustrar la operación <strong>de</strong>l<br />

algoritmo KPP con ambas funciones objetivo y el árbol <strong>de</strong> Steiner asociado al grupo<br />

multicast conformado por los nodos A, B, D, E y H, más la fu<strong>en</strong>te F. Las Fig. 13 y Fig. 14<br />

muestran las sucesivas iteraciones para <strong>en</strong>contrar el árbol final, con ambas funciones<br />

objetivo: fC y fCD.<br />

42


Fig. 12 Red <strong>de</strong> ejemplo para ilustrar la operación <strong>de</strong> KPP y el árbol <strong>de</strong> Steiner asociado al grupo multicast<br />

Fig. 13 Grafo cerrado G’, las sucesivas iteraciones y el árbol final <strong>en</strong>contrado utilizando la función objetivo fC.<br />

43


Fig. 14 Sucesivas iteraciones y el árbol final <strong>en</strong>contrado utilizando la función objetivo fCD<br />

44


4.2.7 QDMR [40]<br />

Esta heurística utiliza como función objetivo minimizar el costo <strong>de</strong>l árbol multicast,<br />

tomando <strong>en</strong> cu<strong>en</strong>ta una restricción <strong>de</strong> retardo para los caminos <strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stinos.<br />

QDMR (QoS Dep<strong>en</strong><strong>de</strong>nt Multicast Routing) se basa <strong>en</strong> otra heurística llamada DDMC<br />

(Destination‐Driv<strong>en</strong> Multicasting) [42] que g<strong>en</strong>era árboles multicast <strong>de</strong> bajo costo, pero<br />

que no cumpl<strong>en</strong> alguna restricción. La i<strong>de</strong>a básica <strong>de</strong> DDMC es dar prioridad a los<br />

caminos <strong>de</strong> bajo costo que van a través <strong>de</strong> un <strong>de</strong>stino que ya está <strong>en</strong> el árbol, con el fin <strong>de</strong><br />

alcanzan un <strong>de</strong>stino aun no agregado. De esta manera, los árboles resultantes utilizando<br />

la heurística DDMC ti<strong>en</strong><strong>en</strong> el aspecto <strong>de</strong> largas ca<strong>de</strong>nas que incluy<strong>en</strong> a los nodos<br />

miembros <strong>de</strong>l grupo. En términos <strong>de</strong> efici<strong>en</strong>cia multicast (3.4.7) está heurística ti<strong>en</strong>e bu<strong>en</strong><br />

<strong>de</strong>sempeño, dado que int<strong>en</strong>ta utilizar los mismos caminos para conectar la mayor<br />

cantidad <strong>de</strong> <strong>de</strong>stino, sin embargo <strong>en</strong> términos <strong>de</strong> retardo (fu<strong>en</strong>te a <strong>de</strong>stino) pue<strong>de</strong> t<strong>en</strong>er<br />

bastantes dificulta<strong>de</strong>s. QDMR int<strong>en</strong>ta corregir la dificultad <strong>de</strong> retardo <strong>de</strong> DDMC, <strong>en</strong><br />

<strong>de</strong>smedro <strong>de</strong> la efici<strong>en</strong>cia multicast. La función <strong>de</strong> costo que DDMC utiliza para evaluar<br />

si agrega al árbol un cierto nodo está dada por:<br />

Costo[ v]<br />

= I D ( u)<br />

Costo[<br />

u]<br />

+ C(<br />

u,<br />

v)<br />

, don<strong>de</strong> C(u,v) es el costo <strong>de</strong>l camino <strong>de</strong>s<strong>de</strong> u a v, y<br />

don<strong>de</strong> la función indicadora ID(u): V → {0,1} está <strong>de</strong>finida como:<br />

⎧0<br />

si u ∈ D<br />

I D (u)<br />

= ⎨<br />

(ID(u) para DDMC)<br />

⎩1<br />

<strong>en</strong> cualquier otro caso<br />

QDMR ajusta dinámicam<strong>en</strong>te la política <strong>de</strong> construcción <strong>de</strong> árbol <strong>de</strong> DDMC, <strong>de</strong><br />

acuerdo a qué tan lejos se <strong>en</strong>cu<strong>en</strong>tre un nodo <strong>de</strong>stino <strong>de</strong> superar el límite <strong>de</strong> retardo.<br />

QDMR actúa como DDMC cuando no hay problemas <strong>de</strong> retardo, <strong>en</strong> cambio cuando se<br />

superan los límites impuestos por las restricciones, QDMR construirá un árbol <strong>de</strong> ʺmayor<br />

forestaʺ (más ramificado) con tal <strong>de</strong> cumplir con las restricciones. La función <strong>de</strong> costo<br />

que QDMR utiliza para evaluar si agrega al árbol un cierto nodo está dada por:<br />

Costo[ v]<br />

= I D ( u)<br />

Costo[<br />

u]<br />

+ C(<br />

u,<br />

v)<br />

, don<strong>de</strong> C(u,v) es el costo <strong>de</strong>l camino <strong>de</strong>s<strong>de</strong> u a v, ∆ es<br />

la restricción <strong>de</strong> retardo <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino, y la función indicadora ID(u): V → {0,1}<br />

está <strong>de</strong>finida como:<br />

⎧Delay( u)<br />

/ ∆ si u ∈ D<br />

I D ( u)<br />

= ⎨<br />

(ID(u) para QDMR)<br />

⎩ 1 <strong>en</strong> cualquier otro caso<br />

Debido a que QDMR está utilizando una estrategia “oportunista” (greedy) con el fin <strong>de</strong><br />

minimizar el costo <strong>de</strong>l árbol, éste podría fallar <strong>en</strong> <strong>en</strong>contrar un camino que cumpla las<br />

restricciones <strong>de</strong> retardo aplicando el indicador ID(u) <strong>de</strong>finido arriba. Por ello, QDMR<br />

consi<strong>de</strong>ra una fase <strong>de</strong> adhesión (merge fase) posterior, la cual intercambia los caminos<br />

que han superado el límite <strong>de</strong> retardo por caminos <strong>de</strong> m<strong>en</strong>or retardo fu<strong>en</strong>te a algún nodo<br />

<strong>en</strong> el árbol parcial (<strong>en</strong> el peor caso el camino reemplazante es un camino <strong>de</strong> m<strong>en</strong>or<br />

retardo <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino). Finalm<strong>en</strong>te QDMR incluye una fase <strong>de</strong> podado (prune<br />

fase) que elimina las ramas que no alcanzan a ningún <strong>de</strong>stino (producto <strong>de</strong> la fase <strong>de</strong><br />

adhesión).<br />

La Fig. 15 muestra un ejemplo <strong>de</strong>l árbol que g<strong>en</strong>eraría QDMR respecto al que<br />

g<strong>en</strong>eraría DDMC. A<strong>de</strong>más se muestra el árbol <strong>de</strong> mínimo retardo (LDT).<br />

45


Fig. 15 Ejemplo que muestra la difer<strong>en</strong>cia <strong>en</strong>tre DMMC y QDMR: (a) Ejemplo <strong>de</strong> red y Árbol DDMC; (b) Árbol<br />

<strong>de</strong> m<strong>en</strong>or Retardo (LDT); (c) Árbol DDMC + LDP (Least Delay Path); (d) Árbol QDMR.<br />

46


RESUMEN<br />

En la Tabla 2 se muestra a modo <strong>de</strong> resum<strong>en</strong>, una clasificación según la taxonomía<br />

propuesta <strong>en</strong> 2, que muestra para qué están mejor diseñados los algoritmos vistos <strong>en</strong> 4.2<br />

y los protocolos vistos <strong>en</strong> 4.1.<br />

Características <strong>de</strong>l<br />

Grupo<br />

DVMRP D<strong>en</strong>so, Dinámico,<br />

Local<br />

MOSPF D<strong>en</strong>so, Dinámico,<br />

Global<br />

Tabla 2: <strong>Algoritmos</strong> y Protocolos <strong>de</strong> ruteami<strong>en</strong>to Multicast.<br />

Estructura <strong>de</strong> las Rutas Construcción <strong>de</strong> las<br />

Rutas<br />

Árbol <strong>de</strong> fu<strong>en</strong>te específica Árbol <strong>de</strong> Camino más<br />

corto<br />

Árbol <strong>de</strong> fu<strong>en</strong>te específica Árbol <strong>de</strong> Camino más<br />

corto<br />

CBT Dinámico, Local Árbol compartido Árbol <strong>de</strong> Camino más<br />

corto<br />

PIM‐DM D<strong>en</strong>so, Dinámico,<br />

Local<br />

PIM‐SM Esparcido, Dinámico,<br />

Local<br />

BGMP Esparcido, Dinámico,<br />

Local<br />

Árbol <strong>de</strong> fu<strong>en</strong>te específica Árbol <strong>de</strong> Camino más<br />

corto<br />

Árbol compartido/ Árbol<br />

<strong>de</strong> fu<strong>en</strong>te específica<br />

Árbol compartido/ ramas<br />

<strong>de</strong> fu<strong>en</strong>te específica<br />

KMB D<strong>en</strong>so, Global Árbol <strong>de</strong> fu<strong>en</strong>te<br />

Específica<br />

CDKS D<strong>en</strong>so, Dinámico,<br />

Global<br />

Árbol <strong>de</strong> fu<strong>en</strong>te<br />

Específica<br />

CAO D<strong>en</strong>so, Global Árbol <strong>de</strong> fu<strong>en</strong>te<br />

Específica<br />

BSMA D<strong>en</strong>so, Dinámico Árbol <strong>de</strong> fu<strong>en</strong>te<br />

Específica<br />

KPP D<strong>en</strong>so Árbol <strong>de</strong> Fu<strong>en</strong>te<br />

Específica<br />

QDMR D<strong>en</strong>so Árbol <strong>de</strong> fu<strong>en</strong>te<br />

Específica<br />

BC Esparcido, Dinámico,<br />

Local/Global<br />

Árbol <strong>de</strong> fu<strong>en</strong>te<br />

Específica / Árbol<br />

compartido<br />

47<br />

Árbol <strong>de</strong> Camino más<br />

corto<br />

Árbol <strong>de</strong> Camino más<br />

corto<br />

Árbol <strong>de</strong> Steiner sin<br />

Restricciones<br />

Árbol <strong>de</strong> Camino más<br />

corto con Restricciones<br />

Árbol <strong>de</strong> Steiner con<br />

Restricciones<br />

Árbol <strong>de</strong> Steiner con<br />

Restricciones<br />

Árbol <strong>de</strong> Steiner con<br />

Restricciones<br />

Árbol <strong>de</strong> Steiner con<br />

Restricciones<br />

Árbol <strong>de</strong> Steiner sin<br />

Restricciones<br />

Manejo <strong>de</strong> la<br />

Información<br />

Distribuido<br />

Global / Distribuido<br />

Local / Distribuido<br />

Distribuido<br />

Local / Distribuido<br />

Local / Distribuido<br />

Local / C<strong>en</strong>tralizado<br />

Global / C<strong>en</strong>tralizado<br />

Global / C<strong>en</strong>tralizado<br />

Global / C<strong>en</strong>tralizado<br />

Local / C<strong>en</strong>tralizado y<br />

Distribuido<br />

Global / C<strong>en</strong>tralizado<br />

Global / C<strong>en</strong>tralizado


E<br />

5 Métodos <strong>de</strong> Comparación <strong>de</strong> <strong>Algoritmos</strong><br />

xist<strong>en</strong> tres maneras fundam<strong>en</strong>tales <strong>de</strong> evaluar el r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> un algoritmo:<br />

analíticam<strong>en</strong>te, por simulación y experim<strong>en</strong>talm<strong>en</strong>te (monitoreo).<br />

La evaluación <strong>de</strong>l <strong>de</strong>sempeño <strong>de</strong> un algoritmo <strong>de</strong> ruteami<strong>en</strong>to multipunto requiere<br />

obt<strong>en</strong>er valores para las medidas que repres<strong>en</strong>tan la efici<strong>en</strong>cia con que éste opera. Las<br />

medidas <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to son diversas, sin embargo normalm<strong>en</strong>te se refier<strong>en</strong> al costo <strong>de</strong>l<br />

árbol y al retardo <strong>de</strong>s<strong>de</strong> la fu<strong>en</strong>te a los <strong>de</strong>stinos. Otras medidas <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong><br />

relevancia son por ejemplo:, la probabilidad <strong>de</strong> bloqueo (rechazo) <strong>de</strong> solicitu<strong>de</strong>s <strong>de</strong><br />

conexión, el número <strong>de</strong> conexiones exitosas fr<strong>en</strong>te a solicitu<strong>de</strong>s <strong>de</strong> conexión, el tiempo <strong>de</strong><br />

ejecución y la cantidad <strong>de</strong> memoria utilizada por el algoritmo (si<strong>en</strong>do estas últimas<br />

medidas relativas a la utilización <strong>de</strong> recursos computacionales), la efici<strong>en</strong>cia multicast<br />

sobre unicast (3.4.7), <strong>en</strong>tre otras.<br />

Las sigui<strong>en</strong>tes secciones <strong>de</strong>scrib<strong>en</strong> las tres maneras recién m<strong>en</strong>cionadas que permit<strong>en</strong><br />

evaluar algoritmos <strong>de</strong> ruteami<strong>en</strong>to multipunto.<br />

5.1 Analítica<br />

En la sección 3.1 se pres<strong>en</strong>tó un mo<strong>de</strong>lo clásico para repres<strong>en</strong>tar una red <strong>de</strong><br />

computadores. Éste se basa <strong>en</strong> un grafo conectado, don<strong>de</strong> los vértices <strong>de</strong> él repres<strong>en</strong>tan<br />

los nodos <strong>de</strong> la red, y los arcos repres<strong>en</strong>tan los <strong>en</strong>laces <strong>de</strong> la red. Sin mebargo, ¿existe<br />

algún otro mo<strong>de</strong>lo que repres<strong>en</strong>te la red, <strong>de</strong> tal forma que permita la utilizacíon <strong>de</strong><br />

herrami<strong>en</strong>tas matemáticas para comparar algoritmos <strong>de</strong> ruteami<strong>en</strong>to multicast?, ¿qué<br />

variables <strong>de</strong> la red son relevantes para la ejecución <strong>de</strong> un algoritmo <strong>de</strong> ruteami<strong>en</strong>to?.<br />

En el contexto <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to multicast, las variables que interesan <strong>de</strong> la<br />

red son básicam<strong>en</strong>te las que permit<strong>en</strong> <strong>de</strong>scribir la topología y utilización <strong>de</strong> los <strong>en</strong>laces <strong>en</strong><br />

función <strong>de</strong>l tiempo.<br />

Suponi<strong>en</strong>do que fuera posible capturar la información <strong>de</strong>l estado <strong>de</strong> la red (topología y<br />

utilización <strong>de</strong> los <strong>en</strong>laces) <strong>en</strong> un instante dado. Entonces, este estado ¿<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong>l<br />

estado anterior?. A<strong>de</strong>más, el permanecer <strong>en</strong> un <strong>de</strong>terminado estado, ¿<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> cuánto<br />

tiempo haya transcurrido?. Si la respuesta a estas dos últimas preguntas fuese<br />

afirmativa, <strong>en</strong>tonces la red y su dinámica (caracterizada por la operación <strong>de</strong> algún<br />

algoritmo <strong>de</strong> ruteami<strong>en</strong>to) podrían ser repres<strong>en</strong>tadas <strong>en</strong> una ca<strong>de</strong>na <strong>de</strong> Markov.<br />

Una ca<strong>de</strong>na <strong>de</strong> Markov es un proceso estocástico que <strong>de</strong>scribe el comportami<strong>en</strong>to<br />

probabilístico <strong>de</strong> un sistema conforme varía el parámetro tiempo. Las compon<strong>en</strong>tes<br />

fundam<strong>en</strong>tales <strong>de</strong> una ca<strong>de</strong>na <strong>de</strong> Markov son: el espacio <strong>de</strong> estados (posibles situaciones<br />

<strong>en</strong> las que se pue<strong>de</strong> <strong>en</strong>contrar el sistema), el parámetro (tiempo <strong>en</strong> este caso) y la<br />

dinámica <strong>de</strong>l sistema. La dinámica correspon<strong>de</strong> al conjunto <strong>de</strong> transiciones <strong>en</strong>tre estados<br />

<strong>de</strong> la ca<strong>de</strong>na.<br />

Si bi<strong>en</strong> es posible utilizar una ca<strong>de</strong>na <strong>de</strong> Markov como herrami<strong>en</strong>ta analítica <strong>de</strong><br />

comparación <strong>en</strong>tre algoritmos <strong>de</strong> ruteami<strong>en</strong>to, <strong>en</strong> la práctica, su utilización trae consigo<br />

dificulta<strong>de</strong>s tales como: se requiere manejar un gran número <strong>de</strong> estados, y por lo tanto<br />

una gran cantidad <strong>de</strong> recursos computacionales; se necesita conocer las tasas <strong>de</strong><br />

transición <strong>en</strong>tre estados, lo cual significa conocer la naturaleza probabilística <strong>de</strong> los<br />

48


cambios topológicos, <strong>de</strong>l tráfico, <strong>de</strong> los instantes <strong>de</strong> inicio y término <strong>de</strong> conexiones, etc.;<br />

a<strong>de</strong>más, se requiere saber interpretar la solución <strong>de</strong> la ca<strong>de</strong>na <strong>en</strong> términos <strong>de</strong> medidas <strong>de</strong><br />

r<strong>en</strong>dimi<strong>en</strong>to, propias <strong>de</strong> la evaluación <strong>de</strong> algoritmos.<br />

En [41] exist<strong>en</strong> estudios sobre la evaluación <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to multipunto<br />

mediante ca<strong>de</strong>nas <strong>de</strong> Markov.<br />

Hasta aquí se ha m<strong>en</strong>cionado sólo una alternativa para comparar (analíticam<strong>en</strong>te) el<br />

r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to. Sin embargo, cabe <strong>de</strong>stacar la exist<strong>en</strong>cia <strong>de</strong><br />

un concepto conocido como “time complexity function” (función <strong>de</strong> complejidad <strong>de</strong> un<br />

algoritmo) que permite conocer acerca <strong>de</strong> la factibilidad que un algoritmo ti<strong>en</strong>e para<br />

<strong>en</strong>cu<strong>en</strong>trar una solución a medida que el tamaño <strong>de</strong>l problema aum<strong>en</strong>ta. Algunos<br />

<strong>de</strong>talles acerca <strong>de</strong> la función <strong>de</strong> complejidad <strong>de</strong> un algoritmo se <strong>en</strong>cu<strong>en</strong>tran <strong>en</strong> el Anexo<br />

A.<br />

5.2 Simulación<br />

La simulación es una imitación <strong>de</strong> las operaciones que efectúa un sistema o proceso<br />

real, normalm<strong>en</strong>te sistemas complejos, e involucra la g<strong>en</strong>eración <strong>de</strong> una historia artificial<br />

<strong>de</strong>l comportami<strong>en</strong>to <strong>de</strong>l sistema. A partir <strong>de</strong> dicha historia se efectúan infer<strong>en</strong>cias<br />

relativas a las características operacionales <strong>de</strong>l sistema real que se está repres<strong>en</strong>tando.<br />

Se <strong>de</strong>be t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que los resultados obt<strong>en</strong>idos mediante simulación no son<br />

excatos y que el mo<strong>de</strong>lo creado para repres<strong>en</strong>tar la realidad <strong>de</strong>be ser validado.<br />

La simulación se pue<strong>de</strong> realizar consi<strong>de</strong>rando o no el tiempo <strong>en</strong> el mo<strong>de</strong>lo. Si el<br />

tiempo es consi<strong>de</strong>rado, la simulación será dinámica, si no los es, la simulación será<br />

estática. A su vez, se pue<strong>de</strong> consi<strong>de</strong>rar el tiempo como una variable continua o discreta.<br />

Adicionalm<strong>en</strong>te, la simulación será catalogada <strong>de</strong> estocástica o <strong>de</strong>terminista, si que existe<br />

o no incertidumbre <strong>en</strong> algunas variables <strong>de</strong>l mo<strong>de</strong>lo.<br />

El tipo <strong>de</strong> simulación requerida para realizar estudios sobre ruteami<strong>en</strong>to multipunto,<br />

consi<strong>de</strong>ra tiempo discreto y aleatoriedad <strong>en</strong> algunas <strong>de</strong> las variables <strong>de</strong>l mo<strong>de</strong>lo. Por<br />

ejemplo: tiempo <strong>en</strong>tre solicitu<strong>de</strong>s <strong>de</strong> conexión, cambios topológicos <strong>de</strong> la red, tráfico <strong>de</strong><br />

paquetes, etc. En consecu<strong>en</strong>cia, se pue<strong>de</strong> <strong>de</strong>cir que el tipo <strong>de</strong> simulación utilizada <strong>en</strong> este<br />

trabajoo es: dinámica, discreta y estocástica.<br />

Exist<strong>en</strong> variadas herrami<strong>en</strong>tas <strong>de</strong> simulación para el estudio <strong>de</strong> re<strong>de</strong>s <strong>de</strong><br />

computadores. La Tabla 4 m<strong>en</strong>ciona algunas <strong>de</strong> las herrami<strong>en</strong>tas disponibles<br />

actualm<strong>en</strong>te.<br />

La selección <strong>de</strong> la herrami<strong>en</strong>ta utilizada <strong>en</strong> este trabajo se efectuó a partir la oferta<br />

disponible gratuitam<strong>en</strong>te <strong>en</strong> Internet. En particular, las herrami<strong>en</strong>tas estudiadas fueron:<br />

Ns‐2 [49], Mars [50], OMNet++[51] y MCRSIM [59]. A partir <strong>de</strong> este estudio se g<strong>en</strong>eró<br />

una breve docum<strong>en</strong>tación sobre Ns‐2 (Anexo B) y acerca <strong>de</strong> la realización <strong>de</strong><br />

experim<strong>en</strong>tos <strong>de</strong> simulación involucrados <strong>en</strong> esta tesis, utilizando el simulador MCRSIM<br />

(Anexo D).<br />

La dim<strong>en</strong>sión (tamaño) <strong>de</strong> las variables involucradas <strong>en</strong> la simulación <strong>de</strong> algoritmos y<br />

protocolos <strong>de</strong> re<strong>de</strong>s <strong>de</strong> computadores es un elem<strong>en</strong>to clave para po<strong>de</strong>r obt<strong>en</strong>er resultados<br />

a gran escala. La Tabla 3 obt<strong>en</strong>ida <strong>de</strong> [47], muestra el efecto <strong>en</strong> el consumo <strong>de</strong> recursos<br />

computacionales <strong>en</strong> función <strong>de</strong>l increm<strong>en</strong>to <strong>de</strong> las dim<strong>en</strong>siones <strong>de</strong> las variables<br />

involucradas <strong>en</strong> el mo<strong>de</strong>lo <strong>de</strong> simulación.<br />

49


Tabla 3 Escalami<strong>en</strong>to dim<strong>en</strong>sional y su efecto <strong>en</strong> el consumo <strong>de</strong> recursos computacionales.<br />

Factor Clase Recurso Afectado Crecimi<strong>en</strong>to<br />

Nodo (N) Nodos, m<strong>en</strong>sajes <strong>de</strong> control, estados para el ruteami<strong>en</strong>to. O[N2] Topología<br />

Enlace (L) Enlaces, m<strong>en</strong>sajes <strong>de</strong> control, estados para el ruteami<strong>en</strong>to<br />

multicast y paquetes. 1<br />

O[L]<br />

Capacidad <strong>de</strong><br />

Enlaces (C)<br />

Paquetes sobre <strong>en</strong>laces O[C]<br />

Tamaño <strong>de</strong>l<br />

Buffer (B)<br />

Paquetes <strong>en</strong> las Colas O[B]<br />

Fu<strong>en</strong>te (S) Paquetes sobre <strong>en</strong>laces, estados <strong>de</strong> conexión y estados multicast O[S]<br />

Grupo (G) Paquetes sobre <strong>en</strong>laces, m<strong>en</strong>sajes <strong>de</strong> control y estados multicast O[G]<br />

Miembros (M) Paquetes sobre <strong>en</strong>laces, m<strong>en</strong>sajes <strong>de</strong> control, estados multicast2 Tráfico<br />

O[M]<br />

Tasa <strong>de</strong> Tx<br />

Datos (D)<br />

Paquetes sobre <strong>en</strong>laces. O[D]<br />

Según [47], los recursos totales consumidos (RT) para una simulación <strong>de</strong> re<strong>de</strong>s <strong>de</strong><br />

computadores pue<strong>de</strong>n ser expresados aproximadam<strong>en</strong>te como:<br />

RT = O[N 2 ] + O[L] + O[C] + O[B] + O[S⋅G⋅M⋅D]<br />

1 Pot<strong>en</strong>cialm<strong>en</strong>te los grupos multicast con la misma cantidad <strong>de</strong> miembros se expan<strong>de</strong>n <strong>en</strong> árboles más gran<strong>de</strong>s<br />

para topologías más gran<strong>de</strong>s.<br />

2 El overhead <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> la distribución <strong>de</strong> los miembros.<br />

50


Tabla 4 Algunas Herrami<strong>en</strong>tas <strong>de</strong> Simulación para Re<strong>de</strong>s <strong>de</strong> Computadores<br />

NOMBRE DEL<br />

SIMULADOR MODO CLASE ESCALA MÓDULOS DISPONIBLES<br />

NEST<br />

Secu<strong>en</strong>cial G<strong>en</strong>eral<br />

Multi –hilos, 100<br />

nodos<br />

REAL Secu<strong>en</strong>cial G<strong>en</strong>eral 100 nodos TCP, Telnet, ftp, routing, scheduling<br />

Ns‐2 (VINT<br />

Project) Secu<strong>en</strong>cial Emulación<br />

Abstracción, 50.000<br />

nodos sobre PC<br />

P<strong>en</strong>tium<br />

51<br />

Abundante Librería TCP, unicast routing, multicast transport,<br />

multicast, mecanismos <strong>de</strong> scheduling, y fu<strong>en</strong>tes <strong>de</strong> tráfico<br />

NIST Net Secu<strong>en</strong>cial Emulación Varias condiciones <strong>de</strong> Red (p.e. retardo y pérdida)<br />

Ns‐2 Emulation<br />

(Vint Project)<br />

OPNET<br />

Secu<strong>en</strong>cial Comercial Interfaces UDP y TCP <strong>en</strong>tre simulación y mundo real<br />

Secu<strong>en</strong>cial Comercial<br />

Abundantes librerías y soporte <strong>de</strong> Servicio. Pue<strong>de</strong>n ser pedidos<br />

a los proveedores más módulos o herrami<strong>en</strong>tas <strong>de</strong> <strong>de</strong>sarrollo<br />

COMNET III Secu<strong>en</strong>cial Comercial I<strong>de</strong>m OPNET<br />

BONes Secu<strong>en</strong>cial Comercial I<strong>de</strong>m OPNET<br />

MaRS<br />

PIMSIM<br />

MCRSIM<br />

QRS<br />

(Desarrollado<br />

sobre MaRS)<br />

QuoSar<br />

‐‐<br />

INSANE<br />

Secu<strong>en</strong>cial<br />

Secu<strong>en</strong>cial<br />

Secu<strong>en</strong>cial<br />

Secu<strong>en</strong>cial<br />

Secu<strong>en</strong>cial<br />

Secu<strong>en</strong>cial<br />

Secu<strong>en</strong>cial<br />

ATM Simulator Secu<strong>en</strong>cial<br />

TCP con<br />

PTOLEMY<br />

Secu<strong>en</strong>cial<br />

Dedicados<br />

(<strong>Ruteami<strong>en</strong>to</strong>)<br />

Dedicados<br />

(<strong>Ruteami<strong>en</strong>to</strong>)<br />

Dedicados<br />

(<strong>Ruteami<strong>en</strong>to</strong>)<br />

Dedicados<br />

(<strong>Ruteami<strong>en</strong>to</strong>)<br />

Dedicados<br />

(<strong>Ruteami<strong>en</strong>to</strong>)<br />

Dedicados<br />

(<strong>Ruteami<strong>en</strong>to</strong>)<br />

Dedicados<br />

(IP/ATM)<br />

Dedicados<br />

(IP/ATM)<br />

Dedicados<br />

(TCP)<br />

Ns‐2 (VINT<br />

Project) Abstracción Abstracción<br />

DistREAL Paralelo Paralelo<br />

&Distribuido &Distribuido<br />

Parsec (Maisie) Paralelo Paralelo<br />

&Distribuido &Distribuido<br />

S3 Paralelo Paralelo<br />

&Distribuido &Distribuido<br />

Ns‐2 (VINT<br />

Project &<br />

Georgia Tech)<br />

Paralelo<br />

&Distribuido<br />

Paralelo<br />

&Distribuido<br />

OO<br />

Híbrido Híbrido<br />

Abstraction<br />

50.000 nodos<br />

sobre PC P<strong>en</strong>tium<br />

Routing, Tel<strong>en</strong>et, ftp, fu<strong>en</strong>tes Poisson, y TCP simplificado<br />

‐‐<br />

PIM‐SM y PIM‐DM<br />

<strong>Ruteami<strong>en</strong>to</strong> Multicast, fu<strong>en</strong>tes <strong>de</strong> vi<strong>de</strong>o y voz<br />

QoS routing, QoS routing basado <strong>en</strong> re<strong>de</strong>s IP<br />

QoS Routing (sobre Windows NT)<br />

‐‐<br />

Transporte básico IP y mecanismos <strong>de</strong> scheduling, IP y capa <strong>de</strong><br />

<strong>en</strong>lace ATM, <strong>en</strong>colami<strong>en</strong>to y señalami<strong>en</strong>to ATM<br />

Switches ATM, host, aplicaciones, capa <strong>de</strong> <strong>en</strong>lace y<br />

ruteami<strong>en</strong>to <strong>de</strong> circuitos virtuales<br />

TCP<br />

Abundante Librería TCP, unicast routing, multicast transport,<br />

multicast, mecanismos <strong>de</strong> scheduling, y fu<strong>en</strong>tes <strong>de</strong> tráfico<br />

2000 nodos 3 TCP, Telnet, ftp, routing, scheduling<br />

100.000 nodos<br />

wireless 5<br />

Mo<strong>de</strong>lo analitico <strong>de</strong><br />

1024 nodos<br />

Wireless 4 , TCP<br />

ATM, multicast confiable, wireless, radio movil network, TCP<br />

Abundante Librería <strong>de</strong> protocolos unicast y Multicast y<br />

compon<strong>en</strong>tes <strong>de</strong> Red<br />

<strong>Ruteami<strong>en</strong>to</strong>, Mo<strong>de</strong>lo <strong>de</strong> filas <strong>de</strong>l tiempo <strong>de</strong> servicio (FIFO<br />

solam<strong>en</strong>te)<br />

3 Los <strong>de</strong>sarrolladores especulan que se pue<strong>de</strong>n realizar simulaciones con 2000 nodos sobre 20 Sun<br />

Workstations.<br />

4 La simulación <strong>de</strong> re<strong>de</strong>s Wireless es una <strong>de</strong> las mayores aplicaciones <strong>de</strong> Pársec.<br />

5 Los autores <strong>de</strong> S3 afirman que se pue<strong>de</strong>n efectuar simulaciones con 100.000 nodos sobre 1000 máquinas.


La simulación <strong>de</strong>l comportami<strong>en</strong>to <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to multicast requiere <strong>de</strong><br />

tres etapas fundam<strong>en</strong>tales: la g<strong>en</strong>eración <strong>de</strong> esc<strong>en</strong>arios (mo<strong>de</strong>lo) que sean lo más cercanos<br />

al sistema real <strong>en</strong> don<strong>de</strong> los algoritmos operan, la implem<strong>en</strong>tación <strong>de</strong> los algoritmos y la<br />

configuración <strong>de</strong> los experim<strong>en</strong>tos <strong>de</strong> simulación.<br />

5.2.1 G<strong>en</strong>eración <strong>de</strong> Esc<strong>en</strong>arios <strong>de</strong> Simulación<br />

Respecto <strong>de</strong> la g<strong>en</strong>eración <strong>de</strong> esc<strong>en</strong>arios <strong>de</strong> simulación, la literatura apunta a utilizar<br />

topologías aleatorias <strong>de</strong> Waxman [48] como topología <strong>de</strong> red para evaluar los algoritmos<br />

<strong>de</strong> ruteami<strong>en</strong>to. Un software bastante popular (Ns‐2 [49] ‐ Anexo B) utiliza el g<strong>en</strong>erador<br />

<strong>de</strong> topologías GT‐ITM [52], que incluye las topologías <strong>de</strong> Waxman. Sin embargo, algunos<br />

g<strong>en</strong>eradores <strong>de</strong> topologías ([53], [54]) int<strong>en</strong>tan g<strong>en</strong>erar esc<strong>en</strong>arios que se aproxim<strong>en</strong><br />

mayorm<strong>en</strong>te a re<strong>de</strong>s reales, consi<strong>de</strong>rando por ejemplo el hecho <strong>de</strong> la naturaleza<br />

jerárquica <strong>de</strong> Internet o la exist<strong>en</strong>cia <strong>de</strong> sistemas autónomos.<br />

En [48] se propon<strong>en</strong> dos mo<strong>de</strong>los <strong>de</strong> grafos aleatorios <strong>de</strong> Waxman. El método para la<br />

g<strong>en</strong>eración <strong>de</strong>l grafo se basa <strong>en</strong> g<strong>en</strong>erar distancias aleatorias <strong>en</strong>tre cada par <strong>de</strong> nodos. A<br />

partir <strong>de</strong> esa distancia se <strong>de</strong>fine, con una cierta probabilidad, la exist<strong>en</strong>cia <strong>de</strong> un <strong>en</strong>lace.<br />

Esto se realiza para cada par <strong>de</strong> nodos <strong>de</strong>l grafo. Los <strong>en</strong>laces resultantes con sus nodos<br />

respectivos conforman un grafo aleatorio <strong>de</strong> Waxman. La probabilidad <strong>de</strong> que un <strong>en</strong>lace<br />

exista <strong>en</strong>tre un par <strong>de</strong> nodos u y v está dada por:<br />

−d(<br />

u,<br />

v)<br />

β Lα<br />

P[(<br />

u,<br />

v)]<br />

= e , don<strong>de</strong> d(u,v) es la distancia <strong>en</strong>tre los nodos u y v, L es la máxima<br />

distancia posible <strong>en</strong>tre dos nodos, α y β son dos parámetros <strong>en</strong>tre 0 y 1, don<strong>de</strong> el<br />

aum<strong>en</strong>to <strong>de</strong> α indica un aum<strong>en</strong>to <strong>en</strong> la proporción <strong>de</strong> <strong>en</strong>laces largos sobre <strong>en</strong>laces cortos<br />

(<strong>en</strong> distancia), y un aum<strong>en</strong>to <strong>en</strong> β implica un aum<strong>en</strong>to <strong>en</strong> el grado6 <strong>de</strong> los nodos.<br />

Una problemática <strong>de</strong> los grafos <strong>de</strong> Waxman es que <strong>en</strong>tre los grafos resultantes se<br />

pue<strong>de</strong>n g<strong>en</strong>erar también grafos disconexos, a pesar <strong>de</strong> a<strong>de</strong>cuar sus parámetros. La<br />

segunda problemática es que <strong>en</strong>tre ellos se g<strong>en</strong>eran grafos con nodos terminales, o sea,<br />

nodos <strong>de</strong> grado uno. En caso <strong>de</strong> una falla <strong>en</strong> un <strong>en</strong>lace que conecta un nodo terminal, el<br />

nodo quedaría <strong>de</strong>sconectado <strong>de</strong>l resto <strong>de</strong> la red, lo que no repres<strong>en</strong>ta bi<strong>en</strong> la realidad, ya<br />

que <strong>en</strong> las re<strong>de</strong>s reales los nodos pres<strong>en</strong>tan al m<strong>en</strong>os dos <strong>en</strong>laces emanando <strong>de</strong> ellos,<br />

propiedad que se conoce como Two‐connected (2‐conectada). En [55] se muestra que el<br />

r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to multicast cuando estos son aplicados a re<strong>de</strong>s<br />

reales es idéntico al r<strong>en</strong>dimi<strong>en</strong>to cuando aquellos son aplicados a re<strong>de</strong>s 2‐conectadas.<br />

En el pres<strong>en</strong>te trabajo, la evaluación <strong>de</strong> algoritmos se realizó bajo topologías <strong>de</strong><br />

Waxman modificadas , don<strong>de</strong> los grafos resultantes son siempre re<strong>de</strong>s conexas, con<br />

grado mayor o igual a dos <strong>en</strong> cada nodo.<br />

5.2.2 Implem<strong>en</strong>tación <strong>de</strong> <strong>Algoritmos</strong><br />

La implem<strong>en</strong>tación <strong>de</strong> los algoritmos <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> varios factores, por ejemplo: quién<br />

los está implem<strong>en</strong>tando, <strong>en</strong> qué l<strong>en</strong>guaje, sobre qué máquina, etc. En este trabajo se<br />

utilizó una herrami<strong>en</strong>ta <strong>de</strong> simulación disponible <strong>en</strong> Internet que ya posee varios<br />

algoritmos implem<strong>en</strong>tados, sin embargo tuvieron que ser implem<strong>en</strong>tados algunos otros.<br />

Para más <strong>de</strong>talles ver 6.1.<br />

6 El grado <strong>de</strong> un nodo <strong>de</strong> un grafo simple es la cantidad <strong>de</strong> aristas o lados que concurr<strong>en</strong> a él.<br />

52


5.2.3 Configuración <strong>de</strong> los Experimi<strong>en</strong>tos <strong>de</strong> Simulación<br />

La configuración <strong>de</strong> los experim<strong>en</strong>tos <strong>de</strong> este trabajo se a<strong>de</strong>cuó para permitir la<br />

cuantificación <strong>de</strong> las medidas <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to escogidas para la comparación <strong>en</strong>tre<br />

algoritmos (6.3). Para ello se elegieron parámetros a<strong>de</strong>cuados para los esc<strong>en</strong>arios <strong>de</strong><br />

simulación. Esto es, ocupación <strong>de</strong> <strong>en</strong>laces <strong>de</strong> la red, cantidad <strong>de</strong> solicitu<strong>de</strong>s <strong>de</strong> conexión,<br />

cantidad <strong>de</strong> nodos <strong>en</strong> la red, grado <strong>de</strong> los nodos, límite <strong>de</strong> retardo permitido, etc.<br />

Una vez que configurados los experim<strong>en</strong>tos <strong>de</strong> simulación, estos son ejecutados. Pero,<br />

¿cuántos experim<strong>en</strong>tos ejecutar?. Si se ejecuta una sola vez el experim<strong>en</strong>to, no se t<strong>en</strong>drá<br />

certeza <strong>de</strong> la vali<strong>de</strong>z <strong>de</strong>l valor <strong>en</strong>contrado para la medida evaluada. Por otro lado, es<br />

imposible realizar infinitas veces el experim<strong>en</strong>to para consi<strong>de</strong>rar como válido algún valor<br />

promedio para la medida.<br />

Si se ti<strong>en</strong>e que las muestras <strong>de</strong>l experimi<strong>en</strong>to son estadísticam<strong>en</strong>te in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tes, y la<br />

distribución <strong>de</strong> la población <strong>de</strong> muestras es normalm<strong>en</strong>te distribuida con media µ y<br />

varianza σ 2, <strong>en</strong>tonces la expresión:<br />

θ − µ<br />

T =<br />

S n<br />

ˆ<br />

se distribuye con una t‐Stu<strong>de</strong>nt con n‐1 grados <strong>de</strong> libertad, don<strong>de</strong>:<br />

• θˆ n<br />

es el estimador <strong>de</strong> la media <strong>de</strong>l sistema simulado, <strong>de</strong>finido por: ˆ 1<br />

θ = ∑ Yi<br />

.<br />

n i=<br />

1<br />

• Yi es cada una <strong>de</strong> las observaciones <strong>de</strong> la muestra y θˆ es un estimador sin sesgo [63]<br />

E ˆ θ = µ<br />

cuando [ ] .<br />

• S2 es el estimador para la varianza σ2 n<br />

2 1<br />

y está dada por: S = ∑<br />

n − 1 i=<br />

1<br />

• µ es la media <strong>de</strong> la población <strong>de</strong> las muestras.<br />

• n es el número <strong>de</strong> observaciones.<br />

53<br />

2<br />

( Y − ˆ θ )<br />

La probabilidad <strong>de</strong> que la cantidad T se <strong>en</strong>cu<strong>en</strong>tre <strong>en</strong> el intervalo [‐t, t] es<br />

P −t ≤ T ≤ t = 1−<br />

. Desarrollando la <strong>de</strong>sigualdad al interior <strong>de</strong>l paréntesis se ti<strong>en</strong>e que:<br />

[ ] α<br />

⎡ S<br />

S ⎤<br />

1 −α<br />

= P ˆ<br />

⎢θ<br />

− t ≤ µ ≤ ˆ θ + t ⎥<br />

⎣ n<br />

n ⎦<br />

La expresión al interior <strong>de</strong>l paréntesis correspon<strong>de</strong> al intervalo <strong>de</strong> confianza para el<br />

promedio <strong>de</strong> la población <strong>de</strong> las muestras con una certeza o nivel <strong>de</strong> confianza <strong>de</strong> (1‐<br />

α)⋅100%.<br />

Entonces, si se quiere utilizar esta expresión para <strong>en</strong>contrar el promedio <strong>de</strong> una<br />

medida <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to para un algoritmo <strong>en</strong> una simulación, <strong>de</strong>ntro <strong>de</strong> un intervalo <strong>de</strong><br />

confianza dado y un <strong>de</strong>terminado nivel <strong>de</strong> confianza, <strong>en</strong>tonces se pue<strong>de</strong> implem<strong>en</strong>tar los<br />

sigui<strong>en</strong>tes pasos al configurar los experim<strong>en</strong>tos:<br />

n<br />

1. Calcular la media muestral <strong>de</strong>l sistema como ˆ<br />

1<br />

θ = ∑ Yi<br />

, <strong>en</strong> cada una <strong>de</strong> la n<br />

n i=<br />

1<br />

observaciones <strong>en</strong> el experim<strong>en</strong>to. Don<strong>de</strong> Yi es el valor <strong>de</strong> la medida <strong>en</strong> cada<br />

observación.<br />

i


2. Calcular la varianza a partir <strong>de</strong> la expresión:<br />

observación.<br />

54<br />

S<br />

2<br />

=<br />

n<br />

∑<br />

i=<br />

1<br />

( Y )<br />

i<br />

2<br />

ˆ2<br />

− n ⋅θ<br />

n − 1<br />

<strong>en</strong> cada<br />

3. Encontrar t <strong>en</strong> una tabla con la distribución t‐Stu<strong>de</strong>nt y reemplazar el valor<br />

numérico <strong>de</strong> t <strong>en</strong> la expresión para el intervalo <strong>de</strong> confianza <strong>de</strong>l paso 4.<br />

4. Calcular la expresión para el intervalo <strong>de</strong> confianza (IC) como: IC = θ ± t ⋅ S n<br />

)<br />

.<br />

El experim<strong>en</strong>to <strong>de</strong> simulación termina su ejecución al alcanzar el intervalo <strong>de</strong> confianza<br />

especificado para un <strong>de</strong>terminado nivel <strong>de</strong> confianza.<br />

5.3 Experim<strong>en</strong>tal<br />

Evaluar el r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> un algoritmo <strong>de</strong> ruteami<strong>en</strong>to <strong>en</strong> forma experim<strong>en</strong>tal<br />

requiere <strong>de</strong> alguna herrami<strong>en</strong>ta para monitorear su comportami<strong>en</strong>to <strong>en</strong> una red real<br />

(física). La red <strong>de</strong>l experim<strong>en</strong>to <strong>de</strong>be operar <strong>en</strong> la mayor cantidad <strong>de</strong> esc<strong>en</strong>arios posibles<br />

para reflejar ampliam<strong>en</strong>te la operación <strong>de</strong>l algoritmo (distintas ocupaciones <strong>de</strong> <strong>en</strong>laces,<br />

fallas <strong>de</strong> nodos o <strong>en</strong>laces, etc.).<br />

Algunos análisis <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to mediante experim<strong>en</strong>tación se basan <strong>en</strong><br />

estadísticas <strong>de</strong> datos monitoreados <strong>en</strong> la Internet. Algunas herrami<strong>en</strong>tas <strong>de</strong> monitoreo<br />

disponibles para el análisis <strong>de</strong> protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast se muestran <strong>en</strong> la<br />

Tabla 5 [58].<br />

El pres<strong>en</strong>te trabajo ti<strong>en</strong>e el objetivo <strong>de</strong> comparar el r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> algoritmos <strong>de</strong><br />

ruteami<strong>en</strong>to multipunto, por ello se requiere que los algoritmos oper<strong>en</strong> <strong>en</strong> la mayor<br />

cantidad <strong>de</strong> esc<strong>en</strong>arios posibles. En consecu<strong>en</strong>cia, la metodología experim<strong>en</strong>tal no es una<br />

bu<strong>en</strong>a alternativa <strong>en</strong> este caso.


Tabla 5 Algunas Herrami<strong>en</strong>tas <strong>de</strong> Monitoreo Multicast exist<strong>en</strong>tes<br />

Fu<strong>en</strong>te <strong>de</strong> Recolección <strong>de</strong> los datos Tipo <strong>de</strong> Monitoreo Ámbito <strong>de</strong> análisis y monitoreo Salida<br />

Router/Red/<br />

Sesión SubRed Tiempo<br />

Herrami<strong>en</strong>ta SNMP7 Aplicación Otras Tráfico & Ruta Sesión<br />

Texto Archivo GUI<br />

Herrami<strong>en</strong>tas<br />

Una Múltiple Intra Inter Online Histórico<br />

MantaRay X X X X X<br />

Mantra X X X X X X X X X X X<br />

Mhealth X X X X X X X X X X<br />

Mlist<strong>en</strong> X X X X X X X X<br />

Mrinfo X X X X X<br />

Mtrace X X X X X X<br />

MultiMON X X X X X X X X<br />

RM X X X X X X X<br />

RTPmon X X X X X X<br />

SDR‐Monitor X X X X X X X<br />

SM X X X X X X X X X<br />

7 Simple Network Managm<strong>en</strong>t Protocol<br />

55


E<br />

6 Comparación <strong>de</strong> <strong>Algoritmos</strong> mediante Simulación<br />

n la sección 5.2 se explicó que la comparación <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to mediante<br />

simulación, involucra principalm<strong>en</strong>te tres fases: la g<strong>en</strong>eración <strong>de</strong> esc<strong>en</strong>arios que<br />

repres<strong>en</strong>t<strong>en</strong> la red, la implem<strong>en</strong>tación <strong>de</strong> los algoritmos a evaluar y la configuración <strong>de</strong> los<br />

experim<strong>en</strong>tos <strong>de</strong> simulación. Las sigui<strong>en</strong>tes secciones <strong>de</strong>tallan acerca <strong>de</strong> la implem<strong>en</strong>tación<br />

<strong>de</strong> estas tres fases, previa explicación <strong>de</strong> la herrami<strong>en</strong>ta <strong>de</strong> simulación utilizada <strong>en</strong> el pres<strong>en</strong>te<br />

trabajo y las medidas <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to consi<strong>de</strong>radas.<br />

6.1 Herrami<strong>en</strong>ta <strong>de</strong> Simulación<br />

En la Tabla 4 se nombran una serie <strong>de</strong> herrami<strong>en</strong>tas <strong>de</strong> simulación <strong>de</strong> re<strong>de</strong>s. Una <strong>de</strong> ellas:<br />

MCRSIM [59] está especializada <strong>en</strong> la simulación <strong>de</strong> algoritmos <strong>de</strong> ruteami<strong>en</strong>to multicast.<br />

MCRSIM está escrito <strong>en</strong> C++ y usa funciones <strong>de</strong> las librerías Motif y X para implem<strong>en</strong>tar la<br />

interfase gráfica. El software opera sobre máquinas Unix que soportan un ambi<strong>en</strong>te<br />

Xwindows. Este simulador es un paquete <strong>de</strong> software que crea y edita grafos que<br />

repres<strong>en</strong>tan re<strong>de</strong>s <strong>de</strong> computadores, aplica algoritmos <strong>de</strong> ruteami<strong>en</strong>to multicast a estos<br />

grafos, y simula un flujo <strong>de</strong> celdas ATM sobre el árbol resultante para obt<strong>en</strong>er estadísticas <strong>de</strong><br />

transmisión <strong>de</strong> paquetes <strong>en</strong> un archivo <strong>de</strong> salida. El archivo <strong>de</strong> salida <strong>de</strong>l simulador <strong>en</strong>trega<br />

la sigui<strong>en</strong>te información: dirección <strong>de</strong>l grupo, i<strong>de</strong>ntificación <strong>de</strong> la fu<strong>en</strong>te, i<strong>de</strong>ntificación <strong>de</strong>l<br />

miembro <strong>de</strong>l grupo, número <strong>de</strong> celdas recibidas, número <strong>de</strong> celdas perdidas, tasa promedio<br />

<strong>de</strong> pérdida, número <strong>de</strong> celdas que superar el <strong>de</strong>adline, mínimo retardo fin a fin, máximo<br />

retardo fin a fin, jitter, promedio <strong>de</strong>l retardo fin a fin, intervalo <strong>de</strong> confianza alcanzado para<br />

el retardo, intervalo <strong>de</strong> confianza alcanzado para la tasa <strong>de</strong> pérdida.<br />

Algunas <strong>de</strong> las flexibilida<strong>de</strong>s <strong>de</strong>l software son que se pue<strong>de</strong> configurar el tamaño <strong>de</strong> las<br />

celdas, las capacida<strong>de</strong>s individuales <strong>de</strong> los <strong>en</strong>laces, la topología <strong>de</strong> la red (según un mo<strong>de</strong>lo<br />

<strong>de</strong> Waxman modificado [5.2]), los grupos multicast pue<strong>de</strong>n ser elegidos aleatoriam<strong>en</strong>te (sólo<br />

<strong>de</strong>be escogerse un nombre y cantidad <strong>de</strong> miembros para el grupo).<br />

MCRSIM implem<strong>en</strong>ta dos tipos <strong>de</strong> fu<strong>en</strong>tes tráfico: voz y vi<strong>de</strong>o [60]. Se pue<strong>de</strong> agregar a los<br />

<strong>en</strong>laces <strong>de</strong> la red tráfico background consist<strong>en</strong>te <strong>de</strong> muchas fu<strong>en</strong>tes <strong>de</strong> vi<strong>de</strong>o transmiti<strong>en</strong>do,<br />

con el fin <strong>de</strong> repres<strong>en</strong>tar una red cargada. El tráfico background que se agrega<br />

opcionalm<strong>en</strong>te, pue<strong>de</strong> repres<strong>en</strong>tar tanto cargas simétricas como asimétricas sobre los <strong>en</strong>laces.<br />

Los algoritmos originalm<strong>en</strong>te implem<strong>en</strong>tados <strong>en</strong> este software son:<br />

1. Minimum Steiner Tree Algorithm, OPT: un algoritmo optimo según [56] que minimiza<br />

el costo total <strong>de</strong>l árbol multicast.<br />

2. KMB [35].<br />

3. LD (Least Delay), algoritmo que minimiza el retardo <strong>de</strong> los caminos individuales <strong>de</strong><br />

fu<strong>en</strong>te a <strong>de</strong>stino. Según [56] es un algoritmo óptimo.<br />

4. LC‐DKS (Dijkstra Least Cost), algoritmo que minimiza el costo <strong>de</strong> los caminos<br />

individuales <strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino. Según [56] es un algoritmo óptimo.<br />

5. LC‐BF (Bellman Ford Least Cost), algoritmo que minimiza el costo <strong>de</strong> los caminos<br />

individuales <strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stino. Según [56] es un algoritmo óptimo.<br />

56


6. PRUNED (pruned minimum spanning tree heuristic), una heurística simple para<br />

construir un árbol mínimo <strong>de</strong> Steiner mediante inundación <strong>de</strong> la red. [56].<br />

7. RPM (Reverse Path Multicasting) [7]<br />

8. SC (Semiconstrained Heuristic) ‐‐WATERS. [61].<br />

9. MSC‐SC (Modified semiconstrained Heuristic). [56].<br />

10. Constrained Steiner Tree Algorithm, COPT. Éste minimiza el costo total <strong>de</strong>l árbol<br />

multicast sin exce<strong>de</strong>r el límite <strong>de</strong> retardo impuesto para el retardo <strong>en</strong>tre fu<strong>en</strong>te y<br />

<strong>de</strong>stino. [56].<br />

11. KPP (heuristics for constrained Steiner tree). [14].<br />

12. CAO (Constrained Adaptive Or<strong>de</strong>ring). [38].<br />

13. BSMA (Boun<strong>de</strong>d Shortest Multicast Algorithm). [39].<br />

14. BDB (Pruned Boun<strong>de</strong>d Delay Broadcasting Heuristic). [57].<br />

15. CDKS (Delay Constrained Dijkstra Shorted Path Algorithm). [37].<br />

En este trabajo se hicieron algunas modificaciones al software original, <strong>en</strong>tre ellas: adaptar<br />

la versión 2 <strong>de</strong> MCRSIM disponible <strong>en</strong> [59] a Linux y al idioma español, corregir algunos<br />

<strong>de</strong>talles <strong>de</strong> implem<strong>en</strong>tación <strong>en</strong> los algoritmos LC‐BF y BSMA, habilitar el algoritmo asociado<br />

al protocolo PIM (4.1.4), agregar los algoritmos QDMR [40] y BC [36] y permitir la<br />

importación <strong>de</strong> archivos <strong>de</strong>l g<strong>en</strong>erador <strong>de</strong> topologías aleatorias BRITE [53] que permite<br />

trabajar con topologías jerárquicas.<br />

6.2 <strong>Algoritmos</strong> Evaluados<br />

Los algoritmos evaluados <strong>en</strong> el pres<strong>en</strong>te trabajo se escogieron según si eran consi<strong>de</strong>rados<br />

<strong>en</strong> la literatura como <strong>de</strong>ntro <strong>de</strong> los más efici<strong>en</strong>tes, comparados respecto <strong>de</strong> las medidas <strong>de</strong><br />

r<strong>en</strong>dimi<strong>en</strong>to vistas <strong>en</strong> 6.3. Un estudio bastante amplio sobre evaluación <strong>de</strong> algoritmos <strong>de</strong><br />

ruteami<strong>en</strong>to multicast [62] revela que el mejor repres<strong>en</strong>tante <strong>de</strong> los algoritmos que<br />

construy<strong>en</strong> árboles <strong>de</strong> Steiner no restringidos es el algoritmo KMB, y BSMA para árboles <strong>de</strong><br />

Steiner restringidos <strong>en</strong> retardo, por lo tanto, estos dos algoritmos fueron evaluados. A<strong>de</strong>más,<br />

se eligió un algoritmo como repres<strong>en</strong>tante <strong>de</strong> los protocolos <strong>de</strong> ruteami<strong>en</strong>to multicast<br />

exist<strong>en</strong>tes. El protocolo escogido fue PIM‐DM. Adicionalm<strong>en</strong>te se evaluó el algoritmo<br />

PRUNED disponible <strong>en</strong> MCRSIM. Este algoritmo es una heurística que construye árboles<br />

mediante la poda <strong>de</strong> un árbol <strong>de</strong> expansión mínima (MST). El motivo <strong>de</strong> evaluar este<br />

algoritmo es t<strong>en</strong>er una refer<strong>en</strong>cia <strong>en</strong>tre éste y los <strong>de</strong>más algoritmos <strong>en</strong> evaluación cuando el<br />

tamaño <strong>de</strong>l grupo es cercano al tamaño <strong>de</strong> la red. Un MST es un árbol <strong>de</strong> Steiner <strong>en</strong> el caso<br />

particular e don<strong>de</strong> el grupo es toda la red. Otros dos algoritmos que fueron consi<strong>de</strong>rados son<br />

KPP y CAO, pues éstos son utilizados para comparación <strong>en</strong> varias heurísticas propuestas <strong>en</strong><br />

la literatura. Finalm<strong>en</strong>te, cinco heurísticas <strong>de</strong>l algoritmo BC también fueron implem<strong>en</strong>tadas<br />

y evaluadas. Las heurísticas evaluadas correspon<strong>de</strong>n a:<br />

• BC‐SAL, cuya función objetivo [4.2.2] int<strong>en</strong>ta minimizar la cantidad <strong>de</strong> saltos<br />

requeridos para alcanzar a los <strong>de</strong>stinos que no se han agregado al grupo.<br />

• BC‐BW, cuya función objetivo [4.2.2] int<strong>en</strong>ta minimizar la cantidad <strong>de</strong> ancho <strong>de</strong> banda<br />

utilizado por los <strong>en</strong>laces que conforman el árbol requerido para alcanzar a todos los<br />

57


<strong>de</strong>stinos.<br />

• BCL‐SAL, heurística [4.2.2.1] que reduce el número <strong>de</strong> iteraciones para agregar cada<br />

<strong>en</strong>lace <strong>de</strong>l árbol <strong>de</strong> distribución y cuya función objetivo int<strong>en</strong>ta minimizar la cantidad<br />

<strong>de</strong> saltos requeridos para alcanzar a los <strong>de</strong>stinos que no se han agregado al grupo.<br />

6.3 Medidas <strong>de</strong> R<strong>en</strong>dimi<strong>en</strong>to<br />

Las medidas <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to escogidas fueron las sigui<strong>en</strong>tes:<br />

6.3.1 Costo <strong>de</strong>l árbol<br />

La medida “costo <strong>de</strong>l árbol” ya vista <strong>en</strong> 3.4.1, refleja la habilidad que un algoritmo ti<strong>en</strong>e<br />

para construir árboles multicast, <strong>en</strong> cuanto más pequeño es el valor obt<strong>en</strong>ido m<strong>en</strong>or es la<br />

utilización <strong>de</strong> los recursos <strong>de</strong> la red para permitir la comunicación multicast.<br />

En este trabjo se consi<strong>de</strong>ró como equival<strong>en</strong>tes: el costo <strong>de</strong>l <strong>en</strong>lace y el ancho <strong>de</strong> banda<br />

reservado, dado que se trata <strong>de</strong> una medida repres<strong>en</strong>tativa <strong>de</strong> la utilización <strong>de</strong> los recursos<br />

<strong>de</strong> <strong>en</strong>lace, tanto <strong>de</strong> ancho <strong>de</strong> banda como espacio <strong>en</strong> las buffers.<br />

6.3.2 Retardo Promedio <strong>en</strong>tre fu<strong>en</strong>te y <strong>de</strong>stino<br />

Esta medida, es el promedio <strong>de</strong> los retardos individuales <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stinos (ver<br />

3.4.1). Ésta refleja la habilidad que un algoritmo ti<strong>en</strong>e para satisfacer las exig<strong>en</strong>cias <strong>de</strong><br />

retardo que impone una aplicación o un nivel <strong>de</strong> servicio <strong>de</strong>l usuario.<br />

6.3.3 Número <strong>de</strong> Conexiones Exitosas<br />

El número <strong>de</strong> conexiones exitosas correspon<strong>de</strong> al número <strong>de</strong> conexiones que han sido<br />

aceptadas para una <strong>de</strong>terminada cantidad <strong>de</strong> solicitu<strong>de</strong>s <strong>de</strong> conexión. Una conexión no es<br />

exitosa (o falla), si algún <strong>en</strong>lace <strong>de</strong>l árbol g<strong>en</strong>erado por una nueva conexión supera la<br />

capacidad <strong>de</strong>l <strong>en</strong>lace o supera el límite impuesto para la ocupación <strong>de</strong> éste. A su vez, para<br />

algoritmos que incluy<strong>en</strong> restricciones <strong>en</strong> el retardo fin a fin, otra causa <strong>de</strong> falla <strong>en</strong> la solicitud<br />

<strong>de</strong> conexión, es que el árbol g<strong>en</strong>erado supere el límite <strong>de</strong> retardo impuesto por la restricción.<br />

Esta medida permite estimar (<strong>de</strong> forma indirecta) la capacidad que un algoritmo ti<strong>en</strong>e para<br />

balancear la carga <strong>en</strong> la red, pudi<strong>en</strong>do visualizar las faculta<strong>de</strong>s que el algoritmo ti<strong>en</strong>e para<br />

administrar los recursos <strong>de</strong> la red.<br />

6.4 Configuración <strong>de</strong> los Experim<strong>en</strong>tos <strong>de</strong> Simulación<br />

Fueron efectuados tres tipos <strong>de</strong> experim<strong>en</strong>tos <strong>de</strong> simulación. Cada uno <strong>de</strong> ellos se focaliza<br />

<strong>en</strong> alguna medida <strong>de</strong> r<strong>en</strong>dimi<strong>en</strong>to.<br />

6.4.1 Primer Experim<strong>en</strong>to<br />

En el primer experim<strong>en</strong>to se evaluó el costo <strong>de</strong>l árbol y el retardo promedio <strong>en</strong>tre fu<strong>en</strong>te y<br />

<strong>de</strong>stinos g<strong>en</strong>erado por un algoritmo <strong>en</strong> función <strong>de</strong>l tamaño <strong>de</strong>l grupo multicast. Cada<br />

ejecución <strong>de</strong>l experim<strong>en</strong>to consi<strong>de</strong>ra una red, grupo y fu<strong>en</strong>te multicast aleatorios.<br />

Este experim<strong>en</strong>to consiste básicam<strong>en</strong>te <strong>en</strong>:<br />

58


1. G<strong>en</strong>erar un grupo aleatorio <strong>en</strong> una red aleatoria,<br />

2. Solicitar una nueva conexión para una sesión multicast con el nuevo grupo,<br />

3. Ejecutar el algoritmo que se esté evaluando (esto implica que se sumará la carga <strong>de</strong> la<br />

fu<strong>en</strong>te multicast activa al tráfico exist<strong>en</strong>te <strong>en</strong> el árbol <strong>de</strong> distribución);<br />

4. Cerrar la sección activa; y finalm<strong>en</strong>te,<br />

5. Repetir la operación <strong>de</strong>s<strong>de</strong> 1).<br />

A continuación se <strong>de</strong>scribe <strong>en</strong> <strong>de</strong>talle el esc<strong>en</strong>ario <strong>de</strong> simulación.<br />

Para cada observación se g<strong>en</strong>eró un grafo aleatorio <strong>de</strong> Waxman con parámetros α = 0.15,<br />

β = 0.22, y grado promedio <strong>en</strong> los nodos igual a 4 para repres<strong>en</strong>tar la red. La topología <strong>de</strong> red<br />

fue establecida <strong>en</strong> un espacio <strong>de</strong> la pantalla equival<strong>en</strong>te a 3000x2400Km.<br />

Se escogieron distintos tamaños <strong>de</strong> red para distintos experim<strong>en</strong>tos. En cada observación<br />

se escogió un grupo y una fu<strong>en</strong>te multicast aleatoriam<strong>en</strong>te. La fu<strong>en</strong>te multicast correspon<strong>de</strong><br />

a una fu<strong>en</strong>te <strong>de</strong> vi<strong>de</strong>o VBR (Variable Bit Rate) que sigue el mo<strong>de</strong>lo B <strong>de</strong> Maglaris [60]. Una<br />

sesión multicast activa g<strong>en</strong>era un árbol <strong>en</strong> cuyos <strong>en</strong>laces se reserva un <strong>de</strong>terminado ancho <strong>de</strong><br />

banda para permitir el tráfico <strong>de</strong> la fu<strong>en</strong>te VBR <strong>de</strong>l correspondi<strong>en</strong>te grupo. Para repres<strong>en</strong>tar<br />

la carga <strong>de</strong> la red <strong>de</strong>bido a otros grupos multicast activos se agregó tráfico background. El<br />

tráfico background correspon<strong>de</strong> a muchas fu<strong>en</strong>tes <strong>de</strong> vi<strong>de</strong>o VBR que agregan tráfico sobre<br />

los <strong>en</strong>laces <strong>de</strong> la red. Cada fu<strong>en</strong>te <strong>de</strong> una sesión multicast ti<strong>en</strong>e una tasa pico igual a 1.5<br />

Mbps, y una razón sobre el promedio (relación <strong>en</strong>tre el valor pico y el valor promedio) igual<br />

a 0.33.<br />

La utilización <strong>de</strong> los <strong>en</strong>laces <strong>en</strong> la red se consi<strong>de</strong>ró uniformem<strong>en</strong>te distribuido <strong>en</strong>tre 5 y 125<br />

[Mbps], <strong>en</strong>tre 45 y 85 [Mbps], o <strong>en</strong>tre 100 y 120 Mbps para un tamaño <strong>de</strong> red <strong>de</strong> 20 nodos.<br />

Esto permitió evaluar la t<strong>en</strong><strong>de</strong>ncia <strong>de</strong>l r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> los algoritmos según distintas cargas<br />

<strong>en</strong> la red. La condición más exig<strong>en</strong>te para los algoritmos es cuando la red se <strong>en</strong>cu<strong>en</strong>tra<br />

altam<strong>en</strong>te saturada (tráfico background <strong>en</strong>tre 100 y 120 Mbps). El mismo tipo <strong>de</strong> experim<strong>en</strong>to<br />

fue realizado para una red <strong>de</strong> 100 nodos.<br />

La capacidad <strong>de</strong> los <strong>en</strong>laces <strong>en</strong> la red se configuró para ser igual a 155,2 Mbps 8 . Los<br />

<strong>en</strong>laces fueron configurados para que cuando la ocupación <strong>de</strong> éstos superase el 85% (132<br />

Mbps) se los consi<strong>de</strong>rara saturados.<br />

En el caso <strong>de</strong> algoritmos que consi<strong>de</strong>ran restricciones <strong>de</strong> retardo se estableció un limite<br />

para el retardo igual a 0.03 segundos.<br />

Las medidas fueron obt<strong>en</strong>idas con un intervalo <strong>de</strong> confianza <strong>de</strong> 5% para un nivel <strong>de</strong><br />

confianza <strong>de</strong> 95%.<br />

Se <strong>de</strong>be notar que los valores <strong>de</strong> los parámetros <strong>de</strong> simulación int<strong>en</strong>tan acercar la<br />

simulación a la realidad y a<strong>de</strong>más replicar trabajos <strong>de</strong> la literatura anteriores. Esto último<br />

permite validar los resultados obt<strong>en</strong>idos <strong>en</strong> este trabajo al compararlos con los publicados <strong>en</strong><br />

la literatura.<br />

8 Las velocida<strong>de</strong>s <strong>de</strong> transmision <strong>de</strong> ATM mas frecu<strong>en</strong>tem<strong>en</strong>te usadas son STM1 u OC3 (SDH, SONET<br />

respectivam<strong>en</strong>te) que son 155.2 MBps. Esta velocidad se pue<strong>de</strong> transmitir tanto por fibra optica como por cable <strong>de</strong>l<br />

tipo STP5.<br />

59


6.4.2 Segundo Experim<strong>en</strong>to<br />

El segundo tipo <strong>de</strong> experim<strong>en</strong>to consi<strong>de</strong>ra un esc<strong>en</strong>ario <strong>de</strong> simulación muy similar al<br />

primer experim<strong>en</strong>to. Las difer<strong>en</strong>cias son: la red comi<strong>en</strong>za sin tráfico (“<strong>en</strong> vacío”). A<strong>de</strong>más<br />

no se g<strong>en</strong>era una nueva red <strong>en</strong> cada ejecución, si no que se utiliza la misma red durante todo<br />

el experim<strong>en</strong>to. La red escogida es una red aleatoria <strong>de</strong> Waxman con los mismos parámetros<br />

<strong>de</strong>l primer experim<strong>en</strong>to. Las medidas obt<strong>en</strong>idas están <strong>de</strong>ntro <strong>de</strong> un intervalo <strong>de</strong> confianza<br />

<strong>de</strong>l 5% para un nivel <strong>de</strong> confianza <strong>de</strong> 95%.<br />

Sucesivam<strong>en</strong>te, <strong>en</strong> cada nueva ejecución <strong>de</strong>l experim<strong>en</strong>to, la red es cargada con nuevas<br />

sesiones multicast escogi<strong>en</strong>do cada vez un grupo y fu<strong>en</strong>te aleatorias. Las sesiones no son<br />

<strong>de</strong>sconectadas hasta el final <strong>de</strong> la ejecución <strong>de</strong>l experim<strong>en</strong>to. La medida <strong>de</strong> interés <strong>en</strong> este<br />

caso es el número <strong>de</strong> conexiones exitosas. Se realizan 3000 solicitu<strong>de</strong>s <strong>de</strong> conexión y cada<br />

algoritmo evaluado es capaz <strong>de</strong> respon<strong>de</strong>r o no a estas solicitu<strong>de</strong>s según su capacidad <strong>de</strong><br />

administración <strong>de</strong> los recursos <strong>de</strong> la red. Una solicitud es rechazada <strong>en</strong> dos casos: cuando se<br />

viola el límite <strong>de</strong> retardo <strong>en</strong> el caso <strong>de</strong> algoritmos con restricciones <strong>de</strong> retardo, o cuando los<br />

<strong>en</strong>laces se <strong>en</strong>cu<strong>en</strong>tran saturados (condición para todos los algoritmos).<br />

60


A<br />

7 Resultados <strong>de</strong> la Simulación<br />

continuación se <strong>de</strong>talla acerca <strong>de</strong> los resultados <strong>de</strong> los experim<strong>en</strong>tos refiriéndose a<br />

cada medida <strong>en</strong> particular.<br />

Los resultados obt<strong>en</strong>idos coinci<strong>de</strong>n con los publicados <strong>en</strong> la literatura para un rango<br />

<strong>de</strong>ntro <strong>de</strong>l intervalo <strong>de</strong> confianza <strong>de</strong>finido <strong>en</strong> un 5%, y para los algoritmos y configuraciones<br />

<strong>de</strong> esc<strong>en</strong>arios <strong>de</strong> simulación equival<strong>en</strong>tes <strong>en</strong> trabajo y <strong>en</strong> [62] (red <strong>de</strong> 20 nodos y tráfico<br />

background <strong>en</strong>tre 45 y 85 Mbps, y <strong>en</strong>tre 5 y 125 Mbps).<br />

Costo <strong>de</strong>l Árbol<br />

Parte <strong>de</strong> los resultados obt<strong>en</strong>idos para el primer experim<strong>en</strong>to, los que se ilustran <strong>de</strong>s<strong>de</strong> la<br />

Fig. 16 a la Fig. 21, muestran que la heurística BC‐BW ti<strong>en</strong>e el mejor <strong>de</strong>sempeño <strong>de</strong> todos los<br />

algoritmos no restringidos evaluados. A sí mismo la Fig. 28 muestra un resum<strong>en</strong> con los<br />

algoritmos restringidos y no restringidos consi<strong>de</strong>rados, ilustrando la relación <strong>de</strong> los<br />

<strong>de</strong>sempeños respecto <strong>de</strong>l r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> KMB para la medida costo <strong>de</strong>l árbol. Allí se pue<strong>de</strong><br />

observar que BC‐BW es el algoritmo <strong>de</strong> mejor r<strong>en</strong>dimi<strong>en</strong>to para una red <strong>de</strong> 20 nodos,<br />

in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te <strong>de</strong> la carga <strong>de</strong> la red. La heurística BC‐SAL se comporta similarm<strong>en</strong>te a<br />

BC‐BW cuando la utilización <strong>de</strong> los <strong>en</strong>laces <strong>de</strong> la red <strong>de</strong>bido al tráfico background varia <strong>en</strong>tre<br />

un 75% y 90% (Fig. 20). Se pue<strong>de</strong> observar que la t<strong>en</strong><strong>de</strong>ncia <strong>de</strong> BC‐SAL es a mejorar su<br />

<strong>de</strong>sempeño a medida que la carga <strong>de</strong> la red aum<strong>en</strong>ta y el <strong>de</strong>sbalance <strong>en</strong>tre la utilización <strong>de</strong><br />

los <strong>en</strong>laces disminuye. Se <strong>de</strong>be notar que la familia <strong>de</strong> heurísticas BC ti<strong>en</strong><strong>de</strong>n a empeorar su<br />

r<strong>en</strong>dimi<strong>en</strong>to a medida que el grupo se acerca al tamaño <strong>de</strong> la red. Esto da una indicación <strong>de</strong><br />

que las heurísticas BC son más a<strong>de</strong>cuadas <strong>en</strong> grupos dispersos. Cabe <strong>de</strong>stacar que el tamaño<br />

<strong>de</strong> los grupos multicast normalm<strong>en</strong>te son una pequeña fracción <strong>de</strong> la red [58], por lo tanto las<br />

heurísticas BC son a<strong>de</strong>cuadas <strong>en</strong> la práctica.<br />

Para la red <strong>de</strong> 100 nodos (Fig. 29 y Fig. 30) las tres heurísticas BC ti<strong>en</strong><strong>en</strong> mejor<br />

r<strong>en</strong>dimi<strong>en</strong>to que los otros algoritmos evaluados para grupos hasta cerca <strong>de</strong> un 85% <strong>de</strong>l<br />

tamaño <strong>de</strong> la red.<br />

Los algoritmos BSMA, CAO, KPP y QDMR ti<strong>en</strong><strong>en</strong> un comportami<strong>en</strong>to bastante similar<br />

para las condiciones <strong>de</strong> ilustradas <strong>de</strong>s<strong>de</strong> la Fig. 22 a la Fig. 27. En el peor caso,<br />

correspondi<strong>en</strong>te a QDMR, éste no supera el 10% sobre el r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> BSMA (Fig. 23).<br />

La heurística MST (PRUNED <strong>en</strong> [56]) g<strong>en</strong>era árboles <strong>de</strong> distribución a partir <strong>de</strong> podar un<br />

árbol <strong>de</strong> mínima expansión (Minimum Spanning Tree), por lo tanto resulta natural que su<br />

r<strong>en</strong>dimi<strong>en</strong>to mejore cuando el tamaño <strong>de</strong>l grupo se acerca al tamaño <strong>de</strong> la red (y <strong>en</strong> g<strong>en</strong>eral<br />

obt<strong>en</strong>ga un bu<strong>en</strong> <strong>de</strong>sempeño <strong>en</strong> dicho caso), tal como se observa <strong>en</strong> la Fig. 16 a la Fig. 21.<br />

Para una red cargada <strong>en</strong>tre un 75% y un 90% (Fig. 20) la t<strong>en</strong><strong>de</strong>ncia <strong>de</strong> todos los algoritmos<br />

evaluados es pres<strong>en</strong>tar un r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong>ntro <strong>de</strong> un 5% igual al <strong>de</strong> MST cuando el grupo<br />

multicast (fu<strong>en</strong>te más <strong>de</strong>stinos) es igual al tamaño <strong>de</strong> la red, lo cual indica que el <strong>de</strong>sempeño<br />

<strong>de</strong> los algoritmos <strong>en</strong> esos casos es aceptable <strong>en</strong> términos absolutos.<br />

El algoritmo asociado al protocolo PIM claram<strong>en</strong>te mejora su r<strong>en</strong>dimi<strong>en</strong>to <strong>en</strong> cuanto la<br />

carga <strong>de</strong> la red crece. Esta característica es útil <strong>de</strong>s<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong> re<strong>de</strong>s que operan<br />

61


normalm<strong>en</strong>te <strong>en</strong> el límite <strong>de</strong> la saturación. Sin embargo a pesar <strong>de</strong> que su r<strong>en</strong>dimi<strong>en</strong>to<br />

mejora cuando la carga aum<strong>en</strong>ta, aun <strong>en</strong> su mejor situación, éste no supera a KMB, BC‐SAL,<br />

BC‐BW o BCL‐SAL tal como se observa <strong>en</strong> la Fig. 28. El r<strong>en</strong>dimi<strong>en</strong>to <strong>de</strong> los protocolos<br />

multicast pue<strong>de</strong> aun mejorar bastante. Técnicam<strong>en</strong>te sólo se requiere <strong>de</strong> algoritmos<br />

distribuidos y que utilic<strong>en</strong> información local para operar. Estas características son algunas <strong>de</strong><br />

las requeridas <strong>en</strong> la práctica para la implem<strong>en</strong>tación <strong>de</strong> algún protocolo multicast.<br />

Al igual que PIM, BC‐SAL muestra un mejor <strong>de</strong>sempeño a medida que la carga <strong>de</strong> la red<br />

aum<strong>en</strong>ta y se balancea, logrando hasta un 20% m<strong>en</strong>os que el costo <strong>de</strong>l árbol que g<strong>en</strong>era KMB<br />

para un grupo <strong>de</strong> tamaño igual al 25% <strong>de</strong> la red (Fig. 20).<br />

En g<strong>en</strong>eral, el bu<strong>en</strong> comportami<strong>en</strong>to <strong>de</strong> BC‐BW se <strong>de</strong>be a que está sintonizado a la medida<br />

costo <strong>de</strong> árbol, pues la función objetivo que lo <strong>de</strong>fine int<strong>en</strong>ta minimizar la suma <strong>de</strong> la<br />

utilización <strong>de</strong> los <strong>en</strong>laces que conforman el árbol <strong>de</strong> distribución. Así mismo, a pesar <strong>de</strong> que<br />

BC‐SAL y BCL‐SAL operan básicam<strong>en</strong>te <strong>de</strong> la misma manera, su r<strong>en</strong>dimi<strong>en</strong>to es <strong>en</strong><br />

promedio cercano a un 80% peor para el caso <strong>de</strong> BCL‐SAL, y <strong>de</strong> un 60% peor para el caso <strong>de</strong><br />

BC‐SAL, para la situación más <strong>de</strong>sfavorable, que correspon<strong>de</strong> a la red con mayor <strong>de</strong>sbalance<br />

<strong>de</strong> tráfico (Fig. 16) y tamaño <strong>de</strong> grupo igual a un 95% <strong>de</strong> los nodos <strong>de</strong> la red. Esto se <strong>de</strong>be a<br />

que las funciones objetivo <strong>de</strong> BCL‐SAL y BC‐SAL buscan obt<strong>en</strong>er un bajo número saltos <strong>de</strong>l<br />

árbol <strong>de</strong> distribución final, <strong>en</strong> vez <strong>de</strong>l ancho <strong>de</strong> banda utilizado por tal árbol. Esto mismo<br />

explica porqué BC‐SAL y BCL‐SAL ti<strong>en</strong><strong>en</strong> un bu<strong>en</strong> <strong>de</strong>sempeño para la medida retardo<br />

promedio <strong>en</strong>tre fu<strong>en</strong>te y <strong>de</strong>stinos, tal como se aprecia <strong>en</strong> <strong>de</strong>s<strong>de</strong> la Fig. 31 a la Fig. 38.<br />

Retardo Promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos<br />

BC‐SAL resultó ser el algoritmo con mejor r<strong>en</strong>dimi<strong>en</strong>to, superando a BSMA <strong>en</strong> cerca <strong>de</strong>l<br />

30% para las distintas situaciones <strong>de</strong> tráfico y <strong>en</strong> una red <strong>de</strong> 20 nodos, tal como se observa<br />

<strong>de</strong>s<strong>de</strong> la Fig. 31 a la Fig. 36. Se observa que QDMR mejora su <strong>de</strong>sempeño a medida que el<br />

tamaño <strong>de</strong>l grupo aum<strong>en</strong>ta y se acerca al tamaño <strong>de</strong> la red.<br />

Se <strong>de</strong>be notar que QDMR opera dando prioridad a los caminos <strong>de</strong> bajo costo que van a<br />

través <strong>de</strong> un <strong>de</strong>stino que ya está <strong>en</strong> el árbol para agregar a los <strong>de</strong>stinos faltantes, respetando<br />

el límite <strong>de</strong> retardo impuesto para los caminos <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stinos. Así, es posible<br />

g<strong>en</strong>erar un árbol <strong>de</strong> bajo costo que nunca alcance el límite <strong>de</strong> retardo. Por otro lado BSMA<br />

itera para <strong>en</strong>contrar un árbol <strong>de</strong> m<strong>en</strong>or costo a partir <strong>de</strong> un árbol <strong>de</strong> m<strong>en</strong>or retardo. Los<br />

caminos elegidos <strong>en</strong> las iteraciones, que permit<strong>en</strong> disminuir el costo <strong>de</strong>l árbol, están sujetos a<br />

las restricciones <strong>de</strong> retardo impuestas. De esta manera, los árboles g<strong>en</strong>erados por BSMA<br />

están más cercanos al límite <strong>de</strong>l retardo impuesto para los caminos <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>te a <strong>de</strong>stinos<br />

que los árboles g<strong>en</strong>erados por QDMR.<br />

La Fig. 37 y Fig. 38 correspondi<strong>en</strong>tes a una red <strong>de</strong> 100 nodos, muestran que las heurísticas<br />

BC g<strong>en</strong>eran árboles <strong>de</strong> m<strong>en</strong>or retardo que BSMA. Esto es razonable <strong>de</strong> p<strong>en</strong>sar para las<br />

heurísticas BC‐SAL y BCL‐SAL, ya que los árboles <strong>en</strong>contrados por BC ti<strong>en</strong><strong>en</strong> un m<strong>en</strong>or<br />

número <strong>de</strong> <strong>en</strong>laces. Nótese que, a pesar <strong>de</strong> que no parece intuitivo que BC‐BW <strong>de</strong>ba obt<strong>en</strong>er<br />

un bajo retardo, dado que su función objetivo apunta a <strong>en</strong>contrar <strong>en</strong>laces que t<strong>en</strong>gan una baja<br />

utilización <strong>de</strong>l ancho <strong>de</strong> banda, <strong>en</strong> la Fig. 29 se observa que el costo <strong>de</strong> los árboles g<strong>en</strong>erados<br />

por BC‐BW es bajo respecto <strong>de</strong> las otras heurísticas. Esto se <strong>de</strong>be a que BC‐BW elige, por una<br />

parte <strong>en</strong>laces más <strong>de</strong>socupados para g<strong>en</strong>erar el árbol, pero por otro lado elige una m<strong>en</strong>or<br />

cantidad <strong>de</strong> <strong>en</strong>laces respecto <strong>de</strong> los otros algoritmos. Como la Fig. 29 muestra una situación<br />

<strong>en</strong> don<strong>de</strong> los <strong>en</strong>laces <strong>de</strong> la red se <strong>en</strong>cu<strong>en</strong>tran utilizados <strong>en</strong>tre un 75% y 90%, los árboles<br />

62


g<strong>en</strong>erados por BC‐BW ti<strong>en</strong><strong>en</strong> m<strong>en</strong>os <strong>en</strong>laces que otras heurísticas, y por lo tanto el retardo<br />

<strong>en</strong>tre fu<strong>en</strong>te y <strong>de</strong>stinos también es m<strong>en</strong>or que otros algoritmos.<br />

Número <strong>de</strong> conexiones Exitosas fr<strong>en</strong>te a solicitu<strong>de</strong>s<br />

La efici<strong>en</strong>cia <strong>de</strong> un algoritmo pue<strong>de</strong> ser medida a través <strong>de</strong>l costo <strong>de</strong>l árbol g<strong>en</strong>erado o el<br />

retardo promedio <strong>en</strong>tre fu<strong>en</strong>te y <strong>de</strong>stinos. Sin embargo, antes <strong>de</strong> conocer qué tan efici<strong>en</strong>te es<br />

un algoritmo, se espera saber si este éste es o no efectivo. Una medida <strong>de</strong> la efectividad <strong>de</strong><br />

un algoritmo es el número <strong>de</strong> conexiones que el algoritmo admite antes <strong>de</strong> saturar los <strong>en</strong>laces<br />

<strong>de</strong> la red. En consecu<strong>en</strong>cia, el número <strong>de</strong> conexiones exitosas fr<strong>en</strong>te a solicitu<strong>de</strong>s es una<br />

medida que refleja la capacidad que un algoritmo ti<strong>en</strong>e para administrar los recursos <strong>de</strong> la<br />

red. Tanto <strong>de</strong>s<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong> los proveedores <strong>de</strong> servicios <strong>de</strong> red, como <strong>de</strong> los<br />

usuarios <strong>de</strong> éstos, se espera que un algoritmo acepte la mayor cantidad <strong>de</strong> sesiones multicast.<br />

El segundo experim<strong>en</strong>to comi<strong>en</strong>za con una red vacía y progresivam<strong>en</strong>te se carga <strong>de</strong><br />

sesiones multicast, con un total <strong>de</strong> 3000 solicitu<strong>de</strong>s. La heurística BC‐BW es la mejor<br />

evaluada para esta medida. Permiti<strong>en</strong>do cerca <strong>de</strong> un 30% más <strong>de</strong> conexiones para un grupo<br />

igual a un 25% <strong>de</strong> la red (20 nodos), como se observa <strong>en</strong> la Fig. 39 y cerca <strong>de</strong> un 35% más <strong>de</strong><br />

conexiones para un grupo igual a 10% <strong>de</strong>l tamaño <strong>de</strong> la red (50 nodos), tal como se ilustra <strong>en</strong><br />

la Fig. 40. Las heurísticas BC‐SAL y BCL‐SAL también ti<strong>en</strong><strong>en</strong> un bu<strong>en</strong> comportami<strong>en</strong>to<br />

fr<strong>en</strong>te a esta medida, aun cuando siempre están por <strong>de</strong>bajo <strong>de</strong> BC‐BW.<br />

63


Trafico Background 5 - 125 [Mbps]<br />

Costo <strong>de</strong>l Arbol<br />

2.00E+09<br />

1.50E+09<br />

1.00E+09<br />

5.00E+08<br />

KMB BCL BCBW BCSAL PIM MST<br />

0.00E+00<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 16 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps.<br />

(<strong>Algoritmos</strong> No Restringidos)<br />

Trafico Background 5 - 125 [Mbps]<br />

Exceso sobre KMB<br />

BCL KMB BCBW BCSAL PIM MST<br />

1.75<br />

1.55<br />

1.35<br />

1.15<br />

0.95<br />

0.75<br />

0.55<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 17 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación<br />

<strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> No Restringidos)<br />

64


Trafico Background 45 - 85 [Mbps]<br />

Costo <strong>de</strong>l Arbol<br />

2.00E+09<br />

1.50E+09<br />

1.00E+09<br />

5.00E+08<br />

KMB BCL BCBW BCSAL PIM MST<br />

0.00E+00<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 18 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps.<br />

(<strong>Algoritmos</strong> No Restringidos)<br />

Exceso sobre KMB<br />

Trafico Background 45 - 85 [Mbps]<br />

1.75<br />

1.55<br />

1.35<br />

1.15<br />

0.95<br />

0.75<br />

BCL KMB BCBW BCSAL PIM MST<br />

0.55<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 19 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación<br />

<strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> No Restringidos)<br />

65


Trafico Background 100 - 120 [Mbps]<br />

Costo <strong>de</strong>l Arbol<br />

2.00E+09<br />

1.50E+09<br />

1.00E+09<br />

5.00E+08<br />

KMB BCL BCBW BCSAL PIM MST<br />

0.00E+00<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 20 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps.<br />

(<strong>Algoritmos</strong> No Restringidos)<br />

Exceso sobre KMB<br />

Tráfico Background 100 -120 [Mbps]<br />

BCL KMB BCBW BCSAL PIM MST<br />

1.75<br />

1.55<br />

1.35<br />

1.15<br />

0.95<br />

0.75<br />

0.55<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 21 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación<br />

<strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> No Restringidos)<br />

66


Trafico Background 5 - 125 [Mbps]<br />

Costo <strong>de</strong>l Arbol<br />

1.90E+09<br />

1.70E+09<br />

1.50E+09<br />

1.30E+09<br />

1.10E+09<br />

9.00E+08<br />

7.00E+08<br />

5.00E+08<br />

KPP CAO BSMA QDMR<br />

3.00E+08<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 22 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps.<br />

(<strong>Algoritmos</strong> Restringidos)<br />

Exceso sobre BSMA<br />

Trafico Background 5 - 125 [Mbps]<br />

1.09E+00<br />

1.07E+00<br />

1.05E+00<br />

1.03E+00<br />

1.01E+00<br />

9.90E-01<br />

KPP CAO BSMA QDMR<br />

9.70E-01<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 23 Exceso sobre BSMA para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> Restringidos)<br />

67


Trafico Background 45 - 85 [Mbps]<br />

Costo <strong>de</strong>l Arbol<br />

1.90E+09<br />

1.70E+09<br />

1.50E+09<br />

1.30E+09<br />

1.10E+09<br />

9.00E+08<br />

7.00E+08<br />

5.00E+08<br />

KPP CAO BSMA QDMR<br />

3.00E+08<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 24 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps.<br />

(<strong>Algoritmos</strong> Restringidos)<br />

Exceso sobre BSMA<br />

Trafico Background 45 - 85 [Mbps]<br />

1.09E+00<br />

1.07E+00<br />

1.05E+00<br />

1.03E+00<br />

1.01E+00<br />

9.90E-01<br />

KPP CAO BSMA QDMR<br />

9.70E-01<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 25 Exceso sobre BSMA para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> Restringidos)<br />

68


Trafico Background 100 - 120 [Mbps]<br />

Costo <strong>de</strong>l Arbol<br />

1.90E+09<br />

1.70E+09<br />

1.50E+09<br />

1.30E+09<br />

1.10E+09<br />

9.00E+08<br />

7.00E+08<br />

5.00E+08<br />

KPP CAO BSMA QDMR<br />

3.00E+08<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 26 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps.<br />

(<strong>Algoritmos</strong> Restringidos)<br />

Exceso sobre BSMA<br />

Trafico Background 100 - 120 [Mbps]<br />

1.09E+00<br />

1.07E+00<br />

1.05E+00<br />

1.03E+00<br />

1.01E+00<br />

9.90E-01<br />

KPP CAO BSMA QDMR<br />

9.70E-01<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 27 Exceso sobre BSMA para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos)<br />

69


Trafico Background 5 - 125 [Mbps]<br />

KMB BCL BCBW BCSAL PIM<br />

KPP CAO BSMA QDMR MST<br />

Exceso sobre KMB<br />

1.750<br />

1.550<br />

1.350<br />

1.150<br />

0.950<br />

0.750<br />

0.550<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

70<br />

Trafico Background 45 - 85 [Mbps]<br />

Trafico Background 100 - 120 [Mbps]<br />

KMB BCL BCBW BCSAL PIM<br />

KPP CAO BSMA QDMR MST<br />

Exceso sobre KMB<br />

1.750<br />

1.550<br />

1.350<br />

1.150<br />

0.950<br />

0.750<br />

0.550<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Exceso sobre KMB<br />

1.750<br />

1.550<br />

1.350<br />

1.150<br />

0.950<br />

0.750<br />

KMB BCL BCBW BCSAL PIM<br />

KPP CAO BSMA QDMR MST<br />

0.550<br />

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 28 Resum<strong>en</strong>: Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol (<strong>Algoritmos</strong> Restringidos y No Restringidos). Red <strong>de</strong> 20 nodos, con grado promedio igual a 4 y ocupación <strong>de</strong><br />

<strong>en</strong>laces <strong>en</strong>tre: 5 y 125 Mbps; 45 y 85 Mbps; 100 y 120 Mbps.


Trafico Background 100 - 120 [Mbps]<br />

KMB BCL BCBW BCSAL KPP<br />

CAO BSMA<br />

Costo <strong>de</strong>l Arbol<br />

1.00E+10<br />

8.00E+09<br />

6.00E+09<br />

4.00E+09<br />

2.00E+09<br />

0.00E+00<br />

5 15 25 35 45 55 65 75 85<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 29 Costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 100 nodos, grado promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps.<br />

(<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

Exceso sobre KMB<br />

Trafico Background 5 - 125 [Mbps]<br />

1.20<br />

1.10<br />

1.00<br />

0.90<br />

0.80<br />

0.70<br />

0.60<br />

0.50<br />

KMB BCL BCBW BCSAL KPP<br />

CAO BSMA<br />

0.40<br />

5 15 25 35 45 55 65 75 85<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 30 Exceso sobre KMB para la medida costo <strong>de</strong>l Árbol <strong>en</strong> red <strong>de</strong> 100 nodos, grado promedio igual a 4 y<br />

ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

71


Trafico Background 5 - 125 [Mbps]<br />

BCL KMB BCBW BCSAL PIM<br />

MST KPP CAO BSMA QDMR<br />

Retardo Promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos[s]<br />

2.100E-02<br />

1.900E-02<br />

1.700E-02<br />

1.500E-02<br />

1.300E-02<br />

1.100E-02<br />

9.000E-03<br />

7.000E-03<br />

5 7 9 11 13 15 17 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 31 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong><br />

<strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

Trafico Background 5 - 125 [Mbps]<br />

BCL KMB BCBW BCSAL PIM<br />

MST KPP CAO BSMA QDMR<br />

Exceso sobre BSMA<br />

1.600<br />

1.400<br />

1.200<br />

1.000<br />

0.800<br />

0.600<br />

5 7 9 11<br />

Tamaño <strong>de</strong>l Grupo<br />

13 15 17 19<br />

Fig. 32 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado<br />

promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 5 y 125 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

72


Trafico Background 45 - 85 [Mbps]<br />

BCL KMB BCBW BCSAL PIM<br />

MST KPP CAO BSMA QDMR<br />

Retardo Promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos[s]<br />

2.100E-02<br />

1.900E-02<br />

1.700E-02<br />

1.500E-02<br />

1.300E-02<br />

1.100E-02<br />

9.000E-03<br />

7.000E-03<br />

5 7 9 11 13 15 17 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 33 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong><br />

<strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

Trafico Background 45 - 85 [Mbps]<br />

Exceso sobre BSMA<br />

1.600<br />

1.400<br />

1.200<br />

1.000<br />

0.800<br />

BCL KMB BCBW BCSAL PIM<br />

MST KPP CAO BSMA QDMR<br />

0.600<br />

5 7 9 11 13 15 17 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 34 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado<br />

promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 45 y 85 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

73


Trafico Background 100 - 120 [Mbps]<br />

Retardo Promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos[s]<br />

2.10E-02<br />

1.90E-02<br />

1.70E-02<br />

1.50E-02<br />

1.30E-02<br />

1.10E-02<br />

9.00E-03<br />

BCL KMB BCBW BCSAL PIM<br />

MST KPP CAO BSMA QDMR<br />

7.00E-03<br />

5 7 9 11 13 15 17 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 35 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado promedio igual a 4 y ocupación <strong>de</strong><br />

<strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

Trafico Background 100 - 120 [Mbps]<br />

BCL KMB BCBW BCSAL PIM<br />

MST KPP CAO BSMA QDMR<br />

Exceso sobre BSMA<br />

1.600<br />

1.400<br />

1.200<br />

1.000<br />

0.800<br />

0.600<br />

5 7 9 11 13 15 17 19<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 36 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 20 nodos, grado<br />

promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

74


Trafico Background 100 - 120 [Mbps]<br />

KMB BCL BCBW BCSAL<br />

KPP CAO BSMA<br />

Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos [s]<br />

3.90E-02<br />

3.30E-02<br />

2.70E-02<br />

2.10E-02<br />

1.50E-02<br />

9.00E-03<br />

3.00E-03<br />

5 15 25 35 45 55 65 75 85<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 37 Retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 100 nodos, grado promedio igual a 4 y ocupación <strong>de</strong><br />

<strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

Trafico Background 100 - 120 [Mbps]<br />

KMB BCL BCBW BCSAL<br />

KPP CAO BSMA<br />

Exceso sobre BSMA<br />

2.00E+00<br />

1.80E+00<br />

1.60E+00<br />

1.40E+00<br />

1.20E+00<br />

1.00E+00<br />

8.00E-01<br />

6.00E-01<br />

4.00E-01<br />

5 15 25 35 45 55 65 75 85<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 38 Exceso sobre BSMA para la medida retardo promedio <strong>en</strong>tre Fu<strong>en</strong>te y Destinos <strong>en</strong> red <strong>de</strong> 50 nodos, grado<br />

promedio igual a 4 y ocupación <strong>de</strong> <strong>en</strong>laces <strong>en</strong>tre 100 y 120 Mbps. (<strong>Algoritmos</strong> Restringidos y No Restringidos)<br />

75


Número <strong>de</strong> Conexiones Exitosas<br />

2.75E+03<br />

2.27E+03<br />

1.79E+03<br />

1.31E+03<br />

8.30E+02<br />

BSMA KPP BCL BCBW BCSAL KMB CAO<br />

3.50E+02<br />

5 7 9 11 13<br />

Tamaño <strong>de</strong>l Grupo<br />

15 17 19<br />

Fig. 39 Número <strong>de</strong> Conexiones Exitosas fr<strong>en</strong>te a Solicitu<strong>de</strong>s. Red <strong>de</strong> 20 nodos con grado promedio igual a 4.<br />

Número total <strong>de</strong> solicitu<strong>de</strong>s igual a 3000.<br />

Número <strong>de</strong> Conexiones Exitosas<br />

3.00E+03<br />

2.70E+03<br />

2.40E+03<br />

2.10E+03<br />

1.80E+03<br />

1.50E+03<br />

1.20E+03<br />

9.00E+02<br />

6.00E+02<br />

BCL KMB BCBW BCSAL<br />

3.00E+02<br />

10 15 20 25 30 35 40 45 50<br />

Tamaño <strong>de</strong>l Grupo<br />

Fig. 40 Número <strong>de</strong> Conexiones Exitosas fr<strong>en</strong>te a Solicitu<strong>de</strong>s. Red <strong>de</strong> 50 nodos con grado promedio igual a 4.<br />

Número total <strong>de</strong> solicitu<strong>de</strong>s igual a 3000.<br />

76


L<br />

8 Conclusiones<br />

os protocolos actualm<strong>en</strong>te implem<strong>en</strong>tados utilizan como motor <strong>de</strong> funcionami<strong>en</strong>to<br />

algoritmos g<strong>en</strong>eran árboles m<strong>en</strong>os efici<strong>en</strong>tes que varios <strong>de</strong> los algoritmos propuestos<br />

<strong>en</strong> la literatura. Algunas <strong>de</strong> las razones por las cuales las propuestas <strong>en</strong> la literatura no<br />

han sido implem<strong>en</strong>tadas es que requier<strong>en</strong> <strong>de</strong> información global para operar, no exist<strong>en</strong><br />

implem<strong>en</strong>taciones distribuidas para éstas o requier<strong>en</strong> <strong>de</strong> muchos recursos computacionales<br />

<strong>en</strong> su ejecución.<br />

En este trabajo se efectuó una comparación <strong>en</strong>tre variados algoritmos, para conocer su<br />

r<strong>en</strong>dimi<strong>en</strong>to <strong>en</strong> términos <strong>de</strong> la efectividad y efici<strong>en</strong>cia con que manejan los recursos <strong>de</strong> la red.<br />

Los resultados <strong>de</strong> los experim<strong>en</strong>tos realizados indican que la familia <strong>de</strong> heurísticas BC <strong>en</strong><br />

g<strong>en</strong>eral ti<strong>en</strong>e un mejor <strong>de</strong>sempeño respecto a los otros algoritmos evaluados, tal como KMB o<br />

BSMA, los cuales han sido evaluados favorablem<strong>en</strong>te <strong>en</strong> la literatura. A<strong>de</strong>más BC pres<strong>en</strong>ta la<br />

v<strong>en</strong>taja <strong>de</strong> po<strong>de</strong>r implem<strong>en</strong>tarse <strong>en</strong> forma distribuida y utilizar la información local exist<strong>en</strong>te<br />

<strong>en</strong> las tablas <strong>de</strong> ruteami<strong>en</strong>to unicast <strong>de</strong> cada router. Esta información es necesaria para<br />

evaluar la contribución <strong>de</strong> un <strong>en</strong>lace respecto a formar parte <strong>de</strong>l árbol <strong>de</strong> distribución final.<br />

Los resultados positivos <strong>de</strong> las heurísticas BC impulsan trabajos futuros tales como:<br />

<strong>de</strong>scripción <strong>de</strong>tallada <strong>de</strong> una implem<strong>en</strong>tación distribuida para BC y BCL; incursiones acerca<br />

<strong>de</strong> implem<strong>en</strong>taciones <strong>de</strong> alguna heurística <strong>de</strong> la familia BC para re<strong>de</strong>s inalámbricas y/o<br />

ópticas; evaluación <strong>de</strong> otras medidas tales como: DCBR 9 (Difer<strong>en</strong>cial Cal Blocking Rate), y<br />

efici<strong>en</strong>cia multicast [3.4.7]; evaluación <strong>de</strong> los algoritmos <strong>en</strong> topologías tipo Internet<br />

(utilizando g<strong>en</strong>eradores <strong>de</strong> topologías tales como: BRITE o GT‐ITM, <strong>en</strong>tre otros); simulación<br />

<strong>de</strong> tráfico y evaluación <strong>de</strong> medidas tales como: <strong>de</strong>lay, jitter, pérdida <strong>de</strong> paquetes, etc., a partir<br />

<strong>de</strong> algún experim<strong>en</strong>to <strong>de</strong> simulación basado <strong>en</strong> la funcionalidad <strong>de</strong> MCRSIM.<br />

9 La medida DCBR se basa <strong>en</strong> la medida Call Blocking Rate (CBR), que repres<strong>en</strong>ta la capacidad que el<br />

algoritmo ti<strong>en</strong>e para establecer numerosas conexiones multicast antes <strong>de</strong> saturar los <strong>en</strong>laces <strong>de</strong> la red. CBR<br />

correspon<strong>de</strong> a la fracción <strong>de</strong> conexiones rechazadas sobre el total <strong>de</strong> solicitu<strong>de</strong>s realizadas, es <strong>de</strong>cir:<br />

k<br />

∑<br />

i=<br />

1<br />

aceptada ( C i )<br />

CBR = 1 −<br />

, don<strong>de</strong> k es el número <strong>de</strong> solicitu<strong>de</strong>s <strong>de</strong> conexión g<strong>en</strong>eradas por el simulador <strong>en</strong> cada<br />

k<br />

experim<strong>en</strong>to, Ci correspon<strong>de</strong> a la i‐ésima solicitud <strong>de</strong> conexión, y aceptada(Ci) es una función que retorna 1 si Ci es<br />

aceptada y 0 si es rechazada. DCBR es análogo a CBR pero obt<strong>en</strong>er ésta medida se consi<strong>de</strong>ran solam<strong>en</strong>te una cierta<br />

cantidad <strong>de</strong> las últimas solicitu<strong>de</strong>s <strong>de</strong> conexión.<br />

77


S<br />

9 Agra<strong>de</strong>cimi<strong>en</strong>tos<br />

e agra<strong>de</strong>ce a Carlos Gaule y Christian Bravo, administradores <strong>de</strong> ATMLAB <strong>de</strong> la<br />

Universidad Técnica Fe<strong>de</strong>rico Santa María, y Manuel Jan<strong>de</strong>r por ser habilitantes <strong>en</strong> la<br />

obt<strong>en</strong>ción <strong>de</strong> las herrami<strong>en</strong>tas <strong>de</strong> simulación. A D. Reeves <strong>de</strong> N.C. State University por el<br />

<strong>en</strong>vío <strong>de</strong> un experim<strong>en</strong>to <strong>de</strong> simulación utilizado <strong>en</strong> [56]. A L. Guo <strong>de</strong> Boston University por<br />

el <strong>en</strong>vío <strong>de</strong>l código <strong>de</strong> QDMR utilizado <strong>en</strong> [40] para ser incorporado <strong>en</strong> MCRSIM. A Patricio<br />

Moya y Ezequiel Muñoz, por posibilitar los viajes necesarios para la finalización <strong>de</strong> este<br />

trabajo <strong>de</strong> tesis.<br />

10 Refer<strong>en</strong>cias<br />

[1] R. Talpa<strong>de</strong>, M. Ammar, ʺSingle Connection Emulation (SCE): An Architecture for<br />

Providing a Reliable Multicast Transport Service,ʺ 15th IEEE International Confer<strong>en</strong>ce on<br />

Distributed Computing Systems, 1995.<br />

[2] S. Liang, D. Cheriton, “TCP‐SMO: Ext<strong>en</strong>ding TCP to Support Medium‐Scale Multicast<br />

Applications”, INFOCOM 2002.<br />

[3] V. Visoottiviseth, T. Mogami, N. Demizu, Y. Kadobayashi, S. Yamaguchi, “M/TCP: The<br />

Multicast‐ext<strong>en</strong>sion to Transmission Control Protocol”, Muju, Korea, ICACT 2001.<br />

[4] K. Jeacle, “TCP‐XM: Multicast Transport for Grid Computing” Cos<strong>en</strong>er’s House,<br />

Abingdon, Multi‐Service Networks 2003.<br />

[5] S. Casner, S. Deering, “First IETF Internet Audiocast”, ACM Computer Communication<br />

Review, Vol. 22, no.3, pp. 92‐97. July 1992.<br />

[6] R. Vallejos, A. Zapata. ʺ“A Conceptualization for Classifying Multicast Routing<br />

Algorithms”. Universidad Técnica Fe<strong>de</strong>rico Santa María, 2000.<br />

[7] S. Deering, D. Cheriton, “Multicast Routing in Datagram Internetworks and Ext<strong>en</strong><strong>de</strong>d<br />

LANs”, ACM Transactions on Computer Systems, vol 8, no2, May 1990.<br />

[8] A. Streigel, G. Manimaran, “A Survey of QoS Multicasting Issues”, IEEE<br />

Communications Magazine, Jun 2002.<br />

[9] M. Ramalho, “Intra‐ and Inter‐Domain Multicast Routing Protocols: A Survey and<br />

Taxonomy”, IEEE Surveys & Tutorials, vol3, no.1, First Quarter 2000.<br />

[10] B. Wang, J. Hou, “Multicast Routing and Its Ext<strong>en</strong>sion: Problems, algorithms, and<br />

Protocols”, IEEE Network, Jan/Feb 2000.<br />

[11] P. Pragyansmita, S. V. Raghavan, “Survey of Multicast Routing and Protocols”, Indian<br />

Institute of Technology Madras.<br />

[12] T. Corm<strong>en</strong>, C. Leiserson, R. L. Rivest, C. Stein, “Introduction to algorithms”, Second<br />

Edition MIT, 2001<br />

[13] M. Garey, D. Jonson, “Computers and Intractability. A Gui<strong>de</strong> to the Theory of NP‐<br />

Complet<strong>en</strong>ess”, 22th Edition, 2000.<br />

[14] V. Kompella, J. Pasquale, G. Polyzos, “Multicast Routing for Multimedia<br />

Communication”, IEEE/ACM Transactions on Networking, vol.1, no. 3, Jun 1993.<br />

[15] R. Prim, “Shortest Connection Networks and Some G<strong>en</strong>eralizations”, The Bell Technical<br />

Journal, vol 36, no. 6. pp 1389‐1401, Nov 1957.<br />

78


[16] M. Barría, R. Vallejos, “Algoritmo para Recuperación <strong>de</strong> Errores <strong>en</strong> Comunicaciones<br />

<strong>Multipunto</strong>”, Informe Técnico UTFSM ‐ UV, Ago 2003.<br />

[17] A. El‐Sayed, V. Roca, “A survey of Proposals for an Alternative Group Communication<br />

Service”, IEEE Network, Jan/Feb 2003.<br />

[18] K. C. Almeroth, “The Evolution of Multicast: From the Mbone to Interdomain<br />

Multicast to Internet2 Deploym<strong>en</strong>t”, IEEE Network, Jun 2000.<br />

[19] R. Chalmers, K. C. Almeroth, “On Topology of Multicast Trees”, IEEE/ACM<br />

Transanctions on Networking, Jun 2003.<br />

[20] J. Chuang, M. Sirbu, “Pricing Multicast Communications: A Cost Based Approach”.<br />

Proceedings of INET, 1998.<br />

[21] M. Faloutsos, P. Faloutsos, C. Faloutsos, ʺOn Power‐Law Relationships of the Internet<br />

Topologyʺ, Proceedings of the ACM SIGCOMM, Sept. 1999.<br />

[22] R. Chalmers, K. Almeroth, “Mo<strong>de</strong>ling the Branching Characteristics and Effici<strong>en</strong>cy<br />

Gains in global Multicast Trees”, IEEE INFOCOM 2001.<br />

[23] D. Waitzman, C. Partridge, S. Deering, “Distance Vector Multicast Routing Protocol”,<br />

RFC 1075, 1988.<br />

[24] B. Cain, S. Deering, I. Kouvelas, B. F<strong>en</strong>ner, A. Thyagarajan, “Internet Group<br />

Managem<strong>en</strong>t Protocol, Version 3”, RFC 3376, 2002.<br />

[25] J. Moy, “Multicast Ext<strong>en</strong>sions to OSPF”, RFC 1584, 1994.<br />

[26] A. Ballardie, “Core Based Trees (CBT) Multicast Routing Architecture”, RFC 2201, 1997.<br />

[27] D. Thaler, C. Ravishankar, ʺDistributed C<strong>en</strong>ter Location Algorithmsʺ, IEEE JSAC,<br />

vol.15, no.3, pp.291‐303, Apr. 1997.<br />

[28] A. Adams, J. Nicholas, W. Siadak, “Protocol In<strong>de</strong>p<strong>en</strong><strong>de</strong>nt Multicast ‐ D<strong>en</strong>se Mo<strong>de</strong><br />

(PIM‐DM): Protocol Specification (Revised)”, Draft IETF, Feb 2003.<br />

[29] B. F<strong>en</strong>ner, M. Handley, H. Holbrook, I. Kouvelas, “Protocol In<strong>de</strong>p<strong>en</strong><strong>de</strong>nt Multicast ‐<br />

Sparce Mo<strong>de</strong> (PIM‐SM): Protocol Specification (Revised)”, Draft IETF, Mar 2003.<br />

[30] S. Deering, “Host Ext<strong>en</strong>sions for IP Multicasting”, RFC 1112, August 1989.<br />

[31] S. Deering, W. F<strong>en</strong>ner, B. Haberman, “Multicast List<strong>en</strong>er Discovery (MLD) for IPv6”,<br />

RFC 2710, (Update by RFC3590, Sep 2003) October 1999.<br />

[32] D. Thaler, “Bor<strong>de</strong>r Gateway Multicast Protocol (BGMP)”, Internet Draft, June 2003.<br />

[33] Y. Dalal, R. Metcalfe, “Reverse Path forwarding of Broadcast Packets” ACM<br />

Communications, vol.21, no. 12, pp. 1040‐1048. Dec 1978.<br />

[34] L. Sahasrabuddhe , B. Mukherjee, “Multicast Routing Algorithms and Protocols: A<br />

Tutorial”, IEEE Network, Jan/Feb 2000.<br />

[35] L. Kuo, G. Markowsky, L. Berman, “A Fast Algorithm for Steiner Trees”, Acta<br />

Informatica 15, pp. 141 – 145, 1981.<br />

[36] R. Vallejos, W. Creixell, A. Zapata, “A Multicast Routing Algorithm based on Link<br />

Contribution”, 9th IFIP Confer<strong>en</strong>ce on Performance Mo<strong>de</strong>lling and Evaluation of ATM & IP<br />

Networks, Budapest, 2001.<br />

[37] Q. Sun, H. Lang<strong>en</strong>dörfer, ʺEffici<strong>en</strong>t Multicast Routing for Delay‐S<strong>en</strong>sitive<br />

Applicationsʺ, Proceedings of the second Workshop on Protocols for Multimedia Systems<br />

(PROMSʹ95), pp. 452‐458, October 1995.<br />

[38] R. Widyono, ʺThe Design and Evaluation of Routing Algorithms for Real‐‐time<br />

Channels.ʺ Technical Report (TR‐94‐024), International Computer Sci<strong>en</strong>ce Institute, UC<br />

Berkeley, 1994.<br />

[39] Q. Zhu, M. Parsa, J. Garcia‐Luna‐Aceves, ʺA Source‐Based Algorithm for Delay‐<br />

Constrained Minimum‐Cost Multicastingʺ, Proceeding of IEEE INFOCOMʹ95, pp. 337 ‐<br />

385, 1995.<br />

79


[40] L. Guo, I. Matta, ʺQDMR: An Effici<strong>en</strong>t QoS Dep<strong>en</strong><strong>de</strong>nt Multicast Routing Algorithmʺ,<br />

Proceeding of 5 th IEEE realtime technology and application symposium (RTAS ʹ99),<br />

Vancouver, Canada, June 1999.<br />

[41] M. Arav<strong>en</strong>a. Tesis <strong>de</strong> Magister (<strong>en</strong> Desarrollo). Universidad Técnica Fe<strong>de</strong>rico Santa María,<br />

Dic 2003.<br />

[42] A. Shaikh, K. Shin, ʺDestination‐Driv<strong>en</strong> Routing for Low‐Cost Multicastʺ, IEEE JSAC,<br />

vol.15, no.3, pp. 373 ‐ 381, April 1997.<br />

[43] A. Cobhan, ʺThe Intrinsic Computational Difficulty of Functionsʺ. Proc. International<br />

Congress for Logic Methodology and Philosophy of Sci<strong>en</strong>ce, North Holland, Amsterdam. 1964.<br />

[44] J. Edmonds, ʺPaths, Trees and Flowersʺ, Canad. J. Math. 1965.<br />

[45] S. Cook. “The complexity of Theorem‐Proving Procedures”. Proc. 3 rd Ann. ACM Symp.<br />

On Theory of computing, Association for Compiting Machinery, N.Y. 1971.<br />

[46] R. Karp, “Reducibility Among Combinatorial Problems”, Complexity of Computer<br />

Compatations, Pl<strong>en</strong>um Press, N.Y. 1972.<br />

[47] P. Huang, “Enabling Large‐scale Network Simulations: Selective Abstraction<br />

Approach”, Ph.D. Thesis, University Of Southern California, Dec 1999.<br />

[48] B. Waxman. “Routing of Multipoint Connections”. IEEE Journal on Selected Areas in<br />

Communications, 6(9):1671‐‐1622, 1988.<br />

[49] The Network Simulator ‐ ns‐2, http://www.isi.edu/nsnam/ns/.<br />

[50] Mars Software, http://www.ccs.neu.edu/home/matta/software.html<br />

[51] OMNet++, Discrete Ev<strong>en</strong>ts Simulation System, http://www.omnetpp.org/in<strong>de</strong>x.php.<br />

[52] M. Thomas, E. Zegura. ʺG<strong>en</strong>eration and Analysis of Random Graphs to Mo<strong>de</strong>l<br />

Internetworks.ʺ Technical Report GIT‐CC‐94‐46, College of Computing, Georgia Tech, 1994.<br />

(Software: GT‐ITM: Georgia Tech Internetwork Topology Mo<strong>de</strong>ls).<br />

[53] A. Medina, A. Lakhina, I. Matta, J. Byers, “BRITE: An Approach to Universal Topology<br />

G<strong>en</strong>eration”, in Proceedings of MASCOTS 2001.<br />

[54] J. Winick, S. Jamin, “Inet‐3.0: Internet Topology G<strong>en</strong>erator”, Tech Report UM‐CSE‐TR‐<br />

456‐02, Departm<strong>en</strong>t of EECS, University of Michigan, 2002.<br />

[55] C. Noronha, F. Tobagi ʺEvaluation of Multicast Routing Algorithms for Multimedia<br />

Streamsʺ IEEE ITS94 Proceeding, Rio <strong>de</strong> Janeiro, Brazil,pp.1‐8 Aug. 1994.<br />

[56] H. Salama ʺMulticast Routing for Real‐Time Communication on High‐Speed<br />

Networksʺ, Ph.D. thesis, Departm<strong>en</strong>t of Electrical and Computer Engineering, N.C. State<br />

University, November 1996.<br />

[57] H. Salama, D. Reeves, Y. Viniotis, ʺThe Delayed‐Constrained Minimum Spanning Tree<br />

Problemʺ, Procs. Of 2 nd IEEE Symposium on Computers and Comunications (ISCCʹ97),<br />

Alexandria, Egypt, July 1997.<br />

[58] http://imj.ucsb.edu/mantra/<br />

[59] H. Salama, “MCRSIM: The Multicast Routing Simulator. Version 2”,<br />

http://rtcomm.csc.ncsu.edu/qos.htm, released September 1997.<br />

[60] B. Maglaris, D. Anastassiou, P. S<strong>en</strong>, G. Karlsson, J. Robbins, ʺPerformance Mo<strong>de</strong>ls of<br />

Statistical Multiplexing in Packet Vi<strong>de</strong>o Communications,ʺ IEEE Trans. on Comm., vol.<br />

36, pp. 834‐843, July 1988.<br />

[61] A.G. Waters, “A new heuristic for ATM multicast routing”. 2nd IFIP Workshop on<br />

Performance Mo<strong>de</strong>lling and Evaluation of ATM Networks, pages 8/1‐8/9. University of<br />

Bradford, July 1994.<br />

[62] H. Salama, D. Reeves, Y. Viniotis. “Evaluation of Multicast Routing Algorithms for<br />

Real‐Time Communication on High‐Speed Networks”. IEEE Journal on Selected Areas in<br />

Communications, 15(3):332‐345, (p 77), April 1997.<br />

80


[63] S. Ross. “Simulation”. Aca<strong>de</strong>mic Press N.Y. 1997.<br />

[64] R. Guérin. “Equival<strong>en</strong>t Capacity and Its Application to Bandwidth Allocation in High<br />

Speed Networks”. IEEE Journal on Selected Areas in Communications, vol. 9, no 7, 1991.<br />

81


ANEXO A : Función Complejidad <strong>de</strong> Tiempo & NP<br />

Completitud<br />

En simples palabras se pue<strong>de</strong> <strong>de</strong>cir que un algoritmo es una secu<strong>en</strong>cia <strong>de</strong> pasos que<br />

permit<strong>en</strong> resolver un problema. Normalm<strong>en</strong>te, esta resolución involucra traducir el<br />

algoritmo a algún l<strong>en</strong>guaje para computador. Esto último ya es una limitante <strong>en</strong> términos <strong>de</strong><br />

la comparación <strong>de</strong> algoritmos, pues el resultado <strong>de</strong> los algoritmos <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> la máquina <strong>en</strong><br />

la cual se trabaje, el l<strong>en</strong>guaje <strong>de</strong> programación utilizado, etc. Entonces ¿Cómo comparar<br />

algoritmos <strong>de</strong> una manera objetiva?. En términos <strong>de</strong> la ejecución <strong>de</strong>l algoritmo, un aspecto <strong>de</strong><br />

importancia es el tiempo que éste tarda <strong>en</strong> <strong>en</strong>contrar una solución. Se hace notar que <strong>en</strong> otros<br />

ámbitos, tal como la ing<strong>en</strong>iería <strong>de</strong> software, lo que pue<strong>de</strong> interesar es la compresión <strong>de</strong>l<br />

algoritmo. Sin embargo, t<strong>en</strong>i<strong>en</strong>do <strong>en</strong> cu<strong>en</strong>ta sólo el tiempo <strong>de</strong> ejecución <strong>de</strong>l algoritmo: ¿cómo<br />

juzgar cuál algoritmo se ejecuta más rápido?. En rigor esto no es posible, tal como se<br />

m<strong>en</strong>ciona anteriorm<strong>en</strong>te, ya que el tiempo <strong>de</strong> ejecución <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong>l procesador <strong>de</strong> la<br />

máquina, el l<strong>en</strong>guaje utilizado, el estilo <strong>de</strong> programación, etc. A pesar <strong>de</strong> esto es posible<br />

medir cuantos pasos <strong>de</strong> computación elem<strong>en</strong>tales (operaciones básicas) realiza cada<br />

algoritmo para <strong>en</strong>contrar una solución. Se asume que las operaciones básicas son aquellas<br />

que <strong>de</strong>moran una unidad <strong>de</strong> tiempo <strong>de</strong> máquina, tales como: sumar, multiplicar, comparar,<br />

etc.<br />

Si se consi<strong>de</strong>ra un algoritmo como una secu<strong>en</strong>cia <strong>de</strong> pasos que se sigue para resolver un<br />

problema, dada una cierta <strong>en</strong>trada <strong>de</strong> datos, el número <strong>de</strong> pasos <strong>de</strong>l algoritmo <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong>l<br />

tamaño <strong>de</strong> dicha <strong>en</strong>trada. Consi<strong>de</strong>rando un tamaño específico <strong>de</strong> la <strong>en</strong>trada, un algoritmo se<br />

pue<strong>de</strong> evaluar <strong>de</strong> distintas maneras. Algunas <strong>de</strong> estas formas <strong>de</strong> evaluación pue<strong>de</strong>n<br />

correspon<strong>de</strong>r al peor caso, al mejor caso o al caso promedio.<br />

Peor caso: El peor caso <strong>de</strong> tiempo <strong>de</strong> ejecución es el límite superior para el tiempo <strong>de</strong><br />

ejecución consi<strong>de</strong>rando cualquier <strong>en</strong>trada. El algoritmo no supera este valor <strong>en</strong> ningún caso.<br />

Mejor caso: ti<strong>en</strong>e <strong>de</strong>finición análoga a la <strong>de</strong> peor caso.<br />

Caso promedio: La i<strong>de</strong>a es obt<strong>en</strong>er el valor esperado para el tiempo. Normalm<strong>en</strong>te se obti<strong>en</strong>e<br />

suponi<strong>en</strong>do todas las <strong>en</strong>tradas posibles con igual probabilidad.<br />

Cada problema ti<strong>en</strong>e asociado un tamaño, y el concepto exacto que mi<strong>de</strong> el tamaño <strong>de</strong>l<br />

problema <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> su naturaleza. Así, para una <strong>en</strong>trada correspondi<strong>en</strong>te a un vector, el<br />

tamaño correspon<strong>de</strong> a su longitud; para una matriz, el número <strong>de</strong> elem<strong>en</strong>tos que la<br />

compon<strong>en</strong>; para un grafo, pue<strong>de</strong> ser el número <strong>de</strong> nodos (a veces es más importante<br />

consi<strong>de</strong>rar el número <strong>de</strong> arcos, <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do <strong>de</strong>l tipo <strong>de</strong> problema a resolver); <strong>en</strong> un archivo<br />

se suele usar el número <strong>de</strong> registros, etc. En g<strong>en</strong>eral no es posible dictar una regla g<strong>en</strong>eral,<br />

pues cada problema ti<strong>en</strong>e su propia lógica <strong>de</strong> costo.<br />

El ʺtime complexity functionʺ (función <strong>de</strong> complejidad <strong>de</strong> un algoritmo) es una función<br />

que <strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong>l tamaño <strong>de</strong> la <strong>en</strong>trada al algoritmo, y expresa la mayor cantidad <strong>de</strong> tiempo<br />

que el algoritmo requeriría para resolver el problema.<br />

Casi siempre los problemas pequeños pue<strong>de</strong>n resolverse <strong>de</strong> manera simple y <strong>de</strong> diversas<br />

formas, sin embargo las limitaciones aparec<strong>en</strong> cuando se abordan problemas más gran<strong>de</strong>s.<br />

En consecu<strong>en</strong>cia, interesa estudiar el comportami<strong>en</strong>to <strong>de</strong> un algoritmo cuando el tamaño <strong>de</strong>l<br />

problema crece, esto es cuando ti<strong>en</strong><strong>de</strong> a infinito.<br />

82


Sea g(n) una función que <strong>de</strong>termina el uso <strong>de</strong> recursos <strong>de</strong> un algoritmo <strong>en</strong> función <strong>de</strong>l<br />

tamaño n <strong>de</strong>l problema. Es posible i<strong>de</strong>ntificar familias <strong>de</strong> funciones según su<br />

comportami<strong>en</strong>to asintótico. A un conjunto <strong>de</strong> funciones que compart<strong>en</strong> un mismo<br />

comportami<strong>en</strong>to asintótico se les <strong>de</strong>nomina un or<strong>de</strong>n <strong>de</strong> complejidad. Habitualm<strong>en</strong>te se<br />

<strong>de</strong>nota un or<strong>de</strong>n <strong>de</strong> complejidad como O[ ] y se i<strong>de</strong>ntifica por un miembro f(n) que se utiliza<br />

como repres<strong>en</strong>tante <strong>de</strong> la clase. Entonces, O[f(n)] <strong>de</strong>fine un or<strong>de</strong>n <strong>de</strong> complejidad.<br />

Por ejemplo, suponga que un problema pue<strong>de</strong> resolverse con algoritmos <strong>de</strong> difer<strong>en</strong>tes<br />

complejida<strong>de</strong>s. Para los algoritmos <strong>en</strong>tre sí, se supone que todos ellos requier<strong>en</strong> 1 hora <strong>de</strong><br />

máquina para resolver un problema <strong>de</strong> tamaño N = 100.<br />

¿Cuánto tiempo se requiere para resolver un problema <strong>de</strong> tamaño 2N?<br />

¿Qué tamaño <strong>de</strong> problema pue<strong>de</strong> resolverse si se dispone <strong>de</strong>l doble <strong>de</strong> tiempo? La Tabla<br />

6 muestra los resultados <strong>de</strong> las dos preguntas anteriores.<br />

Tabla 6 Ejemplo <strong>de</strong> Or<strong>de</strong>n <strong>de</strong> complejidad <strong>de</strong> Varios <strong>Algoritmos</strong> hipotéticos<br />

O(f(n)) N = 100 N = 200 t = 2 h<br />

log n 1 h 1.15 h 10000<br />

n 1 h 2 h 200<br />

n log n 1 h 2.30 h 199<br />

n 2 1 h 4 h 141<br />

n 3 1 h 8 h 126<br />

2 n 1 h 10 30 h 101<br />

Tal como ya se había m<strong>en</strong>cionado, caracterizar un algoritmo clasificándolo como efici<strong>en</strong>te<br />

o inefici<strong>en</strong>te <strong>en</strong> términos <strong>de</strong> su tiempo <strong>de</strong> ejecución, <strong>de</strong>p<strong>en</strong><strong>de</strong>rá <strong>de</strong> la situación particular. Sin<br />

embargo, especialistas <strong>en</strong> la materia [13] reconoc<strong>en</strong> que existe una distinción simple para<br />

clasificar un algoritmo. Esta distinción se realiza <strong>en</strong>tre algoritmos <strong>de</strong> tiempo polinomial y<br />

algoritmos <strong>de</strong> tiempo expon<strong>en</strong>cial. Un algoritmo <strong>de</strong> tiempo polinomial está <strong>de</strong>finido como<br />

uno <strong>de</strong> or<strong>de</strong>n O[p(n)], don<strong>de</strong> p(n) es alguna función polinomial. En cambio un algoritmo cuya<br />

función <strong>de</strong> complejidad <strong>de</strong> tiempo (time complexity function) no pueda ser limitada, es<br />

llamado un algoritmo <strong>de</strong> tiempo expon<strong>en</strong>cial. Se <strong>de</strong>be notar que <strong>en</strong> esta última <strong>de</strong>finición se<br />

incluy<strong>en</strong> ciertas funciones <strong>de</strong> complejidad <strong>de</strong> tiempo no polinomiales, tal como n (log n) , las<br />

cuales son normalm<strong>en</strong>te consi<strong>de</strong>radas como funciones no expon<strong>en</strong>ciales. Esta distinción<br />

fundam<strong>en</strong>tal <strong>en</strong>tre algoritmos fue inicialm<strong>en</strong>te discutida <strong>en</strong> [43], [44].<br />

La Tabla 7 muestra <strong>en</strong> forma evi<strong>de</strong>nte porqué algoritmos <strong>de</strong> tiempo polinomial son más<br />

“efici<strong>en</strong>tes” a medida que el tamaño <strong>de</strong>l problema aum<strong>en</strong>ta.<br />

Tabla 7 Varias Funciones <strong>de</strong> complejidad <strong>de</strong> Tiempo <strong>en</strong> función <strong>de</strong>l Tamaño <strong>de</strong> un Problema<br />

Función <strong>de</strong><br />

Tamaño <strong>de</strong>l problema<br />

complejidad<br />

<strong>de</strong> Tiempo<br />

10 20 30 40 50 60<br />

N 0.00001 seg 0.00002 seg 0.00003 seg 0.00004 seg 0.00005 seg 0.00006 seg<br />

n2 0.0001 seg 0.0004 seg 0.0009 seg 0.0016 seg 0.0025 seg 0.0036 seg<br />

n3 0.001 seg 0.008 seg 0.027 seg 0.064 seg 0.125 seg 0.216 seg<br />

n5 0.1 seg 3.2 seg 24.3 seg 1.7 min 5.2 min 13 min<br />

2n 0.01 seg 1 seg 17.9 min 12.7 días 35.7 años 366 c<strong>en</strong>turias<br />

3 n 0.59 seg 58 min 6.5 años 3855<br />

c<strong>en</strong>turias<br />

83<br />

2x10 8<br />

c<strong>en</strong>turias<br />

1.3x10 13<br />

c<strong>en</strong>turias


La distinción <strong>en</strong>tre algoritmos “efici<strong>en</strong>tes” e “inefici<strong>en</strong>tes” <strong>en</strong> términos <strong>de</strong> su función <strong>de</strong><br />

complejidad <strong>de</strong> tiempo (polinomial o expon<strong>en</strong>cial) es realizada tomando <strong>en</strong> cu<strong>en</strong>ta una<br />

medida <strong>de</strong> peor caso. Por ejemplo, un algoritmo con una función <strong>de</strong> complejidad <strong>de</strong> tiempo<br />

2 n es más rápido que uno con función n 5 para problemas <strong>de</strong> tamaño m<strong>en</strong>or a 20.<br />

Sin bi<strong>en</strong> algoritmos <strong>de</strong> tiempo polinomial son “<strong>de</strong>seables”, exist<strong>en</strong> problemas que no<br />

pue<strong>de</strong>n ser resueltos con algoritmos <strong>de</strong> este tipo. O simplem<strong>en</strong>te no se ha <strong>en</strong>contrado algún<br />

algoritmo que los resuelva <strong>en</strong> tiempo polinomial. A este tipo <strong>de</strong> problemas se les llama<br />

“problemas intratables”. Exist<strong>en</strong> esfuerzos <strong>de</strong> teóricos para probar y <strong>en</strong>contrar cuales<br />

problemas son intratables, y como relacionarlos <strong>en</strong>tre ellos. Este trabajo se basa <strong>en</strong> la teoría <strong>de</strong><br />

la NP‐completitud, iniciada a comi<strong>en</strong>zos <strong>de</strong> los 70s [45]. Uno <strong>de</strong> los tópicos <strong>de</strong> interés <strong>en</strong> [45]<br />

es sobre una clase <strong>de</strong> problema: la clase NP <strong>de</strong> problemas <strong>de</strong> <strong>de</strong>cisión (un problema <strong>de</strong><br />

<strong>de</strong>cisión es aquel cuya solución es “sí” o “no”). Allí se sugiere que estos problemas pue<strong>de</strong>n<br />

ser resueltos <strong>en</strong> tiempo polinomial por computadores no <strong>de</strong>terministas, <strong>de</strong> allí el nombre NP<br />

(no <strong>de</strong>terminista polinomial). Esto insinúa que con la computación común exist<strong>en</strong>te hoy,<br />

pue<strong>de</strong> <strong>de</strong>cirse que cuando se habla <strong>de</strong> un problema <strong>de</strong> <strong>de</strong>cisión, se está hablando <strong>de</strong> un<br />

problema intratable. A<strong>de</strong>más, se m<strong>en</strong>ciona que exist<strong>en</strong> problemas <strong>de</strong> la clase NP que ti<strong>en</strong><strong>en</strong><br />

una cierta particularidad, la cual permite que si a un problema <strong>de</strong> esta clase se le <strong>en</strong>cu<strong>en</strong>tra<br />

alguna solución <strong>de</strong> tiempo polinomial, <strong>en</strong>tonces todos los otros problemas <strong>en</strong> NP que t<strong>en</strong>gan<br />

esta particularidad podrán ser resueltos <strong>en</strong> tiempo polinomial. A sí mismo, si un problema <strong>en</strong><br />

NP es intratable, <strong>en</strong>tonces todos los <strong>de</strong>más lo serán. A esta clase <strong>de</strong> problemas se les llama<br />

NP “resist<strong>en</strong>tes” (NP‐hard), dado que se resist<strong>en</strong> a permanecer <strong>en</strong> la clase NP. En [46] se<br />

prueba que muchas versiones <strong>de</strong> problemas <strong>de</strong> <strong>de</strong>cisión <strong>de</strong> problemas combinacionales<br />

bastante conocidos, son NP resist<strong>en</strong>tes. Existe una gama amplia <strong>de</strong> problemas con una<br />

dificultad equival<strong>en</strong>te a los NP resist<strong>en</strong>tes, los cuales se han categorizado <strong>en</strong> una clase <strong>de</strong><br />

problemas llamada NP‐completos. Sin embargo, hasta ahora existe la sigui<strong>en</strong>te pregunta:<br />

¿Son los problemas NP completos intratables?. Esta es una pregunta abierta, y por ahora, <strong>en</strong><br />

la práctica se utilizan heurísticas para resolver los llamados problemas NP‐completos, dado<br />

que no se conoce algún algoritmo que pueda resolverlos <strong>en</strong> tiempo polinomial con<br />

computadores <strong>de</strong>terministas.<br />

En 3.3 se m<strong>en</strong>cionó que varios problemas <strong>de</strong> ruteami<strong>en</strong>to multicast son problemas NP<br />

completos, y por ello normalm<strong>en</strong>te son utilizadas heurísticas.<br />

84


ANEXO B: Breve Tutorial <strong>de</strong> Ns‐2<br />

1 Introducción<br />

Ns (versión 2) es un software ori<strong>en</strong>tado a objetos. Es un simulador <strong>de</strong>sarrollado <strong>en</strong> la<br />

universidad <strong>de</strong> Berkely, ori<strong>en</strong>tado al trabajo <strong>en</strong> re<strong>de</strong>s. Está escrito <strong>en</strong> C++ y OTcl. Ns es<br />

especialm<strong>en</strong>te útil para simular re<strong>de</strong>s <strong>de</strong> área amplia y local. Aunque el Ns es bastante fácil<br />

<strong>de</strong> utilizar una vez que se ha familiarizado con el simulador, es bastante difícil trabajar la<br />

primera vez, pues hay pocos manuales simples y breves. Aunque hay mucha docum<strong>en</strong>tación<br />

escrita por los <strong>de</strong>sarrolladores, que explican <strong>en</strong> profundidad el simulador, normalm<strong>en</strong>te<br />

están ori<strong>en</strong>tados a usuarios experim<strong>en</strong>tados <strong>en</strong> el trabajo <strong>de</strong> Ns.<br />

Esta ayuda int<strong>en</strong>ta apoyar a los nuevos usuarios <strong>en</strong> una introducción rápida al uso <strong>de</strong>l<br />

simulador. Se verán tópicos tales como: configuración <strong>de</strong> las re<strong>de</strong>s para la simulación; don<strong>de</strong><br />

buscar información adicional sobre compon<strong>en</strong>tes <strong>de</strong> red (<strong>en</strong> códigos <strong>de</strong>l simulador); cómo<br />

crear nuevos compon<strong>en</strong>tes <strong>de</strong> red; etc.<br />

2 Contexto<br />

Ns es un simulador que maneja una amplia variedad <strong>de</strong> re<strong>de</strong>s IP. Incluye protocolos <strong>de</strong><br />

red, tales como TCP y UPD, consi<strong>de</strong>ra el comportami<strong>en</strong>to <strong>de</strong> las fu<strong>en</strong>tes <strong>de</strong> tráfico, tal como<br />

ftp, telnet, Web, CBR y VBR, maneja mecanismos <strong>de</strong> administración <strong>de</strong> filas <strong>en</strong> los<br />

ruteadores, tal como: DropTail, RED and CBQ, maneja algoritmos <strong>de</strong> ruteami<strong>en</strong>to tales como<br />

Dijkstra, y otros. También consi<strong>de</strong>ra re<strong>de</strong>s multicasting y algunos protocolos <strong>de</strong> capa MAC<br />

para simulaciones <strong>de</strong> LANs. El proyecto que inició Ns ahora es parte <strong>de</strong>l VINT project que<br />

<strong>de</strong>sarrolla herrami<strong>en</strong>tas para la exhibición <strong>de</strong> los resultados <strong>de</strong> la simulación, el análisis <strong>de</strong><br />

los datos y herrami<strong>en</strong>tas que conviert<strong>en</strong> al formato <strong>de</strong> Ns las topologías <strong>de</strong> red g<strong>en</strong>eradas por<br />

software conocidos.<br />

Actualm<strong>en</strong>te está disponible la versión 2 <strong>de</strong> Ns, que está escrita <strong>en</strong> C++ y OTcl (l<strong>en</strong>guaje<br />

ori<strong>en</strong>tado a objeto que se basa <strong>en</strong> el l<strong>en</strong>guaje Tcl, <strong>de</strong>sarrollado <strong>en</strong> el MIT).<br />

Este docum<strong>en</strong>to habla brevem<strong>en</strong>te sobre la estructura básica <strong>de</strong>l Ns, y explica<br />

<strong>de</strong>talladam<strong>en</strong>te cómo utilizar el Ns <strong>en</strong> base a ejemplos. La mayoría <strong>de</strong> las figuras utilizadas<br />

para <strong>de</strong>scribir la estructura básica <strong>de</strong>l Ns y los compon<strong>en</strong>tes <strong>de</strong> red, provi<strong>en</strong><strong>en</strong> <strong>de</strong> la sigui<strong>en</strong>te<br />

fu<strong>en</strong>te: 5th VINT/Ns Simulator Tutorial/Workshop.<br />

Figura 1: Una visión <strong>de</strong> usuario simplificada para Ns<br />

85


La<br />

Figura 1 muestra una visión <strong>de</strong> usuario <strong>de</strong> Ns simplificada. Ns es un intérprete <strong>de</strong> scripts<br />

<strong>en</strong> l<strong>en</strong>guaje Tcl ori<strong>en</strong>tado a objeto (OTcl). Ns ti<strong>en</strong>e un planificador <strong>de</strong> ev<strong>en</strong>tos para la<br />

simulación, librerías <strong>de</strong> objetos que son compon<strong>en</strong>tes <strong>de</strong> red y librerías <strong>de</strong> módulos <strong>de</strong><br />

configuración <strong>de</strong> red (plumbing modules). Actualm<strong>en</strong>te los módulos plumbing están<br />

implem<strong>en</strong>tados como funciones miembros <strong>de</strong>l objeto simulador base.<br />

Para configurar y correr una simulación <strong>de</strong> una red el usuario <strong>de</strong>berá escribir un script <strong>en</strong><br />

OTcl que inicie un programa <strong>de</strong> ev<strong>en</strong>tos, configure una topología <strong>de</strong> red usando los objetos<br />

<strong>de</strong> red y las funciones plumbing <strong>de</strong> la librería, y finalm<strong>en</strong>te <strong>de</strong>berá anunciar el comi<strong>en</strong>zo y<br />

término <strong>de</strong> la transmisión <strong>de</strong> paquetes <strong>de</strong> las fu<strong>en</strong>tes <strong>de</strong> tráfico <strong>de</strong>ntro <strong>de</strong>l planificador <strong>de</strong><br />

ev<strong>en</strong>tos.<br />

Cuando un usuario quiere hacer un nuevo objeto <strong>de</strong> red, él pue<strong>de</strong> hacerlo escribi<strong>en</strong>do un<br />

nuevo objeto o haci<strong>en</strong>do un objeto compuesto a partir <strong>de</strong> la librería <strong>de</strong> objetos, junto con<br />

conectar los datos <strong>en</strong>tre objetos.<br />

Otro compon<strong>en</strong>te importante <strong>de</strong> Ns, junto a los objetos <strong>de</strong> red, es el planificador <strong>de</strong><br />

acontecimi<strong>en</strong>tos (scheduler ev<strong>en</strong>t). Un acontecimi<strong>en</strong>to o ev<strong>en</strong>to <strong>en</strong> Ns es la i<strong>de</strong>ntificación <strong>de</strong><br />

un único paquete <strong>en</strong> un tiempo programado, junto con un puntero a un objeto que maneja<br />

dicho ev<strong>en</strong>to. En Ns, un scheduler ev<strong>en</strong>t supervisa el tiempo <strong>de</strong> simulación e inicia todos los<br />

ev<strong>en</strong>tos que hay programados <strong>en</strong> la cola <strong>de</strong> ev<strong>en</strong>tos para el instante actual, invocando los<br />

compon<strong>en</strong>tes apropiados <strong>de</strong> red, que son g<strong>en</strong>eralm<strong>en</strong>te los que solicitaron los ev<strong>en</strong>tos, y los<br />

<strong>de</strong>ja hacer las acciones apropiadas asociadas al paquete señalado por el ev<strong>en</strong>to.<br />

Los compon<strong>en</strong>tes <strong>de</strong> la red se pasan paquetes a través <strong>de</strong> la comunicación exist<strong>en</strong>te <strong>en</strong>tre<br />

ellos, no obstante, esta actividad no consume tiempo real <strong>de</strong> simulación. Todas las<br />

compon<strong>en</strong>tes <strong>de</strong> la red que necesitan <strong>de</strong>jar pasar un cierto tiempo <strong>de</strong> simulación para el<br />

procesami<strong>en</strong>to <strong>de</strong> un paquete (es <strong>de</strong>cir que consi<strong>de</strong>ran retardos <strong>en</strong> la compon<strong>en</strong>te), invocan<br />

un ev<strong>en</strong>to que retarda la acción <strong>de</strong>l ev<strong>en</strong>to que correspondía al paquete justo antes <strong>de</strong> pasar<br />

por la compon<strong>en</strong>te.<br />

Por ejemplo, para un compon<strong>en</strong>te <strong>de</strong> red correspondi<strong>en</strong>te a un switch que posee un<br />

retardo <strong>de</strong> conmutación <strong>de</strong> 20 microsegundos, solicita los ev<strong>en</strong>tos para los paquetes 20<br />

microsegundos más tar<strong>de</strong> <strong>en</strong> la simulación. Luego <strong>de</strong> estos 20 microsegundos, el planificador<br />

<strong>de</strong>s<strong>en</strong>colará el ev<strong>en</strong>to para un paquete dado e iniciará la compon<strong>en</strong>te <strong>de</strong> red (switch), la cual<br />

pasará el paquete a otro compon<strong>en</strong>te, que naturalm<strong>en</strong>te correspon<strong>de</strong>rá a un <strong>en</strong>lace.<br />

Otro uso <strong>de</strong>l planificador <strong>de</strong> ev<strong>en</strong>tos es el llevar la cu<strong>en</strong>ta <strong>de</strong>l tiempo. Por ejemplo, <strong>en</strong> TCP<br />

se necesita un contador para saber cuando una transmisión <strong>de</strong> paquete a superado el time<br />

out establecido <strong>en</strong> el protocolo, y así retransmitir el paquete. (La retransmisión <strong>de</strong>l paquete se<br />

realizará con el mismo número <strong>de</strong> transmisión TCP pero distinta i<strong>de</strong>ntificación <strong>de</strong> paquete<br />

para Ns).<br />

Los contadores usan el planificador <strong>de</strong> ev<strong>en</strong>tos <strong>de</strong> manera similar a los retardos. La única<br />

difer<strong>en</strong>cia es que los contadores mi<strong>de</strong>n el tiempo asociado a un paquete y hac<strong>en</strong> la acción<br />

apropiada relativa a ese paquete <strong>de</strong>spués <strong>de</strong> un tiempo específico, sin ser esto la simulación<br />

<strong>de</strong> un retraso.<br />

Ns no sólo está escrito <strong>en</strong> OTcl, si no que también <strong>en</strong> C++. Por razones <strong>de</strong> efici<strong>en</strong>cia, Ns<br />

separa para la implem<strong>en</strong>tación los path <strong>de</strong> datos y control. A modo <strong>de</strong> reducir los paquetes y<br />

el tiempo <strong>de</strong> procesami<strong>en</strong>to (no el tiempo <strong>de</strong> simulación), el planificador <strong>de</strong> ev<strong>en</strong>tos y los<br />

86


objetos que son compon<strong>en</strong>tes básicos <strong>de</strong> red <strong>en</strong> el path <strong>de</strong> datos están escritos y compilados<br />

usando C++. Estos objetos compilados están disponibles para el interprete <strong>de</strong> OTcl a través <strong>de</strong><br />

un una vinculación <strong>en</strong>tre pares <strong>de</strong> objetos OTcl y objetos C++, a<strong>de</strong>más <strong>de</strong> hacer actuar a las<br />

funciones <strong>de</strong> control y variables configurables especificadas por un objeto C++ como<br />

funciones y variables miembro <strong>de</strong>l correspondi<strong>en</strong>te objeto OTcl. De este modo, se da el<br />

control <strong>de</strong> los objetos C++ a OTcl. Esto hace posible también agregar funciones y variables<br />

miembros a un objeto OTcl vinculado a C++. Los objetos C++ que no necesitan ser<br />

controlados <strong>en</strong> una simulación o internam<strong>en</strong>te usados por otro objeto, no necesitan ser<br />

vinculados a OTcl. Análogam<strong>en</strong>te, un objeto (que no está <strong>en</strong> el path <strong>de</strong> datos) pue<strong>de</strong> ser<br />

implem<strong>en</strong>tado completam<strong>en</strong>te <strong>en</strong> OTcl. La Figura 2 muestra un ejemplo <strong>de</strong> objeto jerárquico<br />

<strong>en</strong> C++ y OTcl. Se <strong>de</strong>be notar que para los objetos que forman una jerarquía <strong>en</strong> C++ y que<br />

ti<strong>en</strong><strong>en</strong> vínculos con OTcl, existe una dualidad con una jerarquía muy similar <strong>de</strong> objetos OTcl<br />

Figura 2: Dualidad <strong>en</strong>tre C++ y OTcl<br />

Figura 3: Arquitectura <strong>de</strong> Ns<br />

La Figura 3 muestra la arquitectura g<strong>en</strong>eral <strong>de</strong> Ns. En esta figura un usuario g<strong>en</strong>eral (no un<br />

<strong>de</strong>sarrollador) pue<strong>de</strong> consi<strong>de</strong>rar quedarse trabajando <strong>en</strong> la esquina izquierda inferior <strong>de</strong> la<br />

figura, diseñando y corri<strong>en</strong>do simulaciones <strong>en</strong> Tcl usando el simulador <strong>de</strong> objetos <strong>de</strong> la<br />

librería.<br />

El planificador <strong>de</strong> ev<strong>en</strong>tos y la mayor parte <strong>de</strong> las compon<strong>en</strong>tes <strong>de</strong> red están<br />

implem<strong>en</strong>tadas <strong>en</strong> C++ y están disponibles para OTcl a través <strong>de</strong> un vinculador OTcl (OTcl<br />

linkage) que se implem<strong>en</strong>ta usando tclcl. El conjunto <strong>de</strong> todas estas cosas conforman el Ns, el<br />

cual es un intérprete Tcl ext<strong>en</strong>dido a OO, con librerías para simulación <strong>de</strong> re<strong>de</strong>s.<br />

Esta sección examina brevem<strong>en</strong>te la estructura g<strong>en</strong>eral y la arquitectura <strong>de</strong> Ns. A esta<br />

altura, uno podría preguntarse como obt<strong>en</strong>er los resultados <strong>de</strong> la simulación <strong>en</strong> Ns. Como se<br />

87


muestra <strong>en</strong> la<br />

Figura 1, cuando una simulación finaliza, y si se ha especificado <strong>en</strong> el script <strong>de</strong> <strong>en</strong>trada Tcl<br />

(o más específicam<strong>en</strong>te OTcl), Ns produce uno o más archivos <strong>de</strong> salida <strong>en</strong> formato <strong>de</strong> texto<br />

que conti<strong>en</strong><strong>en</strong> los datos <strong>de</strong> simulación <strong>de</strong>tallados. Los datos pue<strong>de</strong>n ser utilizados para<br />

análisis <strong>de</strong> simulación (<strong>en</strong> secciones posteriores se muestran dos ejemplos <strong>de</strong> análisis <strong>de</strong><br />

simulación) o como <strong>en</strong>trada para la visualización gráfica <strong>de</strong> la simulación <strong>en</strong> la herrami<strong>en</strong>ta<br />

llamada Network Animator (NAM) que fue <strong>de</strong>sarrollada como parte <strong>de</strong>l proyecto VINT,<br />

como una interfase amigable similar a un CD player (con play, rewind, fase fordward, pausa,<br />

etc.), y también con un controlador <strong>de</strong> la velocidad. A<strong>de</strong>más, esta herrami<strong>en</strong>ta también<br />

pue<strong>de</strong> pres<strong>en</strong>tar información gráficam<strong>en</strong>te, tal como throughput y el número <strong>de</strong> paquetes<br />

que pasan por cada <strong>en</strong>lace, aunque ésta no pueda ser utilizada para análisis exactos.<br />

3 Conceptos Básicos<br />

3.1 OTcl, el leguaje <strong>de</strong> usuario<br />

Como ya se m<strong>en</strong>ciono anteriorm<strong>en</strong>te, el Ns es básicam<strong>en</strong>te un intérprete <strong>de</strong> OTcl con<br />

librerías <strong>de</strong> objetos que permit<strong>en</strong> simular la red. Es muy útil saber programar <strong>en</strong> OTcl para<br />

utilizar el Ns. Esta sección muestra un ejemplo <strong>en</strong> l<strong>en</strong>guaje Tcl y OTcl, que permite <strong>en</strong>t<strong>en</strong><strong>de</strong>r<br />

la i<strong>de</strong>a básica <strong>de</strong> la programación <strong>en</strong> OTcl. Se supone que el usuario ya ha instalado (ver<br />

Anexo 1) Ns y maneja los conceptos <strong>de</strong> C y C++.<br />

El ejemplo 1 es un script g<strong>en</strong>eral <strong>en</strong> Tcl que muestra cómo crear y llamar un<br />

procedimi<strong>en</strong>to, cómo asignar valores a las variables, y cómo hacer un loop. Sabi<strong>en</strong>do que<br />

OTcl es una ext<strong>en</strong>sión ori<strong>en</strong>tada a objeto <strong>de</strong> Tcl, es obvio que todos los comandos <strong>de</strong> Tcl<br />

también trabajan <strong>en</strong> OTcl. La relación <strong>en</strong>tre Tcl y Otcl es tal como la <strong>de</strong> C y C++. Para correr el<br />

script se <strong>de</strong>be <strong>de</strong>scargar el archivo ex‐tcl.tcl, y escribir ʺns ex‐tcl.tclʺ <strong>en</strong> la línea <strong>de</strong> comandos.<br />

La s<strong>en</strong>t<strong>en</strong>cia “ns” inicia el Ns (que es un intérprete <strong>de</strong> OTcl). Se obti<strong>en</strong><strong>en</strong> los mismos<br />

resultados si se escribe ʺtcl ex‐tcl.tclʺ, siempre y cuando el tcl8.0 está instalado <strong>en</strong> la máquina.<br />

Figura 4: Ejemplo <strong>de</strong> script Tcl<br />

En Tcl, el comando proc se utiliza para <strong>de</strong>finir un procedimi<strong>en</strong>to, esta <strong>de</strong>be ir seguida<br />

por un nombre y <strong>en</strong>tre llaves escribir los argum<strong>en</strong>tos <strong>de</strong>l procedimi<strong>en</strong>to. El comando set se<br />

utiliza para asignar un valor a una variable. La s<strong>en</strong>t<strong>en</strong>cia [expr ...] es para hacer que el<br />

88


intérprete calcule el valor <strong>de</strong> la expresión que está <strong>de</strong>ntro <strong>de</strong>l paréntesis cuadrado, <strong>de</strong>spués<br />

<strong>de</strong>l comando. Note que esto es para obt<strong>en</strong>er el valor asignado a una variable, el comando $ es<br />

usado con el nombre <strong>de</strong> la variable. El comando put imprime <strong>en</strong> la salida la secu<strong>en</strong>cia escrita<br />

<strong>en</strong>tre comillas (“ ”). A continuación se muestran los resultados <strong>de</strong>l ejemplo 1.<br />

El próximo ejemplo está <strong>en</strong> escrito <strong>en</strong> OTcl. Este ejemplo es muy simple, pero muestra la<br />

forma <strong>en</strong> la cuál se crea y utiliza un objeto OTcl. Como usuario común y corri<strong>en</strong>te <strong>de</strong> Ns, sólo<br />

<strong>en</strong> raras ocasiones escribirá su propio objeto. Sin embargo, puesto que todos los objetos <strong>de</strong>l<br />

Ns que utilizará están escritos <strong>en</strong> C++ (vinculados a OTcl) o puram<strong>en</strong>te <strong>en</strong> OTcl, es bastante<br />

útil que <strong>en</strong>ti<strong>en</strong>da este l<strong>en</strong>guaje.<br />

Figura 5: Ejemplo Script OTcl<br />

89


El ejemplo 2 es un script OTcl que crea dos objetos <strong>de</strong> difer<strong>en</strong>tes clases, clase “mom”<br />

(ʺmamaʺ) y clase “kid” (ʺniñoʺ). La clase “kid” es una clase hijo <strong>de</strong> la clase ʺmomʺ. A<strong>de</strong>más,<br />

este script <strong>de</strong>fine una función miembro llamada “greet” (ʺsaludoʺ) <strong>en</strong> cada clase.<br />

En el ejemplo, <strong>de</strong>spués <strong>de</strong> las <strong>de</strong>finiciones <strong>de</strong> clases, se establec<strong>en</strong> los valores <strong>de</strong> la<br />

variable “age” para cada objeto creado, que se fijará <strong>en</strong> 45 para el objeto <strong>de</strong> clase “mom” y <strong>en</strong><br />

15 para el objeto <strong>de</strong> clase “kid”. Luego, se llamará a la función miembro ʺgreetʺ para cada<br />

objeto.<br />

El comando Class es para crear una clase <strong>de</strong> objeto e instproc es para <strong>de</strong>finir una<br />

función miembro para una clase <strong>de</strong> objeto. La her<strong>en</strong>cia <strong>de</strong> clases es especificada usando el<br />

comando superclass. En la <strong>de</strong>finición <strong>de</strong> funciones miembro, $self actúa como el<br />

puntero ʺthisʺ <strong>en</strong> C++, e instvar verifica si el nombre <strong>de</strong> la variable está <strong>de</strong>clarada <strong>en</strong> su<br />

clase o <strong>en</strong> la superclase. Si el nombre <strong>de</strong> la variable ya está <strong>de</strong>clarado, la variable es<br />

refer<strong>en</strong>ciada, si es que no se ha <strong>de</strong>clarado nuevam<strong>en</strong>te. Finalm<strong>en</strong>te el comando new se utiliza<br />

para crear un objeto, tal como muestra el ejemplo. Al <strong>de</strong>scargar y ejecutar este ejemplo, que<br />

correspon<strong>de</strong> al archivo ex‐otcl.tcl, se obti<strong>en</strong><strong>en</strong> los sigui<strong>en</strong>tes resultados:<br />

(Recuer<strong>de</strong> que para correr el ejemplo <strong>de</strong>be escribir <strong>en</strong> la línea <strong>de</strong> comando “ns ex‐<br />

otcl.tclʺ).<br />

3.2 Un ejemplo simple <strong>de</strong> simulación<br />

Esta sección muestra un script muy simple <strong>de</strong> una simulación con Ns, aquí se explica lo<br />

que hace cada línea <strong>de</strong>l código. El ejemplo 3 es un script <strong>en</strong> OTcl que crea una configuración<br />

<strong>de</strong> red bastante simple, tal como se observa <strong>en</strong> el esquema <strong>de</strong> la Figura 6. Para echar a correr<br />

esta simulación, se <strong>de</strong>be <strong>de</strong>scargar el archivo ns‐simple.tcl y escribir <strong>en</strong> la línea <strong>de</strong> comandos<br />

ʺns ns‐simple.tclʺ.<br />

90


Figura 6: Ejemplo <strong>de</strong> una topología <strong>de</strong> red simple y su esc<strong>en</strong>ario <strong>de</strong> simulación<br />

La red <strong>de</strong> la Figura 6 se conforma <strong>de</strong> 4 nodos (n0, n1, n2 y n3). Los <strong>en</strong>laces duplex <strong>en</strong>tre<br />

el nodo n0 y n2, y <strong>en</strong>tre el nodo n1 y n2 ti<strong>en</strong><strong>en</strong> un ancho <strong>de</strong> banda <strong>de</strong> 10 Mbps y un retardo<br />

<strong>de</strong> 10 ms. El <strong>en</strong>lace duplex <strong>en</strong>tre n2 y n3 ti<strong>en</strong>e un ancho <strong>de</strong> banda <strong>de</strong> 1.7 Mbps y 20 ms <strong>de</strong><br />

retardo. Cada nodo utiliza una metodología DropTail para el manejo <strong>de</strong> sus filas, las cuales<br />

ti<strong>en</strong><strong>en</strong> un tamaño máximo <strong>de</strong> 10 unida<strong>de</strong>s. Para este ejemplo se adjunta un ag<strong>en</strong>te “tcp” al<br />

nodo n0, y se establece una conexión con el nodo n3, al cual se le ha adjunto un ag<strong>en</strong>te “sink”<br />

tcp. Por <strong>de</strong>fecto, el máximo tamaño <strong>de</strong> un paquete g<strong>en</strong>erado por un ag<strong>en</strong>te “tcp” es 1Kbyte.<br />

Un ag<strong>en</strong>te “sink” tcp g<strong>en</strong>era y <strong>en</strong>vía paquetes ACK al emisor (ag<strong>en</strong>te tcp) y rescata los<br />

paquetes recibidos.<br />

Un ag<strong>en</strong>te “udp” es adjunto al nodo n1, el cual se conecta con el nodo n3, que ti<strong>en</strong>e<br />

adjunto un ag<strong>en</strong>te “null”. Note que un ag<strong>en</strong>te “null” solam<strong>en</strong>te rescata los paquetes<br />

recibidos. El esquema <strong>de</strong> red también consi<strong>de</strong>ra g<strong>en</strong>eradores <strong>de</strong> tráfico “ftp” y “cbr” que son<br />

adjuntos a los ag<strong>en</strong>tes “tcp” y “udp” respectivam<strong>en</strong>te. El g<strong>en</strong>erador “cbr” es configurado<br />

para g<strong>en</strong>erar paquetes <strong>de</strong> 1Kbyte a una tasa <strong>de</strong> 1 Mbps, y está configurado para com<strong>en</strong>zar a<br />

los 0.1 seg. y parar a los 4.5 seg. Así mismo, el g<strong>en</strong>erador “ftp” está configurado para partir<br />

justo <strong>de</strong>spués <strong>de</strong> 1 seg. y parar a los 4.0 seg.<br />

91


Figura 7: Un Ejemplo simple <strong>de</strong> un script para simulación <strong>en</strong> Ns<br />

A continuación se explica el script <strong>de</strong> la Figura 7.<br />

92


En g<strong>en</strong>eral, un script <strong>de</strong> Ns comi<strong>en</strong>za con la creación <strong>de</strong> un objeto <strong>de</strong> clase simulador.<br />

Set ns [new Simulator]: g<strong>en</strong>era un objeto <strong>de</strong> Ns <strong>de</strong> clase simulador, y lo asigna a<br />

la variable ns. (<strong>en</strong> esta sección se usa letra itálica para variables y valores). A continuación se<br />

explica lo que esta línea hace:<br />

• Inicializa el formato <strong>de</strong> los paquetes<br />

• Crea un scheduler o planificador<br />

• Selecciona el formato <strong>de</strong> direcciones por <strong>de</strong>fecto<br />

El objeto “Simulator” ti<strong>en</strong>e una función miembro que hace lo sigui<strong>en</strong>te:<br />

• Crea objetos compuestos tal como nodos y <strong>en</strong>laces (<strong>de</strong>scritos más a<strong>de</strong>lante)<br />

• Conecta los objetos creados que son compon<strong>en</strong>tes <strong>de</strong> la red (con attach-ag<strong>en</strong>t)<br />

• Establece los parámetros <strong>de</strong> las compon<strong>en</strong>tes <strong>de</strong> la red (<strong>en</strong> su mayor parte para<br />

objetos compuestos)<br />

• Crea la conexiones <strong>en</strong>tre ag<strong>en</strong>tes (<strong>en</strong>tre un ag<strong>en</strong>te “tcp” y un ag<strong>en</strong>te “sink” por<br />

ejemplo)<br />

• Especifica las opciones <strong>de</strong> <strong>de</strong>spliegue <strong>de</strong> NAM<br />

• Etc.<br />

La mayoría <strong>de</strong> las funciones miembro son para configurar la simulación (vistas <strong>en</strong> la<br />

sección “Contexto” como plumbing functions) y hacer la planificación para los ev<strong>en</strong>tos, sin<br />

embargo algunas <strong>de</strong> estas funciones son para el visualizador NAM. Las implem<strong>en</strong>taciones <strong>de</strong><br />

las funciones miembros <strong>de</strong>l objeto “Simulator” están localizadas <strong>en</strong> el archivo ʺns‐2/tcl/lib/ns‐<br />

lib.tclʺ.<br />

$ns color fid color: especifica el color <strong>de</strong> los paquetes para un flujo <strong>de</strong> paquetes<br />

especificado por fid. Esta función miembro <strong>de</strong>l objeto “Simulator” es para el visualizador<br />

NAM, y no ti<strong>en</strong>e efecto sobre la simulación actual.<br />

$ns namtrace-all file-<strong>de</strong>scriptor: Esta función miembro dice al simulador que<br />

registre las rutas <strong>de</strong> simulación <strong>en</strong> el formato <strong>de</strong> <strong>en</strong>trada <strong>de</strong> NAM. También da el nombre al<br />

archivo <strong>de</strong> aquella ruta que será escrita <strong>de</strong>spués por el comando $ns flush-trace.<br />

Similarm<strong>en</strong>te, la función miembro trace-all es para registrar la ruta <strong>de</strong> simulación <strong>en</strong> el<br />

formato g<strong>en</strong>eral.<br />

proc finish {}: es llamada <strong>de</strong>spués <strong>de</strong> la simulación y <strong>de</strong>pués <strong>de</strong>l comando $ns at<br />

5.0. (Se llama al procedimi<strong>en</strong>to <strong>de</strong>spués <strong>de</strong> 5 segundos <strong>de</strong>l tiempo <strong>de</strong> simulación). En esta<br />

función son especificados los procesos <strong>de</strong> post‐simulación.<br />

set n0 [$ns no<strong>de</strong>]: La función miembro no<strong>de</strong> crea un nodo. Un nodo es un objeto<br />

compuesto <strong>en</strong> Ns, hecho <strong>de</strong> direcciones y clasificadores <strong>de</strong> puerto (se <strong>de</strong>scrib<strong>en</strong> <strong>en</strong> la sección<br />

posterior). Los usuarios pue<strong>de</strong>n crear un nodo creando por separado los objetos dirección y<br />

clasificador <strong>de</strong> puerto, y luego conectándolos. Sin embargo, esta función miembro <strong>de</strong>l objeto<br />

Simulator ahorra un poco <strong>de</strong> trabajo. Para conocer como se crea un nodo, se pue<strong>de</strong>n ver los<br />

archivos: ʺns‐2/tcl/libs/ns‐lib.tclʺ y ʺns‐2/tcl/libs/ns‐no<strong>de</strong>.tclʺ.<br />

93


$ns duplex-link no<strong>de</strong>1 no<strong>de</strong>2 bandwidth <strong>de</strong>lay queue-type: crea dos<br />

<strong>en</strong>laces simples <strong>de</strong> un ancho <strong>de</strong> banda y retardo específico, y conecta a dos nodos dados. En<br />

Ns, la cola <strong>de</strong> salida <strong>de</strong> un nodo es implem<strong>en</strong>tada como parte <strong>de</strong> un <strong>en</strong>lace, <strong>en</strong> consecu<strong>en</strong>cia<br />

los usuarios podrían especificar el tipo <strong>de</strong> cola <strong>en</strong> el mom<strong>en</strong>to que crean un <strong>en</strong>lace. En el<br />

script <strong>de</strong> simulación mostrado arriba, se usa una cola <strong>de</strong> tipo DropTail. Si se quisiera utilizar<br />

un tipo <strong>de</strong> cola RED, simplem<strong>en</strong>te se <strong>de</strong>be reemplazar la palabra Drop Tail por RED. La<br />

implem<strong>en</strong>tación <strong>de</strong> un <strong>en</strong>lace <strong>en</strong> Ns se muestra <strong>en</strong> la sección posterior. Análogam<strong>en</strong>te a un<br />

nodo, un <strong>en</strong>lace es un objeto compuesto, y los usuarios pue<strong>de</strong>n crearlo con subobjetos que se<br />

conectan. El código fu<strong>en</strong>te <strong>de</strong> los <strong>en</strong>laces se pue<strong>de</strong> <strong>en</strong>contrar <strong>en</strong> los archivos “ns‐2/tcl/libs/ns‐<br />

lib.tclʺ y ʺns‐2/tcl/libs/ns‐link.tcl”. Cabe <strong>de</strong>stacar que pue<strong>de</strong>n insertarse módulos <strong>de</strong> error <strong>en</strong><br />

un compon<strong>en</strong>te <strong>de</strong> un <strong>en</strong>lace, con el fin <strong>de</strong> simular una pérdida <strong>de</strong> <strong>en</strong>lace (actualm<strong>en</strong>te los<br />

usuarios pue<strong>de</strong>n hacer e insertar algún objeto <strong>de</strong> red). Para más <strong>de</strong>talles se pue<strong>de</strong> ver la<br />

docum<strong>en</strong>tación oficial <strong>de</strong> Ns.<br />

$ns queue-limit no<strong>de</strong>1 no<strong>de</strong>2 number: Esta línea establece el límite <strong>de</strong> la cola (al<br />

número especificado, number) para los dos <strong>en</strong>laces simples que conectan al nodo n1 con el<br />

nodo n2. Seguram<strong>en</strong>te muchas <strong>de</strong> las cosas que están disponibles para las funciones<br />

miembros <strong>de</strong>l objeto Simulator no se han visto ni se verán <strong>en</strong> las sigui<strong>en</strong>tes secciones. Para<br />

más <strong>de</strong>talles se pue<strong>de</strong>n ver los archivos ʺns‐2/tcl/libs/ns‐lib.tclʺ y ʺns‐2/tcl/libs/ns‐link.tclʺ, o<br />

bi<strong>en</strong> la docum<strong>en</strong>tación oficial <strong>de</strong> Ns.<br />

$ns duplex-link-op no<strong>de</strong>1 no<strong>de</strong>2 ...: <strong>de</strong>spués <strong>de</strong> esta s<strong>en</strong>t<strong>en</strong>cia, el próximo par<br />

<strong>de</strong> líneas son usadas por el visualizador NAM. Para ver los efectos <strong>de</strong> estas líneas <strong>de</strong> código<br />

los usuarios pue<strong>de</strong>n com<strong>en</strong>tarlas y ver que pasa <strong>en</strong> la simulación.<br />

Ahora que está hecha la configuración básica <strong>de</strong> la red, el próximo paso es configurar los<br />

ag<strong>en</strong>tes <strong>de</strong> tráfico tales como TCP y UDP, las fu<strong>en</strong>tes <strong>de</strong> tráfico, tales como FTP y CBR, y<br />

adjuntarlos a los nodos y ag<strong>en</strong>tes respectivam<strong>en</strong>te.<br />

set tcp [new Ag<strong>en</strong>t/TCP]: Esta línea muestra como crear un ag<strong>en</strong>te TCP. En<br />

g<strong>en</strong>eral, los usuarios pue<strong>de</strong>n crear algún ag<strong>en</strong>te o fu<strong>en</strong>te <strong>de</strong> tráfico <strong>de</strong> esta manera. Los<br />

ag<strong>en</strong>tes y fu<strong>en</strong>tes <strong>de</strong> tráfico son <strong>de</strong> hecho objetos básicos (no compuestos), la mayoría <strong>de</strong> ellos<br />

están implem<strong>en</strong>tados <strong>en</strong> C++ y vinculados a OTcl. En consecu<strong>en</strong>cia, no hay funciones<br />

miembros específicas <strong>de</strong>l objeto Simulator que cre<strong>en</strong> estas clases <strong>de</strong> objetos. Para crear<br />

ag<strong>en</strong>tes o fu<strong>en</strong>tes <strong>de</strong> tráfico, un usuario <strong>de</strong>bería conocer el nombre <strong>de</strong> la clase <strong>de</strong> estos objetos<br />

(Ag<strong>en</strong>t/TCP, Ag<strong>en</strong>t/TCPSink, Application/FTP y así sucesivam<strong>en</strong>te). Esta información se<br />

pue<strong>de</strong> obt<strong>en</strong>er <strong>en</strong> la docum<strong>en</strong>tación oficial <strong>de</strong>l Ns. Un atajo es ver el archivo ʺns‐2/tcl/libs/ns‐<br />

<strong>de</strong>fault.tclʺ. Este archivo conti<strong>en</strong>e los valores <strong>de</strong> los parámetros configurables por <strong>de</strong>fecto<br />

para los objetos <strong>de</strong> red disponibles.<br />

$ns attach-ag<strong>en</strong>t no<strong>de</strong> ag<strong>en</strong>t: La función miembro attach-ag<strong>en</strong>t adjunta un<br />

objeto ag<strong>en</strong>te creado para un objeto nodo. Actualm<strong>en</strong>te, lo que hace esta función es llamar a<br />

la función miembro “attach” <strong>de</strong> un nodo específico, el cual adjunta el ag<strong>en</strong>te dado para el. En<br />

consecu<strong>en</strong>cia, un usuario pue<strong>de</strong> hacer la misma cosa, por ejemplo, $n0 attach $tcp.<br />

Similarm<strong>en</strong>te, cada objeto ag<strong>en</strong>te ti<strong>en</strong>e una función miembro attach-ag<strong>en</strong>t que adjunta un<br />

objeto fu<strong>en</strong>te <strong>de</strong> tráfico a si mismo.<br />

$ns connect ag<strong>en</strong>t1 ag<strong>en</strong>t2: Después que los dos ag<strong>en</strong>tes creados están<br />

comunicados, el próximo paso a seguir es establecer la conexión lógica <strong>de</strong> red <strong>en</strong>tre ellos.<br />

94


Esta línea establece una conexión <strong>de</strong> red al especificar las direcciones <strong>de</strong>stino <strong>de</strong> cada red y<br />

las direcciones <strong>de</strong> los puertos <strong>de</strong>l par <strong>de</strong> ag<strong>en</strong>tes.<br />

Suponi<strong>en</strong>do que toda la configuración <strong>de</strong> red ya está hecha, lo sigui<strong>en</strong>te es escribir un<br />

esc<strong>en</strong>ario <strong>de</strong> simulación (e.d. un planificador <strong>de</strong> ev<strong>en</strong>tos).<br />

El objeto Simulator ti<strong>en</strong>e muchas funciones miembro para la planificación <strong>de</strong> ev<strong>en</strong>tos.<br />

Sin embargo, una <strong>de</strong> las más usadas es la sigui<strong>en</strong>te:<br />

$ns at time "string": Esta función miembro <strong>de</strong>l objeto Simulator hace la<br />

planificación (scheduler 10 ) para la ejecución <strong>de</strong> un cierto plan <strong>de</strong> ev<strong>en</strong>tos restringido al<br />

tiempo <strong>de</strong> simulación. Por ejemplo, $ns at 0.1 "$cbr start" hace que el planificador<br />

llame a la función miembro start <strong>de</strong>l objeto fu<strong>en</strong>te <strong>de</strong> tráfico CBR, el cual comi<strong>en</strong>za a<br />

transmitir datos <strong>en</strong> el tiempo 0.1 segundos <strong>de</strong> la simulación.<br />

En Ns, usualm<strong>en</strong>te las fu<strong>en</strong>tes <strong>de</strong> tráfico no transmit<strong>en</strong> los datos actuales, pues estos<br />

notifican al ag<strong>en</strong>te por <strong>de</strong>bajo <strong>de</strong> ellos que ti<strong>en</strong><strong>en</strong> que transmitir una cierta cantidad <strong>de</strong> datos,<br />

y ellos sab<strong>en</strong> exactam<strong>en</strong>te que cantidad <strong>de</strong> datos transmitir, así que crean los paquetes y los<br />

<strong>en</strong>vían.<br />

Después <strong>de</strong> toda la configuración, se realizan la planificación y los procedimi<strong>en</strong>tos <strong>de</strong><br />

post‐simulación. La única cosa necesaria para correr la simulación es escribir $ns run.<br />

10 scheduler_ es la variable que apunta al objeto planificador creado por el comando [new Scheduler] que<br />

normalm<strong>en</strong>te va al comi<strong>en</strong>zo <strong>de</strong>l script<br />

95


4 ¿Cómo instalar Ns <strong>en</strong> Windows?<br />

Exist<strong>en</strong> varias maneras <strong>de</strong> instalar Ns, y cada una <strong>de</strong>p<strong>en</strong><strong>de</strong>rá <strong>de</strong> la plataforma <strong>en</strong> don<strong>de</strong><br />

se quiera trabajar. Si se quiere seguir trabajando <strong>en</strong> Windows, es necesario t<strong>en</strong>er un emulador<br />

<strong>de</strong> linux <strong>en</strong> el PC. Para ello se pue<strong>de</strong> bajar Cygwin para Microsoft Windows<br />

9x/ME/NT/2000/XP.<br />

Otro aspecto que <strong>de</strong>be consi<strong>de</strong>rarse, es saber si se quiere instalar Ns, paquete por<br />

paquete o todo <strong>de</strong> una vez. Existe un paquete <strong>de</strong> instalación <strong>de</strong> Ns llamado “allinone” (todo<br />

<strong>en</strong> uno), el cual corre un script que crea automáticam<strong>en</strong>te el makefile necesario para <strong>de</strong>jar<br />

andando Ns <strong>de</strong> una vez.<br />

Para correr NAM <strong>en</strong> tu Cygwin ya instalado es necesario t<strong>en</strong>er algún servidor X<br />

corri<strong>en</strong>do. Para ello se <strong>de</strong>be instalar Cygwin XFree86 Server .<br />

¿Cómo comi<strong>en</strong>zo?<br />

• Para ns‐allinone‐2.26<br />

o Necesitas ns‐allinone‐2.26, disponible <strong>en</strong> http://www.isi.edu/nsnam/dist/ns‐<br />

allinone‐2.26.tar.gz<br />

o Todos los parches para Cygwin ti<strong>en</strong><strong>en</strong> que ser incluidos <strong>en</strong> la distribución<br />

base. Necesitaras bajar nam-1.9.configure, disponible aquí.<br />

• Para ns‐allinone‐2.1b9a<br />

o Necesitas ns-allinone-2.1b9a y el parche para gcc‐3.2, disponible <strong>en</strong><br />

http://www.isi.edu/nsnam/dist/ns‐allinone‐2.1b9a‐gcc32.tar.gz<br />

o El parche se localiza <strong>en</strong> http://www.cs.virginia.edu/~nicolas/software/ns‐<br />

allinone‐2.1b9a‐gcc32‐cygwin.patch<br />

• Para instalar ns‐2<br />

• ns‐allinone‐2.26<br />

o Pon el archivo ns-allinone-2.26.tar.gz <strong>en</strong> el directorio home <strong>de</strong> tu<br />

Cygwin (típicam<strong>en</strong>te algo como C:\cygwin\home\vero)<br />

o Pon también el archivo nam-1.9.configure <strong>en</strong> tu directorio home <strong>de</strong><br />

Cygwin.<br />

o Hecha a andar Cygwin, y comi<strong>en</strong>za un XFree86 server para ver<br />

a<strong>de</strong>cuadam<strong>en</strong>te (usando startx)<br />

o De la línea <strong>de</strong> comandos Cygwin, corre los sigui<strong>en</strong>tes comandos:<br />

o gzip -d -c ns-allinone-2.26.tar.gz | tar xvf -<br />

o mv nam-1.9.configure ns-allinone-2.26/nam-1.9/configure<br />

o Ahora pue<strong>de</strong>s instalar todo haci<strong>en</strong>do lo sigui<strong>en</strong>te:<br />

o cd ns-allinone-2.26<br />

o ./install<br />

Pue<strong>de</strong>s correr algunos test <strong>de</strong> validación (Esto es opcional). Así se hace:<br />

cd ns-2.26; ./validate<br />

Después se <strong>de</strong>be actualizar el PATH, y las variables <strong>de</strong> ambi<strong>en</strong>te<br />

LD_LIBRARY_PATH, y el TCL_LIBRARY tal como se indica al final <strong>de</strong>l<br />

proceso <strong>de</strong> instalación. Por ejemplo, asumi<strong>en</strong>do que ya está instalado ns‐2 <strong>en</strong><br />

el directorio home, se <strong>de</strong>berían escribir los sigui<strong>en</strong>tes comandos para<br />

actualizar las variables:<br />

96


export NS_HOME=$HOME/ns-allinone-2.26<br />

export<br />

PATH=$NS_HOME/tcl8.3.2/unix:$NS_HOME/tk8.3.2/unix:$NS_HO<br />

ME/bin:$PATH<br />

export<br />

LD_LIBRARY_PATH=$NS_HOME/tcl8.3.2/unix:$NS_HOME/tk8.3.2/<br />

unix:\<br />

$NS_HOME/otcl-<br />

1.0a8:$NS_HOME/lib:$LD_LIBRARY_PATH<br />

export TCL_LIBRARY=$NS_HOME/tcl8.3.2/library<br />

(Reemplaza el cont<strong>en</strong>ido <strong>de</strong> NS_HOME con el directorio don<strong>de</strong> instaló ns)<br />

Para evitar retipear este comando todas las veces se pue<strong>de</strong> poner lo<br />

anterior <strong>en</strong> el archivo ~/.bashrc tal que se ejecute automáticam<strong>en</strong>te cada<br />

vez que <strong>en</strong>tra con el login.<br />

• ns‐allinone‐2.1b9a<br />

•<br />

o Ponga el archive ns-allinone-2.1b9a-gcc32.tar.gz <strong>en</strong> el directorio<br />

home <strong>de</strong> Cygwin (típicam<strong>en</strong>te algo como C:\cygwin\home\vero)<br />

o También ponga el archivo parche ns-allinone-2.1b9a-gcc32cygwin.patch<br />

<strong>en</strong> el directorio home.<br />

o Inicie Cygwin, y comi<strong>en</strong>ce un XFree86 server para ver a<strong>de</strong>cuadam<strong>en</strong>te<br />

(usando startx)<br />

o De la línea <strong>de</strong> comandos <strong>de</strong> Cygwin, corra los sigui<strong>en</strong>tes comandos:<br />

o gzip -d -c ns-allinone-2.1b9a-gcc32.tar.gz | tar xvf -<br />

o cd ns-allinone-2.1b9a<br />

o patch -p0 < ../ns-allinone-2.1b9a-gcc32-cygwin.patch<br />

Se <strong>de</strong>bería obt<strong>en</strong>er la sigui<strong>en</strong>te salida:<br />

patching file ./gt-itm/src/Makefile<br />

patching file ./install<br />

patching file ./nam-1.0a11a/config.sub<br />

patching file ./nam-1.0a11a/configure<br />

patching file ./ns-2.1b9a/bin/raw2xg<br />

patching file ./ns-2.1b9a/diffusion3/lib/nr/nr.hh<br />

patching file ./ns-2.1b9a/tcl/test/test-suite-simplefull.tcl<br />

patching file ./sgb/Makefile<br />

patching file ./tcl8.3.2/g<strong>en</strong>eric/tcl.h<br />

patching file ./tcl8.3.2/unix/Makefile.in<br />

Si se está corri<strong>en</strong>do la versión <strong>de</strong> Cygwin <strong>en</strong>tre 1.3.12 y 1.3.16‐1, se<br />

requiere modificar el archivo install <strong>en</strong> el directorio top <strong>de</strong> la distribución.<br />

Se <strong>de</strong>be reemplazar lo sigui<strong>en</strong>te:<br />

cd ./xgraph-$XGRAPHVER<br />

./configure<br />

por<br />

97


5 Routing Module<br />

cd ./xgraph-$XGRAPHVER<br />

./configure<br />

touch stamp-h<br />

Si los parches funcionaron exitosam<strong>en</strong>te, <strong>en</strong>tonces se pue<strong>de</strong> correr el script<br />

<strong>de</strong> instalación:<br />

./install<br />

Si los parches fallaron, esto probablem<strong>en</strong>te significa que ha modificado<br />

previam<strong>en</strong>te el árbol <strong>de</strong> ns tratando <strong>de</strong> aplicar el parche, o no usó nsallinone-2.1b9a-gcc32.<br />

Para ver <strong>de</strong>talles respecto <strong>de</strong> esto pue<strong>de</strong> visitar<br />

el sitio: what the patch actually does y hacer los cambios a mano.<br />

Los test <strong>de</strong> validación opcionales se corr<strong>en</strong> así:<br />

cd ns-2.1b9a; ./validate<br />

Después <strong>de</strong>be actualizarse el PATH, y las variables <strong>de</strong> ambi<strong>en</strong>te<br />

LD_LIBRARY_PATH, and TCL_LIBRARY como se indica al final <strong>de</strong>l proceso<br />

<strong>de</strong> instalación. Asumi<strong>en</strong>do que ya ha finalizado el proceso <strong>de</strong> instalación<br />

<strong>de</strong>bería anotarse lo sigui<strong>en</strong>te:<br />

export NS_HOME=$HOME/ns-allinone-2.1b9a<br />

export<br />

PATH=$NS_HOME/tcl8.3.2/unix:$NS_HOME/tk8.3.2/unix:$NS_HO<br />

ME/bin:$PATH<br />

export<br />

LD_LIBRARY_PATH=$NS_HOME/tcl8.3.2/unix:$NS_HOME/tk8.3.2/<br />

unix:\<br />

$NS_HOME/otcl-<br />

1.0a8:$NS_HOME/lib:$LD_LIBRARY_PATH<br />

export TCL_LIBRARY=$NS_HOME/tcl8.3.2/library<br />

En g<strong>en</strong>eral, cualquier implem<strong>en</strong>tación <strong>de</strong> ruteami<strong>en</strong>to <strong>en</strong> ns consiste <strong>de</strong> tres bloques <strong>de</strong><br />

función:<br />

Routing ag<strong>en</strong>t intercambia los paquetes <strong>de</strong> ruteami<strong>en</strong>to con los vecinos,<br />

Route logic usa la información recogida por los ag<strong>en</strong>tes <strong>de</strong> ruteami<strong>en</strong>to (o la base <strong>de</strong> datos <strong>de</strong><br />

la topología global <strong>en</strong> el caso <strong>de</strong> ruteami<strong>en</strong>to estático) para ejecutar el cómputo <strong>de</strong> la ruta<br />

actual,<br />

Classifiers situado <strong>de</strong>ntro <strong>de</strong> un Nodo. Ellos usan la tabla <strong>de</strong> ruteami<strong>en</strong>to calculada para<br />

realizar el <strong>en</strong>vío <strong>de</strong> los paquetes.<br />

Note que cuando se implem<strong>en</strong>ta un nuevo protocolo <strong>de</strong> ruteami<strong>en</strong>to, no necesariam<strong>en</strong>te<br />

<strong>de</strong>berán alterarse estos tres bloques <strong>de</strong> función. Por ejemplo, al implem<strong>en</strong>tar un protocolo <strong>de</strong><br />

ruteami<strong>en</strong>to <strong>de</strong> estado <strong>de</strong> <strong>en</strong>lace, se podría sólo implem<strong>en</strong>tar un ag<strong>en</strong>te <strong>de</strong> ruteami<strong>en</strong>to que<br />

intercambie información <strong>de</strong>l estado <strong>de</strong> <strong>en</strong>laces y un route logic que efectúe Dijkstra sobre la<br />

base <strong>de</strong> datos con la topología resultante. Entonces, se pue<strong>de</strong> usar los mismos classifiers que<br />

otro protocolo <strong>de</strong> ruteami<strong>en</strong>to unicast.<br />

98


Cuando la implem<strong>en</strong>tación <strong>de</strong> un nuevo protocolo <strong>de</strong> ruteami<strong>en</strong>to incluye más que un<br />

bloque <strong>de</strong> función, especialm<strong>en</strong>te cuando este conti<strong>en</strong>e un nuevo classifier, convi<strong>en</strong>e crear un<br />

nuevo objeto, al cual se le llama routing module. Este pue<strong>de</strong> manejar todos los bloques <strong>de</strong><br />

función y ser una interfase con el nodo para organizar los classifiers. La Figura 8 muestra la<br />

relación funcional <strong>en</strong>tre estos objetos. Note que el routing module podría t<strong>en</strong>er una relación<br />

directa con los bloques <strong>de</strong> computo <strong>de</strong> las rutas, es <strong>de</strong>cir, route logic y/o routing ag<strong>en</strong>ts. Sin<br />

embargo, el cómputo <strong>de</strong> las rutas no necesariam<strong>en</strong>te se instala <strong>en</strong> el routing module, pues allí<br />

podrían existir otros módulos que estén interesados <strong>en</strong> conocer las nuevas rutas. Esto no es<br />

un requerimi<strong>en</strong>to, sin embargo, es posible que algún cómputo <strong>de</strong> las rutas este especificado<br />

para un routing module particular, como por ejemplo la utilización <strong>de</strong> label <strong>en</strong> un módulo<br />

MPLS.<br />

Figure 8: Interacción <strong>en</strong>tre nodo, routing module, y routing. La línea segm<strong>en</strong>tada indica<br />

el <strong>de</strong>talle <strong>de</strong> un routing module.<br />

Un módulo <strong>de</strong> ruteami<strong>en</strong>to conti<strong>en</strong>e tres funcionalida<strong>de</strong>s principales:<br />

1. Un routing module que inicializa la conexión a un nodo a través <strong>de</strong> un register{}, y<br />

<strong>de</strong>sactiva un conexión mediante unregister{}. Usualm<strong>en</strong>te, <strong>en</strong> un register{} un routing<br />

module (1) llama al nodo si éste está interesado <strong>en</strong> conocer las actualizaciones <strong>de</strong> rutas y<br />

adjunta un transport ag<strong>en</strong>t, a<strong>de</strong>más (2) crea los classifiers y los instala <strong>en</strong> el nodo. En el<br />

unregister{} un routing module hace exactam<strong>en</strong>te lo opuesto: los classifiers son eliminados,<br />

se remuev<strong>en</strong> las ligas sobre las actualizaciones <strong>en</strong> los nodos.<br />

2. Si un routing module está interesado <strong>en</strong> conocer las actualizaciones <strong>de</strong> ruteami<strong>en</strong>to, el<br />

nodo informará al módulo vía un RtModule::add‐route{dst, target} y RtModule::<strong>de</strong>lete‐<br />

route{dst, nullag<strong>en</strong>t}.<br />

3. Si un routing module está interesado <strong>en</strong> conocer acerca <strong>de</strong> las ligas y <strong>de</strong>suniones con<br />

un transport ag<strong>en</strong>t <strong>en</strong> un nodo, el nodo informará al módulo vía RtModule::attach{ag<strong>en</strong>t,<br />

port} y RtModule::<strong>de</strong>tach{ag<strong>en</strong>t, nullag<strong>en</strong>t}.<br />

Exist<strong>en</strong> dos pasos para escribir un módulo propio:<br />

99


1. Se requiere <strong>de</strong>clarar <strong>en</strong> C++ parte <strong>de</strong> el routing module propio (ver<br />

~ns/rtmodule.{cc,h}). Para muchos módulos esto sólo significa <strong>de</strong>clarar un método virtual<br />

name() el cual <strong>en</strong>trega un <strong>de</strong>scriptor <strong>de</strong> string <strong>de</strong>l módulo. Sin embargo, existe la libertad<br />

tantas funcionalida<strong>de</strong>s como C++ lo permita; pero necesariam<strong>en</strong>te se <strong>de</strong>berá <strong>en</strong>lazar <strong>de</strong>spués<br />

esta funcionalidad con OTcl para un mejor r<strong>en</strong>dimi<strong>en</strong>to.<br />

2. Si se <strong>de</strong>sea se pue<strong>de</strong> ir más allá <strong>de</strong> las implem<strong>en</strong>taciones <strong>de</strong> interfaces <strong>en</strong> el módulo <strong>de</strong><br />

ruteami<strong>en</strong>to básico (ver ~ns/tcl/lib/ns‐rtmodule.tcl) y <strong>de</strong>cidir utilizar algún módulo ya<br />

exist<strong>en</strong>te, sobreescribirlo, y ponerle las interfase Otcl <strong>en</strong> para su propio módulo.<br />

Hay varios módulos <strong>de</strong> ruteami<strong>en</strong>to <strong>de</strong> ejemplo <strong>en</strong> ~ns/tcl/lib/ns‐rtmodule.tcl, los cuales<br />

pue<strong>de</strong> servir como una plantilla para sus propios módulos<br />

Actualm<strong>en</strong>te exist<strong>en</strong> seis módulos implem<strong>en</strong>tados <strong>en</strong> ns:<br />

100


ANEXO C: Breve Manual <strong>de</strong> Uso MCRSIM<br />

MCRSIM es una herrami<strong>en</strong>ta <strong>de</strong> software especializada <strong>en</strong> la simulación <strong>de</strong> algoritmos <strong>de</strong><br />

ruteami<strong>en</strong>to multicast. MCRSIM está escrito <strong>en</strong> C++ y usa funciones <strong>de</strong> las librerías Motif y X<br />

para implem<strong>en</strong>tar la interfase gráfica. El software opera sobre máquinas Unix que soportan<br />

un ambi<strong>en</strong>te Xwindows.<br />

MCRSIM permite a los usuarios crear y editar re<strong>de</strong>s, agregando o borrando nodos y<br />

<strong>en</strong>laces. El usuario pue<strong>de</strong> tambi<strong>en</strong> crear grupos y fu<strong>en</strong>tes multicast. Se pue<strong>de</strong>n establecer<br />

conexiones <strong>de</strong>s<strong>de</strong> una fu<strong>en</strong>te a varios miembros <strong>de</strong> un grupo, aplicando los difer<strong>en</strong>tes<br />

algoritmos <strong>de</strong> ruteami<strong>en</strong>to que provea el simulador. También es posible simular flujos <strong>de</strong><br />

paquetes <strong>en</strong> la red para medir por ejemplo retardos fin a fin y pérdidas <strong>de</strong> paquetes sobre el<br />

árbol resultante. Las estadísticas <strong>de</strong> transmisión <strong>de</strong> paquetes son escritas <strong>en</strong> un archivo <strong>de</strong><br />

salida.<br />

El archivo <strong>de</strong> salida <strong>de</strong>l simulador <strong>en</strong>trega la sigui<strong>en</strong>te información: dirección <strong>de</strong>l grupo,<br />

i<strong>de</strong>ntificación <strong>de</strong> la fu<strong>en</strong>te, i<strong>de</strong>ntificación <strong>de</strong>l miembro <strong>de</strong>l grupo, número <strong>de</strong> celdas recibidas,<br />

número <strong>de</strong> celdas perdidas, tasa promedio <strong>de</strong> pérdida, número <strong>de</strong> celdas que superar el<br />

<strong>de</strong>adline, mínimo retardo fin a fin, máximo retardo fin a fin, jitter, promedio <strong>de</strong>l retardo fin a<br />

fin, intervalo <strong>de</strong> confianza alcanzado para el retardo, intervalo <strong>de</strong> confianza alcanzado para<br />

la tasa <strong>de</strong> pérdida.<br />

A partir <strong>de</strong>l motor <strong>de</strong> simulación <strong>de</strong> MCRSIM se pue<strong>de</strong>n programar experim<strong>en</strong>tos que<br />

evalú<strong>en</strong> la calidad <strong>de</strong> los árboles g<strong>en</strong>erados por los distintos algoritmos implem<strong>en</strong>tados <strong>en</strong> él,<br />

y la efectividad que éstos algoritmos ti<strong>en</strong><strong>en</strong> para manejar los recursos <strong>de</strong> la red.<br />

Para obt<strong>en</strong>er resultados como los pres<strong>en</strong>tados <strong>en</strong> esta tesis se <strong>de</strong>be manejar los<br />

compon<strong>en</strong>tes <strong>de</strong>l simulador.<br />

La Tabla 8<br />

101


Tabla 8muestra una <strong>de</strong>scripción <strong>de</strong> los archivos <strong>de</strong> MCRSIM.<br />

Los experim<strong>en</strong>tos <strong>de</strong> simulación son efectuados por los archivos router15.c y router1.noh.c<br />

para el primer y segundo experim<strong>en</strong>to respectivam<strong>en</strong>te.<br />

Las <strong>en</strong>tradas para router1.noh.c (segundo experim<strong>en</strong>to) son:<br />

1. Archivo con red inicial para el experim<strong>en</strong>to, con una <strong>de</strong>terminada cantidad <strong>de</strong><br />

nodos. A esta tesis se adjunta un CD con los archivos <strong>de</strong> MCRSIM y adicionalm<strong>en</strong>te<br />

cuatro archivos con re<strong>de</strong>s <strong>de</strong> Waxman con 20, 50, 100 y 200 nodos (net20, net50,<br />

net100 y net200 respectivam<strong>en</strong>te).<br />

2. Nombre <strong>de</strong>l archivo <strong>de</strong> salida <strong>de</strong>l experim<strong>en</strong>to<br />

3. Intervalo <strong>de</strong> confianza (<strong>en</strong> este trabajo el intervalo <strong>de</strong> confianza utilizado fue <strong>de</strong> 0.05)<br />

4. Cantidad <strong>de</strong> tráfico Background Mínima <strong>en</strong> los <strong>en</strong>laces <strong>de</strong> la red, medida <strong>en</strong> Mbps<br />

5. Cantidad <strong>de</strong> tráfico Background Máxima <strong>en</strong> los <strong>en</strong>laces <strong>de</strong> la red, medida <strong>en</strong> Mbps<br />

6. Porc<strong>en</strong>taje <strong>de</strong> admisión <strong>de</strong> tráfico sobre los <strong>en</strong>laces <strong>de</strong> la red (0.85 <strong>en</strong> este trabajo)<br />

7. Límite <strong>de</strong> Retardo máximo <strong>en</strong>tre fu<strong>en</strong>te y <strong>de</strong>stinos (0.03 segundos <strong>en</strong> este trabajo)<br />

8. Número asignado al algoritmo, <strong>de</strong>finido <strong>en</strong> no<strong>de</strong>2.h<br />

9. Definición <strong>de</strong> si el algoritmo es o no restringido (0 para no restringidos, 1 para<br />

restringidos)<br />

Asignación <strong>de</strong> números a algoritmos <strong>en</strong> no<strong>de</strong>2.h:<br />

#<strong>de</strong>fine dksld 0 //Dijkstra's least-<strong>de</strong>lay<br />

#<strong>de</strong>fine kmb 1 //KMB heuristic for unconstrained Steiner tree<br />

#<strong>de</strong>fine atm2 2 //Modified Waters ATM heuristic<br />

#<strong>de</strong>fine cao 3 //T<strong>en</strong>et constrained adaptive routing algorithm<br />

#<strong>de</strong>fine bsma 4 //UCSC constrained algorithm<br />

#<strong>de</strong>fine cstc 5 //2nd constrained MC heuristic by Polyzos //KPP COST<br />

#<strong>de</strong>fine cstcd 6 //1st constrained MC heuristic by Polyzos //KPP COST&DELAY<br />

#<strong>de</strong>fine atm 7 //Waters ATM heuristic<br />

#<strong>de</strong>fine bf 8 //Bellman-Ford least-cost alg.<br />

#<strong>de</strong>fine dks 9 //Dijkstra's least-cost alg.<br />

#<strong>de</strong>fine pim 10 //PIM routing alg.<br />

#<strong>de</strong>fine mst 11 //MST heuristic<br />

#<strong>de</strong>fine dcdimst 12 //<strong>de</strong>lay-constrained directed MST<br />

#<strong>de</strong>fine copt 13 //optimal branch and bound based constr. Steiner tree alg.<br />

#<strong>de</strong>fine opt 14 //optimal branch and bound based unconstr. Steiner tree alg.<br />

#<strong>de</strong>fine dimst 15<br />

#<strong>de</strong>fine dvmrp 16<br />

#<strong>de</strong>fine bfnoadm 17<br />

#<strong>de</strong>fine cdks 18<br />

#<strong>de</strong>fine qdmr 20 //<strong>de</strong>fine the QDMR algorithm<br />

#<strong>de</strong>fine bc 21 //<strong>de</strong>fine algortimo BestContribution:heuristica=ANCHOBANDA<br />

#<strong>de</strong>fine bcal 22 //<strong>de</strong>fine algortimo BestContribution:heuristica=ALCANCE<br />

#<strong>de</strong>fine bcsal 23 //<strong>de</strong>fine algortimo BestContribution : heuristica = SALTOS<br />

#<strong>de</strong>fine bcdvir 24 //<strong>de</strong>fine algortimo BestContribution:heuristica = DISTVIRTUAL<br />

#<strong>de</strong>fine bcl 25 //<strong>de</strong>fine algortimo BestContribution "Light": heuristica=SALTO<br />

Ejemplo: Para ejecutar el segundo experim<strong>en</strong>to con el algoritmo KMB, con una red <strong>de</strong> 20<br />

nodos, intervalo <strong>de</strong> confianza igual a 0.05, tráfico background <strong>en</strong>tre 100 y 120 Mbps,<br />

porc<strong>en</strong>taje máximo <strong>de</strong> ocupación <strong>de</strong> los <strong>en</strong>laces <strong>de</strong> la red igual a 85% y 0.03 segundos como<br />

límite máximo <strong>de</strong> retardo <strong>en</strong>tre fu<strong>en</strong>te y <strong>de</strong>stinos, se <strong>de</strong>be escribir lo sigui<strong>en</strong>te <strong>en</strong> la línea <strong>de</strong><br />

comandos:<br />

%bash:~$ ./router1.noh net20 nombre_archivo_salida.txt 0.05 100 120 0.85 0.03 1 0<br />

102


Tabla 8 Archivos <strong>de</strong> MCRSIM<br />

NOMBRE DESCRIPCIÓN<br />

Adicional.c Archivo con funciones complem<strong>en</strong>tarias para: localizar un nodo <strong>de</strong>ntro <strong>de</strong><br />

un área <strong>de</strong> 5 pixeles a una <strong>de</strong>terminada localización; refrescar el área<br />

dibujada; dibujar las fu<strong>en</strong>tes multicast.<br />

data.h Define un paquete <strong>de</strong> datos para propositos <strong>de</strong> simulaión <strong>en</strong> una red <strong>de</strong><br />

computadores.<br />

Ev<strong>en</strong>t.c / ev<strong>en</strong>t.h Define las clases C++: Ev<strong>en</strong>t; Ev<strong>en</strong>ListEntry; TheEv<strong>en</strong>tList; para usarlas <strong>en</strong><br />

un simulador <strong>de</strong> v<strong>en</strong>tos discretos para re<strong>de</strong>s <strong>de</strong> computadores.<br />

Graphics.c / graphics.h Librería <strong>de</strong> clases C++ para repres<strong>en</strong>tar nodos, <strong>en</strong>laces, caminos, etc., <strong>de</strong> la<br />

red gráficam<strong>en</strong>te.<br />

Makefile Archivo para compilación y g<strong>en</strong>eración <strong>de</strong> ejecutable<br />

No<strong>de</strong>2.h / no<strong>de</strong>2.c Librería que <strong>de</strong>fine: nodo; tabla <strong>de</strong> ruteami<strong>en</strong>to; fu<strong>en</strong>tes; lista <strong>de</strong><br />

adyac<strong>en</strong>tes; y la administración para la operación <strong>de</strong> la red. no<strong>de</strong>2.c<br />

conti<strong>en</strong>e: la función <strong>de</strong> simulación; el g<strong>en</strong>erador <strong>de</strong> grafos y <strong>en</strong>laces<br />

aleatorios; funciones para leer <strong>de</strong> un archivo y escribir a un archivo; y otras<br />

funciones.<br />

Queue.c / queue.h Librería <strong>de</strong> clases C++ para repres<strong>en</strong>tar las colas FIFO y priorida<strong>de</strong>s <strong>de</strong><br />

cola.<br />

RoutATM.c, routBC.c, routBF.c, Algortimos <strong>de</strong> ruteami<strong>en</strong>to implem<strong>en</strong>tados para el simulador.<br />

routBFNOADM.c, routBCL.c,<br />

routBSMA.c, routCAO.c, routCDKS.c,<br />

routCST.c, routDCDIMST.c,<br />

routDVMRP.c, routKMB.c, routLD.c,<br />

routQDMR.c, routOPT.c<br />

sim.c Programa principal, llamadas Motif y manejador <strong>de</strong> ev<strong>en</strong>tos.<br />

sim.h Archivo <strong>de</strong> cabecera para el programa principal.<br />

Source.c Funciones para crear y mo<strong>de</strong>lar difer<strong>en</strong>tes fu<strong>en</strong>tes <strong>de</strong> tráfico.<br />

stats.c / stats.h Librería <strong>de</strong> clases C++ usada para colectar las estadísticas <strong>de</strong>l simulador <strong>de</strong><br />

ev<strong>en</strong>tos discretos.<br />

traf.c Funciones para manejar las llegadas y partidas <strong>de</strong> paquetes <strong>de</strong>s<strong>de</strong> y hacia<br />

un nodo.<br />

Windos.c / windows.h Librería <strong>de</strong> compon<strong>en</strong>tes Motif <strong>en</strong>capsulados <strong>en</strong> clases C++<br />

103


ANEXO D: Código BC para MCRSIM<br />

A continuación se muestra el código <strong>en</strong> C++ para las distintas heurísticas <strong>de</strong> la familia<br />

BC. El código <strong>de</strong> BCL es análogo y sólo se modifican un par <strong>de</strong> líneas. Para ello se pue<strong>de</strong><br />

revisar el pseudocódigo <strong>en</strong> 4.2.2.<br />

//<strong>de</strong>fine Heuristicas<br />

#<strong>de</strong>fine ANCHOBANDA 1<br />

#<strong>de</strong>fine ALCANCE 2<br />

#<strong>de</strong>fine SALTOS 3<br />

#<strong>de</strong>fine DISTVIRTUAL 4<br />

double TheNo<strong>de</strong>List::routerBC(int alg, No<strong>de</strong> *source, int addr, double &d,<br />

double &maxd, double &mind, double &h,<br />

double &no<strong>de</strong>s) {<br />

//Primero se borra cualquier ruteami<strong>en</strong>to previo para este grupo y fu<strong>en</strong>te.<br />

removeTree(source, addr);<br />

int heuristica;<br />

//TIPO HEURISTICA<br />

if (alg == bc) heuristica = 1;<br />

if (alg == bcal) heuristica = 2;<br />

if (alg == bcsal) heuristica = 3;<br />

if (alg == bcdvir) heuristica = 4;<br />

//Localiza la fu<strong>en</strong>te y obti<strong>en</strong>e el peak rate<br />

SourceList *ss = source->sourceList();<br />

int Foundd = False;<br />

while ((ss != NULL) && (Foundd == False)) {<br />

if ((ss->source()->type() != Background) &&<br />

(ss->source()->address() == addr)) Foundd = True;<br />

else ss = ss->next();<br />

};<br />

double pk = ss->source()->peak();<br />

double avg = ss->source()->average();<br />

//Localiza el grupo Mcast que conti<strong>en</strong>e el grupo <strong>de</strong> <strong>de</strong>stinos<br />

MCGroup *group = groupsHd;<br />

while ((group != NULL) && (group->address() != addr))<br />

group = group->next();<br />

if (group == NULL) {<br />

//printf("Group = NULL");<br />

return(NOGROUP);<br />

}<br />

//si el grupo ti<strong>en</strong>e solo a la fu<strong>en</strong>te, el costo <strong>de</strong>l arbol es 0<br />

if ((group->count() == 1) &&<br />

(group->headm()->no<strong>de</strong>Ptr()->name() == source->name())) {<br />

source->addRoutingEntry(addr, source);<br />

h = d = maxd = mind = 0;<br />

no<strong>de</strong>s = 1;<br />

return(0);<br />

};<br />

////variables ///////////////////<br />

double CostAdy = 0.0;<br />

double CostoAd = 0.0;<br />

double *CostAdj = new double[num]; //arreglo con costos <strong>de</strong> los nodos adyac<strong>en</strong>tes<br />

int AllDestinInTree = False;<br />

104


No<strong>de</strong>ListEntry *Entra1;<br />

int NumDestAgreg = 0;<br />

int elmejor;<br />

int fromBC;<br />

int nodosBC;<br />

///<br />

int seg1, seg2;<br />

int ArbolParcialId;<br />

int AdjEvalId;<br />

double contrib = 0.0;<br />

double suma = 0.0;<br />

double invsuma = 0.0;<br />

double *Contribucion;<br />

double *CostMatrixBC;<br />

CostMatrixBC = new double[num*num];<br />

int *<strong>de</strong>s<strong>de</strong>;<br />

<strong>de</strong>s<strong>de</strong> = new int[num];<br />

double *CostLCMatrix;<br />

CostLCMatrix = new double[num];<br />

Contribucion = new double[num];<br />

int i,j;<br />

short *pVisitedBC = new short[num]; // Indicador <strong>de</strong> visitado<br />

short *flagDestin2 = new short [num]; // 1 si es un <strong>de</strong>stino, 0 <strong>en</strong> cualquier otro<br />

caso<br />

short *pAgreg = new short[num]; // Indicador <strong>de</strong> Agregado al Arbol;<br />

//////////<strong>en</strong>d variables /////<br />

//////////////////////////Ahora_BestContribution /////////////////////////////////////<br />

//Inicio Para Marcar a los nodos agregados al arbol<br />

for (int bb = 0; bb < num; bb++) {<br />

pAgreg[bb] = 0; //marca como no agregado a todos los nodos excepto la fu<strong>en</strong>te<br />

if ( bb == source->name() ) {<br />

pAgreg[bb] = 1; //marca a la fu<strong>en</strong>te como agregada<br />

//printf("Fu<strong>en</strong>te : %d \n", bb);<br />

}<br />

}<br />

/////////fin marca nodos agregados<br />

//La fu<strong>en</strong>te es el primer miembro <strong>en</strong> el arbol<br />

No<strong>de</strong>ListEntry *Entra0 = new No<strong>de</strong>ListEntry;<br />

No<strong>de</strong>ListEntry *UltEntra = new No<strong>de</strong>ListEntry; //Ultima <strong>en</strong>trada<br />

Entra0->no<strong>de</strong>Ptr(source);<br />

source->addRoutingEntry(addr, source);<br />

UltEntra = Entra0;<br />

////fin fu<strong>en</strong>te primer miembro <strong>en</strong> el arbol<br />

///////////Marca los Destinos<br />

short *flagDestin = new short [num]; // 1 si es un <strong>de</strong>stino, 0 <strong>en</strong> cualquier otro caso<br />

No<strong>de</strong>ListEntry *Marca;<br />

Marca = group->headm();<br />

while(Marca != NULL) {<br />

flagDestin[Marca->no<strong>de</strong>Ptr()->name()] = 1;<br />

//printf("Miembro : %d\n", Marca->no<strong>de</strong>Ptr()->name());<br />

Marca = Marca->next();<br />

}<br />

///////////fin marca Destinos<br />

///Ahora se va armando el arbol final a partir <strong>de</strong> atachar cada nodo<br />

//adjunto que mejor contribuye al arbol parcial<br />

///Para experim<strong>en</strong>tos <strong>en</strong> don<strong>de</strong> la fu<strong>en</strong>te pue<strong>de</strong> salir como un miembro por<br />

aleatoriedad///<br />

if ( flagDestin[source->name()] == 1 ) {<br />

NumDestAgreg = 1;<br />

//printf("OJO FUENTE ES UN MIEMBRO\n");<br />

105


eturn(0);<br />

//break;<br />

}<br />

////fin <strong>de</strong> esta exepcion<br />

//loop <strong>de</strong> mi<strong>en</strong>tras no se complete el arbol final (con todos los miembros)<br />

while(AllDestinInTree == False) {<br />

//loop <strong>de</strong> todos los miembros <strong>de</strong>l arbol parcial <strong>en</strong> busca <strong>de</strong>l mejor adyac<strong>en</strong>te<br />

do {<br />

Adjac<strong>en</strong>cyListEntry *adj = Entra0->no<strong>de</strong>Ptr()->adjac<strong>en</strong>tNo<strong>de</strong>s(); //la ultima<br />

<strong>en</strong>trada <strong>en</strong> el arbol<br />

//loop <strong>de</strong> todos los adyac<strong>en</strong>tes a cada miembro <strong>de</strong>l arbol parcial<br />

while (adj != NULL) {<br />

int fu<strong>en</strong>teDKS = adj->no<strong>de</strong>Ptr()->name(); //para DIJKSTRA<br />

//un adyac<strong>en</strong>te al arbol parcial<br />

if ( pAgreg[adj->no<strong>de</strong>Ptr()->name()] == 1) {<br />

//si el adyac<strong>en</strong>te ya está <strong>en</strong> el arbol<br />

adj=adj->next();<br />

}<br />

else if ( pAgreg[adj->no<strong>de</strong>Ptr()->name()] == 0 ) {<br />

//si el adyac<strong>en</strong>te no está <strong>en</strong> el arbol<br />

// se evalua su contribucion<br />

///////////////////////////////////////DIJKSTRA--A--ADJ //////////////////////////////<br />

//Inicializo la matriz con la informacion <strong>de</strong> los costos<br />

//<strong>de</strong> los <strong>en</strong>laces <strong>de</strong> cada nodo y los indicadores <strong>de</strong> visitado y <strong>de</strong>stino<br />

//+ dos matrices para el calculo <strong>de</strong>l arbol dijktra<br />

for (i = 0; i < num; i ++) {<br />

for (j = 0; j < num; j ++)<br />

*(CostMatrixBC + i * num + j) = DBL_MAX;<br />

flagDestin2[i] = 0;<br />

pVisitedBC[i] = 0; //UNVISITED;<br />

CostLCMatrix[i] = DBL_MAX;<br />

<strong>de</strong>s<strong>de</strong>[i] = INT_MAX;<br />

};<br />

//Fin inicio matriz costos <strong>en</strong>laces<br />

//Marco con 1 a los nodos que son <strong>de</strong>stinos<br />

No<strong>de</strong>ListEntry *tmpp2;<br />

tmpp2 = group->headm();<br />

while(tmpp2 != NULL) {<br />

flagDestin2[tmpp2->no<strong>de</strong>Ptr()->name()] = 1;<br />

//printf("Miembro <strong>en</strong> DIJKSTRA : %d \n", tmpp2->no<strong>de</strong>Ptr()->name());<br />

tmpp2 = tmpp2->next();<br />

};<br />

//Fin marcado <strong>de</strong>stinos<br />

//Para obt<strong>en</strong>er el costo promedio por <strong>en</strong>lace<br />

//e inicializar la matriz <strong>de</strong> costos <strong>de</strong>s<strong>de</strong> cada nodo a sus adjac<strong>en</strong>tes<br />

int nLinkCount = 0;<br />

double avgLkCost = 0.0;<br />

double factor = 0.0;<br />

No<strong>de</strong>ListEntry *tmpp = no<strong>de</strong>ListHd; //la cabeza <strong>de</strong> la lista <strong>de</strong> nodos (<strong>de</strong> la red)<br />

while (tmpp != NULL) {<br />

i = tmpp->no<strong>de</strong>Ptr()->name();<br />

Adjac<strong>en</strong>cyListEntry *adjac = tmpp->no<strong>de</strong>Ptr()->adjac<strong>en</strong>tNo<strong>de</strong>s();<br />

while (adjac != NULL) {<br />

j = adjac->no<strong>de</strong>Ptr()->name();<br />

switch (heuristica) {<br />

case ANCHOBANDA:<br />

if (fn == PEAK) {<br />

*(CostMatrixBC + (i * num) + j) = adjac->peak();<br />

106


nLinkCount ++;<br />

avgLkCost += adjac->peak();<br />

adjac = adjac->next();<br />

};<br />

if (fn == AVERAGE) {<br />

*(CostMatrixBC + (i * num) + j) = adjac->average();<br />

nLinkCount ++;<br />

avgLkCost += adjac->average();<br />

adjac = adjac->next();<br />

};<br />

break;<br />

case ALCANCE:<br />

*(CostMatrixBC + (i * num) + j) = adjac-><strong>de</strong>lay();<br />

nLinkCount ++;<br />

avgLkCost += adjac-><strong>de</strong>lay();<br />

adjac = adjac->next();<br />

break;<br />

case SALTOS:<br />

*(CostMatrixBC + (i * num) + j) = 1;<br />

nLinkCount ++;<br />

avgLkCost += 1;<br />

adjac = adjac->next();<br />

break;<br />

case DISTVIRTUAL:<br />

*(CostMatrixBC + (i * num) + j) = 1;<br />

nLinkCount ++;<br />

avgLkCost += adjac->peak();<br />

adjac = adjac->next();<br />

break;<br />

}; //fin case heurisitca<br />

};<br />

tmpp = tmpp->next();<br />

};<br />

assert(nLinkCount);<br />

avgLkCost = (double)avgLkCost / nLinkCount;<br />

//Fin costo promedio y ll<strong>en</strong>ado matriz <strong>de</strong> costos <strong>de</strong> <strong>en</strong>lace<br />

////////// Se computa el arbol <strong>de</strong> minimo costo con Dijkstra<br />

*(CostLCMatrix + fu<strong>en</strong>teDKS) = 0; //dijkstra <strong>de</strong>s<strong>de</strong> fu<strong>en</strong>teDKS<br />

//= adyac<strong>en</strong>te <strong>de</strong>l arbol parcial<br />

evaluandoce<br />

//printf("ADJ evaluandose : %d <strong>de</strong>s<strong>de</strong> : %d\n", fu<strong>en</strong>teDKS, Entra0->no<strong>de</strong>Ptr()-<br />

>name());<br />

int numOnTreeGroupMembers = 0;<br />

double minCost;<br />

int min, u, v;<br />

for (i = 0; i < num; i ++) {<br />

// El loop <strong>de</strong>l for se ejecuta exactam<strong>en</strong>te |V| veces;<br />

// Extrae el nodo con el minimo costo<br />

//En la primera iteracion parte <strong>de</strong> fu<strong>en</strong>teDKS (porque ti<strong>en</strong>e costo cero)<br />

minCost = DBL_MAX;<br />

for (u = 0; u < num; u ++) {<br />

if (pVisitedBC[u] == 0) { //UNVISITED<br />

if (CostLCMatrix[u] < minCost) {<br />

minCost = CostLCMatrix[u];<br />

min = u;<br />

};<br />

};<br />

};<br />

u = min;<br />

pVisitedBC[u] = 1; //VISITED<br />

if (flagDestin2[u] == 1) numOnTreeGroupMembers ++;<br />

if (numOnTreeGroupMembers == group->count()) break;<br />

for (v = 0; v < num; v ++) {<br />

if (pVisitedBC[v] == 0) { //UNVISITED<br />

if (CostLCMatrix[v] > CostLCMatrix[u] + CostMatrixBC[u *<br />

num + v]) {<br />

No<strong>de</strong> *ndd = no<strong>de</strong>Of(v);<br />

107


adjac<strong>en</strong>tNo<strong>de</strong>s();<br />

adjac<strong>en</strong>->next();<br />

pk))) ||<br />

no<strong>de</strong>Ptr() != ndd) adjac<strong>en</strong> =<br />

//chequea la capacidad <strong>de</strong> los links<br />

if (((fn == PEAK) && (adjac<strong>en</strong>->peak() linkCapacity() * ADMITRATIO) -<br />

((fn == AVERAGE) && (adjac<strong>en</strong>->average()<br />

((adjac<strong>en</strong>->linkCapacity() * ADMITRATIO) -<br />

//CostLCMatrix va almac<strong>en</strong>ando el costo <strong>de</strong><br />

//pto pto <strong>de</strong> fu<strong>en</strong>teDKS a cada nodo<br />

CostLCMatrix[v] = CostLCMatrix[u] +<br />

//'<strong>de</strong>s<strong>de</strong>' es un arreglo que indica el<br />

//(por la ruta pto a pto).<br />

<strong>de</strong>s<strong>de</strong>[v] = u;<br />

///////////INICIO///////CASO ALCANCE//////////////// (Steiner restringido a retardo)<br />

// Find the maximum minimum <strong>de</strong>lay of all <strong>de</strong>st no<strong>de</strong>s;<br />

// Important for making routing policy;<br />

double maxMinDelayBC = 0.0;<br />

switch (heuristica) {<br />

case ANCHOBANDA:<br />

//nada<br />

break;<br />

case ALCANCE:<br />

for (int ur = 0; ur < num; ur ++) {<br />

if (flagDestin2[ur] == 1) {<br />

if (CostLCMatrix[ur] > maxMinDelayBC)<br />

maxMinDelayBC = CostLCMatrix[ur];<br />

};<br />

};<br />

if (maxMinDelayBC > DELAYBOUND) {<br />

<strong>de</strong>lete [] pAgreg;<br />

<strong>de</strong>lete [] Entra0;<br />

<strong>de</strong>lete [] Entra1;<br />

<strong>de</strong>lete [] UltEntra;<br />

<strong>de</strong>lete [] flagDestin;<br />

//<strong>de</strong>lete [] temp;<br />

//<strong>de</strong>lete [] temp1;<br />

//<strong>de</strong>lete [] temp2;<br />

<strong>de</strong>lete [] CostAdj;<br />

<strong>de</strong>lete [] Contribucion;<br />

<strong>de</strong>lete [] <strong>de</strong>s<strong>de</strong>;<br />

<strong>de</strong>lete [] CostMatrixBC;<br />

<strong>de</strong>lete [] flagDestin2;<br />

<strong>de</strong>lete [] CostLCMatrix;<br />

<strong>de</strong>lete [] pVisitedBC;<br />

return (DBVIOL);<br />

}<br />

break;<br />

case SALTOS:<br />

//nada<br />

break;<br />

case DISTVIRTUAL:<br />

//nada<br />

break;<br />

};<br />

108


FIN/////////CASO ALCANCE//////////////// (Steiner restringido a retardo)<br />

///////////////////Fin Dijkstra /////////////////////////////<br />

//Asignacion <strong>de</strong> Contribucion <strong>de</strong>l nodo Adjac<strong>en</strong>te evaluandose /////<br />

Contribucion[fu<strong>en</strong>teDKS] = 0.0;<br />

double m<strong>en</strong>or<strong>de</strong>lay = DBL_MAX;<br />

double factor2 = 0.0;<br />

//printf("ADJ <strong>en</strong> asignacion <strong>de</strong> contribucion = %d\n", adj->no<strong>de</strong>Ptr()->name());<br />

//fu<strong>en</strong>te DKS<br />

for (int vv = 0; vv < num; vv ++) {<br />

if (flagDestin2[vv] == 1) {<br />

(padre fu<strong>en</strong>teDKS)<br />

//adjace = fu<strong>en</strong>teDKS<br />

miembros<br />

al miembro con m<strong>en</strong>or retardo<br />

los nodos <strong>de</strong>l arbol<br />

contribucion<br />

miembros (medido <strong>en</strong> saltos)<br />

//test para succ 22 <strong>de</strong> spt 03<br />

if (CostLCMatrix[vv] >= DBL_MAX) {<br />

if (pAgreg != NULL) <strong>de</strong>lete [] pAgreg;<br />

//if (Entra0 != NULL) <strong>de</strong>lete [] Entra0;<br />

//if (Entra1 != NULL) <strong>de</strong>lete [] Entra1;<br />

//if (UltEntra != NULL) <strong>de</strong>lete [] UltEntra;<br />

if (flagDestin != NULL) <strong>de</strong>lete [] flagDestin;<br />

if (CostAdj != NULL) <strong>de</strong>lete [] CostAdj;<br />

//if (Contribucion != NULL) <strong>de</strong>lete [] Contribucion;<br />

if (<strong>de</strong>s<strong>de</strong> != NULL) <strong>de</strong>lete [] <strong>de</strong>s<strong>de</strong>;<br />

if (CostMatrixBC != NULL) <strong>de</strong>lete [] CostMatrixBC;<br />

if (flagDestin2 != NULL) <strong>de</strong>lete [] flagDestin2;<br />

if (CostLCMatrix != NULL) <strong>de</strong>lete [] CostLCMatrix;<br />

if (pVisitedBC != NULL) <strong>de</strong>lete [] pVisitedBC;<br />

return(LINKSAT);<br />

}<br />

ArbolParcialId = Entra0->no<strong>de</strong>Ptr()->name(); //<strong>de</strong>s<strong>de</strong> Arb. parc.<br />

AdjEvalId = adj->no<strong>de</strong>Ptr()->name(); //fu<strong>en</strong>teDKS<br />

No<strong>de</strong> *AdjEval = no<strong>de</strong>Of(AdjEvalId);<br />

No<strong>de</strong> *<strong>de</strong>ArbolParcial = no<strong>de</strong>Of(ArbolParcialId);<br />

Adjac<strong>en</strong>cyListEntry *adjace = <strong>de</strong>ArbolParcial->adjac<strong>en</strong>tNo<strong>de</strong>s();<br />

while (adjace->no<strong>de</strong>Ptr() != AdjEval) adjace = adjace->next();<br />

switch (heuristica) {<br />

//<strong>en</strong>lace que mejor contribuye a acercar a todos los<br />

//(medido <strong>en</strong> costo <strong>de</strong>l <strong>en</strong>lace = BW ocupado)<br />

case ANCHOBANDA:<br />

suma = adjace->peak() + CostLCMatrix[vv]; //fu<strong>en</strong>teDKS<br />

//printf("Aporte [%d] = %.5e\n", vv, suma);<br />

invsuma = 1/suma;<br />

//printf("Invsuma = %.5e\n", invsuma);<br />

Contribucion[fu<strong>en</strong>teDKS] += invsuma;<br />

break;<br />

//Esrategia Greeddy MinDelay{miembros}, agrega primero<br />

//es util <strong>en</strong> caso <strong>de</strong> requerir info rapida <strong>de</strong>s<strong>de</strong> todos<br />

case ALCANCE:<br />

suma = adjace-><strong>de</strong>lay() + CostLCMatrix[vv]; //fu<strong>en</strong>teDKS<br />

//printf("Aporte [%d] = %.5e\n", vv, suma);<br />

if ( m<strong>en</strong>or<strong>de</strong>lay >= suma) {<br />

m<strong>en</strong>or<strong>de</strong>lay = suma;<br />

invsuma = 1/suma; //m<strong>en</strong>or <strong>de</strong>lay -> mayor<br />

//printf("Invsuma = %.5e\n", invsuma);<br />

Contribucion[fu<strong>en</strong>teDKS] = invsuma;<br />

}<br />

break;<br />

//<strong>en</strong>lace que mejor contribuye a acercar a todos los<br />

case SALTOS:<br />

109


fu<strong>en</strong>teDKS<br />

suma = (1 + CostLCMatrix[vv]); //fu<strong>en</strong>teDKS<br />

//printf("Aporte [%d] = %.5e\n", vv, suma);<br />

invsuma = 1/suma;<br />

//printf("Invsuma = %.5e\n", invsuma);<br />

Contribucion[fu<strong>en</strong>teDKS] += invsuma;<br />

break;<br />

case DISTVIRTUAL:<br />

suma = adjace->peak()*(1 + CostLCMatrix[vv]);<br />

//printf("Aporte [%d] = %.5e\n", vv, suma);<br />

invsuma = 1/suma;<br />

//printf("Invsuma = %.5e\n", invsuma);<br />

Contribucion[fu<strong>en</strong>teDKS] += invsuma;<br />

break;<br />

}; //fin case heuristica<br />

};<br />

//printf("Contribucion parcial = %.5e\n", Contribucion[fu<strong>en</strong>teDKS]);<br />

};<br />

////Fin Asignacion //////<br />

//Borrado Memoria<br />

/*<br />

<strong>de</strong>lete [] <strong>de</strong>s<strong>de</strong>;<br />

<strong>de</strong>lete [] CostMatrixBC;<br />

<strong>de</strong>lete [] flagDestin2;<br />

<strong>de</strong>lete [] CostLCMatrix;<br />

<strong>de</strong>lete [] pVisitedBC;<br />

*/<br />

////////////////////////////////////FIN--DIJKSTRA--A--ADJ////////////////////////////<br />

CostAdj[adj->no<strong>de</strong>Ptr()->name()] = Contribucion[fu<strong>en</strong>teDKS];<br />

//printf("Contribucion <strong>de</strong> ADJ: %d = %.5e \n", fu<strong>en</strong>teDKS,<br />

Contribucion[fu<strong>en</strong>teDKS]);<br />

//printf("Mayor Aporte hasta este Mom<strong>en</strong>to -> %.4e // y //<br />

Contribucion <strong>de</strong> %d evaluandose ahora -> %.4e\n", CostAdy, adj->no<strong>de</strong>Ptr()->name(),<br />

CostAdj[adj->no<strong>de</strong>Ptr()->name()]);<br />

if (CostAdy no<strong>de</strong>Ptr()->name()]) {<br />

//se manti<strong>en</strong>e la mayor contribucion <strong>en</strong> CostAdy<br />

CostAdy = CostAdj[adj->no<strong>de</strong>Ptr()->name()];<br />

elmejor = adj->no<strong>de</strong>Ptr()->name(); //e.d. qui<strong>en</strong> va si<strong>en</strong>do<br />

"el mejor"<br />

fromBC = Entra0->no<strong>de</strong>Ptr()->name(); // <strong>de</strong> don<strong>de</strong> vi<strong>en</strong>e el<br />

adyac<strong>en</strong>te "mejor"<br />

//printf("RESUMEN: Desce %d al Mejor Parcial %d >><br />

CONTRIBUCION(%d) = %.5e \n", fromBC, elmejor, elmejor, CostAdy);<br />

};<br />

//if ((adj->next()) == NULL) break;<br />

adj=adj->next();<br />

}<br />

else return(9999); //Esto no <strong>de</strong>biera pasar<br />

}; //<strong>en</strong>d loop [while] <strong>de</strong> todos los adyac<strong>en</strong>tes a cada miembro <strong>de</strong>l arbol parcial<br />

Entra0 = Entra0 -> next();<br />

//if (Entra0->next()==NULL) break;<br />

} while (Entra0 != NULL); //<strong>en</strong>d loop [do] <strong>de</strong> todos los miembros <strong>de</strong>l arbol parcial<br />

//Una vez elegido el nodo adyac<strong>en</strong>te que mejor contribuye a la expacion <strong>de</strong>l arbol<br />

parcial<br />

//se agrega tal nodo al arbol<br />

Entra0 = UltEntra; //para recorrer la lista <strong>de</strong>s<strong>de</strong> la ultima <strong>en</strong>trada <strong>de</strong> el mejor<br />

nodo adj al arbol parcial<br />

////////////////////PREVIENE CREACION DE ARBOL CON ENLACES SATURADOS //////////////<br />

if ( CostAdj[elmejor] == DBL_MAX) {<br />

if (pAgreg != NULL) <strong>de</strong>lete [] pAgreg;<br />

if (Entra0 != NULL) <strong>de</strong>lete [] Entra0;<br />

if (Entra1 != NULL) <strong>de</strong>lete [] Entra1;<br />

if (UltEntra != NULL) <strong>de</strong>lete [] UltEntra;<br />

if (flagDestin != NULL) <strong>de</strong>lete [] flagDestin;<br />

if (CostAdj != NULL) <strong>de</strong>lete [] CostAdj;<br />

110


if (Contribucion != NULL) <strong>de</strong>lete [] Contribucion;<br />

if (<strong>de</strong>s<strong>de</strong> != NULL) <strong>de</strong>lete [] <strong>de</strong>s<strong>de</strong>;<br />

if (CostMatrixBC != NULL) <strong>de</strong>lete [] CostMatrixBC;<br />

if (flagDestin2 != NULL) <strong>de</strong>lete [] flagDestin2;<br />

if (CostLCMatrix != NULL) <strong>de</strong>lete [] CostLCMatrix;<br />

if (pVisitedBC != NULL) <strong>de</strong>lete [] pVisitedBC;<br />

return(LINKSAT);<br />

}<br />

//////////////////////////////////////////////////////////////////////////////////////<br />

//se_agrega_"el_mejor"_al_arbol///////////////////////////////////////////////////////<br />

//////////////////////////////////////////////////////////////////////////////////////<br />

No<strong>de</strong> *ndBC = no<strong>de</strong>Of(elmejor);<br />

//printf("El MEJOR <strong>en</strong> esta ronda = %d\n", elmejor);<br />

No<strong>de</strong> *fromBCNd = no<strong>de</strong>Of(fromBC);<br />

//printf("DESDE = %d <strong>en</strong> el Arbol parcial\n", fromBC);<br />

Entra1 = new No<strong>de</strong>ListEntry;<br />

Entra1->no<strong>de</strong>Ptr(ndBC);<br />

Entra1->next(Entra0);<br />

Entra0 = Entra1; //Entra0 es ahora la <strong>en</strong>trada reci<strong>en</strong> agegada<br />

UltEntra = Entra0; //UltEntra es ahora la ultima <strong>en</strong>trada <strong>en</strong> la lista <strong>en</strong>lazada<br />

CostAdy = 0;<br />

ndBC->addRoutingEntry(addr, source); //<strong>de</strong>fine al mejor nodo <strong>de</strong> esta ronda como una<br />

<strong>en</strong>trada a la tabla <strong>de</strong> ruta <strong>de</strong>l arbol<br />

//update the link cost: dado que el mejor fue agregado a la ruta <strong>de</strong>l arbol<br />

Adjac<strong>en</strong>cyListEntry *adja = fromBCNd->adjac<strong>en</strong>tNo<strong>de</strong>s();<br />

while (adja->no<strong>de</strong>Ptr() != ndBC) adja = adja->next();<br />

if (adja == NULL)<br />

assert(0);<br />

double wght = adja->peak() + pk;<br />

adja->peak(wght); //ocupa el link reci<strong>en</strong> agregado con el ancho <strong>de</strong> banda <strong>de</strong> la<br />

fu<strong>en</strong>te<br />

double average = adja->average() + avg;<br />

adja->average(average);<br />

//and add it to the routing table<br />

//agrega al mejor adyac<strong>en</strong>te a la tabla <strong>de</strong> ruta <strong>de</strong>s<strong>de</strong> fromBC<br />

fromBCNd->addChild(addr, source, ndBC);<br />

//////////////////////////////////////////////////////////////////////////////////////<br />

////////fin_agregar_mejor_nodo_adyac<strong>en</strong>te//////////////////////////////////////////////<br />

//////////////////////////////////////////////////////////////////////////////////////<br />

//si "el mejor" es un <strong>de</strong>stino, se marca este <strong>de</strong>stino como agregado al Arbol<br />

//e increm<strong>en</strong>ta contador <strong>de</strong> miembros <strong>en</strong> el arbol<br />

if ((flagDestin[elmejor]) == 1) {<br />

pAgreg[elmejor] = 1;<br />

//printf("DESTINO ---> %d %d


calcula_el_<strong>de</strong>lay_y_saltos_para_resultados_g<strong>en</strong>erales//////////////////////<br />

int dbViolation = False;<br />

maxd = 0;<br />

mind = DBL_MAX;<br />

//calculate the expected <strong>en</strong>d-to-<strong>en</strong>d <strong>de</strong>lay and the average number of hops<br />

//and the cost per <strong>de</strong>stination<br />

No<strong>de</strong>ListEntry *tmp2BC;<br />

tmp2BC = group->headm();<br />

double avgDelay = 0;<br />

double avgHops = 0;<br />

while (tmp2BC != NULL) {<br />

int gotit = False;<br />

int hops = 0;<br />

double <strong>de</strong>lay = 0;<br />

if (source != tmp2BC->no<strong>de</strong>Ptr())<br />

results(source, addr, source, tmp2BC->no<strong>de</strong>Ptr(), <strong>de</strong>lay, hops, gotit);<br />

if (<strong>de</strong>lay > DELAYBOUND) dbViolation = True;<br />

if (<strong>de</strong>lay > maxd) maxd = <strong>de</strong>lay;<br />

if (<strong>de</strong>lay < mind) mind = <strong>de</strong>lay;<br />

avgDelay += <strong>de</strong>lay;<br />

avgHops += hops;<br />

tmp2BC = tmp2BC->next();<br />

};<br />

avgDelay /= group->count();<br />

avgHops /= group->count();<br />

d = avgDelay;<br />

h = avgHops;<br />

///////////////////fin_calcula_el_<strong>de</strong>lay_y_saltos_para_resultados_g<strong>en</strong>erales////////////<br />

/////////////////////////////////////////////////////////////////<br />

//Calcula el costo total <strong>de</strong>l arbol y borra el arbol temporal/////<br />

/////////////////////////////////////////////////////////////////<br />

double totalCost = 0.0;<br />

nodosBC = 0;<br />

No<strong>de</strong>ListEntry *temp1BC, *temp2, *temp = new No<strong>de</strong>ListEntry;<br />

temp1BC = UltEntra;<br />

while (temp1BC != NULL) {<br />

nodosBC++;<br />

RoutingTableEntry *rout = temp1BC->no<strong>de</strong>Ptr()->routingTable();<br />

int Found = False;<br />

while ((rout != NULL) && (Found == False)) {<br />

if ((rout->address() == addr) && (rout->source() == source))<br />

Found = True;<br />

else rout = rout->next();<br />

};<br />

No<strong>de</strong>ListEntry *temp = rout->childr<strong>en</strong>();<br />

while (temp != NULL) {<br />

Adjac<strong>en</strong>cyListEntry *adjj = temp1BC->no<strong>de</strong>Ptr()->adjac<strong>en</strong>tNo<strong>de</strong>s();<br />

int Found2 = False;<br />

while ((adjj != NULL) && (Found2 == False)) {<br />

if (adjj->no<strong>de</strong>Ptr() == temp->no<strong>de</strong>Ptr()) Found2 = True;<br />

else adjj = adjj->next();<br />

};<br />

if (adjj != NULL) {<br />

if (fn == PEAK) totalCost += (adjj->peak() - pk);<br />

else totalCost += (adjj->average() - avg);<br />

};<br />

temp = temp->next();<br />

};<br />

temp2 = temp1BC->next();<br />

<strong>de</strong>lete temp1BC;<br />

temp1BC = temp2;<br />

};<br />

///Limpia memoria dinamica<br />

if (pAgreg != NULL) <strong>de</strong>lete [] pAgreg;<br />

112


if (Entra0 != NULL) <strong>de</strong>lete [] Entra0;<br />

//if (Entra1 != NULL) <strong>de</strong>lete [] Entra1;<br />

//if (UltEntra != NULL) <strong>de</strong>lete [] UltEntra;<br />

if (flagDestin != NULL) <strong>de</strong>lete [] flagDestin;<br />

if (temp != NULL) <strong>de</strong>lete [] temp;<br />

if (temp1BC != NULL) <strong>de</strong>lete [] temp1BC;<br />

if (temp2 != NULL) <strong>de</strong>lete [] temp2;<br />

if (CostAdj != NULL) <strong>de</strong>lete [] CostAdj;<br />

if (Contribucion != NULL) <strong>de</strong>lete [] Contribucion;<br />

if (<strong>de</strong>s<strong>de</strong> != NULL) <strong>de</strong>lete [] <strong>de</strong>s<strong>de</strong>;<br />

if (CostMatrixBC != NULL) <strong>de</strong>lete [] CostMatrixBC;<br />

if (flagDestin2 != NULL) <strong>de</strong>lete [] flagDestin2;<br />

if (CostLCMatrix != NULL) <strong>de</strong>lete [] CostLCMatrix;<br />

if (pVisitedBC != NULL) <strong>de</strong>lete [] pVisitedBC;<br />

/////////Fin limpia Memoria///////<br />

//printf("COSTO TOTAL = %.6e\n", totalCost);<br />

return(totalCost);<br />

////////////////////////////////////////////////////////////////////////<br />

}; //<strong>en</strong>d RoutBC<br />

113

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!