Uno Strumento Simulativo per Architetture VoIP per Dispositivi
Transcript
Uno Strumento Simulativo per Architetture VoIP per Dispositivi
Alma Mater Studiorum - Università di Bologna Facoltà di Scienze Matematiche Fisiche e Naturali Dipartimento di Scienze dell’Informazione Uno Strumento Simulativo per Architetture VoIP per Dispositivi Mobili Multihomed Tesi di Laurea in Reti di Calcolatori Presentata da: Piero Murphy Relatore: Vittorio Ghini Gli Obiettivi In sede di tirocinio é stata ideata e definita una soluzione che consente a dispositivi mobili (palmari, smart phones) di effettuare telefonate VoIP sfruttando contemporaneamente le molteplici connessioni wireless disponibili e inviando il traffico dati tra queste parallelamente in modo da aumentare la banda disponibile complessiva. La soluzione prevede l’utilizzo di due applicazioni (una sul dispositivo, una su un server) che fungano da proxy tra le applicazioni client e server VoIP e inoltrino i dati su tutte le connessioni Wi-Fi disponibili, in parallelo. Lo scopo di questo lavoro di tesi é preparare un ambiente simulativo predisposto a valutare questa architettura. Questo servirà: • inizialmente, a valutare una serie di algoritmi di rete, quelli incaricati di inoltrare e bilanciare il traffico dati sulle reti Wi-Fi, ideati da colleghi laureandi, per identificare il più efficiente ed idoneo; • ad analizzare il comportamento dei programmi in varie situazioni: perdita di una connessione, interferenze, connessioni lente o veloci, movimento rispetto agli access points; • a raccogliere e analizzare i dati statistici di queste simulazioni; • a simulare scenari particolari che sarebbero se non impossibili, sicuramente molto costosi da ricreare in laboratorio. Lo Scenario Lo scenario prevede due applicazioni: un Proxy Client, eseguito sul dispositivo mobile (host) e un Proxy Server, eseguito sul server. Queste si interfacciano con, rispetivamente, le applicazioni VoIP client e server, ed inoltrano il traffico dati tra loro in parallelo su tutte le connessioni wireless disponibili utilizzando socket UDP. Entrambe le applicazioni hanno due componenti: la Application Logic, che elabora i dati di controllo VoIP e si interfaccia con i protocolli VoIP, e la Networking Logic, che gestisce le connessioni wireless e il bilanciamento del traffico dati tra queste. Strumenti Simulatore: OMNeT++. La scelta del simulatore più adatto al nostro scopo é ricaduta su OMNeT++ (www.omnetpp.org), in particolar modo per la sua completezza, estendibilità, e buona organizzazione. Framework: INET. Per la simulazione di network su OMNeT++ esistono due framework: INET e Mobility; sebbene quest’ultimo sia particolarmente adatto alla simulazione di protocolli wireless sperimentali, il primo risulta decisamente più completo; INET infatti implementa l’intero Network Stack, dal livello fisico ai protocolli applicativi. Problemi di INET: Una volta scelto l’ambiente di simulazione, e dopo un’analisi dello stesso, sono state identificate le sue mancanze rispetto alle nostre necessità che dovevano essere risolte: 1. Per come é implementato il framework INET, non é possibile avere in un singolo host (il nostro dispositivo mobile) molteplici interfacce wireless (ovvero può contenere una sola NIC WLAN). Questa situazione é inaccettabile nel nostro contesto che, ricordiamo, parte dal presupposto che il client possa collegarsi ad almeno due reti wireless contemporaneamente; 2. Il livello IP non consente alle applicazioni, come é d’altronde normale, di scegliere quale interfaccia di rete utilizzare per inviare i dati. Nonostante questa sia da considerarsi una mancanza del protocollo IP in se, e non della sua implementazione in INET, rimane comunque un problema da risolvere. Il primo punto é stato già affrontato in passato nell’ambito di un progetto di nome COCOS, e ha portato a Modified INET, una versione di INET modificata, che aggiunge alcune funzionalità; il codice riguardante il supporto a reti wireless molteplici é stato portato e adattato ai nostri bisogni. Progettazione Durante la fase di progettazione sono stati individuati e analizzati i principali obiettivi: • Creazione e configurazione del network in OMNeT++, contenente un host mobile, due access point (con relative connessioni wireless), un router e un server. • Modificare INET in modo da consentire all’host di avere più di una interfaccia di rete wireless; • Modificare il protocollo IP (in INET) per consentire la selezione, pacchetto per pacchetto, dell’interfaccia di rete in uscita. • Creare un’applicazione UDP che sfrutta queste modifiche, invia e riceve dati (configurabili in grandezza e frequenza) e raccoglie dati statistici. Questa classe servirà inizialmente a valutare la corretta implementazione delle modifiche, per poi diventare, con qualche estensione, il modulo che consentirà alle nostre applicazioni di interfacciarsi con OMNeT++ Interfacce Wireless Multiple Per simulare le reti wireless INET utilizza una componente che chiama Controllo dei Canali che gestisce tutti i dispositivi wireless (host e access points), calcola e aggiorna le loro posizioni e le reciproche distanze. Il problema risiede in questo approccio: ChannelControl contiene una tabella (un insieme) di Host, ciascuno dei quali contiene (implicitamente) una ed una sola interfaccia di rete wireless. Con le modifiche apportate, l’approccio é diventato: ChannelControl contiene una tabella di Host, ciascuno dei quali contiene a sua volta una tabella delle proprie interfacce wireless. Questo ha portato alla modifica di 24 file, tra C++ header files, C++ source files e Network Description (NED) files. In particolare é stato cambiato il codice riguardante controllo e accesso ai canali wireless, la mobilità e i moduli radio (IEEE 802.11) Modifiche al Protocollo IP Quando il protocollo IP riceve un pacchetto di dati da inviare sulla rete, utilizza una tabella, chiamata Routing Table, per selezionare l’interfaccia di rete da utilizzare per spedirlo. La consultazione di questa tabella si basa sull’indirizzo IP di destinazione, seguendo la logica che se vi sono interfacce di rete molteplici, esse saranno connesse a reti separate (magari un’interfaccia per la rete privata, una per internet). Nel nostro caso invece si possono inviare dati ad uno stesso destinatario attraverso più interfacce. La ricerca non può più basarsi quindi sull’indirizzo del destinatario (che risulta ambiguo), e si utilizzerà al suo posto l’indirizzo del mittente. Ad ogni interfaccia di rete é infatti assegnato un indirizzo IP, che l’applicazione UDP potrà utilizzare per identificare una specifica interfaccia. Il flusso esecutivo sarà quindi: • l’applicazione, prima di inviare un pacchetto al livello trasporto (UDP nel nostro caso), vi aggiunge come Source IP Address l’indirizzo IP relativo all’interfaccia che intende usare; • il protocollo UDP esegue le sue mansioni invariate; • il protocollo IP, al momento di decidere quale interfaccia di rete utilizzare e prima di utilizzare la normale funzione di routing osserva se é stato definito il source address; quindi: • se non é definito, esegue il codice originale utilizzando la funzione di routing per selezionare l’interfaccia; • se é definito, provvede a trovare l’interfaccia che possiede tale indirizzo IP e ad utilizzarla per inviare i dati. Qualora l’indirizzo non fosse assegnato ad alcuna interfaccia, verrà segnalato un errore e scartato il pacchetto. Applicazione UDP Semplice É stata creata una classe che implementa una semplice applicazione UDP che genera del traffico dati e colleziona dati statistici. Questa viene configurata attraverso alcuni parametri tra cui: • porta UDP locale • porta UDP e indirizzo/i IP di destinazione • dimensione dei messaggi in byte • frequenza dei messaggi in secondi • utilizzo di acknowledgment (ACK). Durante l’esecuzione raccoglie dati statistici scalari (valori) e vettoriali (valori sul tempo). Gli valori scalari sono: • totale di byte inviati • totale di byte ricevuti • numero di pacchetti inviati • numero di pacchetti ricevuti; mentre i valori vettoriali sono: • byte al secondo in input • byte/s in output • latenza dei pacchetti (secondi trascorsi dalla spedizione alla ricezione) • latenza degli ACK • Round Trip Time (secondi dalla spedizione di un pacchetto alla ricezione del relativo ACK). Alcuni Risultati (1) omnetpp.ini SCALARI CLIENT Inviati Totale Bytes Scenario Classico: Totale Pacchetti VETTORI Client: Dimensione messaggi: 10 KB Frequenza messaggi: 0.01 s Banda: 54 Mbps (Wireless-G) Ricevuti 29,173,760 143,360 143,360 29,173,760 2,877 2,877 2,877 2,877 Scarto medio Media Scarto medio 1320.34 970681.37 210345.56 970681.37 210345.56 4766.89 1320.34 0.005 0.0026 0.0065 0.00031 Latenza ACK (s) 0.0039 0.00018 0.0016 0.0017 Round Trip Time (PKT+ACK) (s) 0.0069 0.00037 0.0066 0.0028 Output (bytes/s) Latenza Pacchetti (s) SCALARI CLIENT Inviati Totale Bytes Totale Pacchetti Client: Dimensione messaggi: 1 KB Frequenza messaggi: 0.05 s Banda: 54 Mbps (Wireless-G) Inviati 4766.89 example1.ini Traffico ridotto: Ricevuti Media Input (bytes/s) SERVER VETTORI Input (bytes/s) SERVER Ricevuti Inviati Ricevuti 582,656 143,360 143,360 582,656 597 597 597 597 Media Scarto medio Media Scarto medio 4766.89 1320.34 19385.37 4274.34 19385.37 4274.34 4766.89 1320.34 Latenza Pacchetti (s) 0.0031 0.00029 0.00051 0.00019 Latenza ACK (s) 0.0021 0.022 0.00047 0.00028 Round Trip Time (PKT+ACK) (s) 0.0026 0.022 0.0035 0.00041 Output (bytes/s) Alcuni Risultati (2) example2.ini SCALARI Banda disponibile minore: CLIENT Inviati Totale Bytes Totale Pacchetti Client: Dimensione messaggi: 10 KB Frequenza messaggi: 0.01 s Banda: 11 Mbps (Wireless-B) VETTORI Output (bytes/s) Latenza Pacchetti (s) Latenza ACK (s) Round Trip Time (PKT+ACK) (s) example3.ini Traffico intenso: Client: Dimensione messaggi: 10 KB Frequenza messaggi: 0.01 s Banda: 54 Mbps (Wireless-G) Server: Dimensione messaggi: 5 KB Frequenza messaggi: 0.01 s Ricevuti SCALARI 143,360 21,258,240 2,877 2,104 2,104 2,104 Scarto medio Media Scarto medio 4766.89 1320.34 706206.89 162934.24 970681.37 210345.56 4766.89 1320.34 0.011 0.0035 0.014 0.0017 0.0014 0.0021 0.0066 0.0057 0.015 0.0028 0.017 0.0069 Inviati Totale Pacchetti Ricevuti 143,360 CLIENT Totale Bytes VETTORI Inviati 29,173,760 Media Input (bytes/s) SERVER SERVER Ricevuti Inviati Ricevuti 29173760 14586880 14586880 28569600 5698 5639 5639 5635 Media Scarto medio Media Scarto medio Input (bytes/s) 485340.68 105190.58 950554.48 206839.11 Output (bytes/s) 970681.37 210345.56 485340.69 105172.78 Latenza Pacchetti (s) 0.0051 0.0026 0.0086 0.002 Latenza ACK (s) 0.0012 0.0019 0.0026 0.0026 Round Trip Time (PKT+ACK) (s) 0.0098 0.0033 0.0078 0.0037