Permesso (PERsistent MESSagging in ad hOc networks) Vittoria Caranna – matr.0000230660 C.d.L.S Ingegneria Informatica Università di Bologna Reti di Calcolatori LS – Prof. Antonio Corradi – A.A 2005/06 Referente progetto: Eugenio Magistretti Bologna, 30-01-2007 Abstract Le reti MANET (Mobile ad hoc Networks) sono piccole reti che permettono di connettere dispositivi portatili come laptop, PDA o smart phones e sembrano particolarmente interessanti per permettere l’elaborazione in contesti difficili o addirittura ostili in cui non è possibile avere un’infrastruttura di comunicazione fissa. Il progetto PERMESSO si propone di realizzare un servizio di messaggistica istantanea in cui la mancanza di nodi fissi determina la necessità di ripensare alla realizzazione delle funzionalità di base, come le politiche d’instradamento dei messaggi, che coinvolgono i nodi stessi. Introduzione La Mobile Ad Hoc NETworks (MANET) è un insieme di host forniti di interfaccia di rete wireless che formano una rete senza l’aiuto di una infrastruttura fissa e senza la necessità di un’amministrazione centralizzata. Per loro natura le reti ad hoc sono la soluzione ideale per tutti quei casi in cui le infrastrutture di comunicazione esistenti non sono disponibili, non sono affidabili o più semplicemente troppo costose da realizzare. Il progetto PERsistent MESSagging in ad hOc networks (PERMESSO) mira a fornire agli utenti un servizio di messaggistica istantanea, proponendo modelli di comunicazione sincrona ed asincrona. Le comunicazioni, così come le politiche di instradamento, sono a carico dei singoli nodi terminali. I nodi appartenenti alla rete hanno la possibilità di entrare ed uscire dalla rete liberamente. I tipi di comunicazione che possono essere intrapresi sono di due tipologie: sincrona quando entrambi gli interessati allo scambio di messaggi sono presenti nella rete asincrona quando uno dei due nodi interessati non è momentaneamente presente nella rete. In questo ultimo caso occorre un meccanismo che permetta di memorizzare temporaneamente il messaggio e di recapitarlo non appena il destinatario entra nella rete MANET. A tal proposito, il progetto PERMESSO prevede la realizzazione e la gestione di un server che si fa carico di tali responsabilità. La comunicazione asincrona è prevista anche in assenza del server, lasciando il compito di memorizzazione e delivery dei messaggi ad un nodo scelto all’interno delle rete. Nel seguito verrà trattato il servizio di chatting asincrono, previsto secondo le due modalità menzionate. Si tratteranno le problematiche di comunicazione con server e con nodo scelto, sarà presente una sezione dedicata alla gestione della qualità di servizio e a seguire una sezione dedicata agli sviluppi futuri e alle conclusioni. 1 1.Architettura generale La caratteristica interessante di questa tipologia di rete ad-hoc è che tutti i nodi che fanno parte della rete cooperano tra di loro per lo scambio delle informazioni. Considerando una visione a strati dell’architettura del sistema, il livello più alto è occupato dal client e dall’eventuale server. Il client è un host presente all’interno dell’ambiente di riferimento che nel nostro caso è la MANET. I partecipanti della rete possono essere dispositivi portatili come laptop, PDA o smart phones. Gli host sono mobili, possono entrare ed uscire dalla rete liberamente e sono connessi in modo intermittente attraverso un’alta variabilità di collegamenti e in un ambiente fortemente dinamico. I dispositivi il più delle volte hanno capacità limitate, come CPU lente, piccole quantità di memoria, schermi ridotte e così via. Tutte queste caratteristiche influiscono sulla gestione delle comunicazioni. I servizi di cui un client può usufruire all’interno di una MANET sono: comunicazione con uno degli amici presenti in rubrica aggiunta di altri amici effettuando una ricerca per alias tra gli host presenti nella rete comunicazione in modalità sincrona se il destinatario dei suoi messaggi è on-line comunicazione in modalità asincrona. In tal caso si deve ricorrere all’utilizzo di altre entità presenti nella rete. La comunicazione asincrona può avvenire mediante la presenza di un server o di un eventuale nodo scelto all’interno della rete stessa. Il server è una entità capace di funzionare per uno scopo specifico. Dal punto di vista del client, se esso è presente, rappresenta un punto di riferimento a cui viene delegato il compito di inoltrare i messaggi asincroni cioè messaggi inviati da un mittente ad un destinatario che al momento dell’invio è offline. I servizi che il server mette a disposizione degli host all’interno della rete sono: memorizzazione dei messaggi pendenti per un host delivery dei messaggi asincroni all’ingresso del destinatario all’interno della rete Le caratteristiche del server permettono di esplicare tali funzionalità e di venire incontro alle esigenze degli host della rete. Esso dovrà avere inoltre la possibilità di conoscere i partecipanti all’interno della rete per poter mantenere la corrispondenza tra mittente e destinatario dei messaggi che viaggiano all’interno della rete. In assenza del server, è previsto un ulteriore ruolo all’interno della MANET che è quello di un nodo scelto. Questo viene incontro al fatto che un utente, che ha in memoria dei messaggi per utenti offline, potrebbe decidere di abbandonare la rete da un momento all’altro. Per evitare di perdere i messaggi, indica in maniera proattiva la propria intenzione a lasciare la rete, consentendo l’invio dei messaggi a nodi terzi ( nodo scelto). Il nodo scelto all’interno della rete viene a sostituire, in un certo senso, la presenza del server. La differenza principale è che in tal caso occorrerà tener conto di tutte le problematiche insite nelle caratteristiche di un nodo che a differenza del server avrà capacità di memoria limitate, bassa capacità computazionale. I servizi offerti dal nodo scelto sono sempre quelli di mantenere in memoria i messaggi per nodi offline e di effettuare il delivery all’ingresso di un nodo nella rete MANET. 1.1 Caratteristiche architetturali Per avere una maggiore chiarezza sui concetti e termini che verranno utilizzati successivamente, occorre dare una semplice descrizione di questi. Il progetto parte dalla realizzazione di pacchetti che vengono scambiati tra i nodi della rete. 2 Ogni pacchetto è costituito da campi indicanti: tipo di servizio id del mittente id del destinatario timestamp L’utilizzo dei pacchetti rappresenta non solo una modalità con cui è possibile effettuare lo scambio dei messaggi tra i nodi, ma permette di venire incontro alla esigenza di invio dei messaggi forward. Si parla di pacchetto forward quando un nodo, che deve inviare un messaggio ad un destinatario che è offline, dovrà fare uso di un terzo nodo per esplicare tale servizio. Le entità di supporto come il server o il nodo scelto non sono i veri destinatari del messaggio; si realizza allora un pacchetto forward che incapsula il messaggio di testo e tutte le altre informazioni destinate al nodo offline. Il destinatario del pacchetto forward sarà invece il server. L’ID del mittente è fondamentale per capire chi manda fisicamente un pacchetto. Figura1: Pacchetto forward inviato al server Tra i protocolli che sono stati utilizzati per supportare gli scambi dei pacchetti si è fatto uso dell’unicast e del broadcast. L’unicast significa comunicazione puntoa-punto cioè, una sorgente trasmette pacchetti ad una singola destinazione. Il broadcast è una modalità di comunicazione in cui ogni messaggio trasmesso su un canale wireless è generalmente ricevuto da tutti i destinatari localizzati one-hop dal mittente e rispondono agli indirizzi di una rete locale. Un altro aspetto riguarda la scelta del protocollo di comunicazione TCP od UDP. Il protocollo TCP fornisce un controllo sul flusso e sulla congestione, richiesta per garantire un affidabile consegna dei pacchetti. TCP fu originariamente realizzato per lavorare in delle reti stabili. Poiché la frequenza di errore nelle reti cablate è abbastanza bassa, il TCP usa la perdita di pacchetti come un indicatore di congestione della rete. La mobilità potrebbe causare fallimenti di routing e la perdita di pacchetti potrebbe introdurre del ritardo. Il TCP interpreta queste perdite come congestione ed invoca il meccanismo di controllo, effettuando delle ritrasmissioni. Tale fenomeno non appare o comunque è presente con una intensità minore se il protocollo utilizzato è l’UDP. Per tale motivo la scelta di optare per quest’ultimo protocollo di comunicazione che viene utilizzato soprattutto nei casi di mancata connessione. La struttura dell’architettura porta ad identificare il ruolo di altri oggetti che agiscono a supporto delle entità fondamentali del sistema. I client della rete ed il server si appoggiano alla connection. La connection fa da intermediario tra client o server e router. Si occupa di processare i pacchetti in input su richiesta del router cioè, recupera le informazioni del pacchetto come il tipo di servizio che viene richiesto e, sulla base di questo, richiede la creazione di un pacchetto specifico al livello sottostante. Una volta creato il pacchetto di risposta, viene inviato al router che si occuperà di instradarlo. Un pacchetto in output sulla connessione viene inviato sulla rete. Il router è l’entità che ha delle responsabilità inerenti a ciascun host. Esso gestione l’invio e la ricezione dei pacchetti. Viene infatti chiamato dal dispatcher alla ricezione di un pacchetto (gestisce l’ascolto dell’evento ricezione pacchetto). Dal punto di vista semantico, si trova ad un livello superiore alla connection perché questa estrapola le informazioni dal pacchetto e richiede la formazione del pacchetto di 3 risposta. Il router opera le sue scelte di instradamento del pacchetto in base al destinatario e fa questo senza interessarsi del tipo di servizio che era stato richiesto. Il dispatcher è un thread in ascolto sulla connessione. Alla ricezione di un pacchetto, notifica il listener dell’avvenuta ricezione. Il listener viene gestito dal router del rispettivo host destinatario. In maniera analoga, il dispatcher verrà chiamato dal router per le operazioni di invio di un pacchetto. 2.Servizio Asincrono di Chatting Gli host hanno la possibilità di entrare ed uscire dalla rete. Questo comporta l’impossibilità di offrire i servizi ad uno o più nodi durante il periodo di disconnessione. A tal proposito, all’interno della MANET si considera la possibilità di realizzare delle comunicazioni asincrone. Per la gestione di queste comunicazioni occorre considerare i casi in cui nella rete è presente: Persistent Server Nodo incaricato Nell’affrontare tale tipologia di comunicazione occorre affrontare e risolvere delle problematiche che riguardano la comunicazione sia in presenza del server che in presenza del nodo incaricato. Le problematiche riguardanti il primo caso sono: come il server conosce i partecipanti nella rete come gestire i pacchetti destinati ad un nodo offline e che occorre indirizzare al server come i client utilizzano il server se è già presente nella rete o se entra dopo come evitare eventuali congestioni dell’host destinatario quando scegliere il nodo come scegliere il nodo come gestire la memoria del nodo 3.Comunicazione asincrona con Persistent Server Siamo nella situazione in cui non sempre chi vuole accedere a dati o richiedere servizi è connesso contemporaneamente a chi li offre. In tale contesto, occorre un supporto per la gestione delle comunicazioni asincrone e per la memorizzazione dei messaggi in quanto, un nodo mittente non sarebbe in grado di recapitare un messaggio ad uno o più destinatari fino all’ingresso di questi nella rete. Il server offre: capacita di memoria che si assumono non limitate servizio di corrispondenza tra mittente e destinatario del messaggio delivery del messaggio. 3.1 Ingresso nella rete del server Il Persistent Server deve essere a conoscenza dei nodi all’interno della rete per poter esplicare il servizio di delivery dei messaggi. Pertanto, all’ingresso nella rete da parte del server, viene inviato un messaggio di broadcast (un JOIN_NETWORK) ai partecipanti della MANET, con il quale si dà conoscenza agli host della presenza del server. I nodi della rete rispondono con un HOST_ONLINE, mediante il quale si notifica Per il secondo caso, occorre affrontare altre problematiche del tipo: 4 la propria presenza nella rete. Figura 2: Broadcast del server all’ingresso nella rete Il server è stato implementato come una midlet, con la quale si inzializza il server e la sua GUI. 3.2 Rete dal punto di vista del server L’interfaccia del server presenta: partecipanti all’interno della rete eventuali pacchetti da inoltrare Una volta connesso, il server apre una propria connessione ed ha un proprio router che mette a disposizione le funzioni di trasmissione e ricezione dei pacchetti verso/dalla rete. Per una maggiore completezza dei casi possibili, si è deciso di trattare la situazione in cui il server arriva in un secondo momento nella rete e non è presente quando un host vuole inviare un pacchetto offline. 3.3 Gestione dei pacchetti indirizzati al server e logica del server Come già detto nell’architettura del sistema, le comunicazioni tra i partecipanti della rete avvengono sulla: costruzione di pacchetti di messaggio di testo o di richieste e risposte. Da questi è possibile ottenere le informazioni sul mittente e il destinatario del pacchetto. Al momento di una comunicazione asincrona però, il reale destinatario del pacchetto è offline ed occorre indirizzare il pacchetto al server. Si suppone dunque che al momento dell’invio il campo relativo al mittente contenga l’ID dell’host che manda fisicamente il pacchetto. Grazie a questo è possibile gestire il recapito dei pacchetti forward che vengono costruiti dal nodo mittente per il server. A questo punto, sarà compito del server: estrapolare i pacchetti indirizzati al vero destinatario mediante una funzione che chiama internamente estrarre il destinatario di ciascun pacchetto aggiungere i pacchetti nella sua memoria in stato SEND_WAIT Nella trasmissione e ricezione dei pacchetti da parte del server, è stato opportuno gestire gli stati in cui si trova un pacchetto perché, così facendo, si può decidere cosa farne e quali operazioni occorre applicare, essendo a conoscenza di quelle che sono già state effettuate. All’arrivo di un host nella manet, il server si occuperà di: verificare se esiste una corrispondenza tra il suo id e quelli dei destinatari dei pacchetti in memoria effettuare il delivery liberare lo spazio in memoria cancellando i pacchetti. Per ogni host che entra nella rete, viene chiamata una funzione che verifica se esistono dei pacchetti pendenti per esso. Il server deve gestire dunque i pacchetti pendenti per un host, pacchetti che sono stati memorizzati sul server e sono in attesa di essere inviati al destinatario. Se il destinatario ha più di un pacchetto da ricevere, per evitare una possibile congestione della rete e del nodo destinatario, è stata adottata una politica di gestione dell’invio dei pacchetti che verrà spiegata nella sezione relativa alla gestione della qualità di servizio. 5 3.3.1 Interazione asincrona Client2Server Il client è già connesso alla rete e desidera inviare un pacchetto. In base al tipo di comunicazione in esame, il router del client verifica che il destinatario del pacchetto non è on–line e che è presente il server. Se il server è già nella rete, il pacchetto viene forwardato a quest’ultimo. I pacchetti di forward riguardano i messaggi di testo e i messaggi che vengono scambiati nella fase di richiesta e risposta d’amicizia. Il pacchetto ricevuto dal server può essere un: pacchetto forward, questo viene letto, settando il suo stato in STATE_PROCESS_COMPLETE e si estrapola da esso ogni singolo pacchetto. A questo punto, ogni singolo pacchetto viene gestito come un pacchetto di output e il suo stato viene posto in STATE_SEND_WAIT. Se il destinatario del pacchetto di messaggio non è on-line, il server si incarica di memorizzarlo nel suo store (PacketStore) e lo invia al momento opportuno con la successiva eliminazione dalla memoria. Quando il destinatario è on-line il pacchetto viene inviato, ponendo lo stato in STATE_SEND_COMPLETE. pacchetto di broadcast per ingresso nella rete da parte di un host; in tal caso, il server risponde notificando la sua presenza. 3.3.2 Interazione asincrona server2client Si considera il caso in cui sia il server ad effettuare il delivery dei pacchetti di messaggi. Il server mantiene i messaggi pendenti per un host. Quando un host entra nella rete fa un broadcast e a questo anche il server è tenuto a rispondere. Da questo messaggio di input, il server va a verificare la corrispondenza dell’id del nuovo host con quelli dei destinatari dei messaggi che ha in memoria. Se ci sono messaggi per il nuovo host che è entrato nella rete, effettua l’invio. Occorre tenere conto del fatto che i messaggi devono essere inviati in ordine e per questo motivo è stato introdotto l’ordinamento secondo Lamport (vedi relazione Davide Sansovini). 3.4 Server dal punto di vista del client Il client può avere una visione diversa nei confronti del server sulla base della sua presenza o meno nella rete. Si distinguono i casi: server presente da sempre nella rete ingresso successivo del server Il primo caso è già stato trattato in precedenza. Nel secondo caso, quando un host deve inviare un pacchetto offline, lo mantiene momentaneamente in memoria. Appena riceve la notifica dell’ingresso del server, il nodo che ha dei messaggi dovrà indirizzarli al server, liberando così la sua memoria. Per evitare delle situazioni di congestione del server, che in questa situazione si troverebbe ad essere stressato dai molteplici invii da parte dei nodi, è stata adottata una politica di controllo che verrà spiegata nella sezione relativa alla qualità di servizio. 6 Se nella rete non è presente né il destinatario del pacchetto, né il server, il pacchetto viene tenuto in memoria dal client (in stato SEND_WAIT) in attesa che il destinatario venga on-line oppure che l’utente decida di abbandonare la rete.(si rimanda a dopo la spiegazione di cosa avviene e il motivo di tale scelta). Al momento della disconnessione del client, i suoi pacchetti in memoria verranno inviati al server, se è presente, o si procederà con l’elezione di un nodo incaricato. 4. Chatting Asincrono con Nodo Incaricato Questa è la situazione in cui si è in assenza del server che ha le caratteristiche migliori e favorevoli per gestire la comunicazione asincrona. Fin quando un nodo è on-line ed ha dei pacchetti di messaggi asincroni, li tiene in memoria. Le problematiche affrontate in questa situazione sono: momento in cui eleggere il nodo incaricato politica adottata per eleggere il nodo gestione dei messaggi da parte del nuovo nodo gestione dei possibili casi di congestione 4.1 Momento di elezione del nodo incaricato E’ stato opportuno chiedersi quando è il momento adatto ad eleggere il nodo a cui affidare i pacchetti asincroni. Se l’elezione del nodo venisse fatta non appena il client verifica che il server non c’è, il nuovo nodo incaricato potrebbe, in un secondo momento, abbandonare la rete. A questo punto, occorre eleggere un nuovo nodo incaricato e il nodo che precedentemente ha inviato all’incaricato i suoi pacchetti, entrerebbe a far parte dei nuovi candidati a diventare nodo incaricato, ritornando a ricevere i pacchetti di cui si era prima liberato, più altri eventualmente. Per evitare questo traffico e questa situazione poco favorevole ad un host, che potrebbe continuare a liberarsi e ricevere pacchetti, si effettua l’elezione del nuovo nodo solo nel momento in cui un host decide di abbandonare la rete. 4.2 Politica di elezione del nodo incaricato A questo punto, occorre decidere come eleggere il nuovo nodo. Si è deciso di adottare una politica di elezione sulla base della memoria disponibile di ogni nodo presente nella rete. Il nodo che decide di abbandonare la rete invia un messaggio di broadcast (FREE_MEMORY_ASK), richiedendo la quantità di memoria di ciascun host e aspetta le risposte (FREE_MEMORY_RESPONSE). Prima di abbandonare la rete, il nodo dovrà rimanere in attesa per un tempo sufficiente ad effettuare l’operazione di scelta ed eventuale elezione del nuovo nodo. Ciascun host risponde e per evitare la congestione del nodo richiedente, si adotta una politica di gestione degli invii. Il nodo che ha fatto la richiesta, prende, tra tutti gli host che hanno risposto, quello con capacità di memoria maggiore. 4.3 Gestione dei pacchetti A questo punto, l’host che ha richiesto la ricerca, costruisce una lista di pacchetti da inviare e che sono in stato SEND_WAIT. Il pacchetto di forward viene costruito controllando che la somma di memoria dei pacchetti che verranno inviati, non superi la memoria del nodo destinatario. I pacchetti rimanenti vengono inviati al secondo candidato in ordine di spazio e così via. Una volta inviato il pacchetto forward, il nodo mittente elimina dalla sua memoria i pacchetti già inviati. Questa soluzione viene incontro alla politica di gestione dei pacchetti da parte di ciascun nodo. 7 Per ogni nodo destinato a mantenere dei pacchetti di messaggi offline (effettua lettura del ForwardPacket e memorizza i pacchetti), si controlla che se riesce a mantenere tutti i pacchetti, li salva nel suo PacketStore, altrimenti si procede con l’eliminazione dei messaggi che hanno timestamp più vecchio. 4.4 Logica del nodo incaricato I pacchetti ricevuti dal nodo incaricato possono essere: pacchetto forward, in tal caso occorrerà processare ogni singolo pacchetto, estraendo il destinatario. Il pacchetto verrà salvato nello store del nodo. Per ogni nuovo utente che entra nella rete, verificherà che ci siano dei pacchetti pendenti per lui e che sono in stato SEND_WAIT. pacchetto con richiesta di memoria, in tal caso risponderà riportando la sua memoria disponibile. Ogni nodo che mantiene dei pacchetti di messaggi offline, dovrà occuparsi di distinguere: i suoi possibili pacchetti da inviare al nodo offline pacchetti che hanno come mittente un altro nodo che glieli ha inviati. Per la gestione dei pacchetti pendenti da inviare al nodo destinatario quando questo sarà on-line, il nodo incaricato si occuperà di inviare i pacchetti che hanno lui come mittente, direttamente e, di richiedere la costruzione di un pacchetto di forward per gli altri messaggi. Alla fine dell’invio, procederà sempre con la rimozione dei messaggi inviati. Per effettuare l’invio dei pacchetti pendenti è stato utilizzato un thread che viene eseguito quando un host viene online e si hanno dei pacchetti pendenti per lui. Per evitare di stressare il destinatario dei pacchetti, è stato gestito l’invio dei pacchetti in maniera opportuna e si rimanda la spiegazione nella sezione dedicata alla gestione di qualità. I nodi incaricati alla gestione dei messaggi asincroni possono essere più di uno e al momento della loro disconnessione, si procede con l’elezione di un nuovo nodo incaricato. 5. QoS management La qualità di servizio che si vuole garantire e che è stata oggetto di discussione in vari punti del progetto, riguarda la possibilità di evitare eventuali casi di congestione. Per evitare situazioni in cui alla risposta di un broadcast inviato da parte di un host, tutti gli altri host della rete potessero congestionare il richiedente con le loro risposte, si è pensato di poter trovare una soluzione adeguata per evitare ciò. Figura 3: congestione I casi di possibile congestione del nodo destinatario riguardano: l’invio di più pacchetti pendenti ad un nodo destinatario, precedentemente offline l’invio di pacchetti dagli host all’ingresso successivo del server nella rete l’invio da parte degli host della risposta alla richiesta di memoria disponibile Per tutti questi casi, citati già precedentemente nelle rispettive sezioni, è stato previsto di utilizzare un ritardo, generato casualmente, per effettuare gli invii. Si ha un thread dedicato che viene lanciato nei casi citati e genera un ritardo per l’invio dei rispettivi pacchetti. Per il primo caso, un nodo destinatario potrebbe avere più pacchetti da ricevere. In tal 8 caso, ogni pacchetto verrà inviato con un certo ritardo. Nel secondo caso, quando il server è assente, ogni nodo mantiene i pacchetti per i destinatari offline e all’ingresso del server nella rete, tutti i nodi invierebbero i pacchetti che hanno in memoria con la possibilità di congestione. A tal proposito, dopo che il server effettua il riconoscimento degli host all’interno della rete, inviando il suo messaggio di broadcast (JOIN_NETWORK), ogni nodo verifica che il messaggio provenga dal server. Se è così, ogni nodo procederà ad effettuare l’operazione di creazione del pacchetto forward e ad inviare tutti i pacchetti pendenti al server; l’invio avverrà con un certo ritardo generato casualmente da parte di ciascun nodo. Il metodo dedicato verrà chiamato solo una volta, all’ingresso del server nella rete. Inizialmente si era pensato di lasciare che ogni nodo mantenesse i pacchetti pendenti fino al momento della sua disconnessione e, solo in quel momento, li avrebbe inviati al server, considerando sempre l’ingresso successivo di questo nella rete. Per non caricare di responsabilità ogni singolo nodo, in quanto una sua eventuale caduta avrebbe causato la perdita dei pacchetti, è stata realizzata la soluzione sopra citata. Il terzo caso riguarda invece la risposta di ogni singolo host della rete alla richiesta di memoria disponibile. In maniera simile al caso precedente, si rischierebbe di congestionare il nodo che ha fatto la richiesta. Per evitare questo, le risposte dei vari host giungeranno in tempi diversi. Una gestione della qualità di servizio sarebbe stata opportuna per un’eventuale perdita di messaggi, cosa che non è stata affrontata. Altra situazione che non è stata trattata riguarda l’eventuale caduta di un nodo che comporta la perdita dei messaggi pendenti. 6. Strumenti utilizzati e test Il progetto è stato realizzato utilizzando come ambiente di sviluppo Eclipse e le librerie messe a disposizione dalla J2ME. Il progetto è stato sviluppato sfruttando anche un tool per la coordinazione del lavoro di gruppo: TortoiseSVN. Su una macchina è stato creato un server remoto usato come repository del codice prodotto. Le fasi di test sono state necessarie per capire il corretto funzionamento delle varie funzionalità del sistema sviluppato. Sono state effettuate verifiche sulle comunicazioni a scambi di messaggi in modalità sincrona ed asincrona, con e senza la presenza del server. E’ stato interessante l’utilizzo di un tool come Ethereal con il quale si è potuto notare il formato e tutte le informazioni presenti in un pacchetto che viaggia nella rete. 7. Conclusioni e sviluppi futuri Il progetto soddisfa i requisiti fondamentali del sistema come realizzazione del discovery, comunicazione sincrona, asincrona ed estensioni. Sono state considerate eventuali situazioni come l’ingresso successivo nella rete da parte del server. L’obiettivo è stato quello di realizzare un prototipo funzionante ed estendibile il più possibile. Gli eventuali sviluppi riguardano principalmente la replicazione dei messaggi da inviare ad un nodo offline. Così facendo, i messaggi non verrebbero affidati solo ad un nodo ma a diversi, potendo prevenire perdite di pacchetti con l’eventuale caduta di un nodo. Altro aspetto potrebbe essere la replicazione del server per il bilanciamento del carico qualora questo non riuscisse più a sostenere il carico computazionale dovuto ad una crescita della rete MANET. Sarebbe importante gestire il controllo sulla perdita dei pacchetti mediante ack ricevuto da parte del nodo mittente. In questo modo potremmo essere in grado di capire se un messaggio è giunto a destinazione o meno, con l’eventuale rinvio da parte del mittente. A questo punto sarebbe utile gestire anche le comunicazioni multi-hop con la necessità di studio di adeguati algoritmi di routing. 9 Altro aspetto potrebbe essere quello di introdurre dei meccanismi di sicurezza come l’identificazione di un host all’ingresso nella rete, per evitare scambi di personalità. Bibliografia I. Chlamtac, M. Conti, JJN Li, “Mobile ad hoc networking: imperatives and challenger”, Elsevier Journal of Ad Hoc Networks, vol.1, no.1, 2003. K. Topley, “J2ME in a nutshell”, O’Reilly, 2002. A. Corradi, Slide del Corso di Reti di Calcolatori L-S e L-A. TortoiseSVN: http://tortoisesvn.tigris.org/ C. Tschudin, E. Osipov “Estimating the Ad Hoc Horizon for TCP over IEEE 802.11 Networks” 10