Servizi applicativi in Internet Prof. Alfio Lombardo Problematiche inerenti al livello applicativo •Differenze sintattiche •Differenze Semantiche Affinchè due processi applicativi possano cooperare devono possedere: cioè qualcosa di cui parlare 1. Un Universo del Discorso comune cioè una descrizione comprensibile dell'universo del discorso 2. Uno schema concettuale cioè una sintassi comune con cui esprimere le interazioni da svolgere e gli eventi che devono accadere nell'universo del discorso 3. Un linguaggio comune Conversione asimmetrica CLIENTE 10=1010 0101 0101 SERVENTE 10=1010 ! Conversione Simmetrica: Sintassi di trasferimento in Internet CLIENT SERVER Sintassi Loc. A Sintassi Loc. B Sintassi Trasferimen. Sintassi Trasferimento Sintassi Trasferimen. XDR: eXternal Data Representation (rfc 1014) Lunghezza costante Tagging implicito Differenze semantiche Affinche’ due processi possano comunicare occorre definire un "universo del discorso" comune, cioè l'insieme di concetti su cui si baserà la comunicazione (semantica comune) . Universo del Discorso: esempio Oggetto: volo Attributi: n° del volo, ora partenza, ora arrivo, luogo di partenza, luogo di arrivo, n° posti in business, n° posti in economy, … Azioni: prenotazioni posti in classe x, disdetta prenotazione posti in classe x Semantica virtuale dello FTAM Affinchè due processi applicativi possano cooperare devono possedere: cioè qualcosa di cui parlare 1. Un Universo del Discorso comune cioè una descrizione comprensibile dell'universo del discorso 2. Uno schema concettuale cioè una sintassi comune con cui esprimere le interazioni da svolgere e gli eventi che devono accadere nell'universo del discorso 3. Un linguaggio comune Il progetto di un protocollo Prof. Alfio Lombardo Componenti di un’entità di protocollo Il progetto di un protocollo (1) 1.definizione delle funzioni eseguite dal protocollo ( il servizio fornito all'utente dal protocollo che si sta definendo); utente utente Service provider Es.1: scambio affidabile di dati di dimensione qualsiasi tra utenti remoti Es.2: accesso “sicuro” ai dati del proprio c/c Il progetto di un protocollo (2) 2. La definizione delle PDUs, (la loro struttura ed eventualmente la loro codifica) utente utente Entità di Entità di protocollo protocollo Il progetto di un protocollo (3) 3.gli elementi di procedura (le operazioni attraverso cui il protocollo permette lo scambio delle strutture dati per espletare le funzionalità definite nel punto 1) utente utente Entità di Entità di protocollo protocollo Il progetto di un protocollo (4) 4.il "mapping" delle suddette PDU e procedure coi servizi sottostanti (come le entità scambiano le PDUs) utente utente Entità di Entità di protocollo protocollo Servide provider Rappresentazione delle strutture dati: ASN1 Permette di rappresentare i dati in modo astratto ovvero di descrivere i dati in modo indipendente dalla rappresentazione concreta interna alla macchina (sintassi locale) dalla sintassi di trasferimento utilizzata per trasferire i dati all'esterno (sintassi di trasferimento). ASN1 e’ stata definita nell’ambito del livello di Presentazione OSI Esempio: indipendenza dalla sintassi locale On=1volt/off=2 volt On/OFF Boolean: True=On, False=Off On=255 / Off=0 On=ctrl_A_D/off=Alt_K Esempio: indipendenza dalla sintassi di trasferimento Codifica C code: alto livello Printer::=Boolean Codifica basso livello (8 bit) 11111111=true 00000000=false (16 bit) 1111111111111111=true 00000000000000=false In rete Rappresentazione delle strutture dati: ASN1 Dichiarazioni di tipo [type name] ::= [type definition]. Ad esempio Married ::= BOOLEAN Dichiarazioni di valore [value name] [type name] ::= [value definition] Ad esempio single Married ::= FALSE Descrizione delle procedure FDT:Formal Description Techniques FSM, Finite State Machine, Siniziale in un insieme di stati S; un insieme di messaggi di input I; un insieme di messaggi di output O; una funzione di transizione di stato f: Sin x I -> Sfin; una funzione di uscita g: Sin x I -> O. Transizione (atomica) di stato out Sfinale Esempio:Alternating bit protocol Entità Tx User New Message (dati) Entità Tx Pack(m,bit) Ack(bit) IDLE Esempio:Alternating bit protocol New Message Entità Tx: 1/3 (dati) m=dati Prepare pack(m,0) User New Message (dati) Pack(m,0) Entità Tx Start T1=20ms Wait for Ack 0 Pack(m,0) Wait for New Message New Message (dati) m=dati Prepare pack(m,1) Pack(m,1) Start T1=20ms Wait for Ack1 S= Idle, Wait for Ack 0, Wait for New Message Wait for Ack 1 In Messages = NewMessage (), Ack( ), Timer Out Messages: Pack ( ) Extended FSM: Esempio m=dati bit=B Y Specification Description Language (SDL) Procedure: EFSM Strutture dati: ASN1 Esempio: sistema Bancomat Block: Terminale Ch1 Processo Interfaccia Utente Ch2 Block: Gestore Servizio Processo Controllo Funzione Ch3 Ch5 Ch6 Ch4 Processo Attuatore Processo Saldo Processo Controllo Utente Esempio: Sistema di gestione di card per acquisti sistema diffuso nei grandi magazzini; consiste nel rilascio al cliente di una Card con banda magnetica con la quale: l’amministrazione ha uno strumento di controllo della clientela e dei flussi di denaro che ne provengono. la clientela ha degli sconti particolari sui loro normali acquisti quando le somme degli acquisti effettuati superano una determinata soglia. Struttura del sistema Rappresenta il terminale utilizzato dal cassiere. E’ collegato ad un lettore di schede magnetiche, ad un dispositivo di stampa nonché al blocco Amministrazione rappresenta il terminale remoto presente nella sede dell’Amministrazione che riceve e risponde alle richieste di tutte le casse Blocco Cassa · Gestisce il dispositivo necessario per leggere la Card dell’utente. Se i dati vengono letti correttamente vengono trasferiti al terminale, altrimenti viene indicato di ripetere l’operazione. Gestisce l’interazione tra il cassiere ed il terminale (verosimilmente composto da tastiera e monitor) tramite il canale Ch1, comunica le richieste del cassiere al blocco Amministrazione tramite il canale Ch5, invia dei comandi al processo Lettura Card e al processo Stampa rispettivamente attraverso Ch3 e Ch4 gestisce il dispositivo di stampa del terminale Ch5 Blocco Amministrazione Riceve le richieste dal blocco Cassa, quali l’accredito della spesa effettuata dal titolare di una card, gli estremi relativi ad un acquisto per della merce che un cliente chiede di restituire, ecc. Dialoga col Processo Gestione Archivi tramite Ch6. gestisce tutte le informazioni relative ai clienti, alla merce venduta, alle condizioni di garanzia o di restituzione della merce, alle statistiche e previsioni delle vendite, alle norme che regolano la vendita, ecc Definizione canali Canale ::= [APPLICATION 0] CHOICE {ch1 Ch1 ch2 Ch2 ch3 Ch3 ch4 Ch4 ch5 Ch5 ch6 Ch6 ch7 Ch7} Su Ch1 (interfaccia cassiere / processo_interfaccia_cassiere): funzioneCassa: usato dal cassiere per indicare al Processo Interfaccia Cassiere quale sarà la prossima operazione che vuole effettuare ( l’inizio di un nuovo conteggio di articoli, la lettura della Card del cliente, ecc…); comandoConteggio: usato dal cassiere per effettuare il conteggio degli articoli oppure per visualizzare il totale dovuto dal cliente per i suoi acquisti; datiResoMerce: usato dal cassiere per effettuare un reso merce e consegnare al cliente buono spese del corrispondente importo; Messaggio: generico messaggio visualizzato sul terminale di cassa; Ch1::=[APPLICATION 1] CHOICE{ funzioneCassa[1]IMPLICIT ENUMERATED { nuovoConteggio(1), letturaCard(2), resoMerce(3), pagamentoArticoliInContanti(4)}, comandoConteggio[2] CHOICE { DatiArticolo ::= SEQUENCE { articoloSuccessivo[1] DatiArticolo, codiceArticolo OBJECT ID, totale[2] INTEGER}, quantità INTEGER} datiResoMerce[3] IMPLICIT SEQUENCE { datiArticolo DatiArticolo, dataAcquisto Data}, messaggio[4] IMPLICIT PRINTABLE STRING} Su Ch2 (interfaccia dispositivo lettura card / processo_lettura_carta): datiLetturaCard: dati della card letti dal dispositivo e forniti al processo Lettura Carta; Ch2 [APPLICATION 2] ::= datiLetturaCard IMPLICIT SEQUENCE {letturaCorretta BOOLEAN, datiCard DatiCard OPTIONAL} } DatiCard ::= SEQUENCE {numeroCard OBJECT IDENTIFIER, titolare PRINTABLE STRING, scadenza Data} Su Ch3 (interfaccia processo_lettura_card / processo_interfaccia_cassiere): richiestaLetturaCard: richiesta di lettura della Card inviata al Processo Lettura Carta da parte del Processo Interfaccia cassiere; rispostaDispositivoLetturaCard: invio dei dati della Card al Processo Interfaccia Cassiere parte del Processo Lettura Carta; Ch3 ::= [APPLICATION 3] CHOICE {richiestaLetturaCard[1] IMPLICIT BOOLEAN, rispostaDispositivoLetturaCard [2] IMPLICIT SEQUENCE { letturaCorretta BOOLEAN, datiCard DatiCard OPTIONAL} } Su Ch4 (interfaccia processo_stampa / processo_interfaccia_cassiere): richiestaStampa: richiesta di stampa inviata al Processo Stampa da parte del Processo Interfaccia Cassiere; rispostaDispositivoStampa: informazioni sul funzionamento del dispositivo inviate al Processo Interfaccia Cassiere da parte del Processo Stampa; Ch4 ::= [APPLICATION 4] CHOICE { richestaStampa[1] IMPLICIT SEQUENCE { modelloStampa ModelloStampa, datiStampa OCTET STRING }, rispostaDispositivoStampa [2] IMPLICIT ENUMERATED { stampaCorretta(0), cartaEsaurita(1), inchiostroEsaurito(2), altriProblemi(3)} } ModelloStampa ::= ENUMERATED {normale (0), finanziamento (1), buonoSpesa (2)} Su Ch5 (interfaccia processo_Raccolta_Richieste / processo_interfaccia_cassiere): richiestaAccredito: richiesta di accredito della somma spesa del cliente, inviata al Processo Raccolta Richieste dal Processo Interfaccia cassiere; richiestaReso: richiesta di effettuare un reso merce; rispostaAccredito: indicazione dello sconto di cui attualmente può usufruire il cliente e del totale delle spese che ha effettuato finora, inviata al Processo Interfaccia Cassiere dal Processo Raccolta Richieste; rispostaReso: indicazione della possibilità di effettuare il reso merce richiesto dal cliente, inviata al Processo Interfaccia Cassiere dal Processo Raccolta Richieste; Ch5::= [APPLICATION 5] CHOICE { richestaAccredito[1] IMPLICIT SEQUENCE { importo INTEGER, datiCard DatiCard}, richestaReso[2] IMPLICIT SEQUENCE { datiArticolo DatiArticolo, dataAcquisto Data}, rispostaAccredito[3] IMPLICIT SEQUENCE { scontoAttuale INTEGER, speseTotali INTEGER}, Data ::= GENERALIZED TIME rispostaReso[4] IMPLICIT BOOLEAN} Su Ch6 (interfaccia processo_Raccolta_Richieste / processo_getione_archivi): aggiornaCreditoCliente: comando inviato al Processo Gestione Archivi dal Processo Raccolta Richieste per aggiornare il credito del cliente i cui dati si trovano nel database contenente le informazioni di tutti i clienti titolari della Card; aggiornamentoEseguito: messaggio di conferma dell'avvenuto aggiornamento inviato al Processo Raccolta Richieste dal Processo Gestione Archivi; Ch6::= [APPLICATION 6] CHOICE { aggiornaCreditoCliente[1] IMPLICIT SEQUENCE { spesaAttualeCliente INTEGER, datiCard DatiCard}, aggiornamentoEseguito[2]IMPLICIT SEQUENCE { scontoAttuale INTEGER, speseTotali INTEGER} } Su Ch7: (interfaccia dispositivo di stampa / processo_stampa): avvioStampa: comando inviato al dispositivo di stampa dal Processo Stampa per effettuare la stampa di uno dei tre modelli possibili; Ch7::= [APPLICATION 7] avvioStampa BOOLEAN Macrolezione 3: Progetto di un protocollo di comunicazione I Approfondimento Macrolezione 3: Sintassi di trasferimento Macrolezione 4: Progetto di un protocollo di comunicazione II Esempio: la programmazione On=1volt/off=2 volt On=255 / Off=0 Codifica Programma Applicativo (C code): alto livello Printer::=Boolean printer Boolean:= true Codifica basso livello (8 bit) true=11111111 Interprete del Protocollo: True=1 volt (ON) In rete (8 bit) 11111111=true