PERMESSO PERsistent MESSaging in ad hOc networks Presentazione di Valentina Bonsi Corso di Reti di Calcolatori L-S AA 2005-2006 Progetto di Giuseppe Vitalone, Melli Michele, Roberto Gamboni e Valentina Bonsi Prof. Antonio Corradi Tutor Eugenio Magistretti Agenda Introduzione Scenario applicativo Scelte progettuali Struttura complessiva Servizio di chat sincrona Struttura e Comportamento Interazione Reliability dei messaggi Considerazioni generali Implementazione Scenario applicativo: MANET Mancanza di infrastruttura predefinita e di nodi coordinatori Scarsa affidabilità del mezzo di comunicazione Dispositivi eterogenei anche con ridotte capacità (smart-phone, PDA, laptop) D X A C B Scelte progettuali Realizzazione dei servizi in modo distribuito e dinamico Realizzazione di servizi affidabili su mezzo inaffidabile (Datagram UDP) Utilizzo di J2ME, macchina virtuale Java ridotta e realizzazione delle funzionalità mancanti Struttura complessiva Instant messaging fra utenti presenti nella MANET con scambio reliable di messaggi Messaggistica persistente per utenti non presenti contemporaneamente nella MANET Chat Sincrona Chat Asincrona Discovery & Presence Awareness Gestione dell’entrata, dell’uscita e della caduta dei nodi nella rete organizzata in modo distribuito, con il ruolo del coordinatore che ruota fra i presenti. Chat Sincrona: Struttura e Comportamento creaForm(4) ChatMidlet ChatFormFactory • Giuseppe • Michele • Roberto • Valentina ChatForm 4 ? ChatForm 1 ChatForm 2 ChatForm 4 chatFormList Chat Sincrona: Struttura e Comportamento ChatForm 4 crea CheckSlidingWindowThread SINC_MESS SINC_MESS crea ReliabilityThread MESS_ACK stop SINC_CLOSE stop Chat Sincrona: Interazione Fase di Open: protocollo di hand-shake ChatMidlet 1 ChatMidlet 2 Port A Port A SINC_START (Port B) creaForm SINC_ACK (Port C, Port B) creaForm Terminato l’hand-shake, la comunicazione fra i due utenti prosegue sulle porte concordate C e B, gestita dai rispettivi thread dedicati. Chat Sincrona: Interazione Fase di Close ChatForm 1 ChatForm 2 SINC_CLOSE Connection.close() freePort (B) Connection.close() freePort (C) send (message) Hand-shake SINC_MESS (message) Se uno dei due partecipanti, dopo la chiusura della chat, invia un nuovo messaggio e l’altro utente è ancora online, la comunicazione riprende dopo una nuova fase di hand-shake. Reliability: Considerazioni generali Implementato ma comporta troppo overhead se la comunicazione è “densa” Alternative considerate: Single ack: conferma inviata ad ogni messaggio ordinato ricevuto Implementato Cumulative ack: conferma inviata dopo la e considerato la scelta corretta ricezione di N ottimale messaggi ordinati Negative ack: richiesta di rinvio di un Scartato perché la messaggio perso da parte del ricevente perdita del primo o dell’ultimo messaggio non viene rilevata Reliability: Considerazioni sull’ordinamento dei messaggi Sender Receiver Message Per ristabilire un ordine totale dei messaggi: Non realizzabili per applicazione interattiva •Timestamp fisici •Timestamp logici Message Type ID L’identificativo è creato indipendentemente da ogni nodo e permette dunque di stabilire un ordinamento FIFO dei messaggi Reliability: single ack Invio SINC_MESS Ricezione send SINC_MESS store MESS_ACK send MESS_ACK delete WaitingMessages check ReliabilityThread resend SINC_MESS Reliability: cumulative ack Invio ReliabilityThread CheckSlidingWindowThread Avviato ad ogni invio in cui la finestra risulta piena Avviato all’avvio della ChatForm WaitingMessages Reliability: cumulative ack Ricezione Controllo dei messaggi in arrivo ed eventuale invio dell’ack effettuato direttamente nella ChatForm Unconfirmed Messages Sviluppi futuri Conferenze: chat sincrone fra più utenti contemporaneamente Invio di file in aggiunta allo scambio di messaggi Sviluppo all’interno di una MANET multihop e conseguente protocollo di routing per la consegna ad utenti non connessi direttamente