proyecto fin de carrera - universidad de...
TRANSCRIPT
i
Equation Chapter 1 Section 1
Proyecto Fin de Carrera
Ingeniería de Telecomunicación
Desarrollo de un simulador para redes tolerantes a
retrasos
Autor: Francisco Luis Medina Puche
Tutor: Daniel Gutiérrez Reina
Dep. de Ingeniería Electrónica
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
iii
Proyecto Fin de Carrera
Ingeniería de Telecomunicación
Desarrollo de un simulador para redes tolerantes a
retrasos
Autor:
Francisco Luis Medina Puche
Tutor:
Daniel Gutiérrez Reina
Profesor titular
Dep. de Ingeniería Electrónica
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
v
Proyecto Fin de Carrera: Desarrollo de un simulador para redes tolerantes a retrasos
Autor: Francisco Luis Medina Puche
Tutor: Daniel Gutiérrez Reina
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de:
Sevilla, 2017
El Secretario del Tribunal
i
Agradecimientos
Este proyecto no hubiera sido posible sin la ayuda de mi tutor, Daniel Gutierrez Reina, el cual me ha falicitado
el material y los medios apropiados para llevar a cabo el desarrollo e implementación del simulador. Además,
su total disponibilidad ante las dudas y experiencia en el lenguaje de programación utilizado me ha ayudado a
comprender mejor los conocimientos básicos para cumplir satisfactoriamente con los objetivos marcados.
A la familia, amigos y compañeros, agradecer todo el apoyo que me han brindado durante la realización del
proyecto y el interés que han mostrado por conocer cuál era el estado del mismo.
Muchas gracias.
Francisco Luis Medina Puche
Sevilla, 2017
iii
Resumen
La simulación se ha convertido en una herramienta clave para el diseño y análisis de sistemas, como pueden ser
las redes de comunicaciones o las redes de colas. Gracias a la simulación, podemos optimizar los sistemas, o
elegir un sistema u otro en función de los resultados obtenidos tras la simulación. Podemos obtener la carga
máxima que aceptará un sistema, pudiendo ajustarlo de manera bastante aproximada antes de implantar el
sistema. Se pueden prevenir errores gracias a la simulación, que, de otra manera solo se producirían con el
sistema ya implantado.
Dado esto, el presente proyecto pretende dar una visión más amplia acerca de un tipo de redes que se escapa de
los estándares que todos bien conocemos y da solución a una serie de inconvenientes que se presentan cuando
el modelo actual de Internet resulta ineficiente.
En resumen, el objetivo del simulador consiste en medir las prestaciones o el rendimiento de un determinado
sistema. En este proyecto, además queremos que un simulador también sea sencillo de usar, polivalente y actual.
Por ello, la elección de desarrollarlo en Python, es por su versatilidad y por su rápida expansión en los tiempos
actuales, ya que cada vez está siendo más usado.
Las diferentes etapas del código han sido validadas mediante simulación y pruebas experimentales. La
herramienta Anaconda, a través de su intérprete Spyder, nos ha permitido tanto la codificación como la posterior
simulación del mismo.
Por último, analizaremos los resultados obtenidos en diferentes simulaciones para poder perfilar ciertas líneas
futuras de investigación.
v
Índice
Agradecimientos i
Resumen iii
Índice v
Índice de Tablas vii
Índice de Figuras ix
1 Introducción 1 1.1 Motivación 1 1.2 Objetivos 2 1.3 Estructura del documento 2
2 Internet en la actualidad 3 2.1 Capas del protocolo de Internet 4
3 Redes de comunicaciones inalámbricas 6 3.1 Evolución de las redes inalámbricas 6 3.2 El estándar WIFI 8 3.3 Tipos de redes inalámbricas 9
3.3.1 Redes de área personal inalámbricas (WPAN) 10 3.3.2 Redes de área local inalámbricas (WLAN) 10 3.3.3 Redes de área metropolitana inalámbricas (WMAN) 11 3.3.4 Redes de área extendida inalámbricas (WWAN) 11
3.4 Ventajas de las comunicaciones inalámbricas respecto a las tradicionales 13 3.5 Limitaciones de las comunicaciones inalámbricas respecto a las tradicionales 13
4 Redes DTN 15 4.1 Origen de las redes DTN 15 4.2 Aplicaciones de las redes DTN 16 4.3 Nodos 18 4.4 Método de almacenamiento y reenvío 19 4.5 Tipos de contactos 20 4.6 La capa Bundle 21 4.7 Protocolos de encaminamiento en DTNs 22
4.7.1 Encaminamiento determinista 22 4.7.2 Encaminamiento estocástico 23
5 Simulador “DpyThoN” 26 5.1 Herramientas utilizadas 26 5.2 Diagrama de bloques 29 5.3 Desarrallo del simulador 30 5.4 Resultados del simulador 32
6 Conclusión y futuros trabajos 37
7 Bibliografía 38
Anexo A: Código bloque principal 39
Anexo B: Código de las funciones 45
Anexo C: Código de las clases 49
vii
ÍNDICE DE TABLAS
Tabla 5–1 Medidas para nodo destino 3 33
Tabla 5–2 Medidas para nodo destino 13 34
Tabla 5–3 Medidas para nodo destino 12 35
ix
ÍNDICE DE FIGURAS
Figura 2-1. Estrategia de reenvío de paquetes en Internet 3
Figura 2-2. Capas de protocolos de Internet 4
Figura 2-3. Esquema mecanismo de enrutamiento en Internet 5
Figura 3-1. Esquema ALOHA 7
Figura 3-2. Esquema de conexión Ad-hoc 7
Figura 3-3. Esquema conexión Infraestructura 8
Figura 3-4. Logo Wi-Fi 8
Figura 3-5. Clasificación redes inalámbricas 9
Figura 4-1. Nodos de las DTNs 19
Figura 4-2. Esquema almacenamiento y reenvío de las DTNs 20
Figura 4-3. Arquitectura de las DTNs 21
Figura 4-4. Interconexión de regiones con diferentes protocolos 22
Figura 4-5. Esquema del modelo de enrutamiento Epidemic 24
Figura 5-1. Logo Python 27
Figura 5-2. Logo Spyder 28
Figura 5-3. Diagrama de bloques 29
Figura 5-4. Archivo de trazas 30
Figura 5-5. Eventos ‘E’ y ‘G’ 31
Figura 5-6. Eventos ‘T’ y ‘R’ 31
Figura 5-7. Diagrama contacto entre nodos 32
Figura 5-8. Medidas para nodo destino 3 33
Figura 5-9. Medidas para nodo destino 13 34
Figura 5-10. Medidas para nodo destino 12 35
Figura 5-11. Número de contactos de todos los nodos 36
1
1 INTRODUCCIÓN
1.1 Motivación
Debido al gran éxito obtenido por el desarrollo de Internet y la creciente dependencia a dispositivos
inalámbricos, tales como ordenadores personales portátiles o teléfonos móviles, añadido a la gran movilidad de
los usuarios y la evolución de las nuevas tecnologías como las redes de satélites y redes móviles, ha dado lugar
a que en los últimos años sean cada vez más los investigadores que están presentando un importante interés
sobre una nueva rama de las redes. Dichas redes nos permiten llegar a las zonas más remotas permitiendo la
comunicación en las condiciones más extremas e inestables, donde los beneficios del gran modelo que domina
la red mundial no llegan.
Si bien en los países en desarrollo el acceso a las comunicaciones sigue creciendo de manera significativa,
continúan existiendo regiones cuya limitación comunicativa sigue siendo muy pobre o prácticamente nula. Es
por ello que las redes tolerantes a retrasos (DTNs) nos ofrecen una solución a estos desafíos que se nos presentan
ya que existen ciertas diferencias con respecto a las redes tradicionales, las cuales son:
• Alto retardo, baja eficiencia y retardo de cola elevado. El retraso extremo a extremo nos indica la suma
total de los retrasos de cada uno de los saltos de la ruta. El retraso es considerado tiempo de espera,
tiempo de cola y tiempo de transmisión. El retraso en cada salto puede ser muy elevado debido al hecho
de que las DTN mantienen una conexión intermitente durante un tiempo muy largo, lo que conduce
además a una menor velocidad de datos y muestra las características asimétricas en la velocidad de
datos en enlaces ascendente-descendente. Además, los retrasos de cola juegan un papel importante en
los retrasos extremo a extremo y las fragmentaciones frecuentes en las DTN hacen que los retrasos de
cola aumenten.
• Conectividad intermitente. Como la movilidad de los nodos y la energía están limitados, las DTN se
desconectan con frecuencia, lo que resulta un cambio continuo en la topología de las DTN. Esto quiere
decir que la red mantiene el estado de conexión intermitente y parcial por lo que no existe garantía para
establecer una ruta extremo a extremo.
• Recursos limitados. La computación de los nodos, la habilidad de procesamiento, la habilidad de
comunicación y el espacio de almacenamiento es más débil que en una computadora corriente, debido
a los contrastes de precio, volumen y potencia. Además, el límite de almacenamiento provoca una
mayor pérdida de paquetes de información.
• Tiempo de vida del nodo limitado. En algunas circunstancias especiales de la red restringida, el nodo
es capaz de usar la alimentación de la batería en situaciones de ambiente hostil o condiciones muy duras,
lo que reducirá el tiempo de vida del nodo. Cuando la alimentación está apagada, el nodo no puede
garantizar un funcionamiento normal, es decir, es muy probable que el equipo esté apagado cuando el
mensaje está siendo transmitido.
• Topología dinámica. La topología de las redes DTN cambia de manera dinámica por algunas razones
como los cambios ambientales, agotamiento de la energía u otros fallos, lo cual provoca el abandono
de la red.
• Baja seguridad. En general, las DTN presentan vulnerabilidad, además de las propias amenazas por ser
una red de comunicación inalámbrica, al espionaje, modificación de mensajes, suplantación de
enrutamiento, negación del servicio (DoS), y otras amenazas a la seguridad debido a la falta de servicios
especializados y de mantenimiento del mundo real.
• Interconexión heterogénea. DTN es una red superpuesta dedicada a la transmisión de mensajes
asíncronos. Introduce la capa Bundle, donde la DTN puede trabajar en diferentes protocolos de red
diferentes y la puerta de enlace de las DTN asegura una transmisión fiable de los mensajes de
interconexión.
Por consiguiente, las redes tolerantes a retardos pueden significar una gran solución a varios desafíos presentes
en entornos remotos, además el uso de un simulador nos servirá de gran ayuda para poder analizar determinados
escenarios.
1.2 Objetivos
El objetivo del presente Proyecto Fin de Carrera, es el de ofrecer una visión algo más amplia de las redes de
comunicación e incentivar el desarrollo de la investigación en redes poco habituales como son las DTN (Delay-
Tolerant Network), las cuales representan un tipo de red poco conocida pero que pueden llegar a ofrecernos
grandes avances tanto en el campo tecnológico como en el desarrollo humano ya que, entre otras
funcionalidades, nos permite que entornos aislados puedan beneficiarse al poder comunicarse con el mundo sin
las barreras tecnológicas que el modelo actual de redes representan. Los objetivos a abordar en este proyecto
son:
• Estudio de la tecnología DTN para ofrecer servicios de conexión en entornos remotos mediante la
retransmisión de información entre dispositivos inalámbricos móviles aprovechando la movilidad de
los mismos para llevar servicios a estos lugares.
• Desarrollo de un simulador sencillo basado en eventos para redes multi-salto tolerante a retrasos que
nos proporcione una solución a la situación expuesta en el punto anterior.
• Evaluación de protocolos sencillos de diseminación de mensajes.
1.3 Estructura del documento
Esta memoria ha sido redactad para describir con detalle todo el trabajo realizado durante el desarrollo del
proyecto. La estructura sigue el orden en el que se han abordado las distintas tareas y se divide en los siguientes
capítulos o secciones:
• Capítulo 1 – Introducción.
• Capitulo 2 – Internet en la actualidad: se hace una breve introducción sobre el punto en el que se
encuentra internet y las capas que la constituyen.
• Capítulo 3 – Redes de comunicaciones inalámbricas: evolución de las redes inalámbricas a lo largo de
la historia, sus diferentes tipos y las limitaciones que presentan.
• Capítulo 4 – Redes DTN: se define tanto el origen, evolución e implementación en la sociedad, así
como los distintos elementos que la constituyen.
• Capítulo 5 – Desarrollo y resultados del simulador DpyThoN: se recogen las simulaciones realizadas y
los resultados obtenidos.
• Capítulo 6 – Conclusiones y trabajos futuros: aportaciones personales a la consecución del proyecto.
3
2 INTERNET EN LA ACTUALIDAD
nternet ha logrado un gran éxito en la interconexión de dispositivos de comunicación a través de la Tierra.
Lo ha hecho mediante el uso de un conjunto homogéneo de protocolos de comunicación, llamados como la
familia de protocolos TCP / IP. Todos los dispositivos en los cientos de miles de redes que forman Internet
usan estos protocolos para el enrutamiento de datos y aseguran la fiabilidad de los intercambios de mensajes.
La conectividad en Internet se basa principalmente en enlaces cableados, incluyendo el cable de red telefónico,
aunque las tecnologías inalámbricas, como el satélite y enlaces móviles de corto alcance también son una parte
esencial de la red. Estos enlaces, como los utilizados en Internet, están conectados de forma continua de extremo
a extremo, caminos de bajo retardo entre los orígenes y destinos. Presentan bajas tasas de error y velocidades de
datos bidireccionales relativamente simétricas.
La comunicación en Internet se basa en la conmutación de paquetes. Los paquetes son piezas de un bloque
completo de datos de usuario (por ejemplo, piezas de un mensaje de correo electrónico o una página web) que
viajan independientemente desde origen al destino a través de una red de enlaces conectados por routers. Los
routers encaminan la dirección en la que los paquetes se moverán. El origen, el destino y los routers son llamados
colectivamente nodos.
Cada paquete que conforma un mensaje puede tomar un camino diferente a través de los routers de la red. Si se
desconecta un enlace, los routers redirigen los paquetes utilizando un enlace alternativo. Dichos paquetes
contienen datos de usuario de aplicación del programa y una cabecera. La cabecera contiene una dirección de
destino y otra información que determina cómo el paquete se conmuta de un router a otro. Los paquetes en un
mensaje dado pueden llegar fuera de orden, pero el mecanismo de transporte del destino los devuelve en el orden
correcto. La facilidad de uso de Internet depende de algunos supuestos importantes:
• Enlaces extremo a extremo continuos y bidireccionales: Una conexión bidireccional continuamente
disponible entre el origen y el destino para apoyar la interacción de extremo a extremo.
• Viajes cortos ida y vuelta: Pequeños y relativamente contantes retrasos en la red (milisegundos), no
horas ni días. Se envían paquetes de datos y se reciben los correspondientes paquetes de confirmación.
• Tasas de datos simétrica: tasas de datos relativamente constantes en ambas direcciones entre el origen
y el destino.
• Tasas de errores baja: Relativamente poca pérdida o corrupción de datos en cada enlace.
Figura 2-1. Estrategia de reenvío de paquetes en Internet
I
2.1 Capas del protocolo de Internet
Los terminales (ordenadores que actúan como origen o destino de los datos) implementan usualmente al
menos cinco capas de protocolo que realizan las siguientes funciones [1]:
• Capa de Aplicación: Generan o consumen los datos de usuario.
• Capa de transporte: Segmenta los datos de usuario en trozos en el origen, y vuelve a montar las piezas
en el destino, con control de errores y control de flujo. En Internet, el Protocolo de Control de
Transmisión (TCP) es el encargado de hacer esto.
• Capa de red: enrutamiento de la dirección que comunica el origen y el destino a través de nodos
intermedios, con la fragmentación y reensamblaje si es necesario. En Internet, el protocolo de Internet
(IP) hace esto.
• Capa de enlace: transmisión enlace a enlace y recepción de piezas direccionadas de los datos del usuario
con el correspondiente control de errores. Los protocolos de la capa de enlace incluyen redes de área
local (LAN) y protocolos punto a punto (PPP) para módems dial-up o conexiones de alta velocidad.
• Capa física: transmisión y recepción de flujos de bits enlace a enlace. Los medios físicos incluyen cable
de categoría 5 (CAT5), trenzado sin blindaje par (UTP), cable de teléfono, cable coaxial, cable de fibra
óptica y de RF.
Figura 2-2. Capas de protocolos de Internet
La siguiente figura muestra el mecanismo básico. Cada salto en una ruta puede utilizar una capa de enlace y una
capa física diferente, pero el protocolo IP se ejecuta en todos los nodos y el protocolo TCP se ejecuta sólo en los
terminales de origen y de destino. Los routers, en su función de retransmitir los datos, usa solamente los tres
protocolos inferiores. Otros varios protocolos de Internet y aplicaciones también se utilizan para proporcionar
nuevos caminos de enrutamiento, selección de rutas, resolución de nombres y servicios de recuperación de
errores [2].
5
Figura 2-3. Esquema mecanismo de enrutamiento en Internet
3 REDES DE COMUNICACIONES INALÁMBRICAS
esde un punto de vista general, entendemos por comunicaciones inalámbricas a aquellas que se
establecen entre dispositivos, móviles o no, o entre personas que intercambian información sin necesidad
de un soporte físico, es decir, utilizando únicamente el espectro electromagnético. Tanto la transmisión
como la recepción se realizan a través de puertos. Una de sus principales ventajas es el ahorro en costes, ya que
se elimina todo el cableado Ethernet y las conexiones físicas entre nodos.
Las tecnologías de interconexión inalámbrica van desde redes de voz y datos globales, que permiten a los
usuarios establecer conexiones inalámbricas a través de largas distancias, hasta las tecnologías de luz infrarroja
y radiofrecuencia que están optimizadas para conexiones inalámbricas a distancias cortas. Numerosos son los
dispositivos que son utilizados a día de hoy que presentan esta característica: equipos portátiles, teléfonos
móviles, tabletas, agendas electrónicas de bolsillo (PDA), etc…
Las tecnologías inalámbricas presentan una infinidad de usos prácticos, por ejemplo, ya sean los usuarios de
teléfonos móviles pueden usarlo para tener acceso al correo electrónico, navegar por internet, comunicarse con
otros usuarios mediante aplicaciones de mensajería instantánea entre otras muchas prestaciones; aquellas
personas que viajan con equipos portátiles pueden conectarse a Internet a través de estaciones base instaladas en
aeropuertos, estaciones de trenes u otros lugares públicos; o en el propio domicilio, donde los usuarios pueden
conectar sus dispositivos a su equipo de escritorio para sincronizar datos y transferir archivos.
Sin lugar a dudas, las comunicaciones inalámbricas constituyen actualmente el segmento más dinámico y de
mayor crecimiento en el sector de las Tecnologías de la Información y Comunicaciones (TIC).
3.1 Evolución de las redes inalámbricas
Las redes inalámbricas están adquiriendo un éxito sin precedentes debido a una combinación de factores: una
tecnología eficaz con el uso del espectro, muy orientada al despliegue de redes locales de pequeño tamaño, un
entorno regulatorio que permite su libre uso, una lógica fácilmente integrable y de muy bajo coste, y una
interoperabilidad de equipos generalmente exitosa.
Para empezar a hablar de redes inalámbricas es necesario que nos remontemos al año 1880, en el que Graham
Bell y Summer Tainter inventaron el primer aparato de comunicación sin cables, el fotófono, pero no tuvo mucho
éxito debido a que entonces todavía no se distribuía electricidad y las primeras bombillas se habían inventado
un año antes.
En 1888 el físico alemán Rudolf Hertz realizó la primera transmisión si cables con ondas electromagnéticas
mediante un oscilador que uso como emisor y un resonador que hacía de receptor. En 1894 las ondas de radio
ya eran un medio de comunicación. En 1899 Guillermo Marconi consiguió establecer comunicaciones
inalámbricas a través del canal de La Mancha.
En 1907 se transmitían los primeros mensajes completos a través del Atlántico. Durante la Segunda Guerra
Mundial se produjeron importantes avances en este campo.
La primera red inalámbrica no tuvo lugar hasta 1971, cuando un grupo de investigadores, en la universidad de
Hawái, dirigidos por Norman Abramson crearon el primer sistema de conmutación de paquetes mediante una
red de comunicación por radio, dicha red se llamó ALOHA [3].
D
7
Figura 3-1. Esquema ALOHA
A finales de los sesenta se publicaron los resultados de un experimento consistente en utilizar enlaces de
infrarrojos para crear una red local en una fábrica llevado a cabo por IBM en Suiza. Como hemos visto se usan
ondas electromagnéticas para transportar información de un punto a otro, para este objetivo se hace uso de ondas
portadoras (la señal que contiene la información a transmitir). La onda moduladora se acopla con la portadora,
a esto se le llama modulación, surgiendo una señal de radio que ocupa más de una frecuencia debido a que la
frecuencia de la primera se acopla a la segunda. Gracias a esto pueden existir varias portadoras simultáneamente
en el mismo espacio sin interferirse, siempre y cuando se transmitan en diferentes frecuencias. Otra ventaja es
la mayor facilidad en la transmisión de la información. Resulta más barato transmitir una señal de alta frecuencia
(como es la modulada) y el enlace es mayor. El receptor se sintoniza para seleccionar una frecuencia de radio y
rechaza las demás, tras esto demodula la señal para obtener los datos originales. A grosso modo este es el
funcionamiento de las redes inalámbricas. Para que las redes inalámbricas se pudieran expandir sin problemas
de compatibilidad había que establecer unos estándares, por ello IEEE creó un grupo de trabajo específico
llamado 802.11, se definiría con este estándar el uso del nivel físico y de enlace de datos de red, especificando
sus normas de funcionamiento. La diferencia entre una red inalámbrica y otra que no lo es reside en la forma en
que se transmiten los paquetes de datos, el resto es idéntico y como consecuencia todo el software que vaya a
funcionar con la red no debería tener en cuenta que tipo de red es ya que ambos tipos de redes son totalmente
compatibles. IEEE 802.11 define dos modos básicos de operación:
• Ad-hoc: los terminales se comunican libremente entre sí. Se suele encontrar en entornos militares,
operaciones de emergencias, redes de sensores, comunicación entre vehículos, etc [4].
Figura 3-2. Esquema de conexión Ad-hoc
• Infraestructura: los equipos están conectados con uno o más puntos de acceso al medio, es mayoritario,
podemos ver este modo de operación en hogares, empresas e instituciones públicas.
Figura 3-3. Esquema conexión Infraestructura
En 1999 Nokia y Simbol Technologies crearon la asociación Wireless Ethernet Compatatibility Alliance
(WECA), que en 2003 fue renombrada a WI-FI Alliance (Wireless Fidelity) con el objetivo de crear una marca
que permitiese fomentar más fácilmente la tecnología inalámbrica y asegurar la compatibilidad de equipos. En
2000 la WECA certifico según la norma 802.11b (revisión del 802.11 original) que todos los equipos con sello
Wi-Fi podrán trabajar juntos sin problemas.
Actualmente existe una norma de transmisión de datos llamada WIMAX (IEEE 802.16) que utiliza las ondas de
radio en las frecuencias 2,5 y 5Ghz, es una tecnología dentro de las conocidas como tecnologías de última milla.
Está diseñada para dar servicios de banda ancha en zonas donde el despliegue de cable o fibra por baja densidad
de población representa unos costes por usuarios muy elevados. Este sistema cubre distancias de hasta 80km y
una velocidad máxima de 75Mbps.
3.2 El estándar WIFI
Figura 3-4. Logo Wi-Fi
Wifi es una red inalámbrica basada en la transmisión de datos mediante ondas electromagnéticas en la cual el
alcance es bastante limitado por lo que se utiliza principalmente a nivel doméstico y en oficinas de trabajo.
Gracias a que nos permite la eliminación del cableado para la conexión a Internet, se ha convertido en la red más
popular.
En 1999, los principales vendedores de soluciones inalámbricas se asociaron bajo el nombre de WECA
(Wireless Ethernet Compability Aliance) la cual fue renombrada en 2003 a WI-FI Alliance. El objetivo de ésta
era crear una marca que permitiese fomentar más fácilmente la tecnología inalámbrica y asegurar la
9
compatibilidad de equipos. El estándar original es el 802.11, éste ha ido evolucionando y ahora las posibilidades
de alcance y velocidad son varias. Algunas variantes de Wifi son estas [3]:
• IEEE 802.11b y IEEE 802.11g: ambos disponen de una banda de 2.4 GHz. El primero alcance una
velocidad de 11 Mbps y el segundo de 54 Mbps. Son de los estándares más extendidos.
• IEEE 802.11a: trabaja a una frecuencia de 5 GHz, por lo que es conocido como Wifi5. Dispone de
menor alcance que el estándar anterior. Sin embargo, al ser un sistema reciente no hay otras tecnologías
que lo usen por lo que la conexión a internet es limpia y sin interferencias.
• IEEE 802.11n: presenta también una banda de 2.4 GHz, pero la velocidad es mucho mayor que la de
sus predecesores, 108 Mbps.
3.3 Tipos de redes inalámbricas
Lo mismo que las redes con cable, las redes inalámbricas se pueden clasificar en diferentes tipos en función de
las distancias a través de las que se pueden transmitir los datos. Según su alcance, se establecen tres grandes
grupos:
• Redes de área personal inalámbrica (WPAN: wireless personal area networks).
• Redes de área local inalámbrica (WLAN: wireless local area networks).
• Redes de área metropolitana inalámbrica (WMAN: Wireless Metropolitan Area Networks)
• Redes de área extendida inalámbrica (WWAN: wireless wide area networks). Podemos diferenciar dos
tipos de WWAN, según quién controle su acceso:
➢ Comunicación fija (FWWAN: fixed wireless wide area networks).
➢ Comunicación móvil (MWWAN: mobile wireless wide area networks).
Figura 3-5. Clasificación redes inalámbricas
3.3.1 Redes de área personal inalámbricas (WPAN)
Las WPAN presentan una importante limitación de alcance: los dispositivos que pretenden comunicarse han de
estar poco separados. Generalmente, se acepta como límite el espacio de una habitación o un despacho. Las
redes WPAN es una tecnología que ha llegado de manera progresiva a nuestra vida cotidiana con el objetivo de
hacer las comunicaciones más cómodas y más fáciles de utilizar: la tecnología Bluetooth permite comunicar una
impresora y un ordenador sin ningún cable, siempre que estén a una distancia de aproximadamente diez metros;
mediante la tecnología Wi-Fi la distancia puede llegar a ser de hasta cien metros.
Las tecnologías más utilizadas de WPAN son Bluetooth, DECT, IrDa, NFC10 y Zigbee.
3.3.2 Redes de área local inalámbricas (WLAN)
Una WLAN es una red de cobertura geográfica limitada, velocidad de transmisión relativamente alta, bajo nivel
de errores y administrada de manera privada, que se comunica básicamente mediante microondas.
3.3.2.1 Ventajas y limitaciones de las WLAN
La necesidad de una WLAN no se justifica por una posible mejora en ancho de banda o en fiabilidad, seguridad
o eficiencia de las comunicaciones, sino por la comodidad que proporciona al usuario y la movilidad que le
permite y por su fácil y rápida instalación.
Las WLAN son una extensión y/o una alternativa a las LAN cableadas. Los usuarios de una WLAN pueden
acceder a los recursos que les ofrece la LAN sin tener que depender de infraestructuras de red (cableado,
conectores, etc..). La gran difusión de este tipo de redes se debe a las importantes ventajas que presentan respecto
a las LAN:
• Movilidad: los usuarios de una WLAN pueden acceder a información en tiempo real desde cualquier
lugar de la organización.
• Instalación simple: no hay que preocuparse por la instalación de cables dentro del radio de cobertura.
• Flexibilidad: permite acceder a lugares que una LAN cableada no alcanzaría nunca.
• Bajo coste: aunque el coste inicial de instalación de las WLAN puede ser superior a las LAN con cable,
a largo plazo puede suponer un ahorro, sobre todo en entornos con cambios frecuentes de ubicación de
los dispositivos.
• Escalabilidad: las WLAN se pueden configurar con diferentes topologías de una manera sencilla según
la necesidad del entorno. Podemos tener las WLAN ad hoc (donde los dispositivos se van añadiendo a
la red) y las WLAN con puntos de acceso conectados a la red principal.
A pesar de las ventajas mencionadas anteriormente, las WLAN tienen una serie de limitaciones y requisitos
como:
• Velocidad: las WLAN deben poder transmitir información a velocidades comparables a las LAN (más
de 500 Mbps).
• Retardos: son importantes en cualquier aplicación, pero especialmente en las transmisiones
inalámbricas.
• Accesos difíciles: dentro de un edificio podemos encontrar factores que amortiguan la señal. Un
dispositivo móvil puede recibir mucha menos potencia que otro.
• Consumo: los dispositivos móviles se suelen alimentar con baterías; por lo tanto, hay que diseñarlos
para que tengan un consumo eficiente (modo reposo, modo bajo consumo, poco gasto en la transmisión
de paquetes, etc.).
• Máximo número de nodos y máxima cobertura: una WLAN puede necesitar soportar centenares de
nodos. El área de cobertura típica de una WLAN es de entre 10 y 100 m2, lo que implica retardos de
propagación inferiores a 1.000 nseg.
• Seguridad: el medio en el que se transmite la información (ondas electromagnéticas) es abierto para
11
cualquiera que esté en el radio de cobertura. Para garantizar la seguridad, se utilizan algoritmos de
cifrado.
• Interferencias: se pueden producir a causa de dos transferencias simultáneas (colisiones) o de dos
emisores que comparten la misma banda de frecuencia. Las colisiones también se producen cuando
varias estaciones que esperan que el canal esté libre empiezan las transmisiones al mismo tiempo. A
diferencia de las redes locales con hilos, en las WLAN se produce un efecto de nodo oculto que conlleva
un aumento de colisiones.
3.3.3 Redes de área metropolitana inalámbricas (WMAN)
Para redes de área metropolitana se encuentran tecnologías inalámbricas basadas en WiMAX (Worldwide
Interoperability for Microwave Access, es decir, Interoperabilidad Mundial para Acceso con Microondas), un
estándar de comunicación inalámbrica basado en la norma IEEE 802.16. WiMAX es un protocolo paracido a
Wi-Fi, pero con más cobertura y ancho de banda. También podemos encontrar otros sistemas de comunicación
como LMDS (Local Multipoint Distribution Service).
3.3.4 Redes de área extendida inalámbricas (WWAN)
Las WWAN permiten la conexión de redes y usuarios de zonas geográficamente distantes. Se distinguen dos
tipos:
• WWAN fijas, que utilizan radioenlace o satélite.
• WWAN móviles, que utilizan las compañías u otros servicios públicos en la transmisión y recepción
de señales.
Sin ningún tipo de duda, las redes WWAN móviles (MWWAN) son las que han vivido una expansión más
espectacular en los últimos años. Actualmente las MWWAN son el sistema de comunicación inalámbrico más
utilizado, ya que es el que utilizan las operadoras de telefonía móvil y cuenta con más de 5.000 millones de
usuarios en todo el mundo.
3.3.4.1 WMAN fijas (FWWAN)
Las redes WWAN fijas pueden utilizar dos tecnologías:
• Radioenlace. Utilizando radioenlaces se pueden conectar redes separadas geográficamente con
diferentes bandas del espectro electromagnético (infrarrojos, microondas, láser, etc.), que pueden ser de
punto a punto o de punto a multipunto.
• Satélite. Las comunicaciones por satélite cubren una gran superficie de la Tierra, tienen un gran ancho
de banda y el coste de la transmisión es independiente de la distancia; presentan el inconveniente de los
retardos de propagación de la señal.
Actualmente, la mayor parte de las redes de satélite se utilizan para la difusión de televisión. El uso de estas
redes para la transmisión de datos inalámbricas es muy limitado, dado que es necesario tener en cuenta los
grandes gastos que conllevan en equipamiento, los problemas del retardo que se produce al propagarse la señal
y el coste elevado por minuto de transmisión.
3.3.4.2 WWAN móvil (MWWAN)
En las redes MWWAN el terminal que envía y recibe la información está en movimiento. En estas redes
normalmente hay muchos usuarios conectados simultáneamente (acceso múltiple) que utilizan los servicios.
Actualmente en Europa existen diferentes tecnologías de MWWAN, agrupadas por generaciones, donde las más
destacadas son las cinco siguientes:
3.3.4.2.1 2G (Segunda generació n)
Tecnología de segunda generación, utilizada para describir las redes móviles digitales, como las GSM, que
sustituyeron a las redes móviles analógicas de primera generación. Básicamente estaban diseñadas para
comunicaciones de voz, mensajería instantánea (SMS) y, esporádicamente, para transmisión de datos básicos
que requieren muy poco ancho de banda. La generación abarca el sistema GSM:
• GSM. El Group Special Mobile fue el organismo que se encargó de la configuración técnica de una
normativa de transmisión y recepción para la telefonía móvil. En Europa, las bandas de frecuencias ISM
que se utilizan son 900 MHz y 1.800 MHz. Esta tecnología apareció en el año 1990 con una velocidad
de transmisión de 9,6 kbps. GSM opera por comunicación de circuitos; esto quiere decir que existe una
fase de establecimiento de la conexión que añade tiempo de espera y que la llamada siempre estará
abierta, aunque no haya transferencia de datos, mientras no se cierre la conexión.
3.3.4.2.2 2.5G (Segunda generació n y media)
Considerada una tecnología intermedia entre 2G y 3G basada en las actualizaciones tecnológicas de las redes
móviles GSM para aumentar la velocidad de transmisión de datos y su eficacia. La generación abarca los
sistemas GPRS y EDGE:
• GPRS. Es una técnica de conmutación de paquetes que empezó a utilizarse en el 2001 y que se integró
con la estructura actual de redes GSM. Esta tecnología permite una velocidad de datos de entre 56 y
115 kbps. Sus ventajas son múltiples y se aplican fundamentalmente a las transmisiones de datos que
requieren tráfico discontinuo, como por ejemplo Internet y mensajería electrónica (SMS y MMS). Con
esta tecnología, desaparece el concepto de tiempo de conexión y dejan paso al de cantidad de
información transmitida, y se pasa de conmutación de circuitos a conmutación de paquetes. Los
proveedores de servicio de telefonía móvil podrán facturar por los paquetes realmente enviados y
recibidos. El ancho de banda podrá ser entregado a la carta, en función de las necesidades de la
comunicación.
• EDGE. También conocida como EGPRS (Enhanced GPRS), es una tecnología que apareció en el 2003
y considerada una evolución del GPRS. EDGE proporciona un ancho de banda superior a la de GPRS,
entre 236 y 384 kbps, que permite ejecutar aplicaciones que requieren una mayor velocidad de
transferencia de datos, como vídeo y otros servicios multimedia.
3.3.4.2.3 3G (Tercera generació n)
Las tecnologías de 3G son la respuesta a la especificación IMT-2000 de la Unión Internacional de
Telecomunicaciones (ITU) para disponer de banda ancha en telefonía móvil y transmitir un volumen de datos
importante mediante la red. Con la tercera generación serán posibles las videoconferencias, descargar vídeos,
ver televisión en tiempo real y poder realizar la mayoría de las operaciones desde el móvil. La generación abarca
el sistema UMTS:
• UMTS. El estándar UMTS está basado en la tecnología WCDMA. UMTS está gestionado por la
organización 3GPP versión 4, también responsable de GSM, GPRS y EDGE. UMTS se comercializó
por primera vez en el 2005 y su velocidad máxima de transmisión de datos es 1,92 Mbps.
3.3.4.2.4 3.5 (Tercera generació n y media)
De la misma manera que el 2.5G, es considerada una tecnología intermedia entre 3G y 4G, con el principal
objetivo de aumentar considerablemente la velocidad de transmisión de datos por las necesidades actuales de
los clientes consumidores. Es, por lo tanto, la evolución de 3G y se considera el paso previo de la cuarta
generación 4G. La generación abarca los sistemas HSPA y HSDPA:
• HSPA. Es la combinación de tecnologías posteriores y complementarias a 3G, como HSDPA o
HSUPA. Teóricamente, admite velocidades de hasta 14,4 Mbps en bajada y hasta 2 Mbps en subida,
dependiendo del estado o la saturación la red y de su implantación.
• HSDPA. Es la optimización de la tecnología espectral UMTS/WCDMA, incluida en las
13
especificaciones de 3GPP versión 5 y consiste en un nuevo canal compartido en el enlace descendente
(downlink) que mejora significativamente la capacidad máxima de transferencia de información hasta
llegar a tasas de 14,4 Mbps, soportando tasas de transmisión media próximas a 1 Mbps. Es totalmente
compatible con UMTS y la mayoría de los proovedores UMTS dan soporte a esta tecnología.
3.3.4.2.5 4G (Cuarta generació n)
El WWRF (Wireless World Research Forum) define 4G como una integración de red que funciona con la
tecnología de Internet donde toda la red es IP, combinándola con otros usos y tecnologías, como WiFi y
WiMAX. En estos momentos, 4G no es una tecnología o estándar definido, sino una colección de tecnologías y
protocolos que permiten el máximo rendimiento y con una red inalámbrica más barata. 4G incluye técnicas
inalámbricas de alto rendimiento, como MIMO y para el acceso radio abandona el acceso tipo CDMA
característico de UMTS (3G) para pasar a OFDMA para optimizar el acceso. La generación abarca los sistemas
LTE y WiMax:
• LTE. Es el estándar de la norma 3GPP versión 8, 9 y 10, definida como una evolución de la norma
3GPP UMTS (3G) y un nuevo concepto de arquitectura evolutiva (4G). LTE es la clave para el
despegue de Internet móvil, ya que posibilita la transmisión de datos a más de 300 Mbps en movimiento,
lo que permite la transmisión de vídeos o TV de alta definición.
• WIMAX. Es una tecnología, entre WLAN y WWLAN, que permite hacer conexiones a grandes
distancias, con grandes anchos de banda y sin necesitar línea de visión directa entre antenas. WiMAX
cumple los estándares IEEE 802.16 y es compatible con otros estándares, como el IEE 802.11, para
establecer sistemas de telecomunicaciones conjuntos.
3.4 Ventajas de las comunicaciones inalámbricas respecto a las tradicionales
Algunas de las ventajas que supone la utilización de la tecnología inalámbrica respecto a la comunicación
tradicional con cable son las siguientes:
• Accesibilidad y flexibilidad. Las comunicaciones inalámbricas llegan a lugares donde los cables no
tienen acceso.
• Coste. Las comunicaciones inalámbricas nos ahorran el coste asociado a la instalación del cableado y
los derivados de los cambios de entorno físico, que podrían ser todavía más importantes.
• Movilidad. Las comunicaciones inalámbricas permiten tener información en tiempo real y en cualquier
lugar del mundo. Esta funcionalidad puede permitir a muchas empresas mejorar su productividad y sus
posibilidades de negocio.
• Comodidad. El hecho de poder prescindir de los cables que conectan los dispositivos hace que con el
uso de comunicaciones inalámbricas se adquiera una importante comodidad.
• Escalabilidad. Las comunicaciones sin cables se adaptan fácilmente a los cambios de topología de la
red y, además, la reubicación de los terminales se facilita enormemente.
3.5 Limitaciones de las comunicaciones inalámbricas respecto a las tradicionales
Las limitaciones principales que podemos encontrar en las comunicaciones inalámbricas son las siguientes:
• Consumo. Los terminales móviles suelen trabajar con baterías que limitan la potencia de transmisión
de los dispositivos, lo que repercute directamente en el alcance de las redes.
• Capacidad de transferencia limitada. El espectro electromagnético es un recurso limitado.
• Calidad. Las transferencias inalámbricas se ven sometidas a interferencias y ruidos.
• Seguridad. La utilización del espectro electromagnético como medio de comunicación implica que
cualquier persona puede acceder a la información sin ningún tipo de limitación física.
15
4 REDES DTN
4.1 Origen de las redes DTN
Una Red Tolerante a Retrasos (DTN, Delay Tolerant Network) representa la clase de redes donde las conexiones
entre los nodos inalámbricos pueden sufrir la falta de conectividad continua [1].
Este tipo de redes usualmente tiene una densidad de nodos escasa, con rangos de comunicación cortos en cada
nodo. La conexión a través de estos nodos puede ser interrumpida debido a los límites del alcance del radio
inalámbrico, debido a la escasez de nodos móviles, recursos de energía, ataques, interferencias ambientales o
ruido.
Este tipo de redes se caracteriza por:
• Intermitencia en la conectividad: Si no hay una ruta de punto a punto entre el origen y el destino, la
comunicación punto a punto usando protocolos de TCP/IP no funciona. Se requerirán otros protocolos.
• Retardo grande o variable: Adicionalmente a la intermitencia, largos retardos de propagación entre los
nodos y retardos de espera variables, añadidos al retardo de la ruta de punto a punto pueden vences a
los protocolos de Internet y a las aplicaciones que requieran de acuses de recibo inmediatos o retorno
de información.
• Tasas de datos asimétricas: Internet soporta asimetrías moderadas en tasa de datos bidireccionales
(como en la TV por cable o ADSL). Pero si estas asimetrías son muy grandes, los protocolos de
conversación son derrotados.
• Elevadas tasas de error: Errores en el envío de bits requieren corrección (lo que requieres mayor
cantidad de bits y mayor procesamiento) o retransmisión del paquete entero (lo que resulta en mayor
tráfico de red).
Las Redes tolerantes al retardo e interrupciones surgieron como parte del proyecto “Internet Interplanetaria”
(IPN). Este proyecto comenzó en el Laboratorio de Propulsión a Chorro de EEUU con el objetivo de
proporcionar una nueva tecnología para las comunicaciones entre naves espaciales.
Se concebía el sistema interplanetario como una red de redes globales, no limitada a usar los protocolos de
internet convencionales. La arquitectura resultante presenta una estructura en capas del mismo grado de
abstracción que internet, y puede operar tanto en internet convencional como sobre protocolos de transportes
subyacentes, más adecuados a largos retardos e interrupciones.
En esta nueva arquitectura el equivalente a IP se denomina Protocolo de Paquetes (Bundle Protocol) y puede
correr lo mismo sobre TCP, UDP, sobre el nuevo Protocolo de Transporte Licklider para aplicaciones en el
espacio profundo o sobre otro protocolo de transporte. Esta arquitectura de red llamada Redes tolerantes al
retardo e interrupciones ha demostrado ser útil en aplicaciones terrestres.
Las redes DTN implementan una arquitectura de conmutación de mensajes con almacenamiento y reenvío. Esta
funcionalidad se consigue con la introducción de una capa de mensajes o fardo, bundle layer, situada entre la
capa de aplicación y la capa de transporte con el objetivo de unir redes distintas y de naturaleza heterogénea.
El almacenamiento de los datos se realiza de forma persistente (en discos o memorias flash) en los nodos
intermedios para ser retransmitidos ante una interrupción. Otra característica de las redes DTN es la transferencia
de mensajes bajo custodia. Los encaminadores DTN almacenan los mensajes con garantías hasta que el siguiente
nodo en la ruta esté disponible.
4.2 Aplicaciones de las redes DTN
Debido a razones técnicas o factores económicas, la topología de la red cambia constantemente y los enlaces
extremo a extremo raramente están disponibles en las DTNs. La mayoría de las aplicaciones tradicionales no
funcionan en este tipo de redes. Como consecuencia, diversas aplicaciones DTNs, que explotan las
características inherentes de las DTNs para transmitir mensajes, han sido desarrolladas. Como el área de las
DTNs está en desarrollo, solo veremos algunas de las principales aplicaciones prácticas de las mismas.
• REDES EN ENTORNOS SALVAJES.
Las redes tolerantes a retrasos han sido ampliamente utilizadas en el rastreo de la fauna salvaje. El
sistema de comunicación tolerante al retraso más típico es Zebranet, que se utiliza para realizar un
seguimiento de la cebra mediante la aplicación de técnicas de red inalámbricas de igual a igual (peer-
to-peer). El sistema Zebranet consta de collares de rastreo (nodos) realizados por las cebras en el marco
del estudio a través de las vastas praderas de África. Dicha estructura consta de un sistema de
posicionamiento global (GPS), una memoria flash, un transceptor inalámbrico y una CPU de baja
potencia. Los collares operan como la forma de conexión oportuna para transmitir datos a los
investigadores. Cuando dos cebras se encuentran, los collares registrarán la información encontrada e
intercambian los datos almacenados en la memoria local. A través de estos encuentros intermitentes, la
información de encuentro se registra y es difundida a aquellas cebras con collares de rastreo. Los
investigadores del entorno salvaje, regularmente conducen con estaciones bases de telefonía móvil a
través del área de seguimiento para recopilar información sobre la población dispersa de cebras.
• REDES EN ZONAS RURALES.
Durante la última década, los servicios de comunicación se han ido convirtiendo en más y más
persuasivos. Sin embargo, debido a la falta de infraestructuras fijas, la comunicación sigue siendo muy
cara y un inconveniente en los países en vías de desarrollo o aldeas remotas. Esto implica una
oportunidad para las DTNs, las cuales podrían proporcionar servicios de comunicación en tiempo no
real con un bajo coste extraordinario. La red de comunicación más representativa en este ámbito es
DakNet, una red tolerante a retrasos Ad-hoc que utiliza tecnología inalámbrica para proporcionar
servicios de conectividad digitales asíncronos. La DakNet es desarrollado por investigadores del MIT
Media Lab, y ha sido implementado con éxito en lugares remotos de la India y Camboya. DakNet
combina medios físicos de transporte con la transferencia inalámbrica de datos a fin de extender la
conectividad a Internet proporcionada por un enlace ascendente central o Hub (por ejemplo, un
cibercafé, VSAT, o la oficina de correos) a los quioscos en las aldeas circundantes. Básicamente, en el
escenario DakNet, un nodo se mueve a lo largo de un camino predefinido. Un vehículo se detiene en el
destino durante un tiempo durante el cual se produce la carga y descarga de datos. El vehículo puede
ser un autobús, moto o cualquier otro dispositivo dependiendo de las ubicaciones rurales. DakNet, en
lugar de tratar de transmitir datos a larga distancia (que puede ser caro), transmite los datos a través de
enlaces punto a punto de corta longitud entre los quioscos y dispositivos de almacenamiento portátiles
llamados puntos de acceso móvil (MAP). Montado en un autobús, motocicleta, e incluso una bicicleta,
el MAP transporta físicamente los datos entre los quioscos públicos y dispositivos de comunicaciones
privadas (como una intranet) y entre los quioscos y un ordenador (para acceso a Internet en tiempo no
real). Mediante el uso de radiotransmisores WiFi de bajo coste, los datos transportados por el MAP se
transfieren automáticamente y de forma inalámbrica con alto ancho de banda para las conexiones punto
a punto.
La red desarrollada por DakNet se puede utilizar para una amplia variedad de aplicaciones, tales como:
➢ Distribución/difusión de información: Incluye tableros de anuncios de la comunidad,
transferencia de materiales educativos, anuncios de salud pública, noticias, música y
transmisiones de vídeo.
➢ Recogida de información: Esto puede incluir la recolección de información de datos
ambientales, información de centros de votación, censo, encuestas, registros de salud, etc.
17
➢ Búsqueda de información, servicios web: Mediante la incorporación de nuevos tipos de
aplicaciones de Internet que están diseñadas para el acceso en tiempo no real.
• REDES EN VEHICULOS AD-HOC.
La red de vehículos Ad-hoc (VANET) [4] es una red móvil que proporciona servicios de comunicación
entre vehículos y acceso a internet. El CarTel, un VANET clásico, es un sistema de comunicación de
sensores distribuidos diseñado para recoger, transmitir y visualizar los datos de los sensores móviles
situados en lugares como los automóviles. Este tipo de redes se caracterizan principalmente por
limitaciones de potencia, memoria y capacidad del CPU, sin embargo, permiten crear redes compuestas
por miles o millones de nodos, en la cual la comunicación se planifica a fin de conservar energía.
Utilizan la arquitectura de las DTN que consiste fundamentalmente en un conjunto de regiones,
compartiendo una capa en común (“bundle layer”), dicho de otra manera, simplemente una capa de
mensaje que opera entre la capa de aplicación y la capa de transporte.
• SERVICIOS DE ATENCIÓN MÉDICA PARA REGIONES EN VIAS DE DESARROLLO.
En las regiones en desarrollo, debido a las pobres condiciones médicas, la gente a menudo muere por
enfermedades que se pueden prevenir o haber curado, si se trata adecuadamente. Una posible solución
para resolver el problema anterior es el sistema de telemedicina donde médicos a distancia pueden
ayudar a los médicos locales para el diagnóstico de un paciente a través de fotos o videos. Sin embargo,
debido a la falta de estabilidad en la fuente de alimentación, el sistema de telemedicina es inútil para
grandes cantidades de tiempo. Por tanto, es difícil de programar el tiempo cuando una consulta de
telemedicina puede ocurrir. Un sistema de atención médica para las regiones en desarrollo se está
implementando en Sudáfrica. Este sistema combina un método de almacenamiento y reenvío con VoIP
para proporcionar comunicación en esa zona. El enfoque de almacenamiento y reenvío permite la
transmisión de mensajes entre los hospitales y clínicas, incluso si no hay un suministro de potencia
estable. VoIP permite realizar llamadas telefónicas entre las clínicas y hospitales. Además, el vídeo
podría incluso ser transmitido de la clínica al hospital a través de una cámara web de bajo costo. Se ha
demostrado que el sistema de salud de hecho ayuda a los médicos locales para dar diagnóstico correcto
y su correspondiente tratamiento.
• REDES MOVILES SOBRE RELACIONES SOCIALES.
DTN es una red emergente que ha atraído considerablemente la atención, que no sólo ofrece los
servicios sociales como los populares servicios de redes sociales basadas en la Web sin Internet, sino
que también emplea los lazos sociales entre los nodos para ofrecer servicios de transmisión de datos.
D-book, una aplicación de la red móvil basada en relaciones sociales, ofrece servicios sociales tales
como crear, modificar y compartir perfiles. Estos perfiles contienen información básica sobre los
usuarios, información del contacto y los intereses. En el D-book, los usuarios no sólo poseen y editan
un perfil personal, sino que también buscan otros perfiles basados en intereses comunes u otros criterios
de búsqueda. Además, permite a los usuarios enviar mensajes a otros usuarios y suscribirse al perfil de
otros usuarios. En adición, el D-book ha sido desarrollado sobre la plataforma .NET y puede ser
utilizado en dispositivos basados en la plataforma de Windows. Al igual que en D-book, Uttering
también suministra servicios de redes sociales a través de “micro-blogging” sin Internet. Entre 2010 y
2011 se desarrolló un middleware con la finalidad de difundir mensajes entre dispositivos móviles en
sistemas de distribución tolerantes a retrasos. Este middleware consta de tres componentes principales.
La API permite que las aplicaciones accedan a los servicios de las capas de sesión; la estructura de
contenidos divide el contenido en temas lógicos y permite la coincidencia de las operaciones de
búsqueda y la descarga eficiente en virtud de la conectividad del nodo perturbador; el protocolo de
solicitud permite que los nodos para solicitar contenido de meta-información para poder encontrar
contenidos disponibles y descargarlos en nodos vecinos. A diferencia de las arquitecturas de red
existentes, este middleware tiene como objetivo difundir el contenido. Cuando los nodos están sin
rango de comunicación, los contenidos son intercambiados a través de caminos de diseminación
basados en intereses. En otras palabras, los contenidos se entregan implícitamente por una combinación
del protocolo de solicitud del nodo receptor y la movilidad del nodo actual. Con la popularidad de los
teléfonos inteligentes, las redes móviles basadas en relaciones sociales reciben cada vez más atención.
Estos teléfonos están siempre equipados con algunas tecnologías avanzadas tales como sistemas de
posicionamiento global (GPS), Wi-Fi y sensores como acelerómetros. Estas tecnologías ayudan a la
gente a grabar su historial de ubicaciones como una secuencia de lugares con fecha y hora (llamados
trayectorias), lo que implica algunas relaciones entre las ubicaciones y los intereses de los usuarios (o
preferencias).
Geolife, una red social basada en la localización, incorpora los usuarios, los lugares y trayectorias GPS
generadas por el usuario para proporcionar diversos servicios como el intercambio de experiencias en
la vida, recomendaciones de viajes genéricos, amigo personal y recomendaciones de localizaciones. Un
gráfico jerárquico se construye mediante el uso de registros GPS, y luego la puntuación similar de la
gráfica jerárquica de dos usuarios se computa. Por otra parte, el nivel de interés de un usuario en algunas
regiones geográficas se predice mediante el uso de un filtro colaborativo y luego se lleva a cabo un
sistema de recomendación híbrido. Por último, las mejores regiones geográficas, que son más propensas
a atraer a los usuarios, son recomendadas y se muestra en un mapa web.
PeopleNet, una red social virtual inalámbrica, imita la forma en que las personas buscan información a
través de redes sociales. En la PeopleNet, los usuarios procesan o buscan alguna información mediante
la introducción de una consulta en sus dispositivos móviles, y luego la consulta es entregada a través de
una infraestructura (por ejemplo, celular) para unos pocos usuarios en una región específica (llamada
bazar). Dentro de cada bazar, la consulta se propaga aún más entre los nodos vecinos a través de una
conexión peer-to-peer hasta que encuentra una coincidencia de consultas. Cuando una consulta
encuentra coincidencia, el usuario que envió la consulta es informado automáticamente a través de
correo electrónico o mensaje de texto. La PeopleNet es una arquitectura simple, escalable y de bajo
coste para una eficiente búsqueda de información de una manera distribuida.
4.3 Nodos
En una red DTN, un nodo es una entidad con un agente en el protocolo bundle superpuesto sobre la capa inferior
de los protocolos de comunicación [5]. En cualquier momento, un nodo dado puede actuar como una fuente,
destino o transporte de paquetes:
• Origen o destino: un nodo envía o recibe paquetes hacia o desde otro nodo, pero no reenvía paquetes
hacia otros nodos. Si el nodo opera sobre enlaces de largo retardo, su protocolo de paquete requiere un
almacenamiento persistente en el que se guarden los datos en cola hasta que los enlaces salientes estén
disponibles. Opcionalmente soportan transmisión bajo custodia (“Custody Transfers”)
• Elemento de reenvío: Un nodo DTN puede reenviar paquetes entre dos o más nodos actuando como
una de estas dos situaciones:
➢ Router: El nodo reenvía paquetes entre dos o más nodos, cada uno de los cuales implementan
los mismos protocolos de capa inferior como el nodo de transmisión. Si un nodo de reenvío
opera sobre enlaces de largo retardo, su protocolo de paquetes requiere almacenamiento
persistente en el que se guarden los datos hasta que los enlaces salientes estén disponibles.
Opcionalmente soportan transmisión bajo custodia (“Custody Transfers”)
➢ Gateway: El nodo reenvía paquetes entre dos o más nodos, cada uno de los cuales implementan
diferentes protocolos de capa inferior, mientras que el nodo de transmisión implementa todos
estos protocolos. El nodo debe tener un almacenamiento persistente. Opcionalmente soportan
transmisión bajo custodia (“Custody Transfers”) pero normalmente aconsejable.
19
Figura 4-1. Nodos de las DTNs
4.4 Método de almacenamiento y reenvío
Cuando tenemos un enlace entre dos nodos que se comunican y están al mismo tiempo en movimiento, podemos
encontrarnos con el inconveniente de que la conexión entre ambos pueda verse obstruida, ocasionando que la
comunicación se inhabilite con el fin de ahorrar energía hasta que el enlace vuelva a estar disponible; esto
ocasiona que la conectividad sea intermitente. En Internet, la conectividad intermitente provoca la pérdida de
datos. Los paquetes que no pueden ser inmediatamente transmitidos son normalmente desechados y TCP debe
volver a retransmitirlos.
En las DTNs, por el contrario, se soporta la comunicación entre nodos con conexiones intermitentes, mediante
una técnica clave para estas redes como lo es la del almacenamiento y reenvío de datos [6], con la cual se hace
frente al problema de la intermitencia en la conectividad, los retardos variables y tasas de datos asimétricas
mediante el uso del método de conmutación de datos a través del almacenamiento y reenvío, tales como los
utilizados por el correo electrónico o el correo de voz.
Al contrario del modelo de Internet (en el cual lo routers utilizan chips de memoria para almacenar los paquetes
entrantes durante unos pocos milisegundos mientras esperan por su búsqueda del siguiente salto en la tabla de
enrutamiento y un puerto disponible del router de salida), en las DTNs para que el método de almacenamiento
de datos sea posible es necesario que los lugares de acopio de la información (como un disco duro) puedan
almacenar los mensajes de forma indefinida. Estos son llamados “almacenadores persistentes”.
Los routers que se usan en las DTNs necesitan un almacenamiento persistente para encolar sus datos, por las
siguientes razones:
• La vía de comunicación con el siguiente salto puede no estar disponible durante un largo periodo de
tiempo.
• Un nodo puede enviar o recibir datos mucho más rápidamente o de forma más fiable que el otro nodo.
• Un mensaje, una vez transmitido, puede que tenga que ser retransmitido si se produce un error en el
enlace de transmisión o si un nodo declina hacer el reenvío del mensaje.
Al trasladar todos los mensajes (o fragmentos de ellos) en una única transferencia, la técnica de conmutación de
mensajes proporciona a los nodos de la red un conocimiento inmediato del tamaño de los mensajes, y por tanto
los requisitos para el almacenamiento de la información y el ancho de banda de transmisión necesario. Dado que
la constante de este tipo de redes es la movilidad debido a que los nodos suelen estar en movimiento con
alimentación limitada, es fundamental que en su arquitectura se contemple el almacenamiento de datos ya que
de alguna manera los datos deben resguardarse.
Figura 4-2. Esquema almacenamiento y reenvío de las DTNs
4.5 Tipos de contactos
En DTN se supone que no todos los nodos son alcanzables y pueden ser contactados en cualquier momento.
Esta característica contrasta fuertemente con el internet convencional, donde se considera que las entidades
comunicantes están siempre alcanzables. Un concepto importante que debe ser considerado en esta arquitectura
es el “contacto”. Un contacto corresponde a una ocasión favorable para que los nodos intercambien datos. La
posibilidad de fallos siempre existirá para cualquier tipo de contacto, pero dependiendo de éste los fallos pueden
ser más o menos frecuentes.
Los contactos entre nodos DTN serán oportunistas, programados, bajo demanda o persistentes; en dependencia
de la zona donde se utilice la tecnología.
• Contactos oportunistas: En una red con tolerancia a retardos, los nodos involucrados pueden necesitar
comunicarse durante contactos oportunistas, en el cual un emisor y un receptor hacen contacto en un
tiempo no programado. Personas que se desplazan, vehículos, aviones o satélites pueden entrar en
contacto e intercambiar información cuando están dentro de la línea de visión y lo suficientemente cerca
para comunicarse usando un dispositivo de comunicación. Todos nosotros utilizamos contactos
oportunistas para la comunicación: cuando nos ha tocado, por oportunidad, para contactar con ciertas
personas con las que deseamos hablar, comenzamos una conversación. Este mismo modelo se puede
aplicar a la comunicación electrónica. Sin embargo, estos contactos oportunistas permiten que dichos
nodos puedan intercambiar datos entre ellos, a cambio de un retraso adicional en la entrega de los
mensajes, ya que estos a menudo se almacenan en la red a la espera de una ruta disponible hacia el
destino.
• Contactos programados: En una DTN cuando tenemos un origen y un destino que aún no estando en
contacto directo siguen un patrón de movilidad (por ejemplo, un satélite alrededor de la tierra) podemos
en cierta forma planificar el envío y/o recepción de datos. Pero también pueden implicar el
almacenamiento de información hasta que pueda ser reenviada, o hasta que la aplicación receptora
pueda ponerse al día con la tasa de datos del remitente. Los contactos programados requieren tiempo de
sincronización de todo el DTN.
• Contactos bajo demanda. En los contactos bajo demanda se requiere que se inicie una petición de
contacto para comenzar a funcionar para luego pasar a comportarse como contactos persistentes.
Ejemplo de este tipo de contactos sería una conexión de acceso telefónico ya que primero se inicia una
petición de contacto que durara hasta que se termine la comunicación.
• Contactos persistentes. Este tipo de contactos son aquellos que están siempre disponibles para realizar
la transmisión de datos. Conexiones de este tipo sería una conexión de ADSL o cable modem.
21
4.6 La capa Bundle
Como hemos visto, la arquitectura de las DTNs proporciona comunicaciones de extremo a extremo en entornos
donde las comunicaciones requieren un mayor esfuerzo debido a la conectividad intermitente, retardos variables,
y altas tasas de error; y en el que las capas que la conforman, se comunican entre sí mediante sesiones simples
en el cual el acuse de recibo dependerá de la clase de servicio seleccionada.
Para que esto sea posible, el grupo de Investigación DTN define una nueva capa, denominada “Bundle Layer”
que se encuentra entre la capa de aplicación y transporte, formando una red superpuesta encargada del
almacenamiento y reenvío de datos, a causa de las interrupciones constantes [7].
Figura 4-3. Arquitectura de las DTNs
Para proporcionar interoperabilidad entre distintas redes, se utiliza un esquema de nombres flexible (basado en
identificadores uniformes), capaz de encapsular diferentes esquemas de nombres y números. También cuenta
con un modelo de seguridad básica con el fin de proteger la infraestructura de un uso no autorizado. La
funcionalidad de la capa bundle no difiere mucho de la capa de red de la arquitectura de Internet. Mientras que
esta se centra en la conmutación de paquetes, la capa bundle se centra en el reenvío de mensajes. En la capa de
red del modelo actual de Internet, los paquetes se almacenan por un corto tiempo, en cambio, en la capa bundle
los mensajes se almacenan de forma persistente (en disco o memoria flash) listos para ser retransmitidos en caso
necesario.
Una muestra de un paquete bundle consta de tres partes:
• Datos fuente de la aplicación.
• Control de la información: Esto se proporciona por la propia aplicación ya que indica como manipular,
almacenar, reenviar y disponer de los datos.
• Encabezado Bundle: Insertado por la bundle layer de esta manera los datos pueden ser fragmentados y
posteriormente vueltos a ensamblar.
La nueva capa es capaz de fragmentar los mensajes, igual que como actúa IP. En este caso, será el mismo
protocolo en encargado de re-ensamblarlos cuando sea necesario.
En el modelo de Internet, el protocolo TCP proporciona fidelidad en la transmisión de los paquetes de extremo
a extremo mediante la retransmisión de cualquier segmento que no haya sido recibido en el destino; además de
esto las capas de red, enlace y física ofrecen otro tipo de integridad en los datos. En contraparte en el modelo de
las DTNs, la capa bundle se basa en los protocolos de capa inferior para dar fiabilidad en la comunicación. Para
garantizar que no se pierdan los mensajes ante interrupciones se utiliza la custodia de mensajes. Una vez que el
gateway se compromete a almacenar el mensaje no podrá eliminarlo hasta tanto no reciba del destino la
confirmación de recepción del mensaje, o hasta que otro gateway intermedio acepte la custodia del mismo.
Los gateways eligen el camino hacia el destino tomando como criterio el tamaño del mensaje y la calidad de
servicio solicitada por la aplicación.
Figura 4-4. Interconexión de regiones con diferentes protocolos
4.7 Protocolos de encaminamiento en DTNs
El problema de enrutamiento en redes DTN es quizás uno de los de mayores temas de investigación, la razón
es, que no hay un método exacto o preferido para manejar los problemas de enrutamiento. Los protocolos de
enrutamiento que operan en las redes tradicionales realizan sus funciones bajo el supuesto de la existencia de
una conectividad permanente, un bajo retardo y una tasa de pérdida de paquetes muy baja. Por ello, los
protocolos de enrutamiento tradicionales no funcionan correctamente en las redes DTN debido a la inexistencia
de una ruta permanente de un extremo a otro, lo que genera que al no encontrar por donde encaminar los datos,
estos terminen siendo descartados. Esto conlleva el uso de nuevos protocolos de enrutamiento [8] y un sistema
de arquitectura propia desarrollada para las DTNs.
Algunos de los protocolos de enrutamiento en las redes DTN se pueden clasificar como:
• Encaminamiento determinista.
• Encaminamiento estocástico.
4.7.1 Encaminamiento determinista
La suposición básica es que el movimiento futuro de los nodos y sus conexiones con otros nodos son conocidos
o totalmente predecibles. Las técnicas utilizadas en este tipo de enrutamiento se basan en la formulación de
modelos para los gráficos en función del tiempo y la búsqueda de un camino más corto en el espacio-tiempo.
Dentro de la topología determinista, nos encontramos con 3 enfoques diferentes:
4.7.1.1 Espacio - Tiempo
Los algoritmos de enrutamiento que se construyen en el gráfico de espacio-tiempo se desarrollan utilizando
programación dinámica y algoritmos para hallar la ruta más corta además de buscar la mejor ruta para los
mensajes de cara al futuro.
23
4.7.1.2 Ruta más corta
Estos algoritmos minimizan el coste o distancia de la ruta que une dos nodos cualesquiera. Por ejemplo, si la
métrica utilizada es el número medio de saltos, el algoritmo de camino más corto será el que minimice este
número de saltos entre los nodos que pretendemos conectar.
4.7.1.3 Tree-Based Approach
Se basa en la selección de la ruta para la realización de la entrega del mensaje, en función del conocimiento
disponible sobre el movimiento de los nodos. En este enfoque, se puede enviar mensajes a destinos que se
encuentran a varios saltos de distancia. Sin embargo, si los parámetros de reenvío son demasiado conservadores,
se harán tantas copias adicionales como sean necesarias para llegar al destino. Por el contrario, si son demasiado
agresivos, entonces el mensaje podría no propagarse hasta su destino.
4.7.2 Encaminamiento estocástico
La suposición de base es que el comportamiento de la red es al aleatorio ya que no sigue un patrón predefinido
o predecible, ya que estos protocolos dependen de decisiones con respecto a dónde y cuándo pueden reenviar
los mensajes, basados en datos históricos, patrones de movilidad, o cualquier otra información.
4.7.2.1 Epidemic
Este algoritmo corresponde a la mejor solución en cuanto a probabilidad de entrega de los mensajes a sus
respectivos destinos, sin embargo, es altamente costoso en términos de los recursos que consume [9]. En este
algoritmo se plantea distribuir mensajes de aplicación entre los nodos, llamados portadores, dentro de una
porción conectada de la red ad-hoc. De esta forma los mensajes se distribuyen rápidamente en segmentos de la
red, a partir de esto el enrutamiento epidémico aprovecha la movilidad de los nodos para transmitir el mensaje
a otra porción conectada de la red. A través de este modelo de propagación, el mensaje tiene una alta probabilidad
de eventualmente alcanzar su destino. Tal y como nos muestra la figura siguiente, un nodo S origina un mensaje
cuyo destino es el nodo D, entonces S transmite el mensaje a cualquier nodo con el cual llegue a estar dentro del
rango de transmisión. Desde este momento, los nodos A y B pasan de ser nodos receptores a portadores. Después
de un cierto tiempo, el portador A entra en rango de transmisión con nuevos nodos, por lo que lo convierte en
portador. Por su parte, el portador B encuentra al nodo C, al cual convierte en portador. Es importante notar que
estas operaciones continúan independientemente de si el mensaje ha llegado a su destino. Una de las ventajas de
este algoritmo es la nula información que se necesita acerca de la topología de la red, ya que a lo largo de toda
la ejecución del algoritmo ningún nodo necesita conocer la ubicación del destino, ni tampoco conoce forma
alguna de establecer una ruta para llegar a él. Epidemic aprovecha una variante de la teoría de algoritmos
epidémicos para el protocolo. Esta teoría afirma qué dado el intercambio aleatorio de datos entre nodos, todas
las actualizaciones serán vistas por todos los nodos destino en una cantidad de tiempo acotada. Cuando la red
llega a este estado, se dice que el sistema de réplicas o destinos ha alcanzado un estado consistente. Las metas
concretas de este algoritmo de enrutamiento son:
• Distribuir eficientemente los mensajes a través de redes ad-hoc parcialmente conectadas de una manera
probabilística.
• Minimizar la cantidad de recursos consumidos en la entrega de un mensaje cualquiera.
• Maximizar el porcentaje de mensajes que eventualmente son entregados a sus destinos.
Figura 4-5. Esquema del modelo de enrutamiento Epidemic
4.7.2.2 Spray and Wait
El esquema de este protocolo de enrutamiento se enfoca en reducir significativamente la sobrecarga en
comparación con los algoritmos de inundación (Epidemic) [9]. Uno de los puntos fuertes de este algoritmo de
enrutamiento, es el hecho de que no necesita información alguna del estado de la red, ni siquiera la información
de los contactos que han ocurrido entre nodos. Este protocolo en particular es bastante simple, sin embargo,
eficiente. Consta únicamente de dos fases:
• Fase de rociar. Por cada mensaje originándose en un nodo, L copias son inicialmente difundidas, por el
nodo origen y posiblemente otros nodos, hacia L nodos intermedios diferentes.
• Fase de esperar. Si el nodo de destino no ha sido encontrado en la fase de rociar, cada uno de los L
nodos que mantienen una copia del mensaje, realizarán una transmisión directa, es decir, sólo
transmitirán el mensaje si se encuentran con el nodo destino.
"Spray and Wait" comienza diseminando el paquete de manera similar al enrutamiento epidemic, pero cuando
ha alcanzado una cantidad de copias, que garantice que al menos una de ellas llegará al destino en un tiempo
corto, se detiene la diseminación y se deja que cada nodo que porta una copia del paquete realice la transmisión
directa al nodo destino. Existe un parámetro L que indica el número de copias que se diseminarán en la red. El
protocolo admite diferentes maneras de calcular este parámetro, entre ellas propone una versión "binaria", en la
que cada nodo al momento de encontrarse con otro nodo, le entrega la mitad de las L copias que posee de un
paquete específico y así de manera sucesiva hasta llegar al punto en que sólo posea una copia, caso en el cual
pasará al modo de transmisión directa. Otras técnicas consisten en aproximar el número de nodos y el tamaño la
red, y calcular en base a estos valores el parámetro L.
25
4.7.2.3 PROPHET
PROPHET utiliza la aleatoriedad de contactos para replicar paquetes sólo si hay una posibilidad de entregarlos
[9]. El protocolo de enrutamiento PROPHET se dirige principalmente a situaciones en las que al menos alguno
de los nodos sea móvil. Básicamente cuando el nodo portador del mensaje tiene contacto con otro, se realiza la
elección del siguiente nodo en la ruta de un mensaje. En el momento del contacto, el nodo portador puede decidir
mediante la probabilidad de que el nuevo nodo elegido sea capaz de llevar el mensaje hasta su destino o un
nuevo nodo contactado sea capaz.
4.7.2.4 MaxProp
Cada nodo tiene una tabla de enrutamiento que predice la probabilidad para llegar a otro nodo en el futuro a
través de sus vecinos actuales [9]. Las tablas de enrutamiento se actualizan sobre la base de la información
obtenida por los vecinos y los mensajes están ordenados y enviados en función de su coste para llegar a su
destino. La idea es que cada nodo mantiene un vector que indica la probabilidad de entrega. Cuando dos nodos
se reúnen, intercambian estos vectores, por lo que cada nodo puede calcular el camino más corto hacia el destino.
5 SIMULADOR “DPYTHON”
n simulador de eventos discretos es una técnica informática para modelar sistemas dinámicos que nos
permite controlar el tiempo para avanzar a intervalos variables, para poder planificar eventos futuros en
tiempos conocidos. Es un programa que se ejecuta en un ordenador y que nos permite emular el
comportamiento de un sistema. Es decir, es un modelo que al ser ejecutado con los mismos estímulos que el
sistema real, nos da una respuesta “suficientemente” próxima a la realidad del sistema que estamos simulando.
Con estos simuladores logramos la estimación del valor de un conjunto de parámetros de mérito que se eligen
para evaluar las prestaciones de un sistema. Cuando empleamos un simulador de eventos discretos, es deseable
que cumpla con ciertos requisitos y campos de aplicación como, por ejemplo:
• Aprendizaje sencillo: es deseable que la simulación no sea costosa, y que el tiempo necesario para
realizar una primera simulación sea lo más corto posible.
• Facilidad de uso: el simulador debe ser fácil de usar para todos los niveles y requerir un esfuerzo bajo.
• Fácil instalación: el simulador se realizará para que no sea necesario instalar ningún software y necesitar
el menor número de dependencias externas que complique su uso.
• Modular: el objetivo es que el simulador pueda ser construido modularmente, de tal manera que se
puedan reutilizar bloques de código de forma sencilla.
• Lenguaje de programación sencillo y actual: la elección de un lenguaje de programación como Python,
nos permite la utilización de un lenguaje sencillo y conocido por la comunidad de programadores.
Gracias a Python también podremos generar de forma sencilla muestras de variables aleatorias que
sigan ciertas distribuciones estadísticas [10].
5.1 Herramientas utilizadas
Para el desarrollo de mi simulador he utilizado el lenguaje de programación Python [11], el cual fue creado por
Guido van Rossum a finales de los ochenta, y que gracias a sus características ha llegado a ser un lenguaje muy
conocido en la actualidad.
Se trata de un lenguaje de programación de propósito general, cuya expansión y popularidad es relativamente
reciente. Utilizar Python en la actualidad es una apuesta por la simplicidad, versatilidad y rapidez de desarrollo.
Python es un lenguaje de scripting independiente de plataforma y orientado a objetos, preparado para realizar
cualquier tipo de programa, desde aplicaciones Windows a servidores de red o incluso, páginas web. Es un
lenguaje interpretado, lo que significa que no se necesita compilar el código fuente para poder ejecutarlo, lo que
ofrece ventajas como la rapidez de desarrollo e inconvenientes como una menor velocidad.
En los últimos años el lenguaje se ha hecho muy popular, gracias a varias razones como:
• La cantidad de librerías que contiene, tipos de datos y funciones incorporadas en el propio lenguaje, que
ayudan a realizar muchas tareas habituales sin necesidad de tener que programarlas desde cero.
• La sencillez y velocidad con la que se crean los programas. Un programa en Python puede tener de 3 a
5 líneas de código menos que su equivalente en Java o C.
• La cantidad de plataformas en las que podemos desarrollar, como Unix, Windows, OS/2, Mac, Amiga
y otros.
U
27
Figura 5-1. Logo Python
Presenta una serie de características que lo hacen diferente al resto de lenguajes de programación, como son:
• Propósito general. Se pueden crear todo tipo de programas. No es un lenguaje creado específicamente
para la web, aunque entre sus posibilidades sí se encuentra el desarrollo de páginas.
• Multiplataforma. Hay versiones disponibles de Python en muchos sistemas informáticos distintos.
Originalmente se desarrolló para Unix, aunque cualquier sistema es compatible con el lenguaje siempre
y cuando exista un intérprete programado para él.
• Interpretado. Esto quiere decir que no se debe compilar el código antes de su ejecución. En realidad, sí
que se realiza una compilación, pero esta se realiza de manera transparente para el programador. En
ciertos casos, cuando se ejecuta por primera vez un código, se producen unos bytecodes que se guardan
en el sistema y que sirven para acelerar la compilación implícita que realiza el intérprete cada vez que
se ejecuta el mismo código.
• Interactivo. Python dispone de un intérprete por línea de comandos en el que se pueden introducir
sentencias. Cada sentencia se ejecuta y produce un resultado visible, que puede ayudarnos a entender
mejor el lenguaje y probar los resultados de la ejecución de porciones de código rápidamente.
• Orientado a Objetos. Si hablamos de programación orientada a objetos, podemos decir que nos
encontramos ante un paradigma que propone modelar todo en función a clases y a objetos, el cual nos
ofrece un uso de conceptos de cohesión, polimorfismo, herencia, abstracción y mucho más. Este
paradigma de programación se utiliza para tratar el rápido aumento en el tamaño y la complejidad de
los sistemas de software, y facilitar la modificación de esos grandes y complicados sistemas a lo largo
del tiempo.
• Funciones y librerías. Dispone de muchas funciones incorporadas en el propio lenguaje, para el
tratamiento de strings, números, archivos, etc. Además, existen muchas librerías que podemos importar
en los programas para tratar temas específicos como la programación de ventanas o sistemas en red o
cosas tan interesantes como crear archivos comprimidos en .zip.
• Sintaxis clara. Por último, destacar que Python tiene una sintaxis muy visual, gracias a una notación
identada (con márgenes) de obligado cumplimiento. En muchos lenguajes, para separar porciones de
código, se utilizan elementos como las llaves o las palabras clave begin y end. Para separar las porciones
de código en Python se debe tabular hacia dentro, colocando un margen al código que iría dentro de una
función o un bucle. Esto ayuda a que todos los programadores adopten unas mismas notaciones y que
los programas de cualquier persona tengan un aspecto muy similar.
La versión de Python utilizada para el proyecto es la 3.6.0, ya que esta es la versión más reciente del lenguaje
Python, y contiene muchas nuevas características y optimizaciones.
A su vez, para la continua simulación a lo largo del proyecto, he utlizado el paquete Anaconda para Windows
en su versión 4.4.0. En dicho paquete nos encontramos un entorno interactivo de Python, llamado Spyder, que
proporciona características similares a Matlab en un software simple y ligero. También proporciona widgets
puros de Python listos para usar en su aplicación PyQt5 o PyQt4: editor de código fuente con resaltado de sintaxis
y funciones de introspección / análisis de código, editor de matriz NumPy, editor de diccionario, consola Python,
etc.
Figura 5-2. Logo Spyder
29
5.2 Diagrama de bloques
Los eventos tienen marcado su tiempo de generación, por lo que no puede coincidir el tiempo de generación con
el de ejecución. La ejecución de un evento puede generar otros eventos futuros. Un sistema simulado, se
caracteriza por entidades que en su conjunto conforman el sistema.
A continuación, mostramos un diagrama básico del funcionamiento del simulador al que nos referimos.
Figura 5-3. Diagrama de bloques
Ni que decir tiene, que una vez alcanzada nuestra lista de resultados, podemos obtener cualquier tipo de
estadística o métrica, en función de aquello que deseemos conocer. De la misma manera que pueden realizarse
multitud de simulaciones modificando los parámetros de entrada, con el objetivo de conocer cuál seria el
funcionamiento más óptimo, probabilidad de llegada de los mensajes, etc…
5.3 Desarrallo del simulador
Para la descripción del simulador, iremos describiendo cada una de las partes que constituye el diagrama de
bloques.
Inicialmente partimos de un archivo de trazas, del cuál únicamente leeremos la información que posteriormente
nos será de utlidad. Por ello, de las seis columnas que aparecen en nuestro archivo, solamente tendremos en
cuenta las cuatro primeras que nos indican: Nodo origen, nodo destino, tiempo inicial del enlace entre ambos
nodos y tiempo final de dicho enlace, respectivamente
Figura 5-4. Archivo de trazas
Para leer dicho archivo y almacenar aquellos campos que son de nuestro interés, en el bloque principal del
simulador, lo primero que haremos será abrir nuestro archivo de trazas e ir leyendo cada línea del archivo. A
medida que leemos cada línea, cada campo es almacenado en su lista correspondiente. Estas listas nos serás de
gran ayuda para ir alcanzando los objetivos durante el desarrollo del simulador. Al mismo tiempo, cada una de
las líneas, las cuales representan un enlace temporal entre nodos, son etiquetadas como eventos de ‘Encuentro’
(‘E’) que iremos añadiendo a nuevo archivo de texto, que será nuestra lista de eventos, y que ha sido previamente
generado. Esto conformaría nuestro módulo ‘Generador de eventos de encuentro’ del diagrama de bloques
mostrado anteriormente.
El siguiente paso, será generar los eventos de ‘Generación’ (‘G’). Dichos eventos nos indicarán cuándo se genera
un mensaje y cuáles son los nodos protagonistas de dicho mensaje, es decir, el nodo origen y el nodo destino.
Estos mensajes serán generados por una serie de nodos, cuyo número ha sido elegido por el usuario del simulador
de manera aleatoria. Del mismo modo, se introduce el nodo que deseamos que sea el nodo destino de dichos
mensajes. Para terminar de generar los eventos de este tipo, únicamente nos queda por generar los tiempos en
los que se generan dichos mensajes. Estos tiempos también son generados de manera aleatoria, pero siempre
con la condición de que nunca sobrepasen el tiempo total de nuestra simulación.
Una vez llegado a este punto, ya tendremos totalmente completada nuestra lista de eventos, la cuál por último
ordenaremos en función del tiempo inicial de contacto entre nodos.
31
Figura 5-5. Eventos ‘E’ y ‘G’
Como muestra nuestro diagrama de bloques, a continuación, nuestro objetivo será generar los eventos de
‘Transmisión’ (‘T’) y ‘Recepción’ (‘R’). Como puede suponerse, para conseguir esto, nos basaremos en nuestra
lista de eventos. Los eventos de transmisión se producirán cuando entren en contacto dos nodos y alguno de
ellos o ambos contengan información para transmitir. Cabe señalar que cuando los dos nodos tienen
almacenados paquetes de información se la intercambiarán totalmente, eliminando aquellos paquetes
redundantes, es decir, se descartarán aquellos mensajes que ya han sido recibidos. Cuando se llega a un encuentro
en el cual uno de los nodos protagonistas es el receptor de dicho mensaje, este encuentro será representando
como un evento de recepción.
Una vez recorrida nuestra lista de eventos en su totalidad, tendremos un nuevo archivo de texto que contendrá
aquellos eventos previamente comentados.
Figura 5-6. Eventos ‘T’ y ‘R’
5.4 Resultados del simulador
Una vez generada nuestra lista con los resultados de la simulación, a partir de ella podemos estudiar una serie
de características y métricas que nos darán a conocer el rendimiento de nuestro simulador. Como se ha
comentado al inicio del apartado anterior, los parámetros con los que el usuario juega pueden ser modificados
en función de cuál sea el objetivo a alcancar.
En nuestro caso, vamos a calcular tres funciones para una serie de simulaciones y así sacar una serie de
conclusiones. Dichas funciones son:
• Delay: (Tiempo de recepción del mensaje – tiempo de generación del mensaje) / número de mensajes
recibidos en el destino.
• Delivery: Número de mensajes recibidos en el destino / número de mensajes generados.
• Coste: Número total de mensajes intercambiados entre los nodos.
Estudiaremos estas funciones planteando diferentes situaciones. En concreto, elegiremos tres nodos destino
diferentes, en función de su protagonismo en el archivo de trazas, es decir, observando nuestro dato de partida
del simulador, podemos conocer la cantidad de contactos directos existentes por cada nodo.
Puede observarse con claridad que los nodos con mayor numero de contactos son los 22 primeros.
Figura 5-7. Diagrama contacto entre nodos
Como puede observarse en dicha gráfica, aparecen una serie de nodos con numerosos contactos y otros con
menos. En nuestro caso hemos elegido 3 nodos con diferente protagonismo en nuestro diagrama, que son: nodo
3 (6 contactos), nodo 13 (84 contactos), y nodo 12 (391). De esta manera, obtenemos una representación para
tres casos bien diferenciados.
Para cada una de las simulaciones, elegimos también un número diferente de nodos fuentes, en este caso: 10,
40, 70 y 120.
• Simulación para nodo destino 3:
33
Figura 5-8. Medidas para nodo destino 3
Como se puede observar, en la primera de las cuatro simulaciones, donde elegimos 10 nodos fuentes de manera
aleatoria, nuestro simulador nos devuelve un mensaje de error, advirtiéndonos que no ha podido entregarse el
mensaje al nodo destino. Esto se debe a que hemos elegido un nodo que presenta pocos enlaces en el archivo de
trazas y los nodos fuentes no han llegado a comunicarse con el. Este problema se evitaría observando nuestro
archivo de trazas y eligiendo manualmente uno o varios nodos fuentes que nos garantice la entrega del mensaje.
Estas mediciones las recogemos en una tabla para conocer el valor exacto de cada una de ellas.
Tabla 5–1 Medidas para nodo destino 3
• Simulación para nodo destino 13:
Figura 5-9. Medidas para nodo destino 13
En este caso, al haber elegido un nodo que previamente conocíamos que tenia bastantes contactos a lo largo de
la simulación, hemos evitado que nuestro simulador nos devuelva un mensaje de error como en el caso anterior.
Tabla 5–2 Medidas para nodo destino 13
35
• Simulación para nodo destino 12:
Figura 5-10. Medidas para nodo destino 12
Por último, hemos escogido el nodo con mayor número de contactos. Esto nos garantiza casi con total seguridad
que el mensaje será recibido por el nodo destino a pesar de que el número de nodos fuentes sea muy escaso.
Como puede observarse, para un número elevado de nodos fuentes, el Delay se ve reducido significativamente
con respecto a los casos previos.
Tabla 5–3 Medidas para nodo destino 12
Estas simulaciones no dependen únicamente de la cantidad de nodos fuente elegidos ni del nodo recptor del
mensaje, sino que también depende de qué nodos son los elegidos como nodos fuente. Como podemos
comprobar en la siguiente figura, a partir del nodo 30 aproxidamente, exceptuando algunos nodos aislados,
presentan poca cantidad de contactos durante la simulación, esto quiere decir, que si nosotros elegimos como
nodos fuentes aquellos que están comprendidos entre el 1 y el 22, nuestra propabilidad de éxito esta
prácticamente garantizada. Sin embargo, si elegimos aquellos que únicamente tienen un contacto durante todo
el tiempo de simulación, difícilmente el mensaje llegue a ser entregado.
Figura 5-11. Número de contactos de todos los nodos
37
6 CONCLUSIÓN Y FUTUROS TRABAJOS
Como fase final a nuestro proyecto, una vez obtenidos los resultados, podemos sacar una serie de conclusiones
evidentes. Como el objetivo de nuestro simulador es representar un sistema de comunicación que nos garantice
la entrega de mensajes desde uno o varios nodos a su nodo destinatario, debemos observar primeramente el
número total de nodos y enlaces de contacto que presentan entre ellos. De esta manera conocemos la magnitud
y complejidad en la que nos movemos. Aunque en nuestro proyecto hemos elegido de manera arbitraria cuales
serán los nodos que inicialmente contendrán información, estos también podrían elegirse de manera exacta, lo
que nos permitirá garantizar con exactitud la entrega de mensajes.
Éste podría suponer uno de los futuros trabajos y avances del simulador, y a partir de ello originar nuevas
gráficas, estadísticas, probabilidades y medidas en función de nuestros nodos fuentes elegidos.
Aunque se haya trabajado durante todo el desarrollo del simulador con el mismo archivo de trazas, éste se ha
diseñado para leer cualquier otro archivo, independientemente de su extensión, cantidad de nodos y enlaces
utilizados, etc…
7 BIBLIOGRAFÍA
[1] [Internet], n.d., Modelo TCP/I. [Consultado el 10 de agosto 2017]. Disponible en
http://docente.ucol.mx/al980347/public_html/modelo_tcp.htm
[2] KUROSE, James F. Computer networking: A top-down approach featuring the internet, 3ªEd. Pearson
Education India, 2005.
[2] Jj Velasco. Hipertextual: Historia de la Tecnología: Red Aloha. [Consultado el 2 de septiembre 2017].
Disponible en https://hipertextual.com/2012/04/historia-de-la-tecnologia-red-aloha
[3] PUENTES, Cristina. Avances tecnológicos en el área de Informática [en línea]. Blog Las redes
inalámbricas. 17 de mayo de 2012. [consultado el 25 de agosto de 2017]. Disponible en:
http://lasinformaticas2012.blogspot.com.es/
[4] O. Mukhtar and J. Ott, “Backup and bypass: Introducing DTN-based ad-hoc networking to mobile
phones,” in Proceedings of the 2nd International Workshop on Multi-hop Ad hoc Networks: From Theory
to Reality (REALMAN ’06). New York, NY, USA: ACM, 2006, pp. 107–109
[5] WARTHMAN, Forrest. Delay-tolerant networks (DTNs): A tutorial. http://www. ipnsig.
org/reports/DTN_Tutorial11. pdf, 2003.
[6] JAIN, S., FALL, K., and PATRA, R., ―Routing in a Delay Tolerant Network, SIGCOMM Comput.
Commun. Rev. Vol.34, Iss.4, p145-158, August 2004.
[7] V. Cerf, S. Burleigh, A. Hooke, L. Torgerson, R. Durst, K. Scott, K. Fall, and H. Weiss. Delay-Tolerant
Networking Architecture. Number RFC 4838. IETF, April 2007.
[8] T. Spyropoulos, K. Psounis and C. S. Raghavendra. Spray and Wait: An Efficient Routing Scheme for
Intermittently Connected Mobile Networks. SIGCOMM 2005.
[9] A. Lindgren, A. Doria, and O. Scheln. Probabilistic routing in intermittent ly connected networks.
MobiHoc 2003.
[10] LUTZ, Mark. Python Pocket Reference: Python In Your Pocket. O'Reilly Media, Inc, 2014. ISBN 978-1-
449-35701-6.
[11] HETLAND, Magnus Lie. Beginning Python: from novice to professional. Apress, 2006. ISBN 978-1-
4302-0634-7.
39
ANEXO A: CÓDIGO BLOQUE PRINCIPAL
“”” BLOQUE PRINCIPAL “””
import random
from ClaseEvento import Evento
from Crearfichero import crearfichero
from Crearfichero import escribirfichero
from Listanodos import listanodos
from Agregarnodosfuente import agregarnodosfuente
from EventosTyR import crearfichero2
from EventosTyR import escribir2
from Eliminarrepetidos import eliminarrepetidos
from Compartirmensaje import compartirmensajes
from Transmitirmensaje import transmitirmensaje
import matplotlib.pyplot as plt
import numpy as np
“”” INICIAZALIZAR LAS LISTAS “””
lista_nodos_fuentes1 = list()
lista_nodos_fuentes2 = list()
lista_nodos_destino1 = list()
lista_nodos_destino2 = list()
lista_nodos_fuentes = list()
lista_nodos = list()
lista_tiempos_iniciales = list()
lista_tiempos_finales = list()
lista_tiempos_generacion = list()
lista_tiempos_recepcion = list()
lista_eventos = list()
lista_inter = list()
“”” LECTURA DEL FICHERO DE TRAZAS “””
fichero = open ('upb2011.dat', 'r')
campos = []
for linea in fichero:
campos = linea.split('\t')
fuente = int(campos[0])
lista_nodos_fuentes1.append(fuente)
destino = int(campos[1])
lista_nodos_destino1.append(destino)
tiempo_ini = int(campos[2])
lista_tiempos_iniciales.append(tiempo_ini)
tiempo_fin = int(campos[3])
lista_tiempos_finales.append(tiempo_fin)
duracion = int(campos[3]) - int(campos[2])
evE = Evento('E', fuente, destino, tiempo_ini, tiempo_fin)
lista_eventos.append(evE)
fichero.close()
“”” ELIMINO ELEMENTOS REPETIDOS “””
eliminarrepetidos(lista_nodos_fuentes1, lista_nodos_fuentes2)
eliminarrepetidos(lista_nodos_destino1, lista_nodos_destino2)
“”” LISTA DE NODOS TOTAL “””
N_nodos = max(max(lista_nodos_fuentes2), max(lista_nodos_destino2))
listanodos(N_nodos, lista_nodos)
“”” LISTA DE NODOS FUENTES “””
N_nodos_fuentes = int(input("Introduce numero de nodos fuente: "))
agregarnodosfuente(N_nodos_fuentes, N_nodos, lista_nodos_fuentes)
“”” LISTA DE TIEMPOS DE GENERACION “””
tiempo_simulacion = max(lista_tiempos_finales)
def agregartiemposgeneracion():
for x in lista_nodos_fuentes:
for i in range(len(lista_nodos_fuentes1)):
if (x == lista_nodos_fuentes1[i]) and (x not in lista_inter):
lista_inter.append(x)
ind = lista_nodos_fuentes1.index(x)
lista_tiempos_generacion.append(random.randint(0,lista_tiempos_iniciales[
ind]))
for i in range(len(lista_nodos_destino1)):
if (x == lista_nodos_destino1[i]) and (x not in lista_inter):
lista_inter.append(x)
ind = lista_nodos_destino1.index(x)
41
lista_tiempos_generacion.append(random.randint(0,lista_tiempos_iniciales[
ind]))
agregartiemposgeneracion()
“”” RELLENO LISTA EVENTOS TIPO 'G' “””
while True:
nodo_destino = int(input("Introduce un nodo destino : "))
while(nodo_destino in lista_nodos_fuentes):
nodo_destino = int(input("Introduce un nodo destino : "))
break
def agregareventog():
for i in range(len(lista_nodos_fuentes)):
nodo_origen = lista_nodos_fuentes[i]
tiempo_generacion = lista_tiempos_generacion[i]
evG = Evento('G', nodo_origen, nodo_destino, tiempo_generacion,
tiempo_simulacion)
lista_eventos.append(evG)
agregareventog()
“”” ORDENAR LISTA EVENTOS POR TIEMPO INICIAL “””
lista_eventos.sort(key = lambda objeto: objeto.tiempo_ini)
“”” CREAR ARCHIVO EVENTOS ORDENADOS “””
crearfichero()
escribirfichero(lista_eventos)
“”” LEER LISTA DE EVENTOS “””
crearfichero2()
num_eventos = len(lista_eventos)
mensaje = nodo_destino
N_paquetes_generados = 0
N_paquetes_intercambiados = 0
for i in range(num_eventos):
num_nodo = lista_eventos[i].nodo_origen
num_nodo2 = lista_eventos[i].nodo_destino
tiempo_recepcion = lista_eventos[i].tiempo_ini
""" SI EL EVENTO ES DE TIPO 'GENERACION', AÑADIMOS UN MENSAJE AL NODO
EN
CONCRETO """
if lista_eventos[i].tipo == 'G':
N_paquetes_generados += 1
lista_nodos[num_nodo-1].agregarmensajegenerado(num_nodo)
lista_nodos[num_nodo-1].agregarmensajerecibido(num_nodo)
else:
""" EN CASO CONTRARIO EL EVENTO SERA DE TIPO 'ENCUENTRO'.
COMPROBAMOS
SI EXISTE MENSAJE Y EN CASO AFIRMATIVO, EN QUE NODO O NODOS EXISTEN
DICHOS MENSAJES """
if lista_nodos[num_nodo-1].lista_mensajes_recibidos != []:
if lista_nodos[num_nodo2-1].lista_mensajes_recibidos != []:
if num_nodo == mensaje:
lista_tiempos_recepcion.append(tiempo_recepcion)
escribir2('R',str(num_nodo),str(num_nodo2),str(lis
ta_eventos[i].tiempo_ini),str(lista_eventos[i].tie
mpo_fin))
N_paquetes_intercambiados+=compartirmensajes(lista
_nodos[num_nodo2- 1].lista_mensajes_recibidos,
lista_nodos[num_nodo-1].lista_mensajes_recibidos)
elif num_nodo2 == mensaje:
lista_tiempos_recepcion.append(tiempo_recepcion)
escribir2('R',str(num_nodo2),str(num_nodo),str(lis
ta_eventos[i].tiempo_ini),
str(lista_eventos[i].tiempo_fin))
N_paquetes_intercambiados+=compartirmensajes(lista
_nodos[num_nodo- 1].lista_mensajes_recibidos,
lista_nodos[num_nodo2-1].lista_mensajes_recibidos
else:
escribir2('T',str(num_nodo),str(num_nodo2),str(lis
ta_eventos[i].tiempo_ini),
str(lista_eventos[i].tiempo_fin))
escribir2('T',str(num_nodo2),str(num_nodo)str(list
a_eventos[i].tiempo_ini),
str(lista_eventos[i].tiempo_fin))
N_paquetes_intercambiados+=compartirmensajes(lista
43
_nodos[num_nodo-1].lista_mensajes_recibidos,
lista_nodos[num_nodo2-1].lista_mensajes_recibidos)
else:
if num_nodo2 == mensaje:
lista_tiempos_recepcion.append(tiempo_recepcion)
escribir2('R',str(num_nodo2),str(num_nodo),str(lis
ta_eventos[i].tiempo_ini),
str(lista_eventos[i].tiempo_fin))
N_paquetes_intercambiados+=transmitirmensaje(lista
_nodos[num_nodo-1].lista_mensajes_recibidos,
lista_nodos[num_nodo2-1].lista_mensajes_recibidos)
else:
escribir2('T',str(num_nodo),str(num_nodo2),str(lis
ta_eventos[i].tiempo_ini),
str(lista_eventos[i].tiempo_fin))
N_paquetes_intercambiados+=transmitirmensaje(lista
_nodos[num_nodo-1].lista_mensajes_recibidos,
lista_nodos[num_nodo2-1].lista_mensajes_recibidos)
elif lista_nodos[num_nodo2-1].lista_mensajes_recibidos != []:
if num_nodo == mensaje:
lista_tiempos_recepcion.append(tiempo_recepcion)
escribir2('R',str(num_nodo),str(num_nodo2),str(lista_eve
ntos[i].tiempo_ini), str(lista_eventos[i].tiempo_fin))
N_paquetes_intercambiados+=transmitirmensaje(lista_nodos
[num_nodo2-1].lista_mensajes_recibidos,
lista_nodos[num_nodo-1].lista_mensajes_recibidos)
else:
escribir2('T',str(num_nodo2),str(num_nodo),str(lista_eve
ntos[i].tiempo_ini), str(lista_eventos[i].tiempo_fin))
N_paquetes_intercambiados+=transmitirmensaje(lista_nodos
[num_nodo2-1].lista_mensajes_recibidos,
lista_nodos[num_nodo-1].lista_mensajes_recibidos)
######################### OBETENER MÉTRICA #########################
lista_tiempos_generacion.sort()
N_paquetes_recibidos = len(lista_nodos[nodo_destino-
1].lista_mensajes_recibidos)
Delivery = N_paquetes_recibidos / N_paquetes_generados
if lista_tiempos_recepcion == []:
print("El nodo destino %d no ha recibido el mensaje" % (mensaje))
Delay = (lista_tiempos_recepcion[0] - lista_tiempos_generacion[0])/
(N_paquetes_recibidos)
Coste = N_paquetes_intercambiados
X = N_paquetes_generados
D = Delivery
E = Delay
C = Coste
resultados = open('Resultados.txt', 'w')
resultados.write(str(D))
resultados.write('\t')
resultados.write(str(E))
resultados.write('\t')
resultados.write(str(C))
resultados.close()
45
ANEXO B: CÓDIGO DE LAS FUNCIONES
“”” FUNCION PARA CONTACTOS NODOS “””
lista_contactos_nodos = list()
for i in lista_nodos_fuentes2:
x = lista_nodos_fuentes1.count(i)
y = lista_nodos_destino1.count(i)
z = x + y
lista_contactos_nodos.append(z)
lista_contactos_nodos2 = list()
i = 1
while(i<=max(lista_nodos_destino2)):
t = lista_nodos_fuentes1.count(i)
r = lista_nodos_destino1.count(i)
q = t + r
lista_contactos_nodos2.append(q)
i += 1
“”” DIAGRAMA BARRAS DE CONTACTOS “””
x = lista_nodos_fuentes2
y = lista_contactos_nodos
plt.bar(x, y)
plt.title('Contactos entre nodos')
plt.savefig("Contactos entre nodos.jpg")
lista = list()
for i in range(1,678):
lista.append(i)
t = lista
r = lista_contactos_nodos2
plt.bar(t, r)
plt.title('Contactos entre nodos')
plt.savefig("Contactos entre nodos2.jpg")
“”” FUNCION ELIMINAR ELEMENTOS REPETIDOS “””
def eliminarrepetidos(lista1, lista2):
for i in lista1:
if i not in lista2:
lista2.append(i)
“”” FUNCION CREAR LISTA DE NODOS “””
from ClaseNodo import Nodo
def listanodos(N_nodos, lista_nodos):
for i in range(N_nodos):
lista_nodos.append(Nodo(i))
“”” FUNCION PARA AGREGAR NODOS FUENTES “””
import random
def agregarnodosfuente(N_nodos_fuentes, N_nodos, lista_nodos_fuentes):
z = 0
while (z < N_nodos_fuentes):
x = random.randint(1, N_nodos)
if x not in lista_nodos_fuentes:
lista_nodos_fuentes.append(x)
z += 1
“”” FUNCION PARA CREAR Y ESCRIBIR EN FICHERO “””
def crearfichero():
archivo = open('ListaEventos.txt', 'w')
archivo.close()
def escribirfichero(lista_eventos):
archivo = open('ListaEventos.txt', 'a')
num_eventos = len(lista_eventos)
for i in range(num_eventos):
archivo.write(lista_eventos[i].tipo)
archivo.write('\t')
archivo.write(str(lista_eventos[i].nodo_origen))
archivo.write('\t')
archivo.write(str(lista_eventos[i].nodo_destino))
archivo.write('\t')
archivo.write(str(lista_eventos[i].tiempo_ini))
archivo.write('\t')
archivo.write(str(lista_eventos[i].tiempo_fin))
archivo.write('\n')
47
“”” FUNCION PARA TRANSMITIR MENSAJES ENTR NODOS “””
def transmitirmensaje(lista1, lista2):
suma = 0
for i in lista1:
lista2.append(i)
suma += 1
return suma
“”” FUNCION PARA COMPARTIR MENSAJES ENTRE NODOS “””
def compartirmensajes(lista1, lista2):
suma = 0
for i in lista1:
if i not in lista2:
lista2.append(i)
suma +=1
for i in lista2:
if i not in lista1:
lista1.append(i)
suma +=1
return suma
“”” FUNCION PARA ESCRIBIR EVENTOS ‘T’ Y ‘R’ “””
def crearfichero2():
archivo = open('EventosTR.txt', 'w')
archivo.close()
def escribir2(tipo, nodo1, nodo2, tiempo1, tiempo2):
archivo = open('EventosTR.txt', 'a')
archivo.write(tipo)
archivo.write('\t')
archivo.write(nodo1)
archivo.write('\t')
archivo.write(nodo2)
archivo.write('\t')
archivo.write(tiempo1)
archivo.write('\t')
archivo.write(tiempo2)
archivo.write('\n')
return archivo
“”” FUNCION PARA REPRESENTAR GRÁFICAS “””
import matplotlib.pyplot as plt
X = [] #Numero de nodos fuentes por simulacion
D = [] #Delivery por simulacion
E = [] #Delay por simulacion
C = [] #Coste por simulacion
plt.figure(figsize= (10,10))
plt.subplot(222)
plt.bar(X, D, width = 15)
plt.xlabel("Paquetes generados")
plt.grid(True)
plt.title("Delivery")
plt.subplot(221)
plt.bar(X, E, width = 15)
plt.xlabel("Paquetes generados")
plt.grid(True)
plt.title("Delay")
plt.subplot(223)
plt.bar(X, C, width = 15)
plt.xlabel("Paquetes generados")
plt.grid(True)
plt.title("Coste")
plt.savefig("Resultados.jpg")
49
ANEXO C: CÓDIGO DE LAS CLASES
“”” CLASE EVENTO “””
class Evento (object):
def __init__(self, tipo, nodo_origen, nodo_destino, tiempo_ini,
tiempo_fin):
self.tipo = tipo
self.nodo_origen = nodo_origen
self.nodo_destino = nodo_destino
self.tiempo_ini = tiempo_ini
self.tiempo_fin = tiempo_fin
“”” CLASE NODO “””
class Nodo (object):
def __init__(self, id):
self.id = id
self.lista_mensajes_generados = list()
self.lista_mensajes_recibidos = list()
def agregarmensajegenerado(self, mensaje):
self.lista_mensajes_generados.append(mensaje)
def agregarmensajerecibido(self, mensaje):
self.lista_mensajes_recibidos.append(mensaje)