Sei sulla pagina 1di 124

Telematica II Lezione 1

1 Telematica II Lezione 1 16/05/07

Riferimenti storici Java un linguaggio di programmazione sviluppato allinizio degli anni 90. Java inizialmente doveva servire per lelettronica di consumo (elettrodomestici, palmaridoveva essere un software per i dispositivi con microprocessore), ma i tempi erano prematuri per questo tipo di cose. Il nome dato a questo progetto era inizialmente Och, ma per motivi di copyright stato rinominato in Java (era il nome dellisola indonesiana dalla quale proveniva un particolare tipo di caff). Data limmaturit del mercato, il linguaggio Java venne indirizzato alla creazione di pagine web dinamiche. Nel 1995 viene lanciato sul mercato, e viene integrato realmente per la prima volta in Natscape (un particolare browser). Attualmente esistono implementazioni di java per palmari, implementazioni di tipo server, e implementazioni di tipo enterprise. Perch questo linguaggio di programmazione molto diffuso? Perch ha una serie di caratteristiche che lo rendono particolarmente efficace da un punto di vista operativo. Le caratteristiche del linguaggio java sono: General purplesil linguaggio nasceva con uno scopo, poi man mano che il progetto andato avanti, attraverso le sue numerose varianti, possibile usarlo per scopi diversi. Orientato agli oggetti rispetta il paradigma della programmazione orientata agli oggetti e si inserisce nel filone dei software object oriented E tipizzato esistono grandi variet di tipi dello stesso linguaggio e questo consente buone capacit di bebuging, e consense di lasciare molto poco al caso in fase di programmazione E indipendente dalla piattaforma cio indipendente dallhardware e dal sistema operativo di riferimento. Questo cosa significa? Significa che la struttura del linguaggio tale da essere totalmente portabile (portabilitcaratteristica fondamentale di ogni codice di programmazione).

Come faccio ad assicurarmi la portabilit? Devo incrementare la complessit del ciclo di vita di un programma java. Lidea quella di avere a partire da un certo codice, che racchiuso il un file .java (codice sorgente), uno stack intermedio, il quale deriva dalla compilazione operata dal java compiler. Esso un pre processing, il quale, dandogli in input un codice sorgente .java, produce come output il cosiddetto bancore?????, in un file .class In poche parole bancore???? molto vicino al linguaggio macchina. In seguito vi un post processing che a cura della cosiddetta virtual machine. La virtual machine poi produrr un risultato che sar indipendente dalla piattaforma. Qual lo svantaggio? E proprio la virtual machine, la quale non univoca ma dipende dalla piattaforma su cui gira. Quindi il problema si spostato dal codice sorgente alla virtual machine. Limplementazione di una virtual machine su una data macchina, richiede un certo debug. Per nel complesso ragionevole pensare di avere n virtual machine, quante sono le piattaforme su cui il codice deve girare, poich questa maggiore complessit ripagata completamente dalla portabilit totale del software.

Telematica II Lezione 1

Struttura protocollare Nella parte pi bassa della pila, abbiamo la piattaforma di riferimento. Lo strato di interfaccia tra il sistema operativo e la parte inferiore della pila la virtual machine, ecco perch la virtual machine ha una dipendenza stretta dalla piattaforma. Sopra la virtual machine troviamo le librerie (utility e language) di base di un linguaggio. Sugli strati superiori troviamo le altre librerie (queste sono sempre di base ma non sono quelle di utility e language). A salire troviamo il primo strato di integrazione; esso serve a garantire linterazione tra la parte processante (inferiore) e la parte applicativa che si trova pi in alto. Ad esempio lo strato di integrazione JDBS consente linterfacciamento da e verso i database (gestione delle query). Questo strato strettamente dipendente dalla tipologia di applicazione che consideriamo. Salendo ancora nella pila troviamo linterfaccia grafica. Con questo strato si chiude la parte di pila che fa meno riferimento allutente. Salendo troviamo dei piani di sviluppo??? e poi il linguaggio. Perch possibile scegliere una versione java di riferimento senza dover buttare via la parte inferiore della pila? Perch in realt dovr cambiare solo lo strato pi esterno (quello del linguaggio). La parte sottostante talmente completa, che posso a seconda dei casi, invocare parti diverse della pila protocollare a seconda di quello che mi occorre. Lunica cosa che cambia la virtual machine, che devo sceglierla in base alla piattaforma di riferimento. Come questo linguaggio si inserisce nel paradigma OOPobject oriented programming? Che vuol dire che java orientato agli oggetti? Gli oggetti nel mondo reale sono unautomobile, un computer,Ogni oggetto del mondo reale ha 2 caratteristiche fondamentali: Attributi o propriet Sviluppa dei comportamenti o metodi

Quindi ogni oggetto si pu classificare in base ai suoi metodi e attributi. Nel mondo del software ritroviamo unanalogia con il mondo reale. Per ogni oggetto avr unidentit, uno stato e dei comportamenti. Esempio classico quello di voler modellare il dominio delle automobili. Ongi macchina avr: Un nome ferrari F340identit Una serie di caratteristiche,cilindrata e potenzaattributi Una serie di comportamenti, frena, accelerametodi Uno stato, acceso o spento

Generalizzando il concetto di oggetto, si arriva al concetto di classe. Raggruppando una serie di oggetti che hanno caratteristiche affini, stesso comportamento, si ottiene una classe di oggetti. Ogni oggetto di una classe si differenzier da un altro semplicemente per lo stato, che non possiamo in alcun modo generalizzare. Ogni oggetto di una classe un istanza. Per esempio una moto vespa, unistanza della classe automobile? In questo caso si! Perch in base alle conoscenze a nostra disposizione, abbiamo delle caratteristiche affini, in quanto anche la vespa ha una cilindrata e una potenza; e poi abbiamo metodi uguali, poich anche la vespa accelera, frena,Se magari allargassimo il numero di attributi, dando una definizione pi dettagliata della

Telematica II Lezione 1

classe dominio, inserendo pi attributi come il numero di ruote, allora la moto non sarebbe pi unistanza della classe automobile. Se penso alloggetto come a un fornitore di servizi, posso suddividere loggeto stesso in 2 parti: Linterfacciacomponente esterna, che permette lutilizzo allutente lutilizzo delloggetto stesso Limplementazionecore delloggetto, non visibile dallesterno

Questa suddivisione necessaria affinch il core delloggetto possa essere ben nascosto, per non essere modificato e quindi danneggiato. Questa suddivisione nasce anche perch ci sono 2 tipi di programmatori: Creatori di nuove classi Gestori/utilizzatori di classi ai quali viene completamente nascosto il core del software e gestir classi gi create attraverso i metodi Questa suddivisione fondamentale ai fini di garantire il cosiddetto riuso del software (requisito fondamentale del paradigma OOP). Un codice che pu essere riutilizzato, significa codice risparmiato; cio lidea di creare un oggetto con certe caratteristiche, al quale si pu accedere attraverso determinati metodi, lidea base del paradigma OOP, perch ci garantisce che non dovendo riprogrammare le caratteristiche delloggetto (so che esiste, che pu essere acceduto da determinati metodi), devo solo utilizzarlo e impegnarmi a implementare un qualcosa che non esiste. Una conseguenza diretta di questo paradigma la cosiddetta ereditariet. Quando data una classe con un set di metodi, ho la necessit di specializzare un comportamento di questa classe, provvedo, a partire dalla classe stessa, ad aggiungere ulteriori funzionalit/attributi creando una classe figlio. Una classe figlia, eredita dalla classe padre, tutte le sue caratteristiche e comportamenti, e in pi ha dei comportamenti specifici che il padre non ha. In java lunit di programmazione non la procedura ma bens la classe. Parleremo di java class. Una volta creata la classe, essa viene istanziata in una serie di oggetti. Cominciamo ad analizzare java. Per prima cosa analizziamo la parte meno significativa di un codice java: i commenti. Il commento grazie a opportuni marcatori (//commento su line asingola; /*commento multiriga) viene ignorata in fase di compilazione. A cosa servono i commenti? Serve al programmatore che magari rivede il codice a distanza di tempo, o magari vede un codice programmato da altri, e tramite i commenti pu capirne di pi. In java poi i commenti hanno anche unaltra funzione, quella di generare la documentazione. Se metto /**, sto creando un commento che servir per la documentazione. Che vuol dire? Java uno dei primi linguaggi ad essersi dotati di un tooljavadoc (programmino), che serve a generare in maniera automatica la documentazione del codice. I commenti allinterno di java doc si fanno precedere da @. Questa documentazione serve ai programmatori, per recuperare velocemente informazioni relative alle classi e alle librerie che essi stanno creando. Inoltre molto utile per: (riferimento a tabella slide) 1. inserire riferimenti sugli autori del codice : 2. deprecated si utilizza in corrispondenza di classi e/o metodi il cui utilizzo sconsigliato 3. eccezioni mostra la documentazione relativa alle eccezioni generate da un certo metodo

Telematica II Lezione 1

4. link produce un collegamento ipertestuale diretto o a unaltra parte della documentazione 5. parametriindica i parametri da utilizzare per uno specifico metodo 6. la tabella continua e lui la legge velocemente, non appena avete le dispense integrate.

Una volta creata la parte di codice javadoc, essa sar processata dal tool (javadoc) stesso. Esso agir in maniera distinta dal processing del codice vero e proprio.

Regole fondamentali per la programmazione in java: Le classi iniziano con la lettera maiuscola: Automobile. Metodi e variabili e attributi, iniziano con la lettera minuscola. Per anche se iniziano con la lettera minuscola, si usa la convenzione CamelCasecarattere a cammello. Quando abbiamo un nome composto, (fermo restando che le classi iniziano con la maiuscola e metodi, attributi e variabili con la minuscola), lassociazione delle 2 parole venga fatta tagliando gli spazi, e utilizzando la lettera maiuscola per la componente pi interna, esempi: classe NomeClasse attributo/metodo attributounoAttributodue/metodounoMetododue

Come si struttura un programma in java? Un programma java deva contenere minimo una classe. Per definire una nuova classe si usa la parola chiave (adeguatamente interpretata dal compilatore) class. La classe principale del programma deve essere fatta precedere da unaltra parola chiave: public, che uno specificatore. Esempio : public class Hello { Codice relativo alla classe; } Public significa che la class pubblica, cio visibile dallesterno. Non appena abbiamo finito di scrivere il codice della classe, dobbiamo salvare il tutto in un file .java con il nome della classe. Nel nostro esempio il file sar Hello.java. Ogni classe generica di un programma comincia sempre da un metodo che si chiama main. Esso il metodo principale della classe. Questo metodo si definisce come void, quindi scriveremo: public static void main, { (nome parametri) variabili; } Questo significa che main un metodo pubblico, che possiamo invocare dallesterno;voi significa che il metodo si comporta come una procedura; cio non restituisce alcun valore in output (cio manipola solo i dati senza restituire un risultato). Su quali dati lavora il main? Possono essere variabili definite allinterno del metodo, oppure parametri. I parametri da passare al metodo vengono specificati da parentesi tonde immediatamente in coda al nome del metodo. Nel nostro esempio stiamo passando al main un array di stringhe. A cosa serve static? Nel momento in cui voglio realizzare una classe, io ho bisogno di istanziarla, poich una classe unentit generica. Poich voglio adoperare completamente le caratteristiche della classe, ho bisogno di creare delle istanze. Istanziare una classe, significa che tutti i metodi che la classe possiede, vengono messi a

Telematica II Lezione 1

disposizione, per cui io posso utilizzarli. Questo scomodo poich dovrei creare delle istanze di classi semplicemente per utilizzare un metodo. Allora consentito utilizzando static, evitare di istanziare la classe ma al tempo stesso di poter utilizzare il metodo. Come si invoca un metodo? Si utilizza la cosiddetta notazione puntata. Ad esempio: NomeClasse.metodo. Quindi se ho il metodo stampa allinterno della classe Hello, per invocare quel metodo far: Hello.stampa

Telematica 2 - Lezione 2 Telematica II 18/05/2007

Riepilogo
(Pag27)Abbiamo visto che secondo il paradigma della programmazione orientata agli oggetti, abbiamo una certa modellazione di un dato contesto; questa modellazione basata sul concetto di oggetto e su quello di classe.Abbiamo detto che ogni oggetto ha determinate propriet e determinati comportamenti o metodi. Abbiamo definito il metodo principale allinterno di un programma , cio il main, e che il metodo dal quale inizia lesecuzione del programma. Abbiamo detto che il metodo main viene definito come public e static; dichiarare un metodo public significa che un metodo visibile dallesterno, mentre un metodo static (per poter adoperare un metodo di una certa classe necessario dover istanziare la classe, questo piuttosto scomodo quando ho una classe banale che prenda semplicemente un input, lo manipoli e produca un output; se il metodo una funzione scomodo avere istanziato una classe per fare questo) un metodo che non richiede listanziazzione di nessuna classe per poter operare. Quando si specifica un metodo possibile anche dare un set di parametri che possono essere passati per valore o per riferimento. Quindi la dichiarazione di un metodo prevede una parte fatta da Keyword(servono per dichiarare determinate caratteristiche di base del metodo) e nome del metodo, pi i parametri. Il primo esempio di metodo il Metodo di stampa a video. un metodo che serve per mandare sullo standard output una certa stringa(a farla vedere sullo schermo) e si chiama System.out(); questo metodo rispetta la dot notation(notazione puntata) che prevede lutilizzo della notazione secondo cui c nome_oggetto.nome_metodo(riferito a quelloggetto). Nel nostro caso per stampare a video una certa stringa la scrittura System.out.println(hello world) (println serve per stampare una linea che quella che segue come parametro e poi va a capo). Abbiamo detto tutto del programma iniziale a pag21. Quindi c una parte di documentazione, la quale pu essere variamente interpretata, in quanto un conto quella che serve al programmatore (//), se si estende su pi righe ne avremo unaltra(/* */) se invece ho un commento che serve a creare una documentazione dovremo utilizzare /** e per chiudere */. (vedi pag21) public class Hello {

Telematica 2 - Lezione 2 public static void main(String[] args) { System.out.println(hello world); } } Abbiamo la definizione della classe Hello allinterno della quale abbiamo il metodo main dichiarato come pubblico e statico. Allinterno del metodo main abbiamo la stampa a video della stringa Hello world ; da notare che il metodo prende come parametro in questo caso String[] args, in cui args il nome del parametro invece string[] un vettore di stringhe. Questo programma deve chiamarsi con il nome_della_classe.java e dopo viene dato in pasto al compilatore (javac), quindi scriveremo la riga di comando javac Hello.java, viene generato il bytecode(se non ci sono errori) e successivamente viene generato il file .class( il nostro programma compilato, privo di errori). Infine per poterlo lanciare(per vederne loutput) scriveremo java Hello(pag29). Che differenza c tra javac e java? Il primo il compilatore, il secondo la virtual machine(quindi necessario costruire una VM sulla nostra macchina).

TIPI DI DATO (pag30)


Esistono tipi di dato PRIMITIVI e DERIVATO. I tipi di dato primitivi si dividono in : Interi(byte, short, int, long a seconda del numero di bit che utilizziamo per la rappresentazione) Reali(float, double vale lo stesso di sopra) Caratteri Booleani

(Pag31) Questa tabella che esprime il tipo di dato, la dimensione in bit, il valore minimo e il valore massimo da conoscere a memoria. (Pag32) Vediamo ora quali sono le operazioni elementari che possibile fare in java : +, -, /, *, modulo, auto-incremento, auto-decremento. Fare loperazione di modulo significa considerare il resto della divisione intera quindi r/s(produce un quoziente non intero) diverso di r modulo s(restituisce un numero intero). (Pag33) Operatori relazionali (>, >=, <, <=, ==(uguaglianza),!=(diverso)). (Pag34) Operatori logici : && AND Logico (x<a) && (x>b)

Telematica 2 - Lezione 2 || ! OR Logico NOT Logico (x<a) || (x>b)

(Pag35) Oltre a questi operatori logici e relazionali esistono altri operatori di tipo binario, cio operatori che agiscono sui bit, che consentono di lavorare con i bit.

Gli operatori che agiscono sui bit sono : & | ^ << >> AND bit a bit OR bit a bit NOT(compl. a 1) XOR bit a bit SHIFT a sinistra SHIFT a destra a&0x01 a|0x01 x a^0x01 x<<8 x>>8

Quale differenza c tra lAND in condizione logica(visto prima) e lAND singolo(bit a bit)? Il primo un operatore che agisce su un valore generico creando una condizione, cio io ho x<a && x>b le due condizioni messe in and devono essere contemporaneamente verificate per essere vere, quindi un operatore di concatenamento per avere una condizione finale. La risposta a questa condizione deve essere VERO o FALSO a seconda che si rispetti o no la condizione. Land bit a bit lavora direttamente su un valore numerico in termini di bit che viene confrontato con una cosiddetta maschera, cio rispetto alla quale viene eseguito land logico. In questo caso la maschera di riferimento 0x01(1 in esadecimale). Questi ultimi operatori servono per fare controlli, cio per stabilire cosa contiene una certa sequenza di bit oppure possiamo modificarla a seconda delle nostre necessit scegliendo una maschera opportuna. Esiste anche loperatore di XOR o OR esclusivo e gli operatori di shift di un certo numero di bit a sinistra o a destra. (Pag36)

Telematica 2 - Lezione 2

Questa struttura rappresenta linsieme di istruzioni che questo linguaggio ha. Le istruzioni si dividono in 2 grandi categorie : Dichiarative e Imperative. Le istruzioni dichiarative servono a riportare la parte dichiarativa di un programma, quindi a stabilire quelle che sono le grandezze di riferimento; la seconda parte serve invece ad impartire dei comandi al programma stesso. Le istruzioni imperative si dividono a loro volta in : Semplici e Strutturate. Quelle semplici sono le solite, mentre per quanto riguarda quelle strutturate comprendono iterazioni, condizioni e blocco. (Pag37) Dichiarazione di variabile La dichiarazione di una variabile va fatta facendo precedere alla dichiarazione stessa il nome del tipo, che pu essere un tipo semplice/predefinito o un tipo strutturato cio: tipo nomeVar[=val] (nella quadra ci pu essere il valore specifico della variabile) (Pag39) Per quanto riguarda le costanti, abbiamo la stessa situazione con lunica differenza che si fa precedere dalla keyword final, cio quel valore assegnato in maniera definitiva. Possiamo dichiarare variabili a nostro piacimento scrivendo nome_tipo nomeVar[=val](nella quadra ci pu essere il valore iniziale della variabile, cio sono gi settate in fase di dichiarazione). Le condizioni booleane si tratta del risultato di espressioni pi o meno complesse e il risultato di queste espressioni pu essere di tipo binario(o V o F). Le espressioni booleane possono racchiudere tutti gli operatori visti prima(es. x>=10 && x<=100 oppure x==7 || x==8). Perch si dice condizione booleana?

Telematica 2 - Lezione 2 tale perch x assumer un valore e a seconda di questo valore la condizione risulter vera o falsa . (Pag40) Utilizzando le condizioni posso usare un if che pu avere 3 strutture : 1. if (condizione) istruzione; 2. if(condizione) istruzione1; else istruzione2; 3. if(condizione1) istruzione1; else if(condizione2) istruzione2; else if(condizione3) istruzione3; else istruzione4; La condizione che specifichiamo va racchiusa tra parentesi; in java si usa il blocco if else, se invece che una istruzione avessimo avuto una sequenza di istruzioni dovevamo racchiuderle tra {}(sia dopo lif che dopo lelse). Esiste anche unaltra possibilit che lelse if che propone al programma pi condizioni. (Pag41) anche possibile costruire una struttura pi complessa cio lo switch : switch (espressione) { case val_1 : istruz_1_a; istruz_N_a; break; case val_N : istruz_1_b; istruz_N_b; break; default :

Telematica 2 - Lezione 2 istruz_1_d; istruz_N_d; break; } Anche in questo caso si va ad indicare una espressione, la quale costituisce a tutti gli effetti una condizione; in questo caso si tratta di una espressione che crea una condizione implicita . Vado quindi a specificare una determinata espressione che potr assumere un numero finito di valori, a seconda del valore che questa espressione assume eseguir uno tra N blocchi di istruzioni che vado a specificare(ogni blocco specificato da un case). Per uscire da un case si usa lespressione break che fa saltare fuori dallo switch e quindi fa continuare lesecuzione sequenziale del programma. Lultimo case default, cio dice al compilatore che se c qualche condizione che non compresa nei case precedenti vai ad eseguire questo blocco. Attenzione, quando utilizziamo una espressione, essa deve produrre necessariamente uno tra questi tipi long, int, byte,short o char. (Pag42) Istruzioni iterative Le istruzioni iterative si dividono in 2 categorie : Cicli condizionali/condizionati e Cicli enumerativi . I cicli condizionali si dividono in : Cicli a condizione iniziale e Cicli a condizione finale. I primi sono quelli in cui la condizione viene verificata prima dellinizio del ciclo di istruzioni, e quindi se la condizione risulta falsa il ciclo non viene eseguito(literazione avviene per vero in tutti i cicli): while(espressione booleana) istruzioni; Nei cicli a condizione finale del tipo : do istruzione while(espressione booleana); il ciclo viene eseguito almeno una volta perch listruzione si trova in coda al ciclo stesso. (Pag43) Cicli enumerativi sono cicli che hanno un numero specificato di iterazioni che rimane indipendente e costante (sono comunque cicli condizionale perch si verifica una condizione che noi sappiamo quando risulter falsa). La struttura dei cicli enumerativi :

Telematica 2 - Lezione 2 for( init ; boolean_expr ; step) istruzioni init un valore di inizializzazione della variabile che costituisce il contatore del ciclo enumerativo, segue la condizione di stop del ciclo e lo step(incremento/decremento del contatore). Es. for( int i=0; i<100; i++) System.out.println(n=+i); Questo ciclo verr ripetuto 100 volte da 0 a 99 ed ad ogni incremento viene incrementata i. La variabile i pu anche essere dichiarata esternamente(nel main) e allora non serve mettere int nel for, in questo caso i non ha validit allesterno della procedura. (Pag45) Dichiarazione di un metodo Per poter utilizzare un metodo, la struttura dichiarativa che dobbiamo avere nel momento in cui creiamo un metodo di questo genere : output Type nome(type1 param1, type2 param2,.typeN parami) { istruz1: istruzN; returnN outputVal; } La prima cosa che va specificata il tipo di dato che il metodo restituisce in output; se non restituisce niente, cio una procedura, ci scriveremo void. Subito dopo segue il nome che vogliamo assegnare al metodo e poi avremo tra parentesi tonda il set di parametri che vengono passati al metodo, per ciascun parametro dobbiamo descrivere di che tipo di dato si tratta(int, array..)(i parametri visti prima sono formali). Quando andremo a descrivere il corpo del metodo avremo una serie di istruzioni comprese tra {} e prima di chiudere il corpo del metodo non dobbiamo scordare il return outputVal(se il metodo restituisce qualcosa)(outputVal deve essere di tipo output Type). (Pag46) Una volta definito un metodo con le caratteristiche da noi attribuite poi noi lo possiamo richiamare in dipendenza di un oggetto, che loggetto a cui il metodo fa riferimento, avremo: nomeOggetto.nomeMetodo(arg1, arg2, argN) int x = a.f(); I parametri che noi andiamo a definire in fase di creazione del metodo sono parametri formali, mentre quelli che utilizziamo quando richiamiamo il metodo sono detti parametri attuali. I parametri possono essere passati al metodo per valore o per indirizzo/riferimento.

Telematica 2 - Lezione 2 La differenza sostanziale tra i 2 tipi di parametri che nel passaggio dei parametri per valore non facciamo altro che copiare il valore specifico del parametro attuale allinterno del parametro formale; quindi non ci sono possibilit di alterazione di questo valore. Vediamo il seguente caso: public void 1(){ int a=5 ; m2(a) ; System.out.println(a); } public void m2(int i) { i=10; } C un metodo(ml) che void(non restituisce niente) e public; il metodo m2 void e pubblico e non fa niente(qualsiasi valore gli do i sempre 10), mentre il metodo m1 prende il valore di a e lo stampa; in questo caso il passaggio dei parametri per valore. Per default tutte le variabili dei tipi primitivi (int, float, ecc) vengono passate per valore. Quando passo un parametro per indirizzo in realt passo il suo indirizzo, quindi questo valore pu essere modificato dal momento che passo lindirizzo di una locazione di memoria. (Pag49) Quando vogliamo passare un vettore o un oggetto in java dobbiamo necessariamente utilizzare la modalit di passaggio dei parametri by reference. Vediamo come si dichiara un vettore in java : tipo[] nome = new tipo[dim]; int[] vett = new int[10]; (stiamo allocando un vettore di 10 interi) Quando il compilatore vedr parentesi [] capir che quello che segue un vettore del tipo indicato precedentemente. Un array una struttura dati che contiene elementi di tipo omogeneo; mentre una struttura pu contenere elementi eterogenei tra loro. Loperatore che viene usato per allocare la memoria per larray si chiama new. (Pag50)In java esistono, come in altri linguaggi di programmazione di alto livello, dei meccanismi per ottimizzare lutilizzo della memoria qualora ci dovesse essere una penuria di risorse. Uno di questi meccanismi il Garbage Collection : dato un valore di soglia nelloccupazione di memoria provvede a deallocare tutte quelle variabili che non risultano pi lungamente utilizzate(la tecnica utilizzata lLRU).

Telematica 2 - Lezione 2 Lo svantaggio che la gestione della Garbage Collection comporta lassorbimento di risorse computazionali, poich dobbiamo avere una eliminazione delle variabili in maniera intelligente per liberare intelligentemente spazio in memoria. (Pag52) Inizializzazione di un array int n[]={1,2,3,4,5} Se non inizializzo per default il sistema assegner a 0 i valori di un array(per dati primitivi) oppure a false se sono valori boolean. La lunghezza dellarray va a finire in un attributo, il quale pu essere esplorato in fase successiva chiamato lenght (conserva il dato relativo alla lunghezza dellarray). Se larray si chiamava n (errore non lentgh ma lenght) e volessi recuperare la sua lunghezza scriver dim = n.lenght utilizzando la dot notation(in questo caso vale 5).

Telematica 2 - Lezione 3 Telematica II 23/05/2007 Le stringhe in Java vengono gestite dalla classe String. Questa classe ha ben 9 tipi di costruttori; qui vengono mostrati pi comuni: String s = newString(); String s = newString(hello); String s1 = newString(s); String s2 = Ciao; La stringa viene trattata sostanzialmente come un array di caratteri. Troviamo il tipo String, una stringa( che in questo caso ci chiamo s,s1,s2) e poi possiamo allocare spazio utilizzando la parola chiave new. I costruttori sono metodi speciali chiamati quando viene creata una nuova istanza di classe e servono ad inizializzare lo stato delloggetto. Questi metodi hanno lo stesso nome della classe di cui sono membro, devono esserci per forza e non restituiscono nessun tipo. Se una classe non provvista di costruttore, Java ne utilizza uno speciale di default senza caratteristiche specifiche. Dal momento che il linguaggio garantisce la chiamata al costruttore ad ogni istanziazione di un oggetto, un costruttore scritto correttamente garantisce che tutti i dati membro vengano inizializzati. Le caratteristiche di base da sapere per manipolare una stringa, sono qui elencate: - int length() restituisce il numero di caratteri componenti; - boolean equals(String s2)confronta due stringhe; - int indexOf(String s2)ricerca la sottostringa s2, restituendone lindice oppure -1 se questa non presente; - String substring(int beginIndex,int endIndex)estrae una sottostringa di indici iniziali e finali beginIndex, endIndex. Non ci interessa sapere molto altro delle stringhe. Vediamo ora cosa si intende per tipo di dato astratto( ADT). Il suddetto serve a completare la definizione di alcuni tipi di dati normalmente presenti tra quelli standard. Cio si pu, attraverso lADT, aggiungere un set di definizioni di tipo, in maniera tale da poter assegnare una categoria di dati comunque definita. Si pu notare con lesempio qui di seguito esposto, come si costruisce un ADT:

Telematica 2 - Lezione 3

Per poterlo definire abbiamo bisogno di quattro specifiche: nome dellADT, serie di costruttori che devono specificare in maniera definitiva come possibile creare e usare i valori dellADT, funzioni da assegnare allADT e infine gli assiomi,ovvero regole la cui funzione quella di definire la semantica( significato) delle funzioni precedentemente definite. Nellesempio lobiettivo quello di costruire un tipo di dato astratto del tipo ore:minuti:secondi e di convertire qualsiasi formato orario, in quello appena esplicitato. In questo caso facciamo unimportazione di una classe nativa che la classe DecimalFormat( limportanza di questa classe quella di rappresentare il formato decimale). Viene definita allora la classe che chiamata Time1 e inoltre tre tipi di dati interi che sono hour, minute e second. Operata questa definizione, si ha il costruttore che ha lo stesso nome della classe( Time1) e il cui scopo quello di, come detto precedentemente, di inizializzare i valori. Si pu notare che si trova a valle rispetto alla definizione degli attributi principali. Sempre con il costruttore definiamo un metodo( setTime) che prende come input hour, minute, second. Il suddetto metodo serve ad assegnare un valore alle tre variabili temporali, facendo un controllo di congruenza sullinput che riceve tramite i parametri. Listruzione di controllo che si trova allinterno del metodo setTime, sta a significare che sulla variabile hour, faccio un controllo di congruenza andando a verificare che sia rispettata la condizione booleana che hour sia compreso tra zero( zero compreso) e 24. Con lutilizzo poi del ?, chiedo al compilatore di assegnare, nel caso true, il valore h e in caso false, il valore zero( il valore alternativo, ovvero quello da assegnare alla variabile in caso false, quello che si trova dopo i :). Conseguentemente la variabile pu valere h o zero a seconda che la condizione esplicitata in parentesi sia rispettivamente true o false. La stessa cosa viene fatta( cambia naturalmente la condizione in parentesi) per minute e second. Per quanto abbiamo

Telematica 2 - Lezione 3 detto fino a questo punto, abbiamo dato il nome allADT e impostato il costruttore. Per quanto riguarda il discorso delle funzioni e degli assiomi, devo avere una logica( ultima parte del codice) dove ho un ulteriore metodo pubblico che si chiama toSting che restituisce una stringa; viene utilizzata la variabile twoDigits, di tipo DecimalFormat( un tipo utilizzabile in quanto abbiamo importato la classe DecimalFormat), e che pu essere considerata in fin dei conti una stringa di solo testo, ma interpretata in formato decimale. Questa funzione poi , usando uno dei metodi della classe DecimalFormat, che nel nostro caso format, prende hour, minute, second, trasforma il formato orario in quello da noi preferito e poi fa un banalissimo controllo finale( se il campo dellhour minore di 12 mettiamo la stinga AM altrimenti il valore PM). In fin dei conti componiamo una stinga fatta come ore:minuti:secondi andando a utilizzare un metodo chiamato format della classe DecimalFormat, classe istanziata attraverso twoDigits. Abbiamo cos creato un tipo di dato astratto. Bisogna dire che questo tipo di dato si usa solo quando i tipi di dato standard non ci soddisfano e non ci permettono di ottenere gli scopi voluti. Vediamo come si pu controllare laccesso ad un metodo a ad un attributo. Gli attributi o i metodi dichiarati con la keyword public sono accessibili da ogni parte del programma. Gli attributi o i metodi dichiarati con la keyword private sono accessibili solo da metodi della stessa classe: private int hour; private int minute; Ebuona norma di progettazione dichiarare private tutti gli attributi di una classe, permettendo laccesso tramite degli appositi metodi; in questo modo si pu controllare la validit dei valori da assegnare agli attributi. Riprendendo il discorso sui costruttori, qui viene proposto un esempio con la classe punto che deve definire una posizione nel piano con il suo costruttore: public class Punto { double x,y; public Punto(double x0,double y0) { x=x0; y=y0; } }; Il costruttore viene invocato quando si crea un oggetto tramite loperatore new: Punto p1 = new Punto(1.0,-1.5); Allinterno di una classe possibile definire pi volte un metodo con lo stesso nome, in modo da adeguarlo a contesti di utilizzo differenti. La regola che disciplina questo tipo di problemi

Telematica 2 - Lezione 3 loverloading. E da tener in considerazione il fatto che due metodi possono avere lo stesso nome a patto di: avere lo stesso tipo di ritorno; differire per numero e tipo dei parametri formali. Un esempio tipico di overloading si ha nel costruttore: public Time1(int h) { setTime(h,0,0); } public Time1(int h,int m) { setTime(h,m,0); } In questo caso se io volessi settare solo lora e poi in un secondo momento settare sia lora che i minuti, potrei farlo( proprio grazie alloverloading) facendo riferimento ad una delle due procedure costruite allinterno della classe Time1. Loverloading si usa sempre nei costruttori. Per quanto concerne i metodi set e get, gli attributi privati di una classe possono essere manipolati solo da metodi della stessa classe. Per assegnare un valore ad un attributo, o per ottenerne il valore, si creano dei metodi pubblici, chiamati rispettivamente setAttributo(), getAttributo(); ad esempio: public void setHour(int h) { hour = (h>=0 && h<24) ?h :0; } public int getHour() { return hour; } In base a quanto detto si capisce che il costruttore un metodo di tipo set. Passiamo adesso ad analizzare la creazione di oggetti. Riprendendo lesempio del dato ADT, per poter utilizzare la classeTime1, creiamo unaltra classe TimeTest: public class TimeTest { public static void main(String args[]) { Time1 time = newTime1(); time.setTime(13,27,6); System.out.println(Time: +time.toString()); }

Telematica 2 - Lezione 3 } La classe TimeTest punta ad utilizzare la classe Time. Nel main della classe definiamo dei metodi. Per creare un nuovo oggetto della classe Time1, facciamo: Time1 time = newTime1(); Loperatore new alloca la memoria per il nuovo oggetto della classe Time1. Quindi richiama il costruttore della classe Time1 per inizializzarne gli attributi. Successivamente collega loggetto appena creato con il reference time. Digitando poi Time1 time si crea un reference ad un oggetto di classe Time1, che non collegato a nessun oggetto. Di conseguenza se si prova a richiamare un metodo, si ricever un messaggio derrore. A questo punto posso richiamare uno dei metodi definiti nella classe, in particolare il metodo setTime( il quale faceva semplicemente dei controlli) con i valori 13,27,6 che gli passo per parametro. Questi parametri superano i controlli. Alla fine faccio una stampa del valore di Time convertendolo in stringa( il + serve a fare lappend della parte che viene calcolata direttamente alla stinga visualizzata). La parte che vogliamo si scriva, deve essere messa tra apici . Giunti a questo punto, vediamo come si utilizza in maniera pi complessa quanto detto fino a questo punto. Una forma di riutilizzo del codice la composizione , in cui una classe ha come attributi dei reference ad oggetti di altre classi. Vediamone un esempio: public class AlarmClock { private Time1 alarmTime; In questo caso, definiamo una nuova classe AlarmClock e allinterno ci mettiamo un oggetto di tipo Time1, ovvero alarmTime( che non appartiene ad AlarmClock, ma una classe esterna). Pertanto alarmTime costituisce un reference a Time1 e AlarmClock una classe composta( ha un attributo rappresentato da un oggetto della classe Time1 creato in un secondo momento). Un caso particolare il riferimento this. Ogni oggetto ha accesso ad un reference a se stesso, chiamato this, tramite il quale si pu accedere sia agli attributi che ai metodi. Consideriamo il seguente esempio: public classTime1 { int hour,minute,second; publicTime1(inthour,intminute,intsecond) { this.hour = hour; this.minute = minute; this.second = second; }

Telematica 2 - Lezione 3 } Qui abbiamo una classe Time1 in cui ci sono tre interi( hour,minute,second). Nel caso si voglia fissare i valori, richiamiamo Time1 e gli passiamo i tre parametri. Per poter fare lautoriferimento a hour, minute, second( precedentemente definiti), possiamo utilizzare lautoreference this( non facciamo altro che far uso della stessa classe di riferimento). Si noti che i nomi dei parametri sono uguali a quelli degli attributi. Si usa il reference this per riferirsi a questi ultimi. In base a quanto detto finora, ciascun oggetto di una data classe ha una propria copia degli attributi Ci sono casi in cui si vuole che una sola copia di un attributo sia condivisa tra tutte le istanze della classe. In questo caso si dichiara tale attributo statico: static int count; Attraverso la parola riservata static possibile specializzare alcune propriet o metodi appartenenti ad una classe. In particolare, se una propriet preceduta dalla parola static, tale propriet (il suo valore) si intender come una propriet di classe e non solo di una determinata istanza di essa. Una eventuale modifica al valore della propriet di classe verrebbe automaticamente avvertita da tutte le istanze esistenti di tale classe. Analogamente, un metodo static considerato un metodo appartenente ad una classe. Passiamo ad analizzare una particolare struttura, ovvero il package che una collezione di classi. I principali benefici derivanti dalluso di package sono il riutilizzo del codice e il fatto che si garantisce lunicit del nome di una classe. Con il JDK( JAVA DEVELOPMENT KIT) vengono forniti una serie di package per le funzionalit pi comuni: I/O, grafica, networking, suono e via dicendo. Per la creazione di un package, si aggiunge prima della dichiarazione di una classe, la parola chiave package: package it.poliba.sisinflab; Per la compilazione si fa: javac d . Time1.java Lopzione d dice al compilatore di creare le directory specificate nel nome del package a partire da quella corrente(il punto indica proprio la directory corrente). In questo caso sar creata una directory it, contenente la directory poliba, contenente sisinflab che conterr il file Time1.class. Nel caso dei package sorgono problemi di visibilit nel senso che nella dichiarazione di attributi o di classi, se non si specifica n public n private,la visibilit da intendersi a livello di package. Per esempio: package it.poliba.prova; classProva {

Telematica 2 - Lezione 3 int nome; } In questo caso la classe Prova e il suo attributo nome sono visibili solo dalle altre dello stesso package. Per poter utilizzare le classi contenute in un package in unaltra classe esterna a tale package, si usa la keyword import: import it.poliba.sisinflab.*; Questa istruzione importa tutte le classi del package specificato Qualora si voglia linkare pi classi e comunicare a compilatore, in fase di compilazione, di doverle utilizzare( caso tipico delle librerie), si usa classpath, la quale rappresenta una variabile che contiene un percorso generico. Si tenga presente che il compilatore Java cerca le classi da linkare: prima in quelle standard fornite insieme al J2SDK; poi nella directory ext di tale SOFTWARE DEVELOPMENT KIT; infine nei percorsi specificati tramite la variabile dambiente classpath. Per default la variabile classpath contiene solo la directory corrente. Se si devono usare package contenuti in altre directory, si deve aggiungere il percorso a tale variabile dambiente: CLASSPATH=c:\mypackages; Bisogna stare attenti quando si scrive il nome del percorso:qui si sta facendo riferimento a macchine windows. Un altro metodo per creare una collezione di classi e allo stesso tempo unapplicazione finale, quello di avvalersi del file jar( jar sta per archivio Java).Quando unapplicazione Java composta da molte classi, possibile raggruppare i files .class in un archivio compresso, di estensione .jar. In ogni archivio jar presente un file chiamato MANIFEST.MF che contiene informazioni sul contenuto dellarchivio. Per creare un archivio si usa il comando jar: jar cvmf MANIFEST.MF archivio.jar input-files In questa istruzione c il comando jar, delle particolari opzioni, il nome del manifesto, il nome dellarchivio, il nome dellinput. Il manifesto( MANIFEST appunto) un particolare file di estensione .MF di tipo text( testuale quindi) che contiene una serie di coppie attributovalore( attributo e valore rappresentano le caratteristiche del file che stiamo per creare).Possiamo creare un file manifest come lo vogliamo noi, oppure possiamo fare in modo che il sistema lo crei per default. Generalmente ci che troviamo nel file manifest, rappresenta informazioni di autenticazione. In particolar modo il file manifest pu essere adoperato per avere una visione

Telematica 2 - Lezione 3 completa dellevoluzione di gestione di un dato programma, in quanto a partire da un file manifest esistente( a seconda delle opzioni specificate dopo la parola chiave jar), possiamo consentire che, creato un archivio compresso, il sistema aggiorni il numero di versione proprio attraverso lutilizzo di manifest. Vediamo la struttura di un file manifest( costituito, come detto,da coppie attributovalore): Manifest-version: 1.0 Created-By: NetBeans IDE Main-class: ServerMain E presente il numero di versione, chi lha creato e il nome della classe principale. Allinizio della prossima pagina presente una tabella che contiene tutte le opzioni che possono essere aggiunte al comando jar:

E consigliabile non utilizzare direttamente lSDK, ma scaricare un IDE( Integrated Development Environment), che in italiano significa ambiente integrato di sviluppo: un software che aiuta i programmatori nello sviluppo del software. E composto dal compilatore, da parte di editing. Tra tutti consigliabile scaricare NETBEANS o ECLIPSE( sono indifferenti ma Ruta utilizza NETBEANS nella versione 5.5). Sono presenti una serie di plug-in e una serie di pacchetti che conviene scaricare. Una volta installato NETBEANS, linterfaccia si presenta come una sorta di VISUAL STUDIO. Passiamo adesso allereditariet. Euna forma di riutilizzo del software in cui una nuova classe viene creata a partire da una esistente, ereditandone gli attributi ed i metodi, ed aggiungendone di nuovi, per specializzarne il comportamento. Il vantaggio che non necessario disporre del codice sorgente di una classe per poterla estendere. Ecco un esempio di come una classe base( o

Telematica 2 - Lezione 3 superclasse) possa dare origine ad una classe derivata(o sottoclasse) usando la parola chiave extends: Classe base (superclasse): public class Biciclo { public void sterza() {}; public void frena() {}; public void avvia() {}; private Color colore; } Classe derivata (sottoclasse): public class Ciclomotore extends Biciclo { public accendiMotore() {}; private String targa; private float cilindrata; } Una volta creata una serie di classi padre e figlio, si crea una gerarchia che, se ramificata correttamente, un buon presupposto per una programmazione fatta bene. Lo specificatore protected fa in modo che gli attributi e i metodi di una classe dichiarati con lo specificatore di accesso protected siano visibili soltanto dalle sue sottoclassi. Per esempio: public ClasseBase { protected int attr1; } public ClasseDerivata extends ClasseBase { public ClasseDerivata() { attr1=0; } } A proposito dei costruttori nelle classi derivate, quando viene istanziato un oggetto di una classe derivata, deve essere richiamato il costruttore della superclasse per inizializzare gli attributi ereditati. Per default viene richiamato il costruttore standard della superclasse. Se si vuole specificare un particolare costruttore, si usa la keyword super: super(x,y);

Telematica 2 - Lezione 3 In pratica il costruttore super serve a prendere il costruttore della superclasse e a fare listanziazione di una sottoclasse. Eanche possibile ridefinire un metodo gi dichiarato nella superclasse: questo meccanismo prende il nome di overridding. Eccone un esempio: public class Ciclomotore extends Biciclo { public void avvia() { accendiMotore(); premiFrizione(); innestaMarcia(); rilasciaFrizione(); } } In questo caso la classe ciclomotore estende la classe biciclo(che aveva dentro di se i metodi frena e avvia, oltre che lattributo colore) definita prima. Creando la sottoclasse Ciclomotore, questa erediter i metodi frena e avvia, avr la procedura accendiMotore e gli attributi targa e cilindrata. Inoltre attraverso loverriding, in un particolare metodo vado a ridefinire determinate procedure. Analizziamo adesso un esempio di polimorfismo. Si supponga di avere le seguenti classi Cerchio, Triangolo, Rettangolo tutte derivate da Figura. Sia dato un array figure[] di oggetti delle suddette classi. Ciascuna di esse ha un metodo draw(),con una specifica implementazione. Si supponga di voler disegnare tutte le figure contenute nel suddetto array: Figura[] figure = newFigura[3]; figure[0] = newCerchio(); figure[1] = newTriangolo(); figure[2] = newRettangolo(); for(inti=0; i<figure.lentgh; i++) figure[i].draw(); Possiamo semplicemente richiamare il metodo draw()della superclasse Figura, lasciando al programma, a run-time, il compito di stabilire quale metodo draw()richiamare in base al tipo delloggetto. Uninterfaccia permette di stabilire la forma di una classe (nome dei metodi, lista dei parametri e valori di ritorno), ma il corpo dei metodi deve essere vuoto. Serve per stabilire un protocollo di comunicazione tra classi. Per crearla basta usare la keyword interface al posto di class. Affinch una classe si conformi ad una particolare interfaccia, si usa la keyword implements:

10

Telematica 2 - Lezione 3 classFlute implementsInstrument Con questa sintassi, la classe Flute implementa linterfaccia Instrument, ovvero dovr ridefinire i metodi esposti dallinterfaccia, specificandone il codice.

11

Telematica 2 - Lezione 4

Un eccezione costituisce per un calcolatore un evento di tipo non convenzionale; ovviamente gli eventi non condizionali in quanto tali non detto che non debbano verificarsi, ma si possono verificare e vanno gestiti. Qualora ci trovassimo a programmare per costruire un dato software o un dato tool dobbiamo comunque mettere in preventivo la possibilit che si verifichino eventi di tipo non previsto. Gli eventi di tipo convenzionale sono eventi che in java vanno gestiti in modo distinto, quindi a carico di pezzi del software o della sua architettura specifica rispetto a quelli che sono i software di partenza. Infatti in java la gestione delle eccezioni basata su un concetto fondamentale secondo il quale il modulo che rileva la presenza di un evento non convenzionale distinto dal modulo che si occupa di gestire leccezione. Parleremo del blocco try per indicare il blocco che si accorge delleccezione e del blocco catch per indicare quella porzione di codice che si occupa di gestire leccezione o di catturarla (il blocco catch esamina leccezione e la passa ad un interrupt handler, cio a un blocco che gestisce leccezioni). Vediamo come fatta la struttura di un modulo che deve contemporaneamente rilevare uneccezione e passare il controllo ad un handler delleccezione. Esiste una terza porzione di codice finally che si occupa di eseguire del codice che a prescindere del verificarsi delleccezione viene eseguito. Immaginiamo di dover eseguire uneccezione del tipo divisione per zero. Il codice composto da una parte iterativa; allinterno del corpo del metodo definiamo un numero di eccezioni e poi come si vede il metodo composto da tre metodi try, catch e finally. Chi si accorge delleccezione il blocco try che esegue la divisione e che restituisce un intero. Questo evento che non convenzionale genererebbe un errore che bisogna prevenire. Ci si fa assegnando al blocco catch la gestione delleccezione; nel blocco try specifichiamo loperazione da eseguire e che pu generare uneccezione, nel blocco catch non faccio altro che catturare leccezione del blocco aritmetico attraverso aritmeticException che appartiene ad una classe nativa che si occupa di gestire le eccezioni aritmetiche. Anche in questo caso ereditiamo codice che gestisce leccezione, cio ci limitiamo a chiamare una cosa gi esistente. Queste sono classi che vengono chiamate abitualmente. Il blocco catch prende come parametro e; esso un attributo di tipo Aritmetic Exception. Questa eccezione trattata grazie al fatto di utilizzare una determinata classe; una volta che si dovesse verificare leccezione facciamo stampare a video e poi utilizzando getClass, che un metodo della classe exception visualizziamo la classe di eccezione. In questo caso verr stampato a video eccezione di divisione per zero. Oltre a questo ci sar uno stato di errore che recuperiamo grazie al metodo getMessage, poi incrementiamo il numero di eccezioni portandolo da zero a 1 e dopo nel blocco finally faremo un controllo sul numero di eccezioni. Se questo uguale a zero stamperemo nessuna eccezione verificata altrimenti stamperemo il numero di eccezioni effettuate. Il concetto di strema attiene direttamente a quello di input/output per java; per java un input o un output cio un ingresso o unuscita da un modulo trattato come uno strema cio come un flusso di dati. Uno strem riferito ad un canale di comunicazione; gli strema verranno usati per trattare gli input output in riferimento ai protocolli e in particolare vedremo che basta creare un socket e impostare un canale di comunicazione virtuale tra i due socket perch si possa instaurare una comunicazione. Uno strema di input/output pu essere riferito direttamente ad un dispositivo fisico, quindi posso stabilire un canale di comunicazione da e verso la periferia, stabilendo che il flusso che deve andare verso un dispositivo associato direttamente a quel dispositivo.

Telematica 2 - Lezione 4

Quindi possiamo associare direttamente un flusso dati a quel dispositivo. Vediamo ora le propriet degli strem. Ogni volta che abbiamo uno strema di output in uscita verso un modulo, dalla parte opposta dobbiamo per forza avere uno strema di input. Cio un modulo mittente con uno strema di output corrisponde ad uno strema di input del modulo precedente. La prima che sono di tipo FIFO e quindi lultimo pacchetto ad essere accodato allinterno dello strema sar lultimo ad essere letto. Non esistono possibilit di avere accessi casuali allo straem. Uno stream read-only o write-only, nel senso che si pu solo scrivervi o leggervi. Un input stream si pu solo leggere, un output stream si pu solo leggere. Nel momento in cui vogliamo scrivere o leggere, se vogliamo impostare due funzioni, una per la lettura e una per la scrittura contemporaneamente abbiamo necessariamente bisogno di due stream diversi, cio dobbiamo per forza disaccoppiare gli stream. Infatti se abbiamo una comunicazione bidirezionale in quel caso non potremmo utilizzare un unico stream per fare la lettura e la scrittura; avremo bisogno di due stream diversi. Nella gestione della comunicazione il mittente e il ricevente alternano i loro ruoli, quindi in java avremo bisogno di un input stream corrispondente ad un output stream e viceversa. Per evitare situazioni di corsa gli stream in java sono trattati anche in modo semplicistico e in particolare in modo bloccante. Infatti uno dei metodi pi semplici per evitare situazioni di corsa, cio per evitare che in corrispondenza di una risorsa a cui possano accedere contestualmente processi evitando che vi siano congruenze di dati in lettura e scrittura, quello di bloccare lutilizzo delle risorsa quando il processo lo star leggendo o scrivendo. In tal modo si garantisce che i dati che la risorsa sta scrivendo o leggendo sono congruenti. Questo comporta un utilizzo non ottimale della risorsa. Esistono metodi pi complessi per evitare situazione di corsa ma java risolve questo problema in modo semplice. Una volta che la risorsa stata letta o scritta rilasciata. Riprendiamo in modo rapido i concetti di base dellISO-OSI, in particolare con riferimento a TCP IP. ISO unorganizzazione internazionale che si occupa di standardizzazione, quindi ISO non lavora solo sulla standardizzazione dei protocolli in rete; esso un organismo di certificazione internazionale che si occupa di standardizzare protocolli e paradigmi. In particolare OSI un sistema, modello per la definizione di protocolli di comunicazione allinterno di reti pi o meno complesse. Lidea dellorganismo ISO era quella di creare un modello che consentisse di creare protocolli di comunicazione, che dovevano aderire in modo pi o meno complesso a quello standard. Quindi OSI un paradigma per creare protocolli di comunicazione per linterconnessione di elaboratori in rete. OSI un modello per creare protocolli. Il modello ISO OSI prevede 7 livelli; noi ci interesseremo di tutto quello che interfacciamento tra il livello di presentazione e il livello applicativo. Il livello di presentazione si occupa della sintassi e della semantica del linguaggio che viene formattato per la presentazione dei dati a livello applicativo. La struttura modulare del livello ISO-OSI permette di immaginare la comunicazione tra due host in rete come se fosse impostata tra due livelli pari allinterno della gerarchia. Dato che i livelli sono omologhi tra un host ricevente ed uno mittente possiamo ipotizzare che la comunicazione avvenga tra pair layers allinterno della rete. Questo permette di immaginare che ciascun livello prenda i dati in input dai livelli sottostanti, li manipoli e li passi ai livelli sovrastanti. I livelli pi bassi della gerarchia lavoreranno con dati

Telematica 2 - Lezione 4

grezzi, cio di basso livello. La semantica dei dati introdotta proprio dove abbiamo un livello di presentazione. Linternet protocol Suite meglio conosciuta come tcp ip ed la suite di protocolli che sono alla base del funzionamento del web. Si chiama tcp ip perch prende il nome dai due livelli pi significativi che sono il livello di rete e quello di trasporto. Tcp ip non deriva da ISO OSI perch pi vecchio di ISO OSI; questultimo nasce con lintenzione di standardizzare. Possiamo dire che Tcp ip aderisce al modello ISO OSI, infatti abbiamo una struttura modulare nella quale abbiamo raggruppati i livelli pi bassi in un layer che gestisce il controllo del mezzo a livello trasmissivo e che chiameremo per brevit Media Access. Al di sopra di questo abbiamo il livello di rete IP e poi il livello di trasporto e infine quello applicativo. TCP IP importante perch il protocollo pi diffuso per le INTRANET (LAN). La gestione di accesso al mezzo effettuata dal livello di Media Access si occupa della trasmissione sul canale di comunicazione di dati nella forma di segnali. Quindi sul mezzo trasmissivo si inviano delle forme donda che costituiscono delle sequenze binarie che verranno interpretate dai livelli pi alti della gerarchia che prendono il nome di frame. Al di sopra di questo c il livello di rete; esso si occupa, in termini protocollari, di stabilire i paradigmi secondo i quali devono essere trasmessi i frame tra due host, allinterno della stessa rete, ed in particolare tra i due livelli omologhi di rete dei due host. In particolare IP si occupa dellinstradamento, di individuare percorsi alternativi in caso di rottura di link o congestioni e implementa una gestione efficiente e affidabile della trasmissione (IP non affidabile). Al di sopra si tale livello ho quello di trasporto che si chiama TCP; esso eredita i dati provenienti da IP. Le componenti gestionali di questi livelli si occupano della gestione della trasmissione allinterno della rete. Ovviamente i dati che sono prodotti a questo livello sono orientati allapplicazione. Questo lultimo livello che gestisce la comunicazione, deve garantire che i pacchetti arrivino a destinazione nellordine in cui sono stati trasmessi e in ununica copia. A questo livello si gestiscono le congestioni in modo efficiente. A livello applicativo ci interessa capire quali sono i servizi che devono essere messi a disposizione dellutente da questo livello. Questo livello deve prevedere uniterazione di alto livello. Il livello applicativo pu garantire un servizio verso due categorie di soggetti: il S.O. e utente, nel senso di programmi utente. Quindi devo garantire a livello applicativo che i servizi messi a disposizione debbano soddisfare le esigenze o dei programmi utente oppure del S.O.. In particolare i servizi messi a disposizione del S.O. prevedono determinati protocolli di livello applicativo; i servizi per i programmi utente prevedono unaltra categoria di protocolli. Tra i protocolli per i programmi utente esempi sono http (programma di livello applicativo che consente linterazione di un programma utente verso un server, secondo il modello client server), ftp ( protocollo di trasferimento di file da un server verso un programma utente). Esempi di protocolli a livello applicativo a servizio del S.O. sono DNS (sistema di risoluzione dei nomi simbolici in indirizzi IP). Per quanto riguarda i protocolli di livello applicativo riguardanti il www, cio internet quello che ci interessa inizialmente http che il protocollo di trasferimento a livello applicativo di ipertesti. Internet nasce come progetto del Darpa; in America il dipartimento della difesa aveva lesigenza di gestire in maniera efficiente la sicurezza dei documenti secretati. Per questo diede in carico ad un pool di esperti di organizzare la documentazione riservata in modo tale che fosse rinvenibile in maniera ciclica, cio tutti i documenti dovevano possedere i riferimenti ad altri documenti e cos via fino a chiudere il cerchio.

Telematica 2 - Lezione 4

Ci doveva consentire che lintera mole di documenti fosse auto consistente. Per questo fu coniato il termine ipertesto; oggi si parla di documenti ipermediali. Un ipertesto era un unico gigantesco documento allinterno del quale ci fossero delle componenti linkate, attraverso i link. Cos nato internet. Il protocollo http quello che si incarica del trasferimento delle pagine web da un componente server detto server web a uno client detto browser web con una serie di modalit che dipendono dallapplicazione che stiamo utilizzando. Il modello che sta dietro quello client-server che un paradigma di comunicazione, in base al quale c un componente che si chiama server che si incarica di fornire dati e un componente che si chiama client che si incarica di richiedere dati. Il componente client un componente light weight, il componente server heavy weight. Un browser web da un punto di vista applicativo il componente client che si deve interfacciare al componente server, che deve fornire le pagine web. Esempi di browser web sono per esempio Internet explorer, netscape; sono tutti esempi di client per il protocollo http. Esempi di server sono Apaci, IIS di microsoft. Attualmente esistono una serie di sistemi (QoS) per incrementare la capacit informativa di una pagina web, visto che http regge bene la mole derivante dallutenza, sono stati inseriti al protocollo. Chi ha accusato maggiormente questo disagio stato proprio IP, cio il collo di bottiglia ip, tanto che IPV6 dovrebbe essere vicino ad uscire. http un protocollo che attualmente in grado di sopportare gi quella che la mole documentale per il trasferimento di documenti ipertestuali. Il trasferimento della multimedialit una costante attualmente, per questo si stanno aggiungendo ulteriore specificit nei documenti in modo da aumentare la qualit dei servizi anche a livello applicativo. Anche a livello applicativo si pu parlare di QoS, perch anche qui possibile misurare la soddisfazione degli utenti nel ricevere un servizio di livello applicativo. http un protocollo molto efficiente; per questo possibile caricare su http ulteriori contenuti rispetto a quelli che ha sempre supportato.

Telematica 2 - Lezione 5

[faccio ovviamente riferimento alle slide di Coppi] Slide 11 e seguenti. Lultima volta siamo arrivati ad analizzare il paradigma client-server a proposito dellinterazione tra due host in rete. Una delle possibili interazioni quella che prevede la presenza di una macchina in grado di erogare dei servizi (cio un service provider o server) ed una macchina in grado di richiedere servizi, con capacit computazionali pi ridotte (client). Il layer applicativo di occupa direttamente di gestire i servizi sia dei programmi utente che quelli richiesti dal SO. Nel paradigma client-server, il client il soggetto che si incarica di instaurare una connessione; successivamente il server deve rispondere e, una volta ottenuto un agreement su una connessione (procedura negoziata), inizia il vero e proprio trasferimento di dati. E ovvio che quando parliamo di questo paradigma possiamo limitarci a parlarne relativamente a reti di piccola dimensione (es. 2 macchine collegate con cavo coassiale), cos come pensare a servizi relativi ad host distribuiti geograficamente in punti differenti del globo, non c alcuna differenza. Esempi di client sono, ad es. client FTP (FileZilla), client di posta elettronica (Outlook), client per il protocollo http (IE, Firefox, etc). Esempi di server sono differenti, ed ovviamente cambia la prospettiva: un server deve erogare un servizio, i protocolli rimangono uguali, se non che il server non deve richiedere e attendere, ma ricevere una richiesta e rispondere. Attenti al fatto che il rapporto tra client e server 1 a 1, il rapporto tra server e client 1 a Molti, nel senso che un server pu gestire una molteplicit di connessioni. Non possibile scambiare i ruoli tra server e client; per, in riferimento ad unaltra connessione, un server pu comportarsi esso stesso da client, cio richiedere ad un altro server una risposta (es. DNS, nel senso che un server http pu avere necessit di richiedere al DNS server la risoluzione di un indirizzo simbolico in un indirizzo numerico, comportandosi da client). Non vale il viceversa. SOCKET (slide 16) Guardando due host allinterno di una rete possiamo identificare, a livello applicativo, due entit che si incaricano di scambiare informazioni, riconoscendo in queste entit dei demoni (o processi) che lavorano al livello applicativo e comunicano con altri processi che lavoreranno su una macchina remota ad un livello congruo (applicativo anche loro). In sostanza una comunicazione a livello applicativo in uno schema ISO/OSI pu essere immaginata come derivante dalla comunicazione tra due processi residenti su due macchine remote, operanti entrambi al livello app. Lo scambio dei messaggi, attraverso larchitettura di comunicazione (il canale), avviene tramite un meccanismo che si chiama Socket. Altro non che una interfaccia tra il livello applicativo della pila protocollare e i livelli sottostanti (in particolar modo il livello di trasporto). Applicando il paradigma client-server alla suite TCP/IP vediamo immediatamente che abbiamo un client e un server (intesi come processi) che devono, una volta instaurata una comunicazione, parlarsi (interagire) al livello congruo (7, applicativo). In realt questo pu essere materialmente implementato solo grazie ad un passaggio di messaggi ai livelli sottostanti e questo si attua, dal punto di vista applicativo, in maniera totalmente trasparente. Al livello app vediamo solo uninterfaccia, un socket: la parte pi in basso per noi una black-box. Quando strutturare unapplicazione a livello 7, quindi unapplicazione nel vero senso della parola, voi non vi preoccupate di quello che sar il mezzo di trasmissione, di quello che sar il protocollo di trasporto: dovrete semplicemente aprire un socket verso i livelli pi bassi, dovrete solo preoccuparvi che venga garantito il passaggio di messaggi dal livello app a scendere, e poi risalire dal lato server, e viceversa.

Telematica 2 - Lezione 5

Per prima cosa si deve creare un socket, e poi lo si deve adoperare. Per fare ci lapplicazione deve specificare: N.ro di porta della macchina su cui lapplicazione sta girando Indirizzo IP della macchina su cui il processo sta girando N.ro di porta destinazione, della macchina server Inridizzo IP destinazione, della macchina server Protocollo di Trasporto Opzioni aggiuntive Con i primi 4 parametri abbiamo tutto il necessario per identificare da un punto di vista di basso livello, la macchina trasmittente e la macchina ricevente. Per quanto riguarda il protocollo di trasporto, non andiamo a imporre vincoli, non strutturiamo lapplicazione in maniera tale che abbia possibilit di interazione diretta con il protocollo di trasporto. Decidiamo semplicemente quale utilizzare, in un set di possibili protocolli. Facciamo semplicemente una scelta. Semiassociazione = insieme di n.ro di porta + indirizzo IP (sia sul client che sul server) Associazione = unione delle due semiassociazioni (set n.ro di porta / IP client + server) Strutturare unapplicazione in base al protocollo di trasporto (slide 19) Dobbiamo stabilire la natura dellapplicazione (dire come devessere fatta). Successivamente dobbiamo stabilire che requisiti questa applicazione deve avere (e quindi quali imporre). Posso identificare 3 requisiti fondamentali: Affidabilit Banda (eventualmente con caratteristiche) Ritardo (eventualmente con caratteristiche) Dati questi tre parametri posso stabilire cosa mi serve, intendendo queste come caratteristiche stringenti: strettamente necessarie. Successivamente scelgo il protocollo di trasporto pi appropriato. UDP non-affidabile, per ha dei vantaggi rispetto al TCP. Se non ho la necessit espressa di avere una trasmissione affidabile (ed. streaming audio/video), preferisco adoperare un protocollo UDP. Viceversa, protocolli che richiedono affidabilit (es. trasferimento di dati, FTP) richiedono luso di TCP. Tutto questo io lo faccio in fase di programmazione della mia applicazione. WWW (slide 20) Il Web una collezione di risorse; ogni risorsa necessariamente identificabile e rintracciabile. Quando questa rete fu creata, il meccanismo era abbastanza elementare: lidentificazione e la rintracciabilit di un documento, affidata ai cosiddetti URL (Uniform Resource Locator): un protocollo per lidentificazione delle risorse che ha funzionato finora ed stato esteso. Ogni risorsa deve essere identificata da un URL. Successivamente gli URL si sono evoluti nei cosiddetti URI (Uniform Resource Identifier), che sono degli identificatori di risorse pi generali, perch comprendono sia gli URL che gli URN. Nel dettaglio un URI costituisce una generalizzazione del pi specifico URL: si tratta di un pezzo di testo, una stringa, che specifica i dettagli di una certa risorsa sul Web; mi dice sia che tipo di risorsa , sia dove collocata, e come posso fare per accedervi. In particolare, rispetto agli URL, aggiungiamo altri protocolli possibili per laccesso alle risorse. Un URL identifica una risorsa nel senso che vi posso accedere, la posso adoperare: posso andare sulla risorsa e agire direttamente su quella risorsa oppure ottenere una cosiddetta rappresentazione della risorsa stessa (es. pagine Web). Possiamo dire che un URL vecchio stile

Telematica 2 - Lezione 5

a tutti gli effetti un URI, perch un URI raccoglie gli URL e altre possibilit ulteriori: gli Uniform Resource Name. Sono degli URI che, anzich identificare una risorsa attraverso il sistema per accedere alla risorsa e il suo indirizzo fisico (come faceva lURL) assegna un meccanismo di identificazione di tipo nominale, cio permette di identificare la risorsa attraverso un nome allinterno di un dominio dei nomi, che si chiama namespace. Un URN pu essere direttamente adoperato per interfacciarsi con una risorsa in maniera diretta, senza dover specificare in nessun modo qual la collocazione della risorsa, n qual il protocollo per laccesso alla risorsa stessa. Contrariamente gli URL impongono che si specifichi sia la risorsa in termini di destinazione (locazione fisica), sia il protocollo necessario per ottenere una rappresentazione della risorsa o agire sulla risorsa. Lesempio che vi ho messo qui lISBN: un meccanismo di codifiche universali che serve ad etichettare in maniera univoca dei testi, dei libri. Se io dico che cho un URN caratterizzato dal codice ISBN, posso dire in maniera univoca, senza timore di smentita, che quel URN identifica, dato un namespace che quello dei codici ISBN (e questo fondamentale, perch potrei anche, per esempio, riferirmi al namespace dei codici delle carte di credito) uno specifico testo, univocamente. E quindi abbiamo fatto un esempio di un URI di tipo URN. URL Si compone di 4 elementi di base: 1. Metodo di accesso alla risorsa (ossia il protocollo applicativo di accesso): http, https, ftp, etc 2. :// e poi il nome dellhost, cio del server che deve materialmente ospitare la risorsa: un indirizzo simbolico che fa riferimento ad una macchina in rete che ovviamente dovr avere un indirizzo IP. A livello 7 noi ignoriamo lindirizzo IP di quella macchina, una cosa di cui si occupa il DNS. A livello 7 non abbiamo visibilit di quelli che sono i livelli inferiori della gerarchia, se non per quanto riguarda la presenza di un socket: apriamo il socket e ci laviamo le mani. A livello 7 quello che vediamo un nome di un host, non un indirizzo. 3. Numero di porta su cui la risorsa che noi ci aspettiamo di adoperare si trova (numero di porta su cui il servizio dedicato in ascolto) 4. infine abbiamo il percorso della risorsa allinterno della macchina che abbiamo identificato. Le parti 1,2 e 3 rappresentano una semiassociazione. La parte finale costituisce una serie di opzioni che costituiscono le informazioni di base per un server. Lo scopo di avere una collezione di documenti ipertestuali quello di consentire agevolmente lutilizzo di risorse remote su macchine locali. Io posso avere una rappresentazione di un documento ipertestuale che collocato fisicamente in America. Per ottenere questo tipo di utilizzo, devo avere un protocollo ma anche una struttura del documento stesso che sia leggerissima. Da questultimo punto di vista ci viene incontro HTML, un linguaggio detto di markup, perch utilizza dei marcatori a tag. Serve per imporre una formattazione del documento, non in fase di emissione dal server, ma di elaborazione da parte del client. Se HTML ha avuto grande fortuna perch la formattazione del documento non un add-on del documento, ma parte del documento stesso. HTML e XML nascono da SGML, che un linguaggio per creare linguaggi di markup. Un linguaggio di markup deve avere come costituenti necessari 1. la possibilit di essere facilmente comprensibile ed utilizzabile 2. la possibilit di formattare documenti pi o meno complessi che per devono mantenersi molto leggeri

Telematica 2 - Lezione 5

La struttura HTML prevede la presenza di tag appositi, in un numero prestabilito, a costituire uno schema, con una funzione specifica e che vengono interpretati da un interprete, anchesso leggerissimo, sul lato client, per restituire una formattazione. Il server non restituisce un documento formattato, ma un documento in cui la formattazione embedded, integrata, tramite i tag che si mischiano al testo. (slide 25) La struttura fissa, per allinterno di ciascun componente potete ricrearvi, con complessit pi o meno spinta, quello che poi effettivamente vi serve. Ogni documenti HTML comincia con il tag <HTML> aperto e si conclude con il tag </HTML> chiuso (lo slash indica la chiusura). Allinterno del tag <HTML> si possono individuare in maniera diretta 2 elementi principali: unintestazione e un corpo. Lintestazione contiene tutto quello che riguarda le caratteristiche generali della pagina, per es. il titolo. Un titolo viene racchiuso tra <TITLE> e </TITLE>. La componente <BODY> contiene materialmente le informazioni costituenti la pagina ed essa stessa identificata da un tag di apertura e uno di chiusura (</BODY>). Con questi tag possiamo fare tutto (tabelle, caratteri, etc). Si nota facilmente che una stessa formattazione, fatta in HTML e fatta con Word (che un processore WYSIWYG, What You See Is What You Get), la dimensione molto diversa (almeno 10 volte pi grande con Word). Con HTML la formattazione a carico del destinatario del documento: di fatti lo svantaggio quello di dover avere comunque un client che contenga al suo interno un interprete che deve processare lHTML, e questo, in passato, poteva costituire un limite. In Sistemi Operativi abbiamo visto la distinzione tra i tool di Word Processing (es. OpenOffice) e i tool per fare Editing (es. LaTeX). La differenza sostanziale che nel secondo caso abbiamo documenti leggeri e portabili, nel primo (che comprende Word) no [qui ripete cose gi dette, avst]. HTTP (slide 27) E il protocollo applicativo usato per accedere alle risorse contrassegnate da un URI sul Web, quindi utilizzando ai livelli sottostanti TCP/IP. E un protocollo di tipo client-server, che si basa su un paradigma interattivo di tipo Request Response (o Reply). Esiste una macchina in grado di richiedere servizi, e una macchina che tali servizi li deve erogare. Deve essere orientato alla connesione, devessere raggiunto un accordo sulla connessione, dopo di che inizia il dialogo. Lelaborazione di uno dei due componenti non procede se non viene triggerata da un interrogazione da parte dellaltro host. Il client effettua una richiesta e si ferma, in attesa della risposta del server. Il server risponde e il client procede allelaborazione. Esistono due versioni di http: 1.0 e 1.1. L 1.1 quella attualmente di riferimento. Rispetto a 1.0 ci sono delle differenze sostanziali da punto di vista della gestione del socket: in 1.0 per ogni richiesta di alto livello si instaurava una connessione TCP, con conseguente overhead (sistema di controllo della rete, pacchetti di segnalazione); con l1.1 il vantaggio pi importante che una volta aperta una connessione TCP (quindi un socket), possibile fare pi richieste a livello applicativo (connessioni persistenti, a differenza di quelle non persistenti dell1.0). La struttura di un pacchetto di richiesta HTTP standard, prestabilito, anche se ci possono essere dei campi pi o meno presenti a seconda delle necessit.

Telematica 2 - Lezione 6

Telematica II 31/05/07

Guardiamo la struttura di un tipico frame di richiesta HTTP. Nella struttura di tale frame c una parte di richiesta (Request line) che contiene le informazioni di base che caratterizzano la richiesta, poi abbiamo un header. Questa la parte fissa; poi c una parte opzionale che utilizzata solo con uno dei metodi possibili. Il metodo specificato all interno della request line. La request line si compone di 3 campi: nome del metodo, URL (o pi in generale URI) e versione. L URL un identificativo univoco di una risorsa all interno di una rete. Poi abbiamo la versione. HTTP pu avere versione 1.0 oppure 1.1; le 2 versioni possono coesistere nella rete nel senso che possiamo trovare un trasferimento via http 1.0 o http 1.1 a seconda del web server. E necessario quindi specificare la versione del protocollo di livello applicativo. Metodo => il campo metodo indica il tipo di azione che il client chiede al server in fase di negoziazione di una connessione http. Con il campo metodo che pu assumere solo 5 valori (HEAD, GET, POST, PUT, DELETE) il client pu domandare al server, l esecuzione di un azione tra quelle possibili. In coda al campo version, troviamo l header della request http. Questo pacchetto inviato da un browser, ovvero un client http (esempio: Internet Explorer). La parte di body presente solo se il metodo di tipo post. Un header serve a specificare ulteriormente le caratteristiche della richiesta sul browser web nei confronti di un web server. All interno del campo header, generalmente il client specifica tutta una serie di informazioni che servono a identificare la tipologia di richiesta e/o il client stesso. Quindi abbiamo indicazioni relative al client e alla richiesta che il client sta formulando. In particolare bisogna ricordare le seguenti informazioni. Innanzitutto la stringa User-Agent = relativa non alla 1

Telematica 2 - Lezione 6

richiesta ma al client. Caratterizza il client. Generalmente contiene 3 informazioni riguardanti: tipo, versione e sistema operativo del client. Con la user-agent il client si presenta specificando che tipo di client ; rispetto a quel tipo che versione lui utilizza; e il sistema operativo della macchina su cui sta girando. Queste informazioni le troviamo in un analizzatore di contatti di un generico sito. Un analizzatore di accessi (esiste ad esempio una versione fornita da Google) di un sito web come funziona? Esaminando le caratteristiche dei pacchetti che arrivano al web server. Se qualcuno ha un sito web e si installa un analizzatore, pu verificare quanto detto. Vediamo le caratteristiche della richiesta. Le caratteristiche della richiesta cominciano col campo referer. Nel campo referer abbiamo indicazioni riguardo all URL (o in generale URI) relativo all elemento che conduce a quello che stiamo richiedendo cio nel campo referer viene passato il riferimento che sta portando a quello che stiamo richiedendo. Nel campo referer andiamo a specificare al server web qual il punto di partenza dal quale stiamo provenendo verso la risorsa che chiediamo. Esempio: se stiamo richiedendo una certa pagina web, stiamo richiedendo la pagina sisinflab.poliba.it/ruta e ci troviamo all interno della pagina sisinflab.poliba.it => nella pagina sisinflab.poliba.it troviamo il link al sito di ruta. Nel momento in cui si clicca sul link verso ruta, il referer l URL della pagina sisinflab.poliba.it. E l URL del riferimento verso la pagina che stiamo richiedendo. Se facciamo riferimento all URI di un immagine dentro una pagina web cio nel momento in cui viene fatto il download di un immagine di una pagina web, qual il referer? L URL della pagina web che contiene l immagine. Stessa cosa per una risorsa qualsiasi. E possibile che una risorsa non sia precedentemente linkata? Immaginiamo di iniziare una richiesta senza passare da un altra pagina web; di inoltrare direttamente una richiesta; possibile? S. In quel caso il campo referer non c. Quindi il campo referer non un campo obbligatorio. Il campo host un campo obbligatorio; serve a specificare le caratteristiche della macchina a cui ci stiamo interfacciando. Quando lavoriamo su TCP o UDP, abbiamo la necessit a livello applicativo di creare un socket. Creando un socket andiamo a costruire 2 semiassociazioni. Con il campo host dunque specifichiamo 2 semiassociazioni, cio un associazione completa. Cosa serve in http per fare un associazione? Essendo il client conosco la semiassociazione lato client; mi serve la semiassociazione lato server. Come si fa? Specifico il nome del dominio pi la porta (ricordiamo che una semiassociazione era un indirizzo ip e una porta). A che serve avere necessit di un host e perch obbligatorio? A parte la struttura intrinseca di interazione tra http e tcp, questo tipo di informazione sulla richiesta del client serve per il cosiddetto 2

Telematica 2 - Lezione 6

hosting virtuale. Un esempio di hosting virtuale dato da quei provider che mettono a disposizione un tot di spazio per fare l hosting di siti web diversi facendo corrispondere ad una macchina con un certo ip, pi siti. Facciamo l esempio di sisinflab.poliba.it. In corrispondenza di questo web server troviamo il sito di Ruta, di Di Sciascio, Di Piscitelli ... la procedura per cui in corrispondenza di un solo indirizzo ip abbiamo a disposizione pi web site, prende il nome di virtual hosting. Virtualmente si sostituisce l indirizzo compreso all interno del nome host (sisinflab.poliba.it/ruta) con sisinflab.poliba.it che ha un ip e in corrispondenza di quell ip si aggiunge un percorso interno al server che costituisce la parte virtuale che permette di separare i siti web. A che serve il virtual hosting? E sostanzialmente uno dei primi espedienti per risparmiare indirizzi ip. Teoricamente se su una macchina risiedono 100 siti web da referenziare separatamente, avremmo bisogno di 100 indirizzi ip e la cosa ridicola ... Avere un unico indirizzo ip e fare virtual hosting attiene esclusivamente al livello applicativo. Solo a tale livello abbiamo questa aggiunta sull indirizzo ip; per cui il routing non viene influenzato. Poi abbiamo il campo from => opzionale. Se il mittente autorizza contiene l indirizzo e-mail del richiedente. Se non autorizza, tale campo non c. Poi abbiamo il campo range. La parte che troviamo a destra a pag. 30 tratta direttamente dal draft dell ietf che specifica cosa il campo range. Le informazioni di funzionamento di internet derivano da questi draft; cos come dalle rfc. Il campo range si riferisce ad una serie variabile di intervalli di byte cos come verranno trasferiti dal client al server. Nel campo range posso scrivere uno o pi intervalli di byte che stanno ad indicare la sequenza con cui trasferir i dati verso il server. Un tipico campo range potrebbe essere: 0-499 500-1500 1501-1516 Sto indicando al sistema come intendo trasferirli informazioni in termini di blocchi di dati. Specifico quali sono i range che il server si deve aspettare fino a conclusione della parte di invio. Il campo range si usa perch, data la possibilit di avere una connessione persistente, possibile trasferire i dati non in un solo blocco ma in blocchi consequenziali. I campi che seguono riguardano negoziazione di connessioni, richieste condizionali, richieste di autorizzazioni. Il primo campo serve a negoziare il formato della risposta da parte del server. Http funziona nel modo secondo cui il client propone uno o pi formati; il server risponde scegliendo i formati che 3

Telematica 2 - Lezione 6

riesce a supportare e dopo che si l agreement riguardo il tipo di dato supportato e alla caratteristica della connessione si pu procedere con gli invii successivi. In particolare con il campo accept nelle sue varianti si va a negoziare riguardo il formato dei dati in trasferimento; ci si riferisce al tipo MIME. Gli ultimi 2 campi della parte header sono: richieste condizionali per cui il client chiede al server di operare determinate azioni solo a condizione che determinate circostanze risultino vere (oppure false). Esempio: l aggiornamento di una cache. L aggiornamento di una cache si fa solo se i dati sono congruenti altrimenti non ha senso inviare dati. In fase di anticipo della connessione, in fase preliminare, dico al server: guarda che devi aggiornarti la cache solo se i dati che ti sto inviando ti risultano pi nuovi di quelli che gi possiedi [in tal caso il server mi risponde dicendomi: guarda che i dati che mi stai per inviare gi li posseggo]. Un espediente per risparmiare la banda. Qualora fosse richiesto c un campo che riguarda le componenti autorizzative. Ci sono risorse ad accesso limitato => la parte di autorizzazione contiene una stringa che ha informazioni riguardo l autorizzazione per l accesso alle risorse.

Nella negoziazione di una connessione si deve stabilire se client e server possono interagire. Si utilizza un agreement riguardo al tipo di informazioni che transiteranno fra client e server. Non ha senso una connessione fra 2 host che non possono intendersi. Il sistema che si utilizza per verificare l agreement riguardo l oggetto e il formato dei dati il sistema MIME. Mime => multipart internet mail extension. Il sistema mime un sistema adoperato per le e-mail. Quando si invia una mail via smtp, nella mail possiamo inviare caratteri e allegati, file di qualsiasi genere, file binari. Con i file binari, smtp non un buon protocollo. Smtp (simple mail transfer protocol) nasceva per l invio di mail puramente testuali. Era sufficiente codificare i primi 128 caratteri cio i caratteri alfanumerici del codice ASCII. Nel momento in cui vado ad adoperare un file binario come contenuto di una mail dovr codificare tutti i caratteri, da 0 a 256. Come si fa allora visto che SMTP non supporta codifica se non a 128? Si usa il tipo MIME cio un sistema di codifica che serve a stabilire oggetto e formato. Il tipo MIME lo si trova quando lavoriamo sulle e-mail che stiamo trasferendo se il client lo richiede. Per un file audio potrebbe essere per esempio un formato mp3. Si usa oggetto/formato perch possibile che nel momento in 4

Telematica 2 - Lezione 6

cui vado a richiedere una risorsa in un dato formato, perch io lo possa supportare, il server non mi possa rispondere adeguatamente, quindi non occorre solo specificare la risorsa. Guardiamo ad http, nel momento in cui vado a specificare i formati che posso supportare nella ricerca di unimmagine trovo ad esempio formati di tipo jpeg,gif,png e se il server non supporta nessuno di questi formati che riguarda limmagine richiesta non posso avere lagreement Se richiedo, per esempio, un determinato file codificato su un server con una codifica che non supporto,arriva un messaggio di errore di codifica. Il MIME estende la possibilit di ottenere una identit tra richiesta e risposta per ogni tipo di oggetto specificato. La codifica MIME quindi universale poich per qualsiasi oggetto bisogna specificare il formato. I tipi di oggetto a disposizione sono ben codificati da specifiche e se si generano nuovi oggetti di un tipo nuovo si aggiungono in via sperimentale, per un certo periodo di tempo, altri oggetti e/o altri formati fatti precedere da una x. Per esempio ho il nuovo oggetto ruta con formato telematica => xRuta\xTelematica. Dopo un periodo concordato l oggetto/formato o vengono riconosciuti o vengono scartati. Nellagreement della connessione si deve ottenere un accordo sul tipo di oggetto e formato. Inoltre con lavvento delle pagine dinamiche non ci sono pi solo pagine statiche tipo html ma anche pagine di tipo CGI e qui il tipo MIME deve restituire anche informazioni sul tipo di dati che devono essere trattati. CGI (Common Gateway Interface) levoluzione di Html e grazie alle pagine CGI si fa in modo che il trasferimento via http non avvenga da un punto di vista statico. E possibile creare uninterfaccia comune tra client e server per cui la pagina viene generata dinamicamente in maniera asincrona. Direttamente programmate con qualsiasi linguaggio di programmazione le funzionalit di una web page,in corrispondenza di questa, verranno elaborati i dati passati dal client al server e quindi i risultati in una pagina che varia a seconda del client che la esegue, quindi avremo un web dinamico. Chiaramente il livello di complicazione introdotto dagli script CGI che occorre avere a disposizione un valore di ritorno proveniente dallelaborazione perch devo essere in grado di portare a termine lelaborazione, se non ho agreement riguardo al linguaggio di programmazione che sto adoperando invece, non posso avere un risultato delle pagine. Accanto alla richiesta http abbiamo, oltre ai campi di header una serie di metodi, in particolare: -POST : metodo che prevede linvio da client a server di un determinato contenuto informativo. Consideriamo una struttura client server da un punto di vista applicativo come una comunicazione diretta al livello (mi sto disinteressando di ci che c ai livelli inferiori, per me una comunicazione al livello http). Ovviamente nel momento in cui si manda una richiesta http oltre a specificare i dati inerenti a se stessi e alla comunicazione che si deve instaurare(negoziazione), 5

Telematica 2 - Lezione 6

bisogna specificare i dati veri che vengono trasferiti mediante metodo post. Nel pacchetto infatti oltre alla request line e allheader se allinterno del metodo contenuto POST possiamo avere unentit con POST DATA (cio i dati da trasferire da client a sever). Devo specificare il tipo MIME perch il server mi comprenda , cio devo specificare i dati che sto trasferendo che dati sono e come sono codificati. Generalmente accade che allinterno del campo post entity , viene specificato il tipo dei dati che stiamo trasferendo e il tipo di codifica che stiamo adoperando. Questo non accade con il metodo GET che serve a richiedere risorse dal server. Qual la differenza di agreement con tipo MIME tra POST E GET? Nel momento in cui ho fatto post ,nel campo entity ci sono dati di qualunque tipo. Quindi specifico nellintestazione del campo entit che dati sono, e quindi per le risposte dal server uso tipo MIME, per quello che riguarda ci che sto inviando uso lintestazione del campo entity. Per quel che riguarda il metodo GET non essendo presente questa parte user solo lheader e quindi la specifica del tipo MIME (oggetto + formato) nel campo header. In poche parole quando ho il metodo post significa che posso trasferire dati con http da client a server e i dati trasferiti sono allinterno del pacchetto nel campo entity. Ho bisogno di sapere visto che sto trasferendo dati come devono essere interpretati. Per fare questo per devo fare precedere i dati da unintestazione che specifica il tipo di formato di codifica. Per la GET non trasferisco dati ma richiedo e per stabilire l agreement dei dati che devo ricevere devo specificare nellheader il tipo MIME. Se richiedo un immagine per esempio adoperer un determinato tipo MIME. Se faccio post quindi il tipo MIME lo uso a maggior ragione perch specifico i dati per la codifica e,visto che MIME serve per le risposte scriver il tipo MIME riguardo a ci che mi aspetto in risposta. -PUT E DELETE : fanno upload di risorsa da client a server o rimozione di risorsa dal server. -HEAD: analogo a GET solo che richiede il trasferimento esclusivamente dellheader del pacchetto di risposta. Cio un metodo che consente di trasferire non risorse integralmente ma solo lheader del pacchetto. Serve perch nel momento in cui decido di trasferire una risorsa pesante opportuno che verifichi lagreement.(qua il prof si offende e se ne va dicendo che sta parte ce la facciamo da soli).

Telematica 2 - Lezione 7

Telematica II: Lezione del 13/06/2007


1. RIEPILOGO

Annamaria

Una richiesta http ha una struttura prestabilita e ha una componente di intestazione a lunghezza variabile a seconda delle informazioni che deve contenere. La parte dellintestazione la parte pi significativa perch contiene: il metodo di riferimento relativo allazione che si vuol far compiere con la richiesta sul server dal client, la versione di riferimento del protocollo e lURL ( identificatore univoco della risorsa a cui si sta tentando di accedere). Questi elementi costituiscono la request line, la quale stabilisce in modo rapido qual la risorsa di riferimento, qual il protocollo che verr adoperato e che tipo di azione si vuol far compiere sulla risorsa. Poi vi il campo dintestazione (lheader) con una serie di header lines, le quali contengono diverse informazioni. Infine, vi il corpo della richiesta, il quale esclusivamente presente solo quando viene adoperato il metodo POST (cio quando si chiede linvio di un contenuto al server). Un esempio di utilizzo del metodo POST lautenticazione mediante username e password (procedura di login). Per quanto riguarda lheader della richiesta possiamo avere differenti header field, ognuno dei quali ha un significato diverso. Spesso il significato attribuito allheader field di una richiesta, corrisponde ad un significato uguale e contrario in termini della risposta che il server deve restituire al client. 2. CODIFICA MIME

Quando si va a fornire informazioni al server (le quali devono poi essere interpretate), dobbiamo specificare anche tipo di codifica seguono queste informazioni. Per far questo si prende in prestito il paradigma MIME, il quale stato inizialmente adoperato per lSMTP (il quale era nato per far viaggiare essenzialmente messaggi testuali). Nel momento in cui si dovevano spedire solo dei caratteri, si aveva semplicemente bisogno di una codifica per caratteri alfanumerici, visto che i caratteri di riferimento possono essere contenuti normalmente in un database, per cui in questi casi il problema era risolto. Successivamente, per unestensione agli allegati della codifica dei messaggi SMTP, si visto che non era pi possibile usare come riferimento la codifica ASCII, in quanto si aveva bisogno di tutte le 256 codifiche. Proprio per questo, molto spesso in una trasmissione dati si fa riferimento ad un Content Type, che serve a specificare il tipo di oggetto che si sta scambiando e il tipo di formato, facendo si che il server ricevendo il messaggio con un tipo di oggetto e formato, si adegui in modo da interpretare il messaggio nella maniera pi corretta possibile. Quindi, nel momento in cui si instaura una comunicazione (questo vale anche per lhttp) che prevede la possibilit di scambiare una risorsa di un dato tipo, attraverso MIME si pu specificare che tipo di risorsa si sta trattando, mediante la dichiarazione Oggetto Formato. Infatti, al posto della parola chiave oggetto si indica il tipo di oggetto che si sta trattando (es. testo, immagine, file multimediale, etc), mentre al posto della parola chiave formato si indica il formato di riferimento (ad es. un oggetto testo potrebbe avere il formato html, etc). Ogni coppia Oggetto Formato costituisce un tipo MIME, oppure si pu anche dire che ogni coppia Oggetto Formato costituisce un Content - Type. Attualmente il MIME ancora alla versione 1.0, in quanto non stato mai esteso. Allinterno della codifica MIME, si possono inserire una serie di codifiche standard.

Telematica 2 - Lezione 7

Quindi, quando si va a specificare che tipo di formato ha un certo oggetto, si possono usare come riferimento delle codifiche standard (es. si pu usare base64, oppure 7 bit, oppure mp3, oppure mp4, etc). A seconda di quello che specifichiamo allinterno del metodo, il comportamento della struttura della richiesta diverso. I metodi possibili sono GET, HEAD, POST e PUT/DELETE. Il metodo che consente di interagire in modo semplice con il server attraverso una richiesta diretta il metodo GET. Questo metodo non fa altro che richiedere al server una risorsa le cui caratteristiche sono specificate allinterno della request line nel campo URL. Il metodo HEAD serve a richiedere una risorsa anche se non viene materialmente generata in risposta la risorsa stessa, ma con questo metodo il server restituisce solo lheader del pacchetto che deve contenere la risposta http (relativo a quella risorsa richiesta). Il metodo POST, invece, non serve a richiedere la risorsa, ma serve a mandare da client a server (quindi direttamente verso un hot spot) un set di dati che vengono materialmente contenuti allinterno del campo body della richiesta http. Specificando come metodo POST e inserendo i dati da passare nella request (nel campo body), noi passeremo questi dati al server. Quando specifichiamo i dati che vogliamo passare allinterno del campo post, dobbiamo specificare che tipo di dati stiamo fornendo. Quindi, andremo a fornire allinterno degli header le informazioni riguardo al tipo di dato che stiamo passando e alla lunghezza del contenuto soggetto a post. I metodi PUT e DELETE consentono di fare lupload o di rimuovere oggetti da un web server. PUT potrebbe essere abbinato allheader If Modify Since ( lheader che serve ad effettuare il caching con un upload possibile in modo condizionato). 3. STRUTTURA DELLA RISPOSTA La struttura della risposta speculare rispetto a quella della richiesta. Si ritrova una struttura analoga per quanto riguarda i campi dintestazione di request. La status line fornisce Versione Status code Phrase. Poi vi un set di campi di header (con il rispettivo valore). Infine, vi il corpo della risposta che si incarica di contenere loggetto (in generale la risorsa) che stata precedentemente richiesta attraverso, ad esempio, una richiesta con metodo GET. Lo status code un codice numerico che serve a fornire immediatamente unindicazione per quello che lo stato della richiesta che il client ha inviato in precedenza. In particolare, lo status code un valore numerico a tre cifre che pu appartenere a 5 differenti classi. A seconda della classe di appartenenza, identifichiamo una tipologia di stato differente. Le 5 classi di riferimento per lo status code si distinguono attraverso la prima cifra a sinistra del codice. Tutti i codici di tipo 1XX (informational) conterranno messaggi analoghi. In particolare, questi sono messaggi informativi. Un esempio di messaggio informativo potrebbe essere una risposta di carattere generale non specifica ( ad es. il server ha ricevuto una richiesta che si tratta di unelaborazione). La classe 2XX (Successfull) indica lesito positivo di una richiesta precedentemente inoltrata ( ad es. il server ha ricevuto una data richiesta; la richiesta stata interpretata; linterpretazione ha avuto esito positivo, per cui il server accetta la richiesta). Per quanto riguarda la classe 3XX (Redirection), ad es. il server ha ricevuto una richiesta, la richiesta stata interpretata, tuttavia necessario processare ulteriormente la richiesta prima di poter fornire uno stato definitivo. Quindi, questo tipo di status code uno stato di tipo intermedio. Quindi questa classe identifica leventualit per quale il server ha ricevuto

Telematica 2 - Lezione 7

una richiesta, la richiesta stata interpretata correttamente, ma questa richiesta non pu generare un esito definitivo, perch sono necessarie ulteriori elaborazioni ( necessario un post processing della richiesta prima di fornire una risposta definitiva). La richiesta che stata materialmente inoltrata dal client viene sottoposta ad ulteriori elaborazioni, cio viene ridirezionata verso ulteriori elaborazioni. Invece, le classi 4XX e 5XX sono delle classi di errore, cio si riferiscono a richieste che non possono essere soddisfate per motivi diversi. La classe 4XX (Client Error) si riferisce a richieste che sono state ricevute, ma che non possono essere portate a conclusione (a seguito di uninterpretazione). Le motivazioni di questa mancata conclusione della richiesta sono espressamente specificate allinterno delle altre due cifre che compongono lo status code. Ad es., ci potrebbe essere una corruzione del messaggio da parte del client (quindi un errore sintattico) oppure ci potrebbe essere un errore semantico (cio la richiesta non pu essere portata a termine perch non una richiesta autorizzata). Si riferisce ad errori dal lato Client. La classe 5XX (Server Error) si riferisce ad errori dal lato server: la richiesta pervenuta; stata interpretata (la richiesta potrebbe anche essere corretta), tuttavia il server non in grado di portare a termine per motivi diversi ( indicati nelle altre due cifre che costituiscono lo status code) la richiesta che stata inoltrata dal client. Un es. sono gli script CGI (Common Gateway Interface): una tecnologia pi recente rispetto ad html (quindi http), che serve per consentire a server generici di interfacciarsi in maniera general- pourpose rispetto ad applicazioni diverse. Infatti, quando abbiamo uninterazione client server tra il client http e un server http, possiamo avere 2 strade diverse (in termini di interazione): a) possibile che il client richieda al server web una risorsa identificata da un certo URL e questa risorsa in html, per cui viene immediatamente restituito un documento html (ad es. contenente immagini, elementi grafici), il quale statico (cio un documento che viene restituito in quel modo anche in sessioni diverse). Quindi, un documento che non cambia. Questa una soluzione abbastanza limitativa. b) l identificatore non corrisponde ad una risorsa di tipo statico, ma corrisponde ad una risorsa di tipo dinamico, cio ad uno script, ad un programma che verr eseguito dal lato server tante volte quante sono le sessioni per cui lo si va ad eseguire in tempo reale ( run time) e verranno restituiti al client direttamente le informazioni che sono state generate in modo dinamico. Un esempio di CGI sono le pagine asp (pagine dinamiche). Esse sono pagine che vengono restituite a seguito di unelaborazione da parte del server, a seguito di una richiesta proveniente dal client. Quindi, non viene restituita una risorsa statica (sempre uguale nel tempo), ma viene restituito lesito di unelaborazione a run time da parte del server. Esempi di status code comuni sono: a) 100: un codice informativo che contiene uninformazione di continuazione. Il server riceve un check da parte del client e risponde al check con un messaggio di continuazione, che serve come acknowledgment per richiedere il body di una richiesta direttamente al client. Ad es., si instaura una connessione TCP; viene aperto un socket; su quel socket si fa passare lo stream client server (quindi su questo socket apriamo una connessione http). Nel momento in cui stata aperta una connessione http si pu chiedere con una GET, la pagina che contiene le credenziali di autenticazione (username e password) per accedere ad unarea riservata del sito. Questa pagina pu essere ricavata direttamente con una GET (scarico in modo statico la pagina). La risposta alla GET da parte del server, conterr un codice in cui il server si aspetta il corpo del messaggio contenente username e password, perch deve autenticare in quella pagina lutente per consentire laccesso allarea riservata del sito. b) 200: un codice di ok.

Telematica 2 - Lezione 7

c) 201: oggetto creato con successo sul server a seguito di un metodo PUT. d) 301: un caso di stato riferito ad una ridirezione. Ad es., viene fatta una richiesta ad un server, la quale non pu essere portata a termine, ma sappiamo che lURL di quella risorsa stato spostato su un server di cui gi conosciamo lindirizzo (in quanto lindirizzo del nuovo server da contattare contenuto nella risposta). e) 404: un codice che indica il mancato ritrovamento dellidentificativo di una certa risorsa. E il tipico messaggio in risposta alla richiesta di un indirizzo http sbagliato. f) 400: indica un errore sintattico nella richiesta, che la rende non interpretabile correttamente da parte del server. g) 401: indica una richiesta non autorizzata (manca lautorizzazione). Una richiesta autorizzata una richiesta che deve portare con se un set dinformazioni che servono da parte del server a fare il performing dellautorizzazione. Quindi, la richiesta porta con se un bagaglio che verr adoperato dal server per poter fare lautorizzazione. Se questautorizzazione non va a buon fine, la richiesta viene respinta con un messaggio derrore. Quando una richiesta non autorizzata, vuol dire che la richiesta non porta con s il challenge (cio il bagaglio che serve a fare lautenticazione). h) 403: indica una richiesta non autorizzabile. Indica un esito negativo della procedura di autorizzazione. Quindi, la richiesta che giunta al server non pu essere soddisfatta in quanto non pu essere autorizzata. i) 500: il caso in cui tipicamente si ha un CGI errato (una pagina che contiene degli errori nello script). j) 501: indica che il metodo che si sta chiedendo di impiegare sul lato server un metodo che il server non conosce (non appartiene al set dei metodi dellinterfaccia del server). E un messaggio che si usa quando si programma linterazione con gli errori verso i client. 4.HEADER DI UNA RISPOSTA Per quanto riguarda gli header di una risposta http abbiamo meno informazioni rispetto a quelle che possiamo integrare in una richiesta http. Gli header da ricordare sono: a) SERVER: si indicano le caratteristiche strutturali del server. Quindi, si indica il tipo di server, marca, versione e lequivalente dal lato client di User Agent. b) CONTENT TYPE: si indica che cosa il server sta restituendo al client, in risposta a quello che il client ha chiesto. Ogni Content Type codificato. Ogni codifica ben precisa ed assegnata da IANA (Internet Assigned Number Authority), che lautorit che gestisce i dati. I Content Type sono i tipi MIME, cio coppie oggetto formato. c) HEADER DI AUTENTICAZIONE: include un challenge (codice di partenza) con cui il meccanismo di autenticazione deve matchare. Si verifica lesistenza dei presupposti affinch il client, con la sua richiesta, possa essere accreditato (autorizzato) a compiere determinate azioni sul server ( ad es. lingresso in unarea riservata; oppure poter fare materialmente delle operazioni sul server; etc). Quindi, attraverso il meccanismo di challenge ed autorizzazione si fa in modo che client e server facciano un agreement riguardo alla possibilit che il client stesso entri in unarea riservata, oppure possa eseguire delle operazioni specifiche, etc. Allinterno dellheader di autenticazione si ha un certo codice di partenza (challenge) che deve matchare con il meccanismo di autenticazione previsto. Quindi, il client generer attraverso il challenge un valore di autorizzazione che viene messo nellheader authorization, il quale deve seguire la risposta che il server ha fornito dopo il meccanismo di authorization. Sappiamo che nella risposta ci sono degli header field con i campi value. Per cui, in corrispondenza dellheader field WWW AUTHENTICATE, si ha nel campo value un

Telematica 2 - Lezione 7

challenge (codice generico che rispecchia il meccanismo di autenticazione), che fa si che il meccanismo di autenticazione previsto dal server (qualunque esso sia), debba matchare con il challenge stesso (cio il challenge stesso pi il meccanismo di autenticazione previsto dal server devono avere una corrispondenza 1 a 1). Nella riposta si fornisce al client solo il challenge. Il challenge ignora completamente il meccanismo di autenticazione previsto dal server, ma serve semplicemente a far si che il client generi un valore di autenticazione mediante i suoi meccanismi, che poi dovr essere inglobato nella successiva richiesta verso il server; se tale valore di autenticazione matcha esattamente con quello posseduto dal server, il client potr entrare nellarea riservata. Il challenge una sfida che il server lancia al client, che serve a far generare dal client il meccanismo di autenticazione che verr inglobato nella richiesta successiva; a questo punto il server vedr se effettivamente tra il challenge e il meccanismo di autenticazione c una corrispondenza 1 a 1. In un meccanismo di autenticazione abbiamo che il client e il server (in remoto) devono accordarsi riguardo alla possibilit di consentire al client laccesso verso risorse riservate. Innanzitutto, il client richiede al server lautorizzazione verso unarea riservata. A questo punto il server risponder con 401. Quindi, bisogna effettuare lautenticazione. Quando il server risponde con 401, fornisce anche un codice (challenge) che ingloba nel campo AUTHENTICATE della risposta. Questo codice lunica componente che viene adoperata dal client e dal server per verificare la possibilit di consentire al client laccess allarea riservata. Quando, il client vede il challenge allinterno della risposta del server generer un valore di autenticazione basato sul challenge (quindi sfrutta il challenge come punto di partenza), e inserir allinterno dellheader authorization di una request http una nuova richiesta verso il server. Il server, poi, prendendo il challenge generer a sua volta il valore di autenticazione e lo comparer con il valore di autenticazione pervenutogli dal client. Se i due valori coincidono, allora il client pu entrare nellarea riservata, altrimenti il server dir al client che la richiesta non autorizzabile (codice 403). In realt, non deve esserci una vera uguaglianza tra i due valori di autenticazione generati rispettivamente da client e server, ma il server deve verificare che il codice di autenticazione generato dal client deve appartenere ad un set di categorie. 5.RICHIESTA DI UNA PAGINA WEB ALLURL Supponiamo di fare la richiesta al web server del sito: http://sisinflab.poliba.it/ruta/ In colonna abbiamo: a. TIME: istante in cui stata raccolta la richiesta b. SOURCE: indirizzo di chi ha inoltrato la richiesta raccolta c. DESTINATION: destinazione d. PROTOCOL: protocollo di riferimento e. INFO: informazioni accessorie Nellistante 0.000301, il client che richiede una data risorsa quello che indirizzo 193.204.59.21 Il destinatario ha indirizzo 193.204.59.75 Il protocollo di riferimento il TCP. Nelle informazioni accessorie si specifica verso chi si sta facendo la richiesta, a partire dalla porta n.ro 1060. E una richiesta http, per cui mi aspetto che dopo

Telematica 2 - Lezione 7

lacknowledgement sulla connessione, si passi ad uninterazione basata sullhttp (sto quindi stabilendo quella che la parte di basso livello della mia connessione futura). Quindi, ho specificato che tipo di protocollo voglio ottenere (cio http). Poi, ho una serie di riferimenti per la puntualizzazione: Seq=0; Ack=0. Inoltre, ho altre informazioni accessorie riguardo la finestra (Win) e la lunghezza (Len). Queste sono delle informazioni a livello http. Nellistante 0.000591 si ha la risposta da parte del server alla richiesta che stata inoltrata precedentemente. Infatti, in corrispondenza del campo Source c lindirizzo 193.204.59.75 E una risposta da http a 1060, e questa volta c sia Sincronizzazione che Acknowledgement. Il Seq=0, mentre Ack=1. Nellistante 0.000664, il client deve settare il Seq. Lacknowledgement era stato raggiunto, per cui lascio Ack=1 e metto Seq=1 (lo setto). Successivamente, a connessione riscontrata si pu passare alla fase successiva. La struttura di un pacchetto che viaggia, da quel punto in poi, una struttura a noi nota. Nellistante 0.000993, si ha che il sorgente 193.204.59.21, il destinatario 193.204.59.75 e il protocollo di riferimento http. Come informazioni accessorie, si sta richiedendo, con un metodo GET, la risposta ruta ( sufficiente specificare solo il percorso locale, in quanto ho gi specificato qual lhost di destinazione; infatti dire sisinflab.poliba.it equivalente a 193.204.59.75, perci una volta specificato lhost di destinazione, su di esso ci si muove con la GET). La versione del protocollo http 1.1 Il linguaggio accettato litalian. Per quanto riguarda le caratteristiche del Client, lheader User Agent ci dice che si tratta di Mozilla/4.0. Keep Alive una tipologia di connessione. A questa richiesta http corrisponde una risposta da parte del 193.204.59.75 Il protocollo di riferimento http versione 1.1 Lo status code 200. Date la data di riferimento. Server: indica le caratteristiche del server. Content Length: indica la dimensione della risposta. La connessone di tipo Keep Alive serve a mantenere in vita il rapporto tra client e server fino a quando non si sar conclusa linterazione.

Telematica II Lezione 8

1 Telematica II Lezione 8 14 /06/07

Abbiamo iniziato a vedere ieri una risposta da parte del server del tipo 200 OK. Abbiamo detto che questa era la risposta ad una GET, per cui era la risposta ad una richiesta di risorsa,e a seguito di un esito positivo, il server risponde con uno status code 200, fornendo poi tutta una serie d informazioni che abbiamo gi valutato guardando la struttura di un pacchetto http di risposta. La prima informazione che ieri non abbiamo incontrato il keep alive. A che serve? Serve perch http state less. Cio in http non abbiamo una cognizione esatta dello stato della connessione, ovvero http un protocollo che non mantiene memoria della connessione. Questo significa che durante la stessa connessione, 2 richieste differenti verranno trattate da http in maniera totalmente anonima. Cio http non riesce a capire che quelle 2 richieste in realt appartengono alla stessa connessione. Siccome molto spesso necessario avere memoria di una connessione, abbiamo bisogno di tutta una serie di meccanismi e accessori che servono a recuperare lo stato della connessione. Banalmente quando faccio una richiesta di autenticazione, immetto in una pagina web, un nome utente e una password, mi aspetto che il sistema non mi richieda alla schermata o richiesta successiva di inserire di nuovo username e password. http essendo state less si comporterebbe esattamente cosi. Per ovviare a tale problema dobbiamo dotarci di appositi meccanismi che siano in grado di recuperare username e password (nel nostro caso) ogni volta che capiscono che 2 o pi richieste appartengono alla stessa connessione. Keep alive uno di questi meccanismi. Keep alive stabilisce in che modo e in che termini io devo mantenere traccia di una connessione. In realt ogni volta che una connessione non necessita di una memoria di uno stato (ad es. un accesso ad unarea pubblica), posso anche fare a meno di keep alive. Se invece come in questo caso (pag 39) stiamo tentando un accesso ad unarea riservata, nel campo connection richiesto il keep alive. Se viene richiesto il kepp alive, il sistema specifica anche le caratteristiche che esso deve avere; cio deve specificare in che termini deve essere garantita la memoria della connessione. Osserviamo che in corrispondenza del keep alive viene specificato un valore di timeout e un numero massimo di richieste per connessione. Cosa sono questi 2 valori? Sono i 2 valori che esplicitano le direttive che impone il server (apache) per fare in modo che venga conservato lo stato, della connessione. In questo caso il server stabilisce che tramite i suoi meccanismi (che vedremo in seguito) mi ricorder di una data connessione a patto che: 1)su quella connessione bisogna inoltrare richieste massimo entro 15 secondi. Cio bisogna interagire col sistema ogni 15 secondi al massimo. Se il tempo che intercorre tra 2 richieste successive maggiore di 15 secondi, il server non mantiene pi la memoria dello stato e ci viene

Telematica II Lezione 8

mostrato a video il messaggio sessione scaduta. Ovviamente questo timeout va dimensionato in base alla web application (tipo di transazione che stiamo effettuando); per un conto bancario online, 15 secondi sono pochi. 2) il numero massimo di richieste per connessione non superi un determinato valore max. Questo vuol dire, che anche se rispetto il vincolo sul timeout, non posso aver sulla stessa connessione un numero imprecisato di richieste, altrimenti sovraccaricherei il server. Superato questo numero max di richieste, mi vedr la connessione rifiutata, chiusa. Anche questo parametro stabilito in base alla web application. Dopo lheader (pag. 39) ho il corpo della pagina, perch ricordiamo, avevo fatto una richiesta di tipo get. Una get presuppone come risposta (dal server), una http reply che contenga un body. Il body ha come intestazione il content type (tipo MIME). Il content type di tipo oggetto/formato. Nella fattispecie oggetto text, e formato html. Quindi mi aspetto come risposta una pagina html. La parte ancora successiva materialmente il corpo della risposta, cio un pezzo della risorsa che io ho richiesto e che il server ci sta fornendo. Tornando ora al discorso del keep alive, vediamo come e perch ho bisogno di una serie di meccanismi per garantirmi la persistenza delle informazioni riguardo ad una connessione. Abbiamo detto che http state less. Questo cosa vuol dire? Significa che a livello applicativo non ho cognizione delle richieste avvenute prima. A livello 7 cio non memorizzo (ignoro) lo stato delle richieste precedenti. In base a questo, diventa problematico gestire tutte quelle applicazioni/sessioni come laccesso ad unarea riservata, che necessitano di una memoria dello stato. Quindi come posso risolvere tale problema? Posto che, definiamo sessione, lintervallo temporale che intercorre tra una procedura di login e una di logout (e che quindi comprende tutte le operazioni che avvengono in questo intervallo), allinterno di una sessione possiamo definire autenticato, un utente che abbia introdotto delle credenziali, successivamente verificate. Il mio problema fare in modo che allinterno di una sessione, si possa tener traccia dellutente. Per fare ci mi avvalgo di alcune tecnologie. Questo non significa forzare la connessione ad essere univoca sul socket, poich la connessione gi univoca di suo a livello di socket; il fatto che a livello 7 non conosco quello che avvenuto prima di questa richiesta. Per garantire,dunque, la memoria dello stato ricorro ad una tecnologia particolare datta cookie. [etimologia di cookie.ma non ce ne fotte una mazza].

Telematica II Lezione 8

Un cookie uninformazione che viene memorizzata secondo forme diverse (allinterno di un file testuale) dal lato client e dal lato server, e serve a tenere traccia di una connessione. N.B. un cookie non il file testuale, che troviamo allinterno della cartella omonima, generato dal browser. Il concetto di cookie viene introdotto per la prima volta da netscape, proprio per risolvere il problema dello state less e doveva servire a profilare lutente allinterno di una data sessione. Nel momento in cui un utente richiede laccesso ad una certa area (login), il server generer, allinterno dellheader di risposta, un valore numerico, preceduto dallintestazione e dal field del cookie. Questo valore numerico viene generato casualmente, e corrisponde allapertura di una entry su un database, riservata allutente che sta per effettuare la connessione. Mi spiego meglio. Lutente chiede laccesso ad un area riservata, sta cio per stabilire una session, tramite la quale richiedere risorse riservate. Questo comporta dal punto di vista del server, una richiesta di autenticazione tramite username e password. A questo punto, come si fa a stabilire una connessione dato che http state less? Prima che il client immetta nome e password, il server invia un pacchetto di risposta, contenente un header detto set-cookie. Allinterno di questo header, nel campo valore, viene immesso un valore numerico (generato in modo random dal server), che sar a tutti gli effetti lidentificativo di quella sessione. Il cookie dunque, almeno nella sua prima concezione, era proprio questo valore numerico assegnato dal server ad una data sessione. Per poter tracciare lutente allinterno di una sessione (cio nei suoi movimenti successivi), il server deve aprire una entry sul proprio database, in corrispondenza di quel valore di cookie (che funger da chiave). Il client vedendosi ritornare questo valore numerico allinterno del set-cookie, prelevar questo valore, lo memorizzer insieme a tutta una serie di informazioni accessorie, allinterno di un file testuale (memorizzato nella cartella cookie di windows). Una volta memorizzato questo valore, esso potr essere utilizzato dal client per la richiesta successiva. Questo cosa significa? Nellheader della richiesta successiva, allinterno dellheader-field cookie, verr messo questo valore, che aveva generato il server stesso. (pag 43) Supponiamo che il server abbia esposto una generica web application che preveda la necessit di mantenere traccia di una sessione. A livello applicativo abbiamo quindi bisogno di recuperare la memoria dello stato, attraverso il meccanismo dei cookie. Cosa succede?

Telematica II Lezione 8

Il client fa richiesta di una data risorsa (riservata). La server application mi risponde che necessario utilizzare un cookie. Allinterno dellheader della risposta, allinterno dellheader-field del cookie, nel campo value, verr impostato un valore di riferimento. Questo valore di riferimento un identificativo della sessione. N.B. il meccanismo dei cookie totalmente esterno al protocollo http. Il file testuale che generiamo un qualcosa, che generiamo sulla macchina locale (client) e che corrisponde a un qualcosa di analogo nellentry del database dal lato server, ma del tutto esterno ad http. In http abbiamo solo un richiamo a questo meccanismo che consiste in 2 header, uno della richiesta e uno della risposta, rispettivamente cookie e set-cookie. Una volta che ricevo il riferimento al cookie, nelle successive mie richieste, indicher al sistem nellheader-field cookie, quel valore numerico. In definitiva un cookie serve a mantenere in piedi una data sessione. Infatti ogni volta che si far riferimento a quel valore di cookie, in fase di una richiesta d iuna risorsa, il sistema potr recuperare lo stato della connessione (tutta la storia pregressa), semplicemente facendo una query a database, contenente come campo chiave quel cookie. Perch questo meccanismo potrebbe essere pericoloso per la salvaguardia della privacy dellutente? Proprio perch un meccanismo di tracciabilit dellutente, quindi qualcuno in rete potrebbe sniffare tutti i movimenti di un indirizzo IP (cio di un utente). Lunico modo per eliminare queste informazioni che tengono traccia dellutente cancellare il file testuale (che contiene il cookie) che costituisce lunico riferimento per quella web application per recuperare tutte le informazioni sul nostro conto. Posso disabilitare i cookie? Si posso disabilitarli dal browser e quindi tutte le risposte da Server che richiedono SET cookie le rifiuteremo. Questo per positivo se i cookie vengono generati in maniera maliziosa, ma quando sono indispensabili per entrare in una sessione, (tipo per fare autenticazione) il meccanismo necessario perch il server impone di attivarli. Se andiamo su un sito di commercio elettronico, per esempio e-bay, ci sono cookies a valanga perch una volta autenticati, possiamo fare acquisti multipli e il sito deve tenere conto di questo carrello virtuale. Proprio in siti come questo, il sistema attraverso una banale query, riesce a capire le nostre preferenze , questo sistema noto come sistema di profilazione indiretta : noi non abbiamo specificato nulla della nostra vita, ma il sistema risale a molte cose. Quindi gli Advanced-

raccomandation-System sfruttano i cookie per rintracciare le preferenze degli utenti e gestire le pubblicit automatizzate. Il server di commercio elettronico mantiene il riferimento per i web server

Telematica II Lezione 8

di pubblicit con cui ha stipulato un contratto. Se ad esempio vado su e-bay pi volte in giorni diversi, e sono solito visitare le pagine relative agli smart phone, il sistema pu dedurlo banalmente e informare i web server della pubblicit ( ce ne uno ogni pagina) e fare in modo che trasmetta un Banner (pubblicit) che riguarda smart phone anzich uno che riguarda qualcosaltro. Vengo in pratica classificato come un utente che appartiene ad una determinata categoria (nellesempio la categoria di quelli che comprano smart phone). Se cancello in una sessione i cookie, non hanno altro modo di rintracciarmi (in generale, ma possono con altri modi). Quali sono le informazioni contenute allinterno di un cookie? -Stringa di commento: serve come unistruzione generale riferita alla provenienza del cookie. -Domain : dominio in cui il cookie valido. Viene usato perch possibile che pi domini usino lo stesso cookie. Supponiamo che e-bay e Poliba generino lo stesso cookie 111, come faccio a distinguere quale di uno e quale dellaltro? Dal domain -Max age: durata massima in secondi di valenza per il cookie; indica la loro scadenza, un meccanismo di controllo. -Path: il riferimento alla risorsa per cui il cookie stato generato e per cui ritenuto valido. -Secure: il cookie richiede che il client imposti con il server una connessione in maniera sicura, possibile gestire lautenticazione attraverso una procedura sicura. -Version: versione a cui il cookie aderisce ed quella di riferimento.

N.B. Domain il dominio a cui il cookie aderisce, il path la risorsa allinterno di quel dominio

Autenticazione

E possibile dover richiedere accesso ad aree riservate; posso imporre che ci sia un criterio di accesso che comporta unautenticazione dal client, procedura che viene gestita direttamente da http e non potrebbe avvenire diversamente perch ho necessit di fare transitare al livello applicativo tra client e server le informazioni di autenticazione. Come si stabilisce se abbiamo la necessit di autenticazione? Un client vuole accedere ad una data risorsa; Quindi il client richieder tramite una GET, la risorsa specificata dallURL; tale risorsa per riservata. Il server risponder alla GET, cpn una risposta http avente status code 401(unauthorizedmanca lautorizzazione). Nell header, nel campo www.authenticate, saranno specificati i criteri tramite cui il client dovr autenticarsi . Ci sono due tecniche di autenticazione in http. La loro differenza in termini di sicurezza:

Telematica II Lezione 8

Basic Authentication : usata da http 1.0; nel momento in cui il Server manda risposta con wwwautenthicate, nel campo valore avr un riferimento al dominio. Dopo il client deve procedere a richiedere allutente i valori per lautenticazione, che lui imposter, e dopo verranno passati al Server. Dopo il client invier una nuova GET per la risorsa su cui aveva avuto in precedenza la richiesta di autenticazione, che conterr i valori di autenticazione codificati in BASe64, ovvero in chiaro. Questo comporta che ad ogni transazione di autenticazione, qualcuno che sniffa in rete, pu scoprire user e password. Digest Access Authentication:Viene usate da http 1.1, questa volta le transazioni con la GET successive alla prima impostazione, prevedono anzich un passaggio in chiaro,un passaggio crittografato in MD5. Cio la prima volta soltanto far passare i dati in chiaro con codifica Base64, dopo user dati cifrati in codifica MD5. Questa volta potremmo essere spiati solo durante la prima autenticazione. Lalternativa altrimenti che il browser conosca MD5 per applicare lo stesso algoritmo del server, solo in questo caso saremo sempre sicuri che nessuno sniffi user e password. Comunque per rendere pi sicura lautenticazione oltre alla codifica in md5 della password, vengono codificati anche username, realm, URI richiesto, ecc. Comunque resta il problema dovuto alla prima autenticazione. Perch? Perch dobbiamo far arrivare per la prima volta la password in chiaro sul server, in modo tale che lui possa memorizzarla, e poi nelle autenticazioni successive si possa adoperare la codifica md5.

Telematica 2 - lezione 9

Telematica II 20/06/2007 Siamo arrivati fino alla digest authentication, e abbiamo detto che uno dei 2 meccanismi di autentificazione che viene fornito con http; in particolare la digest authentication di http 1.1. Oggi parliamo dei proxy server. La necessit dei proxy server venuta fuori solo dopo che http e il web hanno preso piede. Si tratta di un meccanismi per garantire una maggiore sicurezza delle applicazioni http oppure migliorare le prestazioni di una applicazione http. In particolare, un proxy server un oggetto, un server che si interpone tra un client(browser) ed un web server. La tipica configurazione quella rappresentata nella figura a pag. 47, nella quale abbiamo una LAN, una rete locale che passa da un proxy server, prima di entrare nella rete Internet. Le funzionalit che possiamo avere per un proxy server sono di due tipi: Proxy di cache Proxy di filtro

Una funzionalit di tipo cache sostanzialmente serve per migliorare le prestazioni in termini di velocit della risposta da parte del server web; perch si va a cachare in una locazione intermedia, che quella del proxy, richieste multiple indirizzate verso gli stessi URL. Un proxy server di tipo cache non fa altro che immagazzinare al suo interno le risposte provenienti da un web server in corrispondenza di un medesimo URI/URL. Tenendo informazioni su questo tipo di richieste si sfrutta il principio di localit temporale; in particolar modo la risposta che il proxy fornisce una risposta diretta senza che allinterrogazione del browser si debba passare necessariamente per il web server, quindi la richiesta non esce nemmeno dai confini della LAN. Quindi, mi risponde il proxy non il web server, nel senso che alla prima richiesta non faccio caching, nemmeno alla seconda per dopo un certo numero di richieste provenienti dalla LAN faccio caching di un certo URL, cio mantengo dentro il proxy la risposta a quellURL e dopo di che anzich andare a rispondere il web server direttamente, mi risponder il proxy . Siccome i tempi di latenza di una risposta via LAN sono di circa 2 o 3 ordini di grandezza pi bassi rispetto a quelli del web, io sostanzialmente ricever una risposta in tempo reale. La necessit di avere un proxy server deve essere valutata in fase di progettazione di una rete; la presenza di un proxy server in una rete e la sua progettazione comportano una complessit maggiore della rete LAN stessa. Come si fa a stabilire se c un vantaggio o meno nellavere la presenza di un proxy server? Lidea che un proxy server comunque porta un vantaggio perch 1

Telematica 2 - lezione 9

riduce le latenze, questo particolarmente vero quando si ha a che fare con una rete di una azienda che orientata verso un certo target (es. nella rete del politecnico di Bari, ha senso avere un proxy e cachare le richieste verso il GAR, richieste verso altre universit ). In ogni caso, il vantaggio di avere la presenza del proxy server si sente per bassi valori di cache miss. Li dove abbiamo valori sufficientemente bassi di cache miss(risposta derivante dallassenza in cache di pagine o risorse corrispondenti ad un dato URL) il proxy vantaggioso, altrimenti se i valori di cache miss che il proxy server produce sono elevati, ci significa che introduciamo ulteriore overhead, che dato dalla consultazione del proxy , del percorso tra una richiesta e una risposta e quindi la presenza del proxy diventa deleteria(i tempi di risposta sono pi alti). Come si fa a ridurre o a far tendere a zero il cache miss? Programmando le policy di gestione del proxy server in maniera adeguata, cio stabilire che tipo di richieste a risposta vanno cachate, dopo quanti tentativi di richiesta bisogna effettuare il caching, che tipo di gestione deve avere la cache e dopo quanto tempo devo perdere linformazione. Quindi a seconda della policy di gestione del proxy server che utilizziamo possiamo avere diversi valori di cache miss.

La seconda tipologia di proxy, sono i proxy per applicazioni di sicurezza cio i cosiddetti proxy di filtro. Un proxy di filtro viene impostato alluscita di una rete verso il www per esigenze o di controllo o di sicurezza da parte degli utenti che si trovano in quella rete e che tentano di uscire sul www(web). un punto di passaggio privilegiato e univoco verso il web. Si pu imporre come criterio la necessit di eseguire una richiesta non sempre ma solo in specifici casi ; ad es. supponiamo che ci siano una serie di utenti del politecnico di Bari che di norma vanno a scaricare da una serie di siti delle risorse che di regola no dovrebbero essere consentite. Prendiamo il caso di una azienda che vuole vietare ai suoi dipendenti di fare spionaggio industriale cominciando con il verificare che non vengano visitati i siti di aziende concorrenti. In questo caso come si fa a consentire laccesso a tutto tranne che ai siti delle aziende concorrenti? Si crea una cosiddetta black list il cui contenuto(allowed/not allowed domains) una lista di siti ammessi o di siti non ammessi, per cui ogni qual volta viene inoltrata una richiesta che passa attraverso il proxy, il proxy fa un check sulla black list e se il sito che si sta richiedendo non si trova nella black list, la richiesta esce sul web e poi si riceve una risposta; se invece, il sito si trova nella black list il proxy server risponde con una risposta di mancata autorizzazione.

Telematica 2 - lezione 9

La policy di gestione di un proxy filtering potrebbe essere di tipo permesso/non permesso, nel senso che la black list pu essere fatta anche in negativo. Posso stabilire allinterno della black list quali sono i siti concessi oppure stabilire quali sono i siti non concessi. In alcune aziende pu essere negato laccesso a web mail( siti di posta elettronica). Chi stabilisce che la policy di gestione in un proxy filtering deve essere di tipo permesso o non permesso lazienda la quale se vuole espressamente vietare laccesso ad alcuni siti adotta una politica di tipo non permesso. Sia in un caso proxy di filtro che nellaltro proxy di cache(una non esclude laltra, possono essere abbinate) la struttura tipica di unapplicazione che abbia un proxy complessa, tale complessit sta soprattutto nella gestione.

Vediamo come deve essere effettuata con riferimento al proxy di cache la gestione del caching(pag. 48) stesso sul proxy. Il caching sul proxy non immediato, nel senso che deve essere fatto un bilancio sempre e comunque verificato tra loverhead derivante dalla consultazione del proxy e il cache miss, si deve verificare che il numero di cache miss che si producono non troppo elevato. Come si fa il bilancio? Quello che si va a vedere la politica di gestione del caching sul proxy. La tecnica di memorizzazione delle risorse in locale, di realizzazione del caching sul server di prossimit pu essere uno dei tipi di caching che si possono realizzare. La presenza di una memoria cache che tenga traccia delle risorse recentemente caricate, basata sul principio di localit temporale imprescindibile; tanto vero che qualora non possibile o non opportuno settare la presenza di un proxy server in ogni caso si fa caching in locale, cio si utilizza una parte dello spazio del volume fisso della macchina per tener traccia, memorizzare le risorse pi recentemente referenziate/utilizzate. Tutti i client sono abilitati per fare caching delle risorse scaricate dal web; infatti quando noi proviamo a richiedere nuovamente una risorse cachata, la prima risposta che ci arriva la risposta direttamente proveniente dal nostro hardisk, dalla cartella cache. Oltre questo meccanismo si pu complicare il caching attraverso la presenza di un server in prossimit; date le latenze tipiche del www strettamente necessario fare caching. In linea di massima la classificazione che possiamo fare il lato su cui facciamo il caching(lato server e/o lato client); in effetti leffetto che produco su una risposta pu essere differente. Se faccio caching di tipo client-side sicuramente posso ottenere dei benefici, se faccio caching server-side posso ottenere altri benefici; se faccio caching attraverso proxy avr una situazione 3

Telematica 2 - lezione 9

intermedia che mi produrr unaltra serie di benefici. Quando devo andare ad esaminare questa serie di benefici io devo guardare che cosa succede sulloverhead della mia risposta e cosa succede sul carico di rete(parametri essenziali da verificare) . Perch il caching dovrebbe ridurre il carico di rete? Perch se una risorsa in realt non stata modificata dallultima volta che io ho provveduto a scaricarla, non ha molto senso riscaricarla cio introdurre altro carico allinterno della rete per fare un nuovo download, visto che la risorsa ancora fresca. Quindi il caching oltre a introdurre un abbassamento dei tempi di risposta, produce una riduzione del carico di rete. Sempre produce un abbassamento del carico di rete? Non detto, perch se io faccio caching dal lato client o faccio caching sulla prossimit, attraverso il proxy server, io non vado ad interessare il web, quindi non vado ad introdurre in nessun modo ulteriore carico nella rete. Tuttavia, se faccio caching su lato server, quindi se vado ad impiegare una macchina intermedia nel percorso fino alla risorsa che sto cercando per fare caching, comunque introduco un carico sulla rete, sar un carico pi basso ma comunque lo introduco. Quindi i parametri da valutare sono la verifica puntuale del cache miss e la verifica puntuale sul carico di rete, considerando il fatto che qualora il carico di rete non possa essere ridotto non posso intervenire. Date queste 3 politiche di caching vediamo come devo comportarmi, cio dove devo andare a controllare per vedere se sto mantenendo i parametri entro dei limiti di accettabilit per risparmiare sulloverhead, sul tempo di risposta e sul carico di rete. Per fare la gestione del caching, http 1.0 adoperava particolari header-field che permettevano di verificare la natura di una risorsa che si stava richiedendo; abbiamo visto che in http 1.0 il server da una label sulla data di expiration della risorsa, cio impone una scadenza della risorsa stessa; cio il server attraverso la label expires stabilisce quando questa risorsa cade. Allo stesso modo, il client nella richiesta http attraverso lheader-field if modified since stabilisce che vuole una richiesta, solo ed esclusivamente se questa richiesta stata modificata a partire da una certa data. In questa maniera il client si garantisce sul fatto che risorse similari a quelle che gi lui possiede con il server di prossimit oppure locale non verranno ad ogni caso ad interessare la rete. La data viene fissata in base alla data che possiede la risorsa che io gi ho. Ovviamente per mantenere questa tipo di controllo su una risorsa strettamente necessario avere un meccanismo di gestione del tempo che sia comune tra client e server, client e server devono in fase preliminare avere un agreement riguardo alla misurazione del tempo che fanno. Oltre a questo esiste una terza possibilit in http 1.0 che il cosiddetto pragma no-cache, se il server impone la direttiva pragma no-cache questo significa che in ogni caso la risorsa non pu 4

Telematica 2 - lezione 9

essere cachata, cio il client non pu tenere traccia della risorsa e quindi la risorsa va ricavata direttamente dal web server. Questi meccanismi sono in realt elementari quindi non possono coprire tutte le casistiche possibili che invece vengono coperte da 2 altri tipi di cache control in http 1.1 che sono: Server specified expiration Heuristic expiration

Questi 2 tipi di cache control servono per garantire un controllo pi granulare, cio con un numero maggiore di gradi di libert nella gestione anche nei casi in cui abbiamo sistemi di cache che non siano cache su lato server o cache su lato client, ma possono essere cache di livello intermedio. La server- specified expiration consiste nellutilizzo da parte del server di una data di scadenza sulla risorsa utilizzando per esempio la direttiva expires, oppure la direttiva max-age dentro lheader-field cache control.(pag. 49) Che differenza c tra max-age e expires? Expires fissa una data, Max-age fissa una durata. Che succede quando il client si trova davanti ad una risorsa gi scaduta? Se la data di scadenza gi trascorsa, la richiesta deve nuovamente essere-validata. In determinati casi il client pu decidere di accettare risorse anche scadute per limportante che lui sappia che lui sta guardando una risorsa che viene ritenuta scaduta(stale). Quale pu essere un esempio di risorsa stale? Quando il server di origine da cui sta provenendo la risorsa non pu essere raggiunto quindi noi attraverso un proxy sappiamo che la risorsa scaduta, allora rispondo al client con codice 110 (response is stale). Ipotizziamo che il server di origine non possa essere raggiunto, piuttosto che non rispondere il proxy server risponder al client comunicando una 110 cio che la risorsa che ti sto fornendo scaduta. Se per Cache-Control specifica come direttiva must-revalidate, allora in ogni caso bisogna effettuare una rivalidazione, cio non opzionale la possibilit di fare o non fare una rivalidazione(nuovo download) ma obbligatoria la rivalidazione, bisogna ripescare la risorsa dal server di origine(quello che la possedeva in origine). anche possibile che il server di origine vada gi, per in questo caso visto che c una direttiva must-revalidate ci dovr essere un messaggio di errore, che un errore di tipo 504(inviato dal server di caching o cache) (gateway time-out). Quindi se abbiamo semplicemente un expires o max-age possiamo eventualmente accettare, se il client lo vuole, una risorsa gi scaduta per comunque il server di prossimit mi risponde con 110 dicendomi che la risorsa che sto scaricando scaduta. 5

Telematica 2 - lezione 9

Se cache-control specifica la direttiva no-cache, questo impone che in ogni caso la risorsa non pu essere cachata. Quindi possiamo notare come nel caso di server specified expiration la gestione sia molto complessa, si chiama cos perch si impone la natura del caching , il server che decide cosa pu succedere(questi casi sono validi solo quando la risorsa scaduta).

Il secondo(pag. 50) tipo di gestione quello di fissare un valore euristico per lexpiretion per quei casi in cui non strettamente indispensabile imporre criteri critici di controllo su questi meccanismi. Heuristic expiration consiste semplicemente in una assegnazione euristica(arbitraria) del valore di expiration da parte del cache server , visto che molte pagine non impongono in fase di creazione il valore esplicito dellexpiration date o max-age; quindi la cache che impone un valore di expiration in maniera euristica. Una volta che questo valore euristico trascorre, la cache stessa assume che la risorsa scaduta. Ovviamente il valore assegnato in maniera euristica potrebbe essere un valore non corretto, tanto vero che determinate assunzioni possono risultare ottimistiche(cio io impongo euristicamente che una pagina rimane valida per 2 anni o 6 mesi, e quindi per 6 mesi io cache impongo che questa pagina non verr mai aggiornata, mai recuperata dal server di origine; posso poi rendermi conto che in realt la pagina stata aggiornata pi volte rispetto alla versione che io posseggo, altrimenti(caso positivo) sto mantenendo nella cache una pagina fresca non expired). Quando ho un ragionevole dubbio riguardo alla validit della pagina, la risposta che il server fornisce, nel caso di assegnazione euristica della data di expiration, una 113(heuristic expiration).Ti sto dando la pagina io penso che sia valida per una stima di tipo euristico, questo significa che il client vedendosi arrivare una pagina con una stima di tipo euristico, potrebbe anche decidere di andarsela a recuperare direttamente dal server di origine(se importante che sia aggiornata).

Ora vediamo come avviene la validazione di una risorsa in una cache.(pag. 51) Guardiamo adesso la parte che riguarda linterazione di una cache e un origin server. Se io devo guardare il server di origine per vedere se la mia risorsa buona o scaduta, sostanzialmente devo guardare alla expiration date della risorsa che io posseggo e regolarmi per effettuare un nuovo download o meno. Molto spesso accade che il server che possiede la risorsa, imponga un expiration date o un max-age restrittivo, nel senso che anche dopo la scadenza dellexpiration date la risposta buona; quindi anche trascorso lexpiration date la risorsa dentro la 6

Telematica 2 - lezione 9

mia cache una risorsa ancora buona. Come si fa a stabilire in un caso del genere, quando e perch devo fare un nuovo download della risorsa (nuova validazione)? Ho bisogno di fare un piccolo check sul server di origine, abbiamo 2 possibilit : Usare Head: viene cos inoltrata una richiesta al server di origine e verificata la data di ultima modifica della risorsa che stiamo richiedendo. Pu accadere che comunque la risorsa sia scaduta, se no non avrei rapporti con il server di origine. Siccome possibile che la risorsa su server di origine non sia stata modificata nonostante lexpiration date trascorsa, prima di fare il download della risorsa dentro la mia cache faccio un check preliminare usando head, mi scarico lheader della risorsa e vado a verificare che la data di ultima modifica successiva rispetto alla data di expiration; se vero significa che la risorsa stata modificata e quindi devo effettuare realmente un download. In tutti questi casi per evitare un sovraccarico della rete, la validazione viene effettuata in maniera condizionale in 2 modi diversi : 1. Si usa HEAD, cio la cache invia al server di origine una richiesta per cui scarica solo lheader della risorsa e verifica la data di ultima modifica della risorsa stessa; se la data di ultima modifica precedente rispetto allexpiration date io la risorsa non me la scarico; 2. faccio una richiesta condizionale, cio se la risorsa stata modificata viene fornita la nuova risorsa altrimenti viene fornita la risposta 304(not modified) senza body, quindi solamente una risposta not modified.

vantaggiosa la seconda rispetto alla prima perch la prima in ogni caso ha una richiesta in pi, perch se la risorsa non stata modificata allora io mando la richiesta, mi ritorna un HEAD faccio poi la rivalidazione; nel caso in cui stata modificata io mando HEAD mi viene una risposta rifaccio la richiesta e mi ritorna la risposta. Invece, nel secondo caso ho una richiesta sola (1 richiesta in meno). Risparmiare una richiesta per ogni risorsa significa risparmiare il 50 % rispetto alla prima tecnica, in caso di risorsa da rivalidare.

AJAX (Asynchronous Javascript and XML) (pag.52) AJAX una delle tecniche maggiormente in vigore per creare applicazioni di interattive, la quale ha come obiettivo primario quello di migliorare linterattivit dellutente con una pagina web.

Telematica 2 - lezione 9

Il problema principale del web dato dalle latenze elevate che fanno si che linterattivit sia bassa rispetto alle macchine locali. Per quanto si possa utilizzare il server di prossimit o il cache server le latenze rimarranno sempre alte. AJAX una tecnica di sviluppo di applicazioni web di tipo asincrono; ha come obiettivo finale quello di migliorare linterattivit, usabilit e velocit delle web application perch basata sulla modularizzazione di una web application; ogni risorsa divisa in una serie di moduli e si ha uno scambio asincrono di dati di refresh dei singoli moduli tra client e server. Facciamo un esempio con una applicazione di tipo statico: in una applicazione di tipo web tradizionale io ho lo scambio di una richiesta per un determinato modulo o nella peggiore delle ipotesi per lintera pagina/risorsa tra me (browser) e il web server. Immaginiamo una pagina fatta a frame, quella di Piscitelli, abbiamo una barra con i link veloci poi abbiamo una parte fissa e una variabile che il nucleo della pagina; ognuna di quelle componenti un frame e corrisponde (per poterla refreshare) a una richiesta verso web server. Nel caso di una pagina che sia tutta in un blocco ogni refresh della pagina comporta una nuova richiesta da inoltrare verso il web server. Tuttavia, se pensiamo al fatto che la maggior parte del codice che compone una pagina in realt si modifica pochissimo tra una interazione e quella successiva evidente che si verifica una spreco di banda, e quindi di latenza dei tempi nel fare una interazione di tipo tradizionale, questo se faccio passare sul canale di comunicazione una valanga di informazioni che in realt inutile perch pu essere riciclata dalle iterazioni precedenti. Il tempo di reazione che lapplicazione ha pu essere sicuramente ristretto se io evito di far passare sul canale informazioni ridondanti rispetto alle interazioni precedenti. Quindi lapplicazione AJAX funziona cos : io posso inviare una serie di richieste al web server in maniera asincrona, in maniera totalmente slegata rispetto alla procedura corrente di sviluppo del caricamento dellapplicazione per far andare sul client solo ed esclusivamente quei dati che rappresentano una novit, un aggiornamento rispetto ai dati precedentemente memorizzati. Come viene effettuato il download dei dati nuovi? (Questo lasciato allapplicazione). Per poter far questo si utilizza XML che un linguaggio di annotazione per creare linguaggi di mark-up; questo ci serve perch html impone una flessibilit troppo limitata per fare una cosa del genere, invece con XML modularizzo lapplicazione in maniera anche fortemente esasperata. Ci possono essere anche molti moduli, e in corrispondenza di ogni modulo ho una gestione asincrona dellinterazione tra client e server utilizzando un linguaggio specifico.

Telematica 2 - lezione 9

Un esempio tipico di AJAX(pag. 53) la gmail. Se abbiamo un account email , possiamo usare la posta elettronica di tipo web, la web mail come se stessimo usando un client locale. Gmail integra anche una funzione istant messenger(massimo dellinterattivit); come fa ad integrare dentro un client di posta un istant messenger? Proprio perch lapplicazione n di tipo asincrona. Se facciamo il confronto tra lutilizzo di gmail e lutilizzo di una posta web mail su libero, ci rendiamo conto che gmail aggiorna in tempo reale la situazione delle mail in arrivo, perch lascia invariati tutti i moduli di intestazione, quello di gestione delle tabelle, gestione del cestino(tutti invariati) ci che viene refreshato continuamente sono solo le informazioni riguardo la posta in arrivo e al numero totale di messaggi; anche istant messenger viene trattato in modo asincrono. Se invece abbiamo un client di posta tradizionale(web mail di tipo libero) come facciamo a verificare se ci sono nuovi messaggi in arrivo? O si aspetta il refresh automatico da parte del server oppure materialmente andiamo a-cliccare su posta in arrivo; in tutti e due i casi reinoltriamo una richiesta o esplicita o automatica verso il web server per avere la nuova risorsa web. Una applicazione di tipo tradizionale si basa su una interazione diretta tra il browser e il server : il browser inoltra una richiesta dopodich siccome http di tipo request-response, ricever una risposta dal server. Livello di interattivit dellapplicazione bassa a causa delle latenze tra client e server. Nel caso di AJAX la cosa diversa perch il client integra un motore, un Ajax-engine che si interpone tra il client stesso e il server e decide in maniera asincrona i rapporti con il server. Quindi sostanzialmente non c modifica alla struttura del protocollo, cio http sempre http; quello che si modifica il livello client .Dal lato server posso avere un XML server.

Web server(pag.54) Uno dei web server pi famosi Apache, di tipo open source, il quale nasce inizialmente per macchine linux ma possibile trovarlo anche per macchine windows. Questo web server uno dei pi completi in termini di funzionalit ed affidabile. Come si fa a gestire il web server di tipo Apache? Abbiamo un file che si chiama httpd.conf che un file testuale in cui d sta per demon(processo), infatti Apache interpretato da una macchina linux come uno dei demoni di gestione, in particolare il demone che si occupa di gestire richieste su http, il demone in ascolto sulla porta http 80. Allinterno del file httpd.conf c il file di configurazione del demone e una serie di direttive che servono a stabilire come deve comportarsi questo demone e quindi il web server. Se carichiamo il demone su windows abbiamo un analogo, la 9

Telematica 2 - lezione 9

10

struttura del pacchetto uguale soltanto che in windows il demone viene interpretato come un servizio, se carichiamo il task manager lo vedremo come uno dei servizi sempre attivi. Un web server deve gestire tutta una serie di caratteristiche : gestione della sicurezza, gestione dellinterattivit, pagine attive, pagine dinamiche, gestione del caching.

Il demone http, cio httpd funziona con direttive, cio lutente impartisce le direttive al demone e il demone le rispetta. Il demone lavora con dati pregressi e produce dati a seguito di una certa elaborazione, si trova in maniera silente sulla macchina; in particolare tutti i demoni e quindi anche httpd lavorano utilizzando Log, file di log(file che mantiene traccia delloperativit di una macchina) che si trova nella directory /var/log su linux. Le direttive principali(pag.55) si dividono in 2 categorie: con valori di default(non modificabili) 1. Listen 80(indica la porta TCP sulla quale il server in ascolto); 2. User(nome dellutente, in linux, con il quale possibile lanciare il server ; mi dice chi titolare del processo demone httpd. Lutente che si imposta su questa direttiva impone di riflesso anche i file su cui il demone pu avere accesso: se lutente che lancia il demone root non gli pu essere negato niente o quasi, se invece un utente di livello pi basso potr avere accesso solo a determinati contenuti. 3. group(gruppo di appartenenza dellutente con il quale viene lanciato il demone) 4. ErrorLog(indica il file di Log nel quale verranno memorizzati tutti gli errori del server) 5. CustomLog(indica quello che deve essere il file di log per i messaggi di connessione di tipo normale(non di errore) con il relativo formato) con valori da modificare 1. ServerAdmin(indirizzo email dellamministratore del server, perch nelleventualit di ServerError fornisce insieme la mail dellamministratore del server ) 2. ServerName(nome dellhost su cui gira Apache, nome fisico della macchina) 3. DocumentRoot(directory a partire dalla quale si trovano le pagine html ) 4. DirectoryIndex(pagina predefinita che viene restituita al client nel caso si specifica solo il nome dellhost) 10

Telematica 2 - lezione 9

11

Facciamo un esempio di file httpd.conf(pag. 56) Al suo interno, troviamo una parte di intestazione non protestabile(non contiene direttive) costituita da una parte di commenti con #, ogni riga preceduta da uno sharp(#) una riga che comporta un commento. Poi direttiva Listen, composta da due campi separati da :; il campo a sinistra pu indicare tutti gli Ip che sono ammessi ad arrivare sul server(sulla porta 80), dopo i : si mette la porta di ascolto, 80. Se mettiamo * concediamo a tutti laccesso al server. Poi user qui si chiama apache, group si chiama apache, ServerAdmin m.ruta@poliba.it (quando si ha un internal server error 501 viene risposto con lindirizzo email dellamministratore. ServerName dee227.poliba.it(nome della macchina), DocumentRoot la directory a partire dalla quale si trovano le pagine web /var/www/html, poi abbiamo Errorlog /var/log/httpd/error_log , il quale tiene traccia di tutti gli errori a seguito di reply di categoria 4xx e 5xx, tutti memorizzati in errorlog e CustomLog invece logs/access_log tiene traccia degli accessi istantanei. A che serve aver traccia degli accessi? Serve per fare le cosiddette statistiche di sito. Esistono applicativi gi precostituiti tipo google analytics o shining start che fanno le statistiche di un sito, grazie allutilizzo dei file di log sul web server, non fanno altro che identificare quanti accessi ci sono stati per ogni pagina sul sito, provenienza degli accessi(paesi di origine).

File Transfer Protocol(FTP) (pag.57) FTP un protocollo di livello applicativo differente da http, per il trasferimento di file non meglio specificati tra due host.Trattasi di un protocollo di tipo client/server per cui c un client che fa una richiesta e un server che risponde, tipico meccanismo request-response. Esso si basa sullutilizzo di 2 connessioni : 1. Connessione di controllo(serve per negoziare la connessione tra client e server, trasferire le nozioni di controllo tra client e server durante tutta una sessione) 2. Connessione dati(serve ed adoperata esclusivamente per il trasferimento fisico dei file) In particolare, la connessione di controllo direttamente associabile ad una sessione, la connessione dati invece direttamente associabile al singolo file/risorsa da trasferire. Quindi una connessione di controllo per ogni sessione, n connessioni dati per n file da trasferire.

11

Telematica 2 - lezione 9

12

Ogni connessione dati autonoma rispetto ad una connessione di controllo, ma la connessione dati utilizza linformazione di controllo.

In FTP abbiamo un file system locale(del client)(pag. 58) e un file system remoto:

lobiettivo pu essere fare il download dal file system remoto a quello locale oppure fare un upload dal file system locale a quello remoto. Data una connessione di controllo sulla porta 21, noi impostiamo una sessione. Come facciamo ad impostare una sessione? Impostando un inizio sessione attraverso un meccanismo di login e un fine sessione attraverso il meccanismo di logout , quindi ftp impone un meccanismo di autentificazione, non come in http dove possiamo scegliere. Lautentificazione fatta sulla porta 21, quindi ad ogni connessione di controllo corrisponde una sessione, se volessimo aprire unaltra sessione ftp dovremmo instaurare unaltra connessione di controllo. Per trasferire pi file avremo bisogno di una connessione di trasferimento dati per ogni file che trasferiamo. Una connessione di trasferimento dati aperta sulla porta 20 e ne abbiamo 1 per ogni risorsa da trasferire. Quindi diremo che la connessione dati non persistente e ne abbiamo 1 per ogni risorsa da trasferire.Una connessione di controllo invece univoca per ogni sessione, tra un meccanismo di login e uno di logout. A pag. 60 c la struttura protocollare di ftp

12

Telematica 2 - lezione 9

13

Abbiamo il lato client e il lato server; il lato client prevede linterazione diretta del client attraverso una user interface(interfaccia a caratteri) che serve a mettere in comunicazione diretta lutente con un interprete di protocollo utente, uno user protocol interpreter il quale si incarica di interpretare i comandi che lutente impartisce. Abbiamo un analogo dal lato server, per cui i comandi dello user server interpreter negano trasferiti attraverso la control connection allinterprete del protocollo a livello server. Quindi una connessione di controllo impone lascolto sulla porta 21; una volta stabilita la connessione di controllo il server in ascolto sulla porta 20 e quindi attende una data connection, la quale avviene attraverso il file system locale e remoti mediante una funzione di trasferimento.

13

Telematica 2 - lezione 9

14

14

Telematica 2 - lezione 10

Telematica II 21/06/2007 La struttura FTP un protocollo di livello applicativo di tipo client server. Si tratta di un protocollo che prevede la presenza di un client FTP avente una sua interfaccia( grafica o a caratteri) attraverso la quale lutente dialoga con linterprete di protocollo. Lo User protocol interpreter sincarica di stabilire una connessione di tipo controllo con lomologo che si trova nel lato server che prende il nome di Server control interpreter. Abbiamo detto che la connessione di controllo diversa da quella dati, in quanto la prima serve a definire una sessione. La sessione inizia quando lutente client fa il login e termina quando il medesimo fa il logout. Quindi chiamasi sessione tutta la sequenza di eventi compresi tra un login e un logout. Chi definisce le informazioni di controllo derivanti dallinstaurazione di una sessione proprio lo User protocol interpreter( dal lato client) e il Server protocol interpreter( dal lato server). Abbiamo anche detto che quando dobbiamo trasferire un file, dobbiamo aprire una connessione dati. Avremo tante connessioni quanti saranno i dati da trasferire. In realt vedremo che anche per alcune informazioni legate alla struttura delle directory su server, verr aperta una connessione di controllo. Successivamente lo User data transfer function( sul lato client) e il Server data transfer function( sul lato server) si occupano della connessione dati. Il primo interagisce con lo User protocol interpreter che si trova nel livello superiore e poi con il system locale, da o verso il quale, la risposta che si sta trasferendo deve essere prelevata o depositata. Sul lato server, il Server data transfer function interagisce con il Server protocol interpreter e con il system remoto proprio della macchina server sul quale o verso il quale si andr a prelevare o a depositare le risorse che si stanno trasferendo. Linterazione diretta tra client e server funziona nel modo che adesso vedremo. Attraverso lUser interface, lutente impartisce dei comandi allinterprete di protocollo, il quale stabilisce immediatamente una sessione ovvero una connessione di controllo. Questa prevede da parte del server lascolto di una porta dati in attesa di una possibile connessione aperta per il trasferimento dei dati. Pertanto la connessione di controllo una connessione preliminare rispetto alla connessione dati ma imprescindibile. Abbiamo una connessione di controllo a prescindere che stiamo trasferendo una risorsa e quindi un file.

Telematica 2 - lezione 10

Abbiamo visto che FTP adotta due specifiche porte per instaurare sia la connessione dati che quella di controllo. In particolare si visto che la connessione di controllo avviene attraverso la porta 21 mentre il trasferimento dati avviene attraverso la porta 20. Vediamo la procedura dettagliata del trasferimento di un file ad un server. Come regola di base, FTP richiede lautenticazione del client prima di poter eseguire un trasferimento. Quindi lautenticazione la condizione imprescindibile per fare la connessione di controllo e questa indispensabile per effettuare il trasferimento dei dati. Ovviamente dire che bisogna autenticare il client sul server significa dire che client e server devono effettuare una procedura di agreement riguardo laccount del client. In particolare FTP oltre a permettere di effettuare account su server, permette anche di fare un account anonimo( anonymous FTP). In questo caso lusername che si deve impostare in fase di creazione di una sessione anonymous mentre la password pu essere qualunque( come tendenza generale c quella di

mettere come password lindirizzo email dellutente che sta tentando di effettuare una accesso anonimo). Solitamente si permette di effettuare questa procedura quando si devono trasferire file a scopo divulgativo o pubblicitario( non c bisogno in questi casi di disporre dell username e della password dellutente). E ovvio che un accesso di questo tipo impone in maniera quasi diretta laccesso ad un numero limitato di risorse e inoltre non consente di fare lettura in upload di file, bens solo in download. Quindi il trasferimento dati pu avvenire solo da server a client e non il contrario. FTP, richiedendo obbligatoriamente unautenticazione e limpostazione di una sessione, un protocollo di livello applicativo non stateless( cio dotato di stato). Quindi in questo senso differente dallhttp. E non stateless perch in ogni caso una o pi connessioni dati sono direttamente associati ad una connessione di controllo che a sua volta associata ad unautenticazione. Quindi possiamo dire istante per istante chi sta usando il canale, cio in pratica a chi dovuta la connessione FTP. Inoltre non stateless perch non consentito lupload( cio la manipolazione di risorse su server) e perch stiamo scaricando delle risorse che potrebbero risultare impegnative. Per esempio se scarichiamo un dvx, di norma impieghiamo la banda e le risorse in 2

Telematica 2 - lezione 10

maniera molto pi gravosa. Da questo punto di vista necessario che esista un controllo pi stretto sulle risorse stesse( sia sui file stessi che sulla banda che impieghiamo). Da questo punto di vista FTP non stateless perch impone dei vincoli( come vedremo, esistono vincoli stretti sia sul numero di utenti loggiati, sia sul numero massimo di connessioni che si possono effettuare con lo stesso IP). Esistono delle distinzioni riguardo al tipo di file che possibile trasferire attraverso un tipo di protocollo transfer. Guardiamo le impostazioni iniziali di un server FTP. E possibile etichettare le risorse in trasferimento secondo le loro caratteristiche. Il tipo di risorsa da trasferire pu essere scelto tra risorse di tipo: - ASCII( di default) che sono file di tipo testo; - EBCDIC che il formato testuale dellIBM; - Binarie che il pi utilizzato; - Local File Type: possibile stabilire un formato per il trasferimento di oggetti, nel senso generale del trasferimento, in cui si stabilisce il numero di bit per byte a livello sender; cio colui il quale invia il file stabilisce un formato specifico per il trasferimento dellinformazione e inoltre stabilisce, in corrispondenza di un byte, quanti bit reali di informazione ci sono. E possibile impostare anche direttamente la struttura degli stream in trasferimento cio posso dire che tipo di trasferimento mi accingo a fare. In particolare, di default viene impostata una struttura di trasferimento di tipo file( si tratta di un flusso di byte contigui). C anche la struttura a record che utilizzata per il trasferimento di file di testo( ASCII o EBCDIC). Unaltra alternativa il trasferimento file per pagine: il file che deve essere trasferito viene diviso in pagine e ogni pagina viene numerata. Alla fine tutte le pagine vengono ricomposte. Oltre alla pagina, si trasmette anche la posizione che questa pagina ha allinterno del file complessivo. Oltre a quanto detto devo anche specificare la modalit di trasferimento. Questa pu essere di tipo: - stream: il file trasferito come un flusso contiguo di byte in sequenza; - a blocchi: il file trasferito come flusso di blocchi, ognuno dei quali preceduto da un header con informazioni riguardanti il blocco. - compresso: basato dellRLE( Run Length encoding) che lalgoritmo di compressione pi semplice che esista. Per capire in cosa consista lRLE, supponiamo che una data informazione da trasferire mantenga inevitabilmente un certo grado di ridondanza; con lRLE non si fa altro che ridurre questo grado di ripetizioni presenti nella risorsa da trasferire. Supponiamo ad esempio di voler trasferire unimmagine che in precedenza stata compressa. Un calcolatore vede limmagine come una matrice di punti. In particolare si ha, a seconda della risoluzione dellimmagine stessa, un 3

Telematica 2 - lezione 10

certo numero di pixel element in riga e un certo numero di pixel element in colonna, che determinano la risoluzione( quando si dice che unimmagine ha una risoluzione di 640X480, significa che ci sono 640 punti in orizzontale e 480 in verticale; moltiplicando questi due valori, posso capire che area di copertura dellimmagine ho in termini di pixel). In corrispondenza di ogni pixel ho una terna di valori( esadecimale) associati ai livelli di colore in termini RGB( rosso, verde, blu). Il valore impone il grado di miscelazione dei colori e pertanto riproduce come effetto un colore primario o secondario. Pertanto unimmagine viene trattata come una matrice di valori di dimensione tanto maggiore quanto pi ampia la risoluzione adottata. Supponendo allora di guardare limmagine come una matrice righe per colonne, evidente che nel momento in cui posseggo unimmagine con determinate caratteristiche, sicuramente esister un minimo livello di ridondanza. Supponiamo di trasferire pi volte in uno stream video limmagine rappresentata in basso come fotogramma; una tecnica di compressione quella di codificare una sola volta la parte di immagine che rimane sempre uguale e invece di codificare tutte le volte la parte che varia. Questa idea la si ritrova nellalgoritmo RLE. Pertanto data la matrice di punti che codifica limmagine, stabiliamo con un set di valori, quale sia il valore iniziale che stiamo codificando e quante volte questo valore si ripete: questo ovviamente vantaggioso. Passando ad un esempio concreto, supponiamo di avere unimmagine con cielo azzurro come sfondo, il mare sotto e una bottiglia con un certo sfondo nel mezzo:

Andando a tradurre questa immagine in una matrice di punti avr in corrispondenza del primo pixel la terna RGB( R11, G11, B11) , in corrispondenza del secondo pixel la terna RGB( R12, G12, B12) e cos via:

Nel cielo per esempio supponiamo che i primi 17 pixel abbiano valore uguale: comprimo linformazione facendo: [(R11,G11, B11)x 17] dove 17 il numero di run che linformazione ha 4

Telematica 2 - lezione 10

Questa una codifica senza perdite di informazione. Quando andr a fare la decompressione dellimmagine devo solo leggere il valore compresso e ridondare linformazione per il numero di run che questa ha. Ovviamente questo algoritmo di compressione avr rate di compressione tanto pi elevato quanto pi ridondante limmagine che trattiamo. Il trasferimento di dati in modalit compressa in FTP, si basa su un algoritmo a due livelli: non un algoritmo di altissimo livello, ma per lo meno non presenta perdite. Riassumendo le informazioni di default che troviamo su un FTP, generalmente si ha che il tipo di file ASCII o binario, la struttura di trasferimento a file e la modalit di trasmissione di tipo stream. Adesso vediamo il set di direttive imponibili ad un server FTP:

Il comando per iniziare una sessione e quindi una connessione di controllo, AUTH. Prima di iniziare unautenticazione, ci accordiamo con il server riguardo allalgoritmo di decifrazione con cui noi poi faremo lencoding dei dati, in quanto ovviamente non conveniente far passare i dati di autenticazione in chiaro. Questo lo facciamo attraverso la direttiva AUTH e il nome del protocollo di decifratura. USER username serve a specificare lusername con cui stiamo facendo laccount. PASS password specifica la password. Il comando TYPE type specifica il tipo di file che ci accingiamo a trasferire( A indica file ASCII, mentre I indica file binari). Per spostarci poi tra le directory allinterno del server, utilizziamo il comando CD directory. LIST filelist serve a listare il contenuto di file o directory. La direttiva SYST serve ad ottenere informazioni riguardo il sistema operativo su cui sta girando lFTP server. Per disconnettersi dal server si usa la direttiva QUIT; per richiedere un file si usa la direttiva RETR filename e STOR filename per fare lupload. ABOR serve a fare labort del comando precedentemente inserito e di ogni trasferimento dati. I comandi da impartire da un client FTP ad un server corrispondono ad una replica da parte del server. Come accadeva per lhttp, anche in questo caso abbiamo una serie di codici di reply da parte di un FTP server. Quelli pi importanti sono divisi in 5 categorie. Nella prima categoria rientrano codici di risposta preliminare affermativa. Generalmente un codice di questa categoria impone un ulteriore 5

Telematica 2 - lezione 10

interazione da parte client sul server, quindi lintroduzione di un nuovo comando che pu dare origine ad una riposta definitiva che di categoria 2. Successivamente possibile impartire un comando diverso. La categoria 3 il caso tipico di login. E una risposta positiva intermedia. E necessaria poi un ulteriore interazione con il client e successivamente possibile ottenere una risposta di tipo 2. La differenza tra la categoria 3 e la categoria 1 che nella prima abbiamo necessit di avere unulteriore interazione da parte del client, cio la categoria 3 impone che il client prenda iniziativa. Nella riposta di categoria 1 necessaria un ulteriore interazione sul lato server, cio il server deve dare un ulteriore contributo: una riposta di tipo negativo per di tipo transitorio( potrebbe essere smentita): la richiesta inoltrata non stata accettata, lerrore temporaneo e si pu ritentare in seguito. Un caso tipico quello che si ha quando si sbaglia ad inserire la password: possiamo reinserirla per un certo numero di volte dopo le quali potremmo ottenere una riposta di tipo 5 che una riposta negativa di tipo permanente, cio non ulteriormente replicabile. Troviamo nella slide sottostante un po di repliche FTP divise per categorie:

Allora, per analogia con http, la riposta 200( di categoria 2) indica che il comando eseguito ed una risposta di tipo positivo. La risposta 125( di categoria 1) indica che la connessione dati stata aperta e che stata aperto il trasferimento. La riposta 331( di categoria 3) indica che lusername ok e richiede limmissione della password. Con la risposta 425( di categoria 4) c un errore riguardo la connessione dati( caso tipico di problemi con la rete). Non una risposta di categoria 5 perch in ogni caso il tentativo di connessione non cade subito( c un timeout che si pu attendere durante il quale il problema pu essere risolto e dunque la riposta pu ritornare positiva). 425 un tipico caso di errore sulla macchina di destinazione( solitamente una macchina LINUX). Gli errori di tipo 5 sono errori irreversibili: risposte 500 e 501 sono errori di sintassi( comandi non riconosciuti o argomenti invalidi). 502 un errore derivante una comunicazione di connection mode non disponibile sul server. Riepilogando un attimo quanto detto, una connessione dati associata ad un trasferimento di un file sia in upload che in download. Una connessione dati per utilizzabile anche quando devo inviare un file da un server ad un client, cio quando faccio una LIST. La casistica quindi della connessione 6

Telematica 2 - lezione 10

dati relativa allinvio di un file in upload, alla derivazione di un file in download oppure alla richiesta di una LIST. Inoltre loperazione di una connessione dati appannaggio del client nel senso che il client si incarica di gestire la connessione dati perch colui il quale interessato al trasferimento dati. Questo avviene quasi sempre, tranne in un caso nel quale il client, per cause di forza maggiore, non pu realmente gestire la connessione dati. Infatti oltre alla modalit consueta di connessione che si chiama attiva, esiste una modalit secondaria che si chiama passiva( il client non ha la possibilit di aprire porte sulla sua macchina). Nella modalit attiva abbiamo una connessione di controllo che presuppone lapertura di una porta, quella numero 21, che apre il server. Successivamente il client si sceglie un numero di porta a caso maggiore di 1024. La porta che il client apre quella su cui il client stesso si mette in ascolto per la connessione dati. Successivamente il client invia, tramite il comando PORT, il numero di porta che stato scelto. Infine il server riceve il numero di porta che gli stato comunicato e avvia una connessione dati sulla porta ricevuta( dal lato server la porta in questione la numero 20). Quindi il client a gestire la connessione dati in quanto stabilisce quale debba essere la porta su cui ricevere i dati; inoltre comunica la porta al server che non fa altro che indirizzare lo stream su quella porta. Si ricordi che tutte le informazioni riguardo la negoziazione della connessione non fanno parte della connessione dati, bens di quella di controllo. Ci significa che il client comunica al server la sua porta dati su una connessione di controllo. Solo quando il server riceve informazioni riguardo la connessione di controllo e apre la porta 20 per poi instaurare la connessione dati su quella porta che ha ricevuto, si parla di connessione dati. Pu succedere per che il client si trovi dietro un Firewall o dietro un NAT. In questo caso il client non nelle possibilit di ricevere uno stream di dati in ingresso. Il Firewall blocca tutti gli stream in ingresso, ma lascia passare tutti gli stream in uscita. Il problema che, anche se il client sceglie una porta per ricevere uno stream dal server, la presenza del Firewall o del NAT proibisce laccettazione di connessioni in ingresso. In tutti questi casi vi la modalit passiva nella quale il server ad impostare la connessione dati( il client, come visto, impossibilitato a farlo e assume un ruolo passivo). Perch il client riferisce al server che impossibilitato a gestire la connessione dati utilizza la direttiva PASV e cos la modalit di default( quella attiva) viene convertita in modalit passiva. Vediamo adesso in cosa consiste la modalit di connessione passiva. Abbiamo detto che il client non pu accettare in nessun modo uno stream in ingresso. Allora il server stesso si mette in ascolto su una certa porta( ovviamente questo presuppone lagreement della porta del socket tra client e server) e per cui su questa attende dei dati dal client. Ovviamente tutta la parte di accettazione della connessione implica che il client e il 7

Telematica 2 - lezione 10

server si accordino riguardo la porta che il server ha scelto. La direttiva PORT prevede lutilizzo di 6 valori numerici: i primi 4 corrispondono alle 4 cifre dellindirizzo IP del client o del server che sta facendo lagreement con il server o con il client riguardo alla porta. Gli ultimi due valori servono a settare il numero di porta vero e proprio( maggiore di 1024 nel caso di modalit attiva). Sono due valori perch il valore N5 viene moltiplicato per 256 e al risultato viene aggiunto il valore numerico N6. Cos si costruisce un indirizzo IP di porta su cui fare agreement tra client e server. In particolare vediamo una tipica interazione client server FTP:

Abbiamo, a partire da un client testuale, la risposta su un server che VSFTPd versione 2.0.1. Le risposte in azzurro sono quelle del server, mentre quelle in nero sono quelle scritte da noi. La prima direttiva imposta di tipo AUTH( la quale impone di specificare lalgoritmo che adoperer per lautenticazione). Il server risponde poi con una riposta 530 e mi dice di inserire username e password. Quindi con le direttive USER e PASS inserisco rispettivamente username e password. A partire dalla risposta 230( login successfull), il sistema avvia una sessione( quindi da questo momento in poi stata instaurata una connessione di controllo) che terminer nel momento in cui faccio il logout attraverso la direttiva QUIT. Lavvio di una sessione implica la possibilit di iniziare il dialogo con il server. Quello della slide loutput visto dal client. Con il comando SYST si ricevono informazioni sul tipo di sistema operativo. La riposta ricevuta UNIX Type: L.8 che una macchina tipicamente LINUX. Poi passo con la direttiva PASV alla modalit passiva per uno dei motivi visti precedentemente.

Ad un certo momento dellinterazione il Client richiede di passare in modalit passiva, il sistema (Server) risponde al Client con un 227 e con una comunicazione in cui dice che sta entrando in modalit passiva, in particolare fornisce il suo indirizzo IP pi 4 valori numerici, di cui 2 di questi valori (n5 n6) servono per costruire la porta (o meglio il n di porta). In totale abbiamo questi 4 valori numerici che costituiscono lindirizzo IP + il n di porta. N.B. Anche se ci si trova in 8

Telematica 2 - lezione 10

modalit passiva il Server pu interagire normalmente con il Client. Il fatto che ci si trovi in modalit passiva significa banalmente che il controllo della gestione dati effettuato dal Server, per la modalit di interazione non cambia. Quindi ora sono in modalit passiva e chiedo un LIST, e lui (Server) mi risponde con 150 250 a cui segue la lista dellalbero di directory corrente. Dopodich introduco il type i, dove type i indica il tipo di file che sto cercando di muovere, in questo caso i sta per binario, invece, ad es. a sta per ASCII. Dopodich provo a fare RETR prova.txt. txt ovviamente un file testuale, ma anche se fosse binario non ci sarebbero problemi. Successivamente viene aperto lo stream e viene aggiornato progressivamente fino a quando poi otteniamo una risposta con una 226 I SEND OK. Alla fine noi abbandoniamo la connessione. Ora vediamo questa operazione in che cosa si ripercuote osservando lo sniffing dei pacchetti. Inizialmente vi la procedura di acknoledgment sulla connessione, ovviamente questo comporta lapertura di un socket; infatti toviamo allistante 000 che il 193.204.59.21 verso la postazione 193.204.59.227 su TCP chiede lapertura di un socket sulla porta 21 FTP. Attualmente la porta di riferimento la 32786 sul Client. Segue linterazione tipica con la risposta da Server a Client con sequenze number e acknoledgment fino a quando il Server non risponde con interazione n 4 gi in FTP sulla porta 32786 del Client ed una risposta di tipo 220. Attenzione, ad un certo punto chiediamo di entrare in modalit passiva; il Client fa una richiesta verso il Server per passare attraverso la direttiva segnata sulla slide in modalit passiva. Quindi abbiamo una FTP request dal Client verso il Server. Il Server risponde attraverso FTP, sulla porta 32786 del cient con una 227 dicendo che sta entrando in modalit passiva. In particolare comunica un indirizzo IP 127.0.0.1, ovvero il suo stesso indirizzo IP originario e fornisce i valori per calcolare il n di porta. Questi numeri servono a calcolare con lalgoritmo visto precedentemente la porta 40269. Questa una porta sul Server, ovvero il Server dice al Client io ti sto mettendo a disposizione questa porta qua !. Da questo momento in poi il client conosce la porta per la modalit attiva ed questa porta che verr adoperata per la connessione dati. Cosa succede quando vado ad ottenere lacknoledgment sulla connessione ? La porta stata stabilita, e sulla porta stessa c stato acknoledgment quindi in fin dei conti ho la possibilit di instaurare una connessione dati e quindi in particolare posso incominciare ad interagire. Attenzione perch linterazione n 27 va dal Client al Server ed in paticolare va dalla 32786 alla FTP 21 quindi in particolare sto richiedendo un LIST. Vi ricordo che il comando LIST, un comando che va su connessione di controllo per la risposta ad un LIST va su connessione dati, infatti la risposta una FTP data che va dalla 40269 alla 32787. Ed lelenco della directory che sto 9

Telematica 2 - lezione 10

10

listando. Quindi, materialmente, loutput della directory

passa su connessione dati. Sulla c

connesione di controllo passa il comando LIST. Ora notiamo che allinterazione n 24

lagreement della porta su cui sto facendo connessione dati. Linterazione n 25 la risposta, quindi a partire da questo momento in poi, o meglio a partire dalla interazione n 26, in cui c acknoledgment, la porta pienamente nota, ovviamente perch stata comunicata dal Client al Server. Ora cerchiamo di chiarire il discorso modalit passiva. Per quanto riguarda la modalit attiva succede che il Client sceglie un n di porta, siamo ancora nella connesione di controllo. Il client deve in ogni caso dire al Server attraverso il comando PORT il n di porta che sta usando. In questo caso siamo ancora in connessione di controllo, perch non abbiamo trasferito materialmente nessun file. Successivamente, dopo la comunicazione del n di porta il Client e il Server hanno la possibilit di aprire un stream fra di essi. Il Server quindi avvia una connessione dati sulla porta ricevuta a partire dalla porta FTP per la connessione dati che la n 20. Il problema che questa situazione spesso non gestibile, non gestibile specialmente nel caso in cui ci siano dei vincoli sul Client, ovvero quando il Client in realt non pu fare tutto ci che vuole, ed il caso in cui il Client si trova dietro un firewall. Per questo motivo si usa la modalit passiva, attenzione, non perch non si possa correggere le impostazioni di rete al fine di consentire al Client lascolto di una connessione, ma pi sbrigativo cambiare la modalit. Passando in modalit passiva succede che anzich essere il Client ad ascoltare sulla porta e quindi ad esserci una porta aperta sul firewall, il Server che si mette in ascolto sulla porta. Questa cosa pu sembrare banale per implica che innanzitutto la porta debba restare aperta, perch colui che si incarica di stabilire la connessione deve garantire di rimanere almeno in ascolto sulla porta, e poi perch tipicamente deve essere possibile stare in ascolto su quella porta. Quindi, se sono un Client che sta dietro un firewall e sono in modalit attiva devo avere la possibilit di stare in ascolto su quella porta, ci implica che devo aprire il firewall, oppure alternativamente devo avere una regola che permetta al traffico proveniente da un determinato IP di poter essere ricevuto da me(Client); in questo caso stiamo parlando proprio di traffico di controllo (ovvero la negoziazione della connessione). Quindi il problema che devo aprire un buco sul firewall o sul router nat e tenerlo aperto per quella connessione per parecchio tempo, questo non buono perch creo un buco sul firewall e soprattutto non comodo; per questo motivo meglio la modalit passiva. Nella modalit passiva succede che, io Client ho un ruolo passivo perch il Server che non dovrebbe avere problemi (o comunque se ne ha li risolve da solo) a mettersi in ascolto su una porta. Successivamente nel momento in cui il Server in ascolto su quella porta; il Client che comunica una richiesta di connessione e quindi 10

Telematica 2 - lezione 10

11

fanno lagreement. Se invece il Client aprisse un buco nel firewall si correrebbe il rischio di ricevere qualsiasi cosa, anche qualcosa di non desiderato. Vengono usate la porta 32787 per la connessione dati e la 32786 per la connessione di controllo, ovvero due porte differenti perch le due cose sono a se stanti. Inoltre importante dire che strettamente necessaria la presenza di una porta per la connessione di controllo perch tutte le informazioni scambiate con il Server vengono fatte passare su quella porta. Infine la comunicazione si chiude comunque attraverso la connessione di controllo. Possiamo notare che esistono vari client FTP che possono essere usati sia per Linux che per Windows (es. FileZilla), oppure se non si vuole usare un client grafico si pu usare uno testuale digitando FTP con il nome dellhost nella riga di comando. Come server FTP di riferimento, invece, abbiamo VSFTPd (Very Secure FTP Daemon), il quale un demone che si attiva come servizio su una macchina che fisicamente il server su cui risiede, es. in Linux questo demone lavora come tutti gli altri demoni. Come tutti i demoni noti, in un sistema Linux esiste un file di configurazione .conf che si trova nella directory /etc. La struttura del suddetto demone paragonabile a quella del demone HTTP (ovvero il Web Server). I demoni, come ben noto possiedono delle direttive, nel caso del demone in esame possiamo notare come una delle pi importanti sia MAXCLIENT, la quale indica il n max di Client che si possono connettere al Server FTP (questo perch ogni Client che si connette, potrebbe fare download o upload e quindi togliere parte della banda disponibile e ovviamente non possibile far si che N Client, in maniera indiscriminata, vadano ad interessare la banda nello stesso momento al fine di garantire un servizio uniforme a tutti gli utenti interfacciati al server FTP). Vi sono per altre direttive importnati per es. quelle che servono ad abilitare laccesso anonimo e inoltre la direttiva ANOMUPLOADENABLE, la quale serve ad abilitare agli account FTP anonimi la possibilit di fare anchee upload, ovviamente, per evidenti motivi di sicurezza questa direttiva non deve essere attivata. La Posta Elettronica usa il protocollo SMTP, ma non univoco, perch si possono individuare almeno un paio di protocolli ulteriori. La Posta Elettronica nasce con la prerogativa di trasferire contenuti testuali. Anche questo servizio funziona attraverso una opportuna comunicazione tra due soggetti, ovvero una componente della comunicazione che fa da Client ed una componente Server; la componente Client unapplicativo che prende il nome di USER AGENT, il quale serve a fare la gestione completa dei msg (es. composizione, ordinamento, ricerca, ecc..); esempi importanti sono Microsoft Outlook, Outlook Express o Mozilla Thunderbird. Questi applicativi servono a gestire il lato Client della comunicazione, mentre per il lato Server abbiamo i c.d. MAIN SERVER, che si 11

Telematica 2 - lezione 10

12

incaricano di tutto quello che riguarda direttamente linterfacciamento verso le mail box, cio quelli spazi sulle macchine fisiche riservati allimmagazzinamento dei msg in arrivo e/o in uscita. I principali protocolli sono 3, divisi in 2 categorie: SMTP (simple mail tranfert protocol) e POP3/ IMAP. SMTP appartiene alla categoria dei protocolli per il trasferimento dei msg cio es. invio di un msg. POP3 serve invece per laccesso alle mail box. In particolare SMTP serve per inviare msg da client a server oppure fare trasferimento di msg tra server. Quando inviamo un msg, questo msg deve raggiungere la mail box di un destinatario, ovvero deve andare a finire allinterno dello spazio fisico messo a disposizione del destinatario su una certa macchina Server. Il trasferimento dal nostro server al server destinatario avviene attraverso il protocollo SMTP. SMTP serve per trasferire msg da client a server e da server a server. Invece POP3 (post office protocol ver. 3) o IMAP (internet message access protocol) servono per accedere alle mail box. In particolare POP3 il pi diffuso anche se IMAP ha funzionalit avanzate in pi rispetto a POP3 e in generale consente una

interazione migliore con il Client . Proprio per questo motivo la maggior parte delle Web Mail sono basate su IMAP.

12

Telematica 12 - lezione 11

1 Telematica II 27 /06/07

Per quanto riguarda SMTP, abbiamo visto che si tratta di un paradigma client-sever ed uno dei due protocolli usati per linvio della posta elettronica tra un user agent (client) e un mail server o tra due mail server, al fine di raggiungere una rete di destinazione attraverso una rete di server intermedi. Viceversa quando uno user agent ricevente deve accedere ad una casella di posta del mail server per fare il controllo dei messaggi si adoperer POP3 o IMAP e si proceder al download dei messaggi dalla casella di posta. Il flusso dellinformazione va da uno user agent ad un altro user agent passando attraverso una rete di intermediari e i protocolli di interfacciamento dello user agent sender, per il mail server, e dello user agent receiver, per il mail server, sono differenti; uno SMTP e laltro POP3. SMTP adoperato anche per lo scambio tra mail server. In che cosa consiste, dal punto di vista dellinvio della posta elettronica, la funzionalit di un mail server? Sostanzialmente esso mantiene traccia, attraverso una serie di file, delle singole cartelle di posta elettronica degli utenti che abbiano un account sul mail server. Ad ogni cartella di posta corrisponde un file che pertinente allutente, titolare della casella di posta elettronica. Oltre a questo il mail server deve caricare e gestire una coda di messaggi in arrivo per poi smistarli allinterno delle caselle di posta, oppure per reinoltrarli e la politica di gestione della coda dipende dalla configurazione del mail server; chiaramente di tipo FIFO. I criteri di priorit servono a cautelare leggermente le condizioni allinterno della coda, servono per scalare la posizione allinterno della coda. Oltre a questo deve essere gestita una coda di messaggi in uscita quando pi user agent si collegano ad un mail server di riferimento per fare il download di messaggi. La politica gestionale della coda, anche in questo caso, prerogativa esclusiva del mail server e della sua configurazione. Per quanto riguarda il protocollo SMTP nello specifico, possiamo dire che un protocollo clientserver; esso ha un modello di iterazione di tipo richiesta-risposta. Abbiamo il mail client e poi abbiamo il mail server. SMTP si appoggia su una connessione, su un socket TCP aperto sulla porta 25. si tratta di un protocollo client server con un tipo di iterazione request-response. Sostanzialmente unautenticazione del client su server attraverso un accounting. Questa generalmente richiesta da quando ci sono fenomeni di spamming avanzati; infatti da quando essi si sono diffusi quasi tutti i mail server richiedono la creazione di un account oppure fanno una selezione dellaccount in base allIP. Questa tipica per i service provider: generalmente quando ho un account su alice o su libero, il mail server che ci messo a disposizione, attraverso una casella @libero o @alice, garantisce che si possa accedere su server solo tramite il pool di IP che sono riservati ad alice. Rendiamoci conto che ogni volta che ci colleghiamo su libero o su alice il DHCP

Telematica 12 - lezione 11

che impostiamo ci assegna un indirizzo dinamicamente; esso appartiene ad un set di indirizzi che sono gestiti direttamente dal provider. In sostanza il primo meccanismo di acceso su mail server stabilito in base al pool di IP che effettua una connessione con il mail server. IP esterni a questi indirizzi vengono gi filtrati in partenza. Se ho un account su un mail server che non necessariamente appartiene al provider con cui sto facendo la connessione come devo operare? In quel caso ci sar un nuovo accounting attraverso un nome utente ed un password. Un primario meccanismo di accesso agli utenti attraverso IP; successivamente se vogliamo accedere a un mail server esterno rispetto al provider o allorganizzazione seguita dalla LAN, in ogni caso devo effettuare unautenticazione con nome utente e password. Perch in linea di principio poteva non essere richiesta lautenticazione? Poteva non essere richiesta perch data la struttura del protocollo, da un punto di vista funzionale, lautenticazione pu non essere indispensabile. Diviene indispensabile solo x motivi pratici, per avere un minimo di controllo su quella che la porta di transito, ma per il funzionamento del protocollo il meccanismo di autenticazione costituisce un accessorio. Quindi il meccanismo di autenticazione indispensabile solo per ragioni di ordine pratico. A proposito del meccanismo di iterazione, possiamo dire, che si tratta anche in questo caso di un protocollo di testuale. Guardando i comandi, la funzione di iterazione avviene attraverso limposizione di un comando da client e server; quindi le request sono caraterizzate da un comando avente nome comando e poi i parametri. A un determinato comando corrisponder una risposta con un codice numerico, rientrante in diverse categorie. Soffermiamoci sui comandi dell SMTP: HELO: serve per accreditare il client presso un certo mail server. Un mail server, in generale, unentit abbastanza complessa anche in termini di struttura e funzionamento; essa avr la responsabilit di gestire molti account (tenendo conto di un mail server di una grossa organizzazione o di un provider). Bisogna pensare che fino a quando garantito un account libero su un provider potrebbero essere proprio tanti gli utenti da gestire. Helo serve ad identificare il client presso un server locale, il quale o effettua autenticazione mediante nome utente e password oppure effettua un filtraggio della selezione degli utenti attraverso un pool IP, che sono quelli che gestisce lorganizzazione del mail server. MAIL FROM che ha come parametro il sender del messaggio, cio colui che invia. Il sender del messaggio identificato in modo univoco attraverso un indirizzo e-mail costituito da due campi separato da un @. Il primo campo lidentificativo della mailbox,

Telematica 12 - lezione 11

mentre il secondo campo lidentificativo del mail server, cio il dominio a cui il mail server afferisce. RCPT TO specifica al contrario il destinatario, utilizzando lindirizzo e-mail con la stessa struttura. DATA : tale messaggio deve essere seguito dal corpo della mail, ossia dal contenuto vero e proprio del messaggio che si sta scambiando e il server comprende che il messaggio in chiusura quando trova un punto su linea singola. In questo campo troviamo poi una serie di header, come per esempio il campo oggetto subject , gli eventuali altri utenti da mettere in copia o in copia nascosta, gli eventuali livelli di priorit da assegnare alla mail. QUIT chiude una sessione SMTP RSET annulla un trasferimento gi in corso; forza annullamento trasferimento di un messaggio VRFY che serve a verificare lesistenza dellindirizzo del destinatario. Questo un criterio che pu essere imposto prima dellinvio di una mail per evitare su un messaggio di grandi dimensioni di intasare la banda si pu imporre un verify prima di un send vero e proprio. Ci serve per verificare sul server la presenza di una mail box rappresentata dal campo del destinatario, cio verifico se il destinatario esiste. Infatti se quando invio una mail, il destinatario non esiste perch ho sbagliato a scrivere un indirizzo ci ritroviamo una mail a nome del destinatario d sistema. Ci deriva da un check di verifica preliminare che lo user agent ha fatto sulla mail box del destinatario NOOP non esegue alcuna operazione ma porta il server a rispondere con OK. NOOP serve a verificare che il mail server a cui ci stiamo interfacciando in attivit; potrebbe accadere che il mail server sia gi o che noi abbiamo perso la connessione. Quindi prima di fare linvio di un messaggio facciamo un check sul mail server verificando che il server sia in attivit.(caso web mail dove si perde alcune volte la connessione con il server e quindi non posso pi interagire con il mail server) Questi comandi noi nn li vediamo perch sono inglobati in un tool di applicazioni tipo outlook. Vediamo ora i codici di risposta, che rientrano in categorie macroscopiche. Per quanto riguarda i comandi che sono portati a termine con esito positivo la categoria di riferimento la categoria 2. 220 servizio pronto. abbiamo fatto un check per verificare se il servizio disponibile; il sistema risponde con tale codice. <domain> rappresenta la fase del dominio. Esempio :

Telematica 12 - lezione 11

4 servizio pronto. Questa sarebbe la risposta del check sul mail

poliba .it mail.poliba.it server poliba

250 comando completato con successo 251 utente non locale, la mail verr inoltrata. Quindi il primo mail server che incontriamo in uscita, mandando una mail a uno che ha per dominio finale @libero,it, il mio mail server di riferimento che mail.poliba.it verificher che lutente non locale e che appartiene ad un altro dominio, risponder con un messaggio 251 che un messaggio di esito positivo e inoltrer nuovamente, attraverso un altro pacchetto SMTP il messaggio verso un altro server libero.

354 classe 3; richieste che necessitano di unulteriore iterazione con il client, quindi non sono comandi che in realt presentano un esito perch necessario un ulteriore contributo da parte del client. Indica che possibile iniziare linserimento del corpo della mail, quindi sono stati verificati tutti i comandi di autenticazione, lutente ha una sessione aperta e pu iniziare ad inviare il corpo della mail. La mail deve chiudersi con un <CRLF>.<CRLF> (ritorno carrello. ritorno carrello). CRLF: carriage return line field

421 categoria 4, indica tutta una serie di risposte con errori; casi con errori reveribili. Questo codice indica servizio non disponibile; questo non significa che viene interrotta ogni tipo di iterazione, perch se il domino ritorna su ed il check diviene positivo literazione pu essere ripresa.

450 mailbox non disponibile. Cio mailbox attualmente non disponibile. 451 errore locale nel processing. Indica problema dalla parte del client

Gli errori della categoria 5 sono errori che sono relativi a comandi completati con esiti negativi irreversibili, cio errore di sintassi ad esempio. Se proviamo ad aprire un messaggio SMTP attraverso un editor testuale possiamo riscontrare una struttura composta da 3 campi. Il campo body rappresenta il testo della mail con il punto finale <CRLF>.<CRLF>. Poi abbiamo altri due campi: il campo envelope che contiene indicazioni di mittente e destinatario MAIL FROM e RCPT TO dove mittente lindirizzo mail nella forma nome_casella_posta@dominio_riferimento e il destinatario lindirizzo di posta del destinatario. Dopo di che vi sono tutti una serie di headers, che sono informazioni accessorie che completano la struttura del messaggio tipo il subject, la data, eventuali destinatari da mettere in copia o in copia nascosta, eventuali mail server intermedi che si interpongono tra mail server, vicino al mittente, e destinatario.

Telematica 12 - lezione 11

Vediamo come fatto un esempio di sessione SMTP. Voglio inviare un messaggio di posta; a parte tutta una serie di campi preliminari che qui sono omessi, quelli in nero sono i comandi digitati dal client, in rosso vi sono le risposte. Mi sto agganciando ad una risposta 220 da parte del server VSMTP1alice.tin.it ESMTP Service (7.0.027) che un messaggio di pronto. Faccio un HELO specificando un indirizzo IP (che mi rappresenta); mi risponde con 250 (servizio disponibile). Dopo di che introduco il mittente MAIL FROM, metto il mio indirizzo e dico che voglio scambiare un messaggio di 329 byte. Lui risponde con 250, facendo vedere che ha recepito quale il mittente e risponde con OK. Dopo di che specifico anche il destinatario e lui mi d un Ok anche per il destinatario. Quello che segue il campo DATA; in corrispondenza di tale campo ho 354 (richiesta iterazione); caso tipico in cui lui richiede che invii i dati. Dopo di che ho un message ID riferito al mio messaggio sul dominio e sul mail server a cui faccio riferimento, con un identificativo specifico e poi tutta una serie di informazioni accessorie; cio praticamente abbiamo i campi header. Poi troviamo anche il nome dello user agent che si sta usando con la sua versione (anche questo un campo header), il riferimento alla codifica in termini di linguaggio che si sta utilizzando e la versione del MIME. Il MIME nasce proprio con la porta perch spesso si rende necessario, non solo scambiare documenti di tipo testuale, ma anche file di tipo generico aventi codifiche particolari. Quindi in questi casi dovremo fornire una chiave di destinazione al server, ossia al destinatario. Si usa la codifica MIME versione 1.0 per stabilire cosa stiamo trasferendo. Con lheader MIME version stiamo stabilendo quale sia la versione del protocollo MIME che stiamo adoperando. Poi troviamo il campo tool, il campo subject e poi agganciato direttamente a MIME version trovo il content type. In questo caso sto trasferendo testo di tipo plain; quindi mi trover di fronte ad una mail scritta senza immagini e senza formattazione. Se avessi avuto una mail contenente immagini e formattazione avrei avuto un content type di tipo text/html. Quando in outlook ci viene chiesto di convertire il testo in html, ci avviene perch il text/plain non gestisce formattazione; una codifica testuale pura con un set di caratteri che ISO-8859-1, senza possibilit di inserire niente di complicato. Subito dopo gli header c il testo della mail che si chiude con un punto. Dopo aver trasferito tutto questo, che segue il comando DATA ossia dopo la riposta positiva del server, avr unaltra risposta di classe 2 che di tipo mail accepted; alla fine mi disconnetto attraverso QUIT. Questo scambio di request-response lo vediamo ora come uno sliffing di pacchetti che passano dal client al server. Si vede che abbiamo la necessit di costituire un socket per far transitare i messaggi (stream) e aprire su quel socket una connessione di livello 7, cio si ha un layer applicato appoggiato sul socket TCP. Abbiamo tutta la negoziazione della

Telematica 12 - lezione 11

connessione TCP; in questo caso la porta che ci interessa a livello TCP la 25. dallaltro lato la porta che scelta, sempre maggiore di 1024, la 32791. Una volta negoziata la connessione, attraverso gli acknoledgment e la sincronizzazione, abbiamo che la prima risposta positiva del server la 220 che viene fornita da vsmtp1alice.tin.it. A questo punto siamo gi a livello 7 perch il socket stato gi aperto e la connessione TCP gi negoziata con successo. Quando il server risponde, mi risponde gi su SMTP, ossia literazione client-server di questo response gi su SMTP. A fronte di questa comunicazione di disponibilit da parte del server, comunico lacknoledgment in riferimento al precedente acknoledgement delloperazione numero 25 e dopo di che inizia la mia prima iterazione con il comando HELO [193.204.59.21]. Tutto quello che passa a livello TCP nelliterazione non lo trovo. Successivamente ho la richiesta di abbandonare la connessione (219) e la risposta da parte del server che accetta la banda della connessione. La parte finale ancora TCP ed la chiusura del socket. MIME serve per impostare correttamente un trasferimento quando i contenuti sono differenti dal testo ASCII. MIME diventato trasversale rispetto ai protocolli di livello applicativo, nel senso che esso adoperato anche per pi protocolli. I content-type di interesse sono: text/plain : testo puro text/html : testo html image/jpeg : immagine jpeg video/mpeg: video mpeg Passiamo ora a POP3. A differenza di SMTP, POP3(Post Office Protocol versione 3 ) serve per fare la procedura opposta rispetto a quella di invio di mail, ossia fa un download in locale dal mail server di riferimento di un messaggio. E un protocollo di tipo client server che implementa uniterazione richiesta-risposta. Anche in questo caso richiesta una procedura di autenticazione, questa volta per motivi di stretto funzionamento, altrimenti non sarebbe possibile garantire un accesso esclusivo ad una determinata risorsa su un server comune. Una mailbox, alla fine dei conti, un file su cui esistono determinate categorie di permessi. Un mail server gestisce un file system, in particolare ogni casella di posta un file allinterno del mail server. Quindi sostanzialmente deve essere garantito un accesso congruente alla risorsa rappresentata dalla mail box da parte degli utenti che posseggano i permessi per quella risorsa, quindi autenticazione obbligatoria. Per lautenticazione bisogna impostare uno username e una password (SMTP fa un account attraverso un check di un pool di indirizzi IP che gestisce; questo non accade in POP3 dove ho un livello di

Telematica 12 - lezione 11

protezione pi spinto). Anche in questo caso il protocollo testuale e la struttura del comando seguita dai parametri; lunica differenza rispetto a SMTP che qui non abbiamo codici di riferimento per la categoria di risposta. Vi solo una risposta testuale. Vediamo i comandi principali di POP3 : USER serve a comunicare lo user dellutente; PASS fornisce la password utente per accedere alle risorse sul sistema; STAT mostra lo stato della mailbox e segue un account favorevole. Una volta che io ho avuto accesso al sistema, in particolare alla mailbox, verr mostrato quello che il contenuto in termini di messaggi sulla mail box, senza che i messaggi vengono visualizzati materialmente. Con STAT iniziamo una transazione, cio prima di fare un download questo comando precede un download sulla mailbox perch si fa un check, salvo a verificare che la mailbox non disponibile. Cio con lo STAT verifico che lo status della mailbox sia on e poi ci risponde con il numero di messaggi attualmente in coda; LIST la lista dei messaggi. Ad ogni messaggio associato un numero progressivo e in corrispondenza trovo lo spazio che in byte occupa. Dopo di che possibile effettuare un download fisico dei messaggi, si usa il comando RETR n dove n il numero ordinale del messaggio univoco che si vuole scaricare. Un retr segue di norma un list DELE n serve a cancellare il messaggio n-esimo, ossia serve a marcare un messaggio tramite un flag e dopo di che in fase di update della mailbox della casella di posta, il messaggio sar fisicamente eliminato. TOP nmsg Nlinee serve a mostrare solo un numero di linee pari a Nlinee del messaggio nmsg QUIT serve a chiudere la connesione; se vi sono messaggi in sospeso sono cancellati. I messaggi marcati con il comando DELE vengono cancellati, quindi poi tutti i messaggi subiscono una modificazione del numero progressivo. Quindi i messaggi marcati con DELE sono cancellati o in fase di update o in fase di quit. Questo non avviene in tempo reale perch il protocollo richiederebbe un livello di iterativit protocollo che il

non ha. Quindi la cancellazione avviene in modo asincrono solo quando lutente

imposta due tipi di azioni: update e quit. Vediamo un esempio di sessione POP3; il nero il client, il rosso il server.

Telematica 12 - lezione 11

+ Ok indica che il dovecot (casellario) pronto, dopo di che inserisco le mie specifiche, username e password, e se queste corrispondono ad un account sulla macchina, si ha un login favorevole come risposta. Poi faccio uno STAT che ha come risposta ok; esso mi informa che ho 6 messaggi per un totale di 25642 byte, cio 25k. Faccio LIST per vedere chi mi ha scritto; ho 6 messaggi numerati attraverso un progressivo e la dimensione di ciascun messaggio. Poi vedo il primo messaggio formato da un certo numero di otteti o byte, poi ho un certo numero di header e il corpo del messaggio tagliato. Alla fine delliterazione esco con quit; a questo punto la mia iterazione con il server si pu ritenere conclusa. Se vado a guardare quello che stato fatto nella precedente iterazione si pu osservare che ho una serie di intermediari tra me, che sono lutente finale, che faccio il download e tutti quelli che sono i mail server intermedi che hanno visto la mia mail, cio attraverso i quali la mia mail stata formattata. La mail passa oltre che dal mail server poliba anche da tutta una serie di mail server che fanno semplicemente un forword. Notiamo che infatti sono differenti gli orari, quindi vi un fuso orario. Notiamo che c uninformazione relativa ad un antivirus che fa la scansione a livello di mail server sulle mail, denominato xvirus(penultima riga) che sul server poliba. Troviamo, inoltre, che ogni messaggio ha il suo identificativo e che serve ad etichettare il messaggio in tutto il suo percorso. Vediamo ora che succede a livello di pacchetti in una sessione POP3. Anche in questo caso necessaria una negoziazione della connessione; mi serve un socket, faccio agreement riguardo la connessione tra client e server e dopo di che il server risponde con dovecot ready, che corrisponde allinizio della transazione. Sia in SMTP che in POP3, una volta che il server ci comunica, attraverso un ready, un certo set di impostazioni TCP, dovr fare un agreement su TCP. Poi posso cominciare la comunicazione a livello pi alto e comincio a guardare il contenuto della mia casella. Questa iterazione va da 193.204.59.21(client con IP statico) a 193.204.49.50(mail server poliba); sto usando POP come protocollo. Successivamente imposto username e password e dopo di che inizio a scaricare attraverso RETRIVE il primo messaggio. Alla fine vi una disconnessone tramite un QUIT. Oltre a POP3 si pu operare un protocollo, maggiormente interattivo, che IMAP. Esso un protocollo pi sicuro, dal punto di vista delliterazione server con il server e client, nel senso di receiver. La maggior parte dei mail server per la posta in arrivo comunque adoperano POP3. Questo protocollo nasce per le mailboxes online; quindi permette uninterattivit con lutente maggiore. Inoltre permette la gestione di una mailbox simultanea da parte di pi utenti; consente direttamente dal protocollo la creazione, leliminazione, la modifica strutturale di una mailbox (qui

Telematica 12 - lezione 11

si pu fare direttamente da remoto; il client pu gestirsi la sua mailbox) ed effettuare ricerche nei messaggi prima che essi vengano scaricati. Tutto questo utilissimo quando di gestisce la mailbox online da remoto. DNS (domain name service) servizio di risoluzione degli indirizzi simbolici in indirizzi IP in internet; praticamente realizza una corrispondenza biunivoca i nomi simbolici adoperati per identificare macchine allinterno di internet con i corrispettivi indirizzi IP. Se sostanzialmente scriviamo sisinflab.poliba.it questo indirizzo si riferir alla macchina del web server che contiene la pagina index.html riferita alla home page di sisinflab.poliba.it. Anche per quanto riguarda le tabelle di posta elettronica avviene una risoluzione, ovvero avviene una risoluzione attraverso una query che si chiama MX, cio avviene una risoluzione di una parte dellindirizzo mail (in particolare del dominio). Nel momento che scriviamo m.ruta@poliba.it, la parte del dominio (poliba.it) risolta mediante una query MX da un DNS che restituisce lindirizzo IP del dominio a cui afferisce il mail server e su cui m.ruta ha un account. Uso DNS anche per risolvere login di posta. Oltre alla struttura di risoluzione deve esserci per poter gestire un approccio particolare per la predisposizione della risoluzione. Lo schema di risoluzione a DNS uno schema complesso che comporta lesistenza di uninfrastruttura di risoluzione specifica. I nomi di dominio devono rispettare una gerarchia, non possono essere assegnati a caso. Quindi abbiamo bisogno di uno schema gerarchico per lassegnazione dei nomi. Ci servono una serie di base di dati efficienti e capienti che devono contenere tutti i riferimenti a questo schema gerarchico di denominazione. E improponibile avere un database centralizzato perch presenterebbe un problema di single point of failure e avrebbe proporzioni enormi. Inoltre affluirebbe tutto il traffico di ricerca e di risoluzione da tutto il pianeta (sarebbe un single point of failure) e sarebbe inefficiente perch dovrebbe avere una larga banda per gestire il traffico in accesso. Quindi si implementa un sistema gerarchico anche da un punto di vista fisico; vi una serie di database distribuiti gerarchicamente. Infine oltre allo schema logico e fisico ci serve un protocollo gestionale; esso serve a mantenere e distribuire le informazioni tra le corrispondenze tra IP e nomi simbolici, attraverso uninterrogazione da un client a un DNS, dove il server quello che fornisce i servizi di risoluzione, oppure uninterrogazione tra DNS di livelli differenti, da un livello di gerarchia pi basso a uno pi alto.

Telematica 12 - lezione 11

10

Telematica 2 - Lezione 11 B

Telematica II: Lezione del 27/06/2007

Annamaria

1. ORGANIZZAZIONE GERARCHICA DELLO SPAZIO DEI NOMI DEL DNS La struttura concettuale di un DNS corrisponde direttamente ad unorganizzazione di tipo gerarchico. Tutti i nomi di dominio in internet sono organizzati gerarchicamente a partire da un nodo radice (root o punto) che costituisce la parte pi alta della gerarchia, fino ad arrivare ai nodi foglia, che sono i nodi completamente qualificati ( i cosiddetti FQDN: Fully Qualified Domain Name), cio nomi con un senso definitivo e compiuto. Ogni FQDN si compone di una serie di livelli, fino ad arrivare al nodo radice. Immediatamente al di sotto del nodo radice (trascurando per ora il ramo che ha come top level domains arpa) ci sono i domini generici (cio .com, .edu, .gov, etc fino a .org). Oltre a questi domini generici, da quando la rete ha iniziato a diffondersi sono state necessarie altre specificazioni, cio i cosiddetti domini nazionali o country domains (cio .it, .us, etc). Al di sotto di un dominio di primo livello troviamo un dominio di secondo livello. Al di sotto di un dominio di primo livello troviamo un dominio di terzo livello, e cos via fino ad arrivare ai domini foglia ( i cosiddetti FQDN). Prendiamo come esempio il dominio sun.tuc.noao.edu (questo un FQDN), il quale derivante dalla composizione di livelli sempre pi superiore. Il dominio foglia sun, il dominio direttamente superiore tuc, poi vi noao, ed infine, il tutto chiuso da un top level domain di tipo edu. Quindi, quando si va a ricomporre tutto il dominio (a partire dallFQDN), bisogna risalire la gerarchia e aggiungere a ogni salto di livello gerarchico un punto, in modo da indicare che c un salto al livello immediatamente superiore. La stessa cosa avviene per un country domain. Invece, il ramo che ha come top level arpa serve a fare la procedura inversa, cio serve ad effettuare le cosiddette QUERY POINTER, che servono a trasformare un indirizzo IP in un nome di dominio. A parte i top level domain, tutti i domini di livello pi basso possono avere una label di al pi 63 caratteri. Quindi, si pensa di creare un sistema di riposte ad una query DNS (questa tende ad avere come risposta un indirizzo IP, dato uno specifico nome), in modo gerarchico. Si tende, quindi, a ricevere una risposta dal livello gerarchico immediatamente superiore a quello in cui siamo attualmente. Se il livello gerarchico immediatamente al di sopra del livello in cui siamo risponde, allora va bene, altrimenti questo livello dovr rivolgersi al suo livello gerarchico immediatamente superiore, e cos via. I procede in questo modo per tutti i livelli gerarchici, fino ad arrivare ai cosiddetti root name server, che corrispondono alla radice della gerarchia ( cio lestremit della piramide). Vi sono una serie di top level domains, i quali vengono gestiti dai cosiddetti NIC (Network Information Centers).I NIC hanno sede in ogni nazione e stabiliscono una serie di corrispondenze nominali, in corrispondenza del proprio top level domain. Per esempio, il NIC italiano gestir le corrispondenze dei nomi di tutti i domini .it . Se, invece, ho un dominio .com italiano, allora NIC delega la gestione alle organizzazioni che si incaricano si quel particolare dominio ( cio si incaricano di ottenere una corrispondenza 1 a 1 tra un nome e un indirizzo IP). Quindi, quando si parla di assegnare un nome, sintende che dato un indirizzo IP abbiamo una corrispondenza diretta (biunivoca) con un nome, e viceversa. Tuttavia, vedremo che la corrispondenza non necessariamente biunivoca. Per ciascuna zona specifica dellalbero dei domini dobbiamo avere un server primario (chiamato AUTORITATIVO, perch mantiene lautorit sulla risposta), il quale fornisce una

Telematica 2 - Lezione 11 B

risposta che ha un grado di approssimazione pari allo zero. Quindi, esso fornisce una risposta autoritaria, cio certa. Oltre al server primario, per ogni zona vi sono anche una serie di server secondari, i quali vengono implementati per scopi di ridondanza e vengono chiamati NON AUTORITATIVI. Un server autoritativo ha in carico la gestione delle corrispondenze tra nome simbolico e indirizzo IP, in modo diretto, cio il server contiene direttamente in s una tavola di corrispondenza. Quindi, ogni risposta che viene da questo tipo di server autoritativa perch una risposta certa, in quanto il server fa una ricerca diretta delle corrispondenze. Invece, i server secondari sono allineati con il server primario attraverso una serie di query periodiche verso il DNS autoritativo, che producono un allineamento (un aggiornamento) della cache table del server secondario rispetto alla cache table del server primario. I server secondari servono ad avere un sistema di risposta il pi possibile efficiente ( se decade il server primario, il servizio viene comunque garantito in quanto ci sono i server secondari). Tutto questo vale per tutti i livelli della gerarchia fino ad arrivare al livello pi basso. In corrispondenza del root della gerarchia si hanno i cosiddetti root name server, che si riferiscono al nodo principale della gerarchia. I root name server sono 13 in tutto il mondo e contengono le corrispondenze di riferimento gerarchico massimo, cio in corrispondenza del nodo radice. Essi corrispondono al livello ., cio il livello pi alto. Nel momento in cui andiamo ad interrogare un root name server, esso manterr le corrispondenze dei vari top level domains. I topo leve domain, a loro volta, avranno le corrispondenze del livello pi basso, e cos via per tutti i livelli, fino a scendere progressivamente nella gerarchia. Il principio per cui si rendono necessari 13 root name server il principio della localit spaziale, cio si tende ad interrogare per primo il server pi vicino. Infatti, i DNS presenti in Italia interrogano i root name server presenti in Europa; qualora tali root name server non dovessero fornire una risposta adeguata, la ridondanza dei 13 root name server permette di rivolgersi agli altri root name server. Inoltre, grazie ai 13 root name server si tende a distribuire il carico di lavoro che avrebbe dovuto supportare un unico root name server. 2. PRINCIPIO DI FUNZIONAMENTO Supponiamo che noi siamo lhost host1.poliba.it (questo un FQDN) e vogliamo conoscere lindirizzo IP di host2.mydomain.eu . Il DNS un protocollo di livello applicativo di servizio, cio a servizio di altre funzionalit pi o meno complesse. Quindi, il DNS uno strumento che si utilizza a diversi livelli; in particolare, viene implicitamente sfruttato anche quando si fa riferimento ad altri protocolli. Ritorniamo allesempio che stiamo effettuando. Innanzitutto, per risolvere il nome simbolico, interroghiamo (cio ci interfacciamo) il nostro DNS locale (cio il server di risoluzione dei nomi che sta in corrispondenza del mio dominio), cio il primo al di sopra del mio livello gerarchico. Nel nostro caso, il DNS locale si chiama dns.poliba.it . Quindi, faccio una query verso questo indirizzo passando come parametro il nome simbolico che voglio risolvere. Il dns.poliba.it potrebbe rispondere direttamente oppure no. Quindi, esso potrebbe contenere linformazione che sto cercando oppure no. Se esso risponde, la risposta non sar comunque di tipo autoritativo, in quanto il dns.poliba.it non pu essere un server primario per un dominio .eu (non pu essere perch ho due domini di pari livello: uno .eu e laltro e .it). Supponiamo che il dns.poliba.it non contiene linformazione che sto cercando, per cui esso deve risalire al livello superiore nella gerarchia (ci vuol dire che comunque sto

Telematica 2 - Lezione 11 B

effettuando una risoluzione di nomi, in quanto nel dns.poliba.it in corrispondenza del nome del livello superiore avr il suo rispettivo indirizzo IP) . Immagino, anche, che i livelli intermedi della gerarchia non possano rispondere. Per cui, ad un certo punto raggiunger il livello massimo, cio il root. In corrispondenza del root avr una serie di root name server. Arrivati a questo punto necessario riscendere nella gerarchia. Infatti, il root name server contiene in s tutti i riferimenti dei top level domains ( cio esso ha le corrispondenze tra i nomi dei top level domain e i loro indirizzi IP). Per cui, esso scender nel domain .eu; questultimo scender ulteriormente nella gerarchia, cio esso conoscer le corrispondenze 1 a 1 tra i DNS di livello pi basso e i rispettivi indirizzi IP (quindi pu contattare il DNS dinteresse); questultimo conoscer lindirizzo IP del DNS di riferimento di mydomain. A questo punto, si ripercorrer il percorso a ritroso, in modo tale da ottenere la risposta. Ovviamente, posso ricevere la risposta anche molto prima, cio non devo per forza arrivare fino al DNS che mi fornisce una risposta di tipo autoritativo. Questo il percorso da fare nella peggiore delle ipotesi. Questo tipo di meccanismo di risoluzione detto RICORSIVO: si applica una ricorsione nella risoluzione dei nomi, in quanto non si fa altro che ripetere la stessa procedura in modo ricorsivo, procedendo per livelli immediatamente superiori, fino a raggiungere il root, per poi ridiscendere e poi risalire. Esiste per un altro tipo di risoluzione: risoluzione ITERATIVA dei nomi. La risoluzione iterativa ha una struttura differente. Come prima, abbiamo un client che vuole risolvere un nome simbolico in un indirizzo IP. Innanzitutto, il client deve contattare il name server pi vicino a s (il local name server). Il local name server potrebbe rispondere al client con una reply di tipo iterativo. Tuttavia, noi potremmo anche interrogare in modo separato il root name server e ricevere una risposta di tipo iterativo. Possiamo anche interrogare il server autoritativo per il livello dinteresse e ricevere una risposta di tipo autoritativo (cio una risposta certa e diretta). Quindi, posso non rispettare i livelli gerarchici, non fare una ricorsione del processo di risoluzione sul livello gerarchico, ma in modo iterativo posso interrogare i server di risoluzione che mi interessano (tipicamente sono il locale name server, il root name server e il server autoritativo dinteresse). Se il server locale risponde, la procedura finita. Altrimenti contatto il root name server, che comunque sa tutto di tutti, per cui pur se non conosce la risposta interroga i livelli immediatamente pi bassi. Infine, posso interrogare direttamente il server autoritativo che mi d la soluzione. Questo un meccanismo semplificato, che per comporta alcuni problemi. Vediamo i problemi dovuti a questo meccanismo: a. Il client che fa una risoluzione iterativa deve fare questa procedura direttamente per ognuno dei server che deve contattare. Mentre, nella risoluzione ricorsiva il client ha contattato il local name server e poi si disinteressato di tutto il resto della procedura che veniva progressivamente svolta, nel caso della risoluzione iterativa il client inoltra almeno 3 differenti query. Per cui nel secondo caso, la banda che serve in uscita viene sicuramente moltiplicata (occupo pi banda, in quanto divido la banda in odo da inoltrare diverse richieste). b. Ho un maggiore carico computazionale a carico del client. Questa volta il cliente che deve eseguire la procedura di indirizzamento delle richieste; deve gestire le richieste; deve fare il lavoro che prima veniva fattola tutti i name server di livello progressivamente crescente rispetto al livello del client. Quindi, dal punto di vista del client la soluzione ricorsiva sicuramente preferibile perch non viene distrutta la banda del client, inoltre, si ha un carico computazionale pi basso.

Telematica 2 - Lezione 11 B

Tuttavia, c lalternativa della soluzione iterativa perch se riesco a raggiungere il DNS autoritativo e questo mi risponde, allora il delay che posso avere tra un request e una response sicuramente minore. Questo perch il cliente stesso che si interessa di fare direttamente la richiesta. Anche nel caso della soluzione iterativa, la gerarchia sempre esistente. Infatti, il sistema gerarchico un sistema concettuale che viene adoperato, che per poi viene implementato fisicamente. Tuttavia, nel caso iterativo il client si incarica di fare direttamente le query, cio il client si incarica di contattare direttamente i diversi livelli della gerarchia, mentre nel caso ricorsivo il client si incarica di contattare solo il DNS locale. Quindi, se a me serve lindirizzo di un host, questultimo mi pu essere dato anche dal mio DNS locale, se tale indirizzo contenuto nella cache di questo DNS. In ugual modo, lindirizzo me lo pu fornire anche il root name server, se questultimo contiene nella sua cache tale indirizzo, Perci, se tale indirizzo non contenuto n nella cache del local server, n nella cache del root name server, allora questa procedura uguale alla procedura ricorsiva, in termini di delay. Quindi, se il client riesce a recuperare lindirizzo, esso pu contattare direttamente il server autoritativo e ricevere una risposta. Questo pu essere verificato, in quanto i DNS di livello crescente fanno caching, e quindi, il delay abbattuto. Quindi, la soluzione di tipo iterativo beneficia, in termini di delay, di risposte non autoritative. Infatti, nel momento in cui si riesce a recuperare la risposta non autoritativa rispetto al dominio che voglio cercare oppure rispetto ad un server autoritativo, posso raggiungere direttamente il server autoritativo e quindi poi posso avere una risposta diretta da tale server. Vediamo come funziona la gestione non autoritativa delle risposte. Supponiamo di essere sempre nella stessa situazione di prima. Quindi, contatto il local name serve per avere lindirizzo di un host, il quale potrebbe darmi uninformazione diretta perch i DNS fanno caching delle risposte. Il meccanismo di utilizzo di memorie tampone un meccanismo di abbattimento dei tempi derivanti dallesistenza di colli di bottiglia, se la cache gestita in modo corretto. Infatti, se le cache diventano eccessive in termini di numero, allora avremo un effetto che peggiora la stessa situazione. Per cui, anche in questo caso viene fatto caching delle richieste: mantengo nella mia memoria delle risoluzioni precedenti e quindi posso fornire una risposta diretta, senza che si debba seguire la gerarchia al fine di recuperare una risposta autoritativa. Per cui tutti name server di livello superiore rispetto al livello del name server a cui sto inoltrando la mia richiesta, mantengono le precedenti risoluzioni per un certo intervallo di tempo, allinterno della loro cache memory. Quindi, tali name server possono rispondere con quelle risoluzioni, specificando per al client (o comunque al server di livello pi basso), che le risposte che si stanno fornendo non sono certe, cio sono risposte non autoritative. Viene data tale informazione sulle risposte che si forniscono, in quanto il client potrebbe decidere di non accettare una risposta non autoritativa e quindi, la procedura di interrogazione dei name server deve procedere secondo il solito principio gerarchico. Tuttavia, il client potrebbe anche accettare una risposta non autoritativa e quindi procedere. Il principio per cui viene fatto il caching quello che le risposte non autoritative riducono il delay. Una risposta non autoritativa potrebbe essere non completamente corretta, in quanto la non correttezza di una cache memory di name server pu essere causata da diversi meccanismi fraudolenti, che impongono in corrispondenza di nomi simbolici particolarmente cliccati, degli indirizzi IP che non sono quelli realmente corrispondenti.

Telematica 2 - Lezione 11 B

Quindi, le cache dei DNS di livello intermedio potrebbero essere violate (quanto pi basso il livello gerarchico a cui facciamo riferimento, tanto meno efficienti ed efficaci sono i controlli che vengono attuati). Ad esempio, in DNS di poliba sottoposto ad un n.ro di controlli nettamente inferiori rispetto al DNS che ha il root name server. Quindi possibile, con una serie di meccanismi fraudolenti, che le cache di livello pi basso, deputate a fornire una risposta non autoritativa, possano essere violate. Ci vuol dire che in corrispondenza di un nome molto cliccato sostituisco un IP non corretto (ad esempio chiedo di risolvere il nome www.google.com e ottengo lindirizzo IP di un sito porno). Per cui, da questo punto di vista, abbiamo un rischio nelle risposte non autoritative. Ricapitolando: con la risoluzione iterativa si spera in un abbattimento del delay, pagando in termini di affidamento a query non autoritative. Quindi, si interroga prima il DNS locale chiedendo o lindirizzo diretto dellhost che si sta cercando o lindirizzo del root name server oppure lindirizzo del server autoritativo per quel particolare host. Se il local server in grado di fornire uno di questi 3 indirizzi, il client ha raggiunto il suo scopo perch ammesso che la risposta non autoritativa fornita sia corretta, il client ha direttamente un target o verso il name server autoritativo, o verso lhost che desideriamo o verso il root name server. Se, invece, il local server non ha una risposta non autoritativa da fornire necessario rispettare la gerarchia. Tuttavia, se durante il percorso gerarchico riesco ad ottenere una risposta non autoritativa (cio o lindirizzo IP del root name server o lindirizzo IP del server autoritativo o lindirizzo IP dellhost che stiamo cercando), il client contatta direttamente lindirizzo IP che ha ottenuto. Invece, nella soluzione ricorsiva la procedura di risalire nella gerarchia deve essere comunque eseguita. Esempio di soluzione iterativa: supponiamo di voler cercare il dominio host2.mydomain.eu. Se devo eseguire la risoluzione iterativa, il client contatta direttamente il local name server e supponiamo che il local server contiene gi lindirizzo IP di host2.mydomain.eu . Il client nella query che ha fatto ha specificato che si accontenta anche di riposte non autoritative e perci avendo ottenuto lindirizzo IP cercato, raggiunge direttamente lhost avente nome simbolico host2.mydomain.eu . Supponiamo ora che il local name server non contenga un riferimento dellhost che si vuole raggiungere (cio non ha la risoluzione dellindirizzo simbolico). Per cui, il client cerca di contattare il name server autoritativo per quella particolare richiesta. Se il nostro name server ha lindirizzo IP del server autoritativo, allora il client contatter direttamente tale name server (perch il client ha specificato che si accontenta di risposte non autoritative). Quindi, una volta contattato il name server autoritativo, esso verr interrogato dal client, il quale ricever una risposta e quindi contatter direttamente lhost che si stava cercando. Non c una cosa analoga a questa nella risoluzione ricorsiva, in quanto per poter ottenere lindirizzo IP dellhost di riferimento, a meno che non mi accontenti di una risposta immediata non autoritativa del local name server, devo seguire tutta la gerarchia. Quindi, nel momento in cui uso la risoluzione iterativa punto a raggiungere lhost di riferimento, il root name server e il server autoritativo. Appena trovo ad un livello qualsiasi della gerarchia lindirizzo di uno di questi 3 (server o host), lo contatto direttamente. Invece, con la procedura ricorsiva il client si affida al local name server e non si interessa di nulla, in quanto esso aspetta che ciascun livello della gerarchia esegua questa procedura in modo ricorsivo. Quindi, se il client si accontenta di risposte non autoritative, non appena uno dei livelli della gerarchia ha trovato lindirizzo che il client sta cercando, il client avr la risposta dalla gerarchia in modo progressivo (cio dal livello pi alto al livello pi basso). 3. FORMATO DI UN PACCHETTO DNS

Telematica 2 - Lezione 11 B

Abbiamo una serie di campi: a. IDENTIFICATIVO univoco del messaggio costituito da 16 bit. E una sorta di transaction identifier. Esso server perch ad un messaggio di query DNS corrisponder, in modo 1 a 1, una risposta. Per cui un messaggio di richiesta e uno di riposta avranno lo stesso transaction id. b. FLAGS: servono a impostare le propriet generali di una richiesta o di una risposta (in generale di un messaggio). E da notare che il formato di una messaggio DNS identico sia per le richieste che per le risposte. Per stabilire se un messaggio una richiesta o una risposta viene utilizzato un particolare flag, che in base al valore che assume sta ad indicare che si tratta di una richiesta o di una risposta. c. N.RO DOMANDE: se si tratta di una richiesta viene indicato anche il n.ro di richieste che stiamo facendo. Infatti con un messaggio (con una query) possiamo fare pi richieste DNS e allo stesso modo, in un unico pacchetto potranno essere contenute pi risposte. Quindi, il contenuto di un messaggio a lunghezza variabile, a seconda del n.ro di domande che trasporto. Per cui, essendo un messaggio a lunghezza variabile si rende necessario un header che mantenga le dimensioni del contenuto nel campo dati. Inoltre, in questo caso il campo N.RO RISPOSTE non avr senso. d. N.RO RISPOSTE: se si tratta di una risposta viene indicato anche il n.ro di risposte che stiamo ottenendo. Se si tratta di un messaggio di risposta il campo n.ro domande non avr senso. A questo punto inizia il campo dati. Innanzitutto specifichiamo cosa un RR (Resource Record): essa una specifica struttura dati che contiene una reply DNS. e. N.RO DI RR ASSOLUTI: il RR assoluto un resource record che contiene una reply di tipo autoritativo. f. N.RO DI RR ADDIZIONALI Successivamente abbiamo il campo dati vero e proprio, cio domande e risposte. Questultime sono suddivise in RISPOSTE SEMPLICI, ASSOLUTE e ADDIZIONALI. Le risposte semplici sono quelle dirette (cio quelle non autoritative); le risposte assolute sono quelle autoritative; le risposte addizionali sono le risposte che comportano delle informazioni aggiuntive. 4. FLAGS In totale per i flags abbiamo a disposizione 16 bit. I flags che abbiamo sono: a. QR (Query): questo flag costituito da 1 solo bit, il quale a 0 se si tratta di una query, mentre a 1 se si tratta di una risposta b. opcode: costituito da 4 bit. Esso a 0 se si tratta di una query standard (cio se si tratta di una conversione da nome simbolico ad IP); a 1 se si tratta di una query inversa ( la cosiddetta query ptr: ho un IP e voglio ricavare un nome simbolico); a 2 per indicare il server status; poi abbiamo altri codici operativi c. AA (Authoritative Answer): costituito da 1 solo bit che indica che il server sta fornendo una risposta di tipo autoritativo (nel caso in cui tale bit settato a 1). d. TC: costituito da 1 solo bit, ed un flag di continuation state che serve ad indicare che il pacchetto, se settato, sta superando i 512 bytes. Si ha il riferimento di 512 bytes perch questa pu essere la massima dimensione di un pacchetto UTP. Generalmente il DNS va su UTP, in quanto importante la rapidit anzich laffidabilit. Quindi questo flag viene settato quando la risposta supera i 512 bytes. e. RD: a 1 se la query di tipo ricorsivo, mentre a 0 se di tipo iterativo.

Telematica 2 - Lezione 11 B

RA: a 1 se il server che abbiamo contattato supporta la soluzione ricorsiva, altrimenti a 0. g. rcode (Return Code): costituito da 3 bit ed a 0 se non ci sono stati errori, mentre e a 3 se vi un errore nel nome che abbiamo chiesto di risolvere. I restanti 3 bit non sono adoperati. 5. FORMATO DEL RESOURCE RECORD (RR) I primi 32 bit si riferiscono al NOME di un DOMINIO, che in realt un identificativo. Il campo TIPO indica il tipo di query che stata effettuata. Se il tipo ha valore 1 vuol dire che stata effettuata una query di tipo A, cio che da un nome simbolico voglio risalire ad un indirizzo IP; se il codice di tipo 12 vuol dire che stata effettuata una query di tipo pointer (PTR query), cio dato un indirizzo IP voglio risalire ad un nome simbolico. Il campo classe un campo fittizio ed normalmente sempre ad 1 perch relativo ad indirizzi internet. Il campo TIME-TO-LIVE indica lintervallo di tempo (in secondi) per cui quel RR trover posto nella cache di un client (di un resolver). Per cui, se viene implementato un meccanismo di sostituzione dei record della cache a tempo, andremo a verificare tutti i time-to-live scaduti e verranno sostituiti progressivamente tutti quei record che saranno scaduti. Questo campo serve a tener traccia di quei record che hanno ancora validit. Il campo lunghezza dati indica il n.ro di bytes del campo dati. Infine, abbiamo il campo dati vero e proprio. 6. PACCHETTO CON LA QUERY Vediamo una query di tipo A. Quindi, il client ha lindirizzo 193.204.59.21 e vuole risolvere il nome simbolico www.google.it . Viene contattato lhost 193.204.49.36, il quale il DNS primario del poliba. Lavoro con il protocollo DNS. Il primo valore del pacchetto da esaminare il campo FLAGS. Il primo flag (Response) a 0, il quale indica che il messaggio che sto inoltrando una query. Poi, ho opcode = 0000 che indica che sto effettuando una standard query. Il 3 flag (Truncated) a 0 perch il messaggio non troncato, cio contiene tutto in s. Questo abbastanza normale in una query, a meno che il pacchetto non contenga pi richieste. Il 4 flag (Recursion Desired) settato a 1 perch voglio fare una soluzione di tipo ricorsiva. Il 5 flag (Z) riservato, cio non viene adoperato. Infine, il 6 flag (che si riferisce alla non autoritativit della risposta) a 0, per cui il client si accontenta anche di risposte non autoritative. Queste sono tutte le informazioni che il client fornisce al DNS locale, il quale si regoler di conseguenza. La parte successiva Q (Query) / A (Answers) / AA (Authoritative Answers) / AD (Additional Answers). Quindi, in questa stringa trovo le informazioni che contiene il pacchetto. Se Q/ A / AA / AD sono a 1/0/0/0 vuol dire che il pacchetto contiene una sola query. La query : Name: www.google.it : type A, class IN Dire classe = 1 equivalente a dire classe IN. Vediamo ora come risponde 193.204.49.36 . Quindi, il DNS sta facendo una reply. Il protocollo di riferimento DNS, e questa una risposta ad una richiesta standard.

f.

Telematica 2 - Lezione 11 B

Esso dice che il CNAME (Canonical Name) www.google.com si riferisce a www.l.google.com , il quale ha 2 IP di riferimento, cio 66.249.85.104 e 66.249.85.99 . Vediamo i flag del pacchetto. Il 1 flag impostato a 1 indica che si tratta di un pacchetto di risposta. Lopcode 0000 perch si tratta di una risposta ad una query di tipo standard. Il 3 flag a 0 perch il dns.poliba.it sta rispondendo in modo non autoritativo. Quindi, dns.poliba.it non il server che ha autorit sul dominio di google, m asta cachando su quella risoluzione e sta fornendo direttamente una risposta. Siccome il client ha specificato nella sua richiesta che andava bene anche una risposta non autoritativa, allora il dns.poliba.it sta fornendo al client questa risposta non autoritativa. Il 4 flag indica che il msg non troncato. Il 5 flag indica che stata richiesta una soluzione ricorsiva. Il 6 flag indica che la ricorsione disponibile e quindi pu essere fatta. Il 7 flag non adoperato. L8 flag indica che la risposta autenticata. Alla fine dei flag vi il reply code, il quale indica che non vi sono errori. I bit Q / A / AA / AD sono a 1/4/4/4 . Per cui ci aspettiamo 1 query, 4 risposte di tipo generale, 4 risposte autoritative e 4 risposte addizionali. Il campo ANSWERS dice che www.google.it corrisponde al CNAME di questo dominio. Questo vuol dire che www.google.it in realt un ALIAS. Un ALIAS un nome simbolico di tipo sinonimo rispetto al nome simbolico reale. Generalmente, esso corrisponde a criteri di maggiore facilit di comprensione o digitazione. Ad esempio, il web server del sisinflab si trova su una macchina che in realt si chiama www-ictserver.poliba.it . Un alias in protocollo DNS prende il nome di CNAME. Questo CNAME appartiene alla classe 1 e il time to live di 3 giorni, 1 ora, 1 minuto e 19 secondi. Il nome di cui www.google.it alias www.google.com . Anche www.google.com un CNAME., appartiene alla classe 1, ha un certo time-to-live ed alias di www.l.google.com . Quindi www.goole.it alias di www.google.com , il quale a sua volta alias di www.l.google.com . Il nome www.l.google.com non un alias, ma un address report, cio ha una corrispondenza diretta con un IP. In realt, si ha la corrispondenza con 2 IP: 66.249.85.104 e 66.249.85.99 . Si pu avere una stessa interfaccia di rete verso 2 diversi indirizzi IP????? Si, infatti www.l.google.com corrisponde a 2 diversi indirizzi IP. Si duplicano gli IP in corrispondenza di una stessa interfaccia di rete, sia per motivi di efficienza (cio possiamo decidere di ripartire il carico su due IP, anche se questi appartengono alla stessa classe 66.249.85) sia per motivi di ridondanza (cio quando decade uno dei 2 indirizzi, posso comunque far funzionare laltro indirizzo IP). Queste sono le risposte di tipo generale. Poi, abbiamo le risposte di tipo autoritativo che provengono da name servers autoritativi. Quindi, il server con questa risposta ha detto che lui in grado di supportare la ricorsione, ma ha detto anche che stato in grado di raggiungere un server autoritativo. La risposta autoritativa viene dal name server l.google.com, il quale di classe IN e corrisponde a b.l.google.com (questo il DNS autoritativo che mantiene i riferimenti riguardo l.google.com). Lindirizzo IP di b.l.google.com lo ritrovo nelle risposte addizionali. Ho altri 3 name server autoritativi: a.l.google.com, c.l.google.com, d.l.google.com .

Telematica 2 - Lezione 11 B

Osserviamo che nella parte type abbiamo che i name server di riferimento sono ns, cio sono della categoria name server. Invece, laddove abbiamo type A, ritroviamo una corrispondenza address, cio abbiamo una corrispondenza diretta con un indirizzo IP. Quindi, l.google.com fa riferimento a 4 differenti DNS (che sono a, b, c), i quali hanno come indirizzo IP quello specificato nelle risposte addizionali. Colui che conosce lIP di questi name server il name server di livello .com . Colui che conosce lIP del name server di livello .com il root name server. 7. POINTER QUERY Una query di tipo pointer una query inversa: dato un indirizzo IP, si vuole conoscere il nome simbolico. Si sfrutta un branch del ramo dellalbero di risoluzione degli indirizzi ( quello che ha come top level domain arpa). La tecnica prevede di prendere lIP che si vuole risolvere, e dato che lIP e composto da 4 valori numerici corrispondenti a 4 diversi livelli di rete, non si fa altro che ricostruire una gerarchia rovesciando lindirizzo. Supponiamo di voler risolvere lindirizzo 140.252.13.33. Per cui, lindirizzo viene rovesciato e viene indicato come livello pi basso della gerarchia il 33 (livello pi estremo), mentre il livello pi alto della gerarchia il 140 (livello pi interno). Successivamente, si accoda a questo indirizzo rovesciato i livelli in-addr e arpa, il quale si interfaccia direttamente al root della gerarchia. Quindi, un indirizzo IP diventa un insieme di livelli della gerarchia. E si cerca lindirizzo IP 140.252.13.33 di una macchina host, questo indirizzo sar un FQDN e quindi pu essere rappresentato come una serie di nomi posti in sequenza tra loro. Per cui, viene rovesciato lindirizzo la parte iniziale (il 140) diventa la parte ultima (la parte pi interna della gerarchia), e poi accodo in-addr.arpa . Qustultimi sono i due livelli gerarchici che permettono di fare lassociazione diretta tra quellindirizzo IP e il nome simbolico.

Telematica 2 - Lezione 12 A

Vediamo di concludere con bit torrent. Facciamo un paragone con altri sistemi un po pi recenti rispetto a bit torrent. Abbiamo visto i punti a favore; vediamo di capire, facendo un paragone, dove stanno i pregi e i difetti di bit torrent rispetto ad altri sistemi. eDonkey 2000 la rete peer to peer che supporta eDonkey o per esempio eMule. Con BitTorrent ogni istanza del client si concentra nel trasferimento di un singolo file. Invece nel caso di eMule o eDonkey io posso decidere di effettuare un opzione su pi file, condividere e scaricare un numero di file maggiore di uno. Evidentemente se faccio questo sicuramente la larghezza di banda di eDonkey 2000 in upload ridotta rispetto a BitTorrent e questo potrebbe essere un problema specialmente se lavorate con l adsl. Nell adsl c asimmetria, la gestione dell asimmetria comporta gi in partenza una riduzione della banda in upload rispetto alla banda in download. Se oltre a questo voi peggiorate la gi critica situazione dell asimmetria con una spalmatura della banda su pi upload -> la qualit del servizio da questo punto di vista potrebbe essere peggiore, di eDonkey2000 rispetto al caso di BitTorrent. Quindi in cosa si vede la differenza? BitTorrent generalmente pi veloce per fa opzione su un singolo file quindi eDonkey pi lento ma consente di lavorare su pi file. Una cosa simpatica di eDonkey / eMule la gestione dell assegnazione dei crediti per coloro i quali mettono a disposizione delle risorse, per evitare il fenomeno di cui dicevamo prima, di assenza di risorse, cio quell attacco che impone l utilizzo della rete p2p solo in un senso, cio solo per scaricare. Altre differenze, BitTorrent non ha un metodo specifico per fare indicizzazione dei file condivisi infatti abbiamo detto che per poter recuperare un file utilizziamo un web server. Chiaramente non tutti i web server sono disposti ad ospitare .torrent. Questo potrebbe essere un limite; quindi da questo punto di vista possibile che il numero di risorse sia inferiore rispetto alla rete eDonkey. Tenete conto che eDonkey nel protocollo ingloba gi un servizio di indicizzazione, cio non dovete rivolgervi ad un web server per trovare un .torrent. Se provate a lanciare eMule, gi nel client eMule potete riscontrare quelle che sono le macchine che vi possono fornire quello che cercate. Difatti Cohen sta lavorando per un motore di ricerca per le prossime versioni di BitTorrent e contiene una serie di ridondanze per evitare il problema del single point of failure. Oltre a questo non ci rimane che accennare ai dettagli di protocollo. Come funziona Bit torrent da un punto di vista protocollare? Tutti i file devono essere codificati, adoperando una tecnica detta di B-encoding. E una tecnica di codifica molto semplice; le stringhe sono codificate con un valore numerico che ne identifica la lunghezza seguito da due punti e da stringa data. Gli interi sono codificati con un carattere di inizio i e uno di fine e, che contengono al loro interno il valore dellintero decimale in codice ASCII. Oltre a questo la codifica di B-encoding pone delle restrizioni alla codifica di liste e di dizionari. Una lista codificata come una sequenza con un carattere di inizio(l) e uno di fine (e); allinterno dei due caratteri troviamo le singole stringhe rappresentate come una sequenza di lunghezza_stringa:stringa lunghezza_stringa:stringa. Un dizionario una sequenza di copie chiave-valore; cio tante copie che ad ogni attributo specificato fanno corrispondere un campo valore. Un dizionario in B-encoding si codica in tal modo: vi un carattere di inizio (d) e uno di terminazione (e) e poi una serie di coppie chiave-valore. Ogni coppia avr anche una corrispondente lunghezza. A che serve questo tipo di codifica? Vediamo come fatto un file .torrent; un file .torrent un file che trovo sul web server che ci permette di rintracciare il Tracker. Il file .torrent contiene un dizionario; esso stesso un dizionario codificato via encoding. I campi chiave di un file .torrent sono: Info (obbligatorio) contiene il riferimento ad un dizionario che descrive completamente il file da scaricare, cio la risorsa

Telematica 2 - Lezione 12 A

Announce (obbligatorio) contiene un URL del tracker, cio lidentificatore unico del tracker allinterno della rete TCP Creation date contiene la data di creazione del file in formato UNIX epoch Comment Create by ossia nome e versione del programma usato per la generazione del file Vediamo come fatto il dizionario info; info il campo chiave, il valore il dizionario. Il dizionario fatto cos: a sua volta contiene altri campi chiave : length: lunghezza del file in byte (intero) lunghezza del file in byte (intero) name : nome del file (stringa) piece length: lunghezza in byte di ciascun pezzo in cui suddiviso il file (intero) Md5sum stringa di 32 valori esadecimali che contiene la stringa md5 del file; limpronta md5 con cui, una volta fatto il download del file, posso verificare la correttezza formale del file. Pieces valore di hash a 20 byte calcolato con un altro algoritmo crittografico che in corrispondenza di ciascun chunck fa la stessa procedura che facciamo su file, cio fa un controllo di errore. Quindi ho un doppio meccanismo di controllo dellerrore, uno su singoli chunck e laltro sullintero file; limpronta che si utilizza md5 su file e SHA1 per quanto riguarda i pieces. Questo qua linfo che stava nel file . torrent. Vediamo come funziona il protocollo nel dettaglio. il tracker il servizio che sta sopra http perch un .torrent lo troviamo nel web server, quindi questo un layer di servizio che sfrutta http. In realt funziona adoperando le GET. I metodi per inviare dati sono o GET o POST; in entrambi i casi posso passare qualcosa. Con GET passo dei parametri (separati da &) con la richiesta http purch la loro dimensione non ecceda 1024 byte(massima dimensione di una richiesta URI). I parametri risultano essere visibili(a differenza del POST), e sono quelli che mi permettono di raggiungere i dati che mi interessano cio i protocolli; oltre a questo come parametri passo i metodi che servono per riportare le statistiche. Come funziona questo tipo di interazione? I parametri che passo in una richiesta sono[94] : info_hash : sono 20 byte e corrispondono alla SHA1 hash relativo al valore del campo info nel .torrent; peer_id : identificativo del peer/client(stringa di 20 byte); port: numero di porta su cui il client in ascolto(6881-6889); uploaded : numero totale di byte trasferiti in upload(per fare statistiche); downloaded : numero di byte scaricati; left : numero di byte da scaricare; event : uno tra i valori started(in corso), completed(completato), stopped(temporaneamente sospeso) che indicano lo stato del trasferimento; ip : indirizzo ip del client(opzionale), il tracker pu comunque dedurlo dalla connessione TCP. La risposta che il client riceve prevede un documento nel tipo MIME text/plain contenente un dizionario bencoded con le seguenti chiavi[95]: failure reason : motivo del problema ( se presente le altre chiavi potrebbero non essere presenti); interval : intervallo, in secondi, che il client deve attendere prima di inviare una nuova richiesta al tracker(i client possono mandare una richiesta al tracker prima del termine specificato solo se viene

Telematica 2 - Lezione 12 A

invocato un evento stopped/completed o se il client ha bisogno di conoscere un maggior numero di peer, quindi interval pu essere modificato al variare di event) ; tracker id : identificativo univoco del tracker; complete : numero dei peer con file completo; incomplete : numero di peer con file incompleto; peers : una lista di dizionari con le seguenti chiavi: peer id, ip, port. Il protocollo di riferimento si chiama peer wire, il quale utilizza queste strutture dati e questi file che abbiamo visto e utilizza la codifica bencoded su queste strutture dati. Un client deve mantenere delle informazioni di stato per potere gestire una connessione con un altro client remoto. Come fa a mantenere queste informazioni di stato? Utilizza 2 stati differenti[96]: choked : indica che il peer remoto ha messo in stato di chocked questo client, cio il peer remoto non accetta richieste da questo client; interested: indica che un eventuale peer remoto interessato a qualcosa che io ho da offrirgli. una notifica che il peer remoto inizier a richiedere blocchi quando il client lo pone in stato unchoked(consento allaltro peer di accedere). Quindi ho questi 2 stati che mi servono per etichettare il client, in base alla combinazione di questi 2 stati identifico i client interessati alle risorse che io ho e poi posso bloccare o sbloccare(se mi comporto da server) . A pag. 99 troviamo la sintassi dell handshake tra client e server e dopo di che il passaggio completo del messaggio. Troviamo a pag. 100 la struttura dei messaggi. Nel momento in cui un client e un server si mettono daccordo per il trasferimento di un chank fanno un handshake che riguarda un accordo sul protocollo che sto utilizzando e tutte le informazioni riguardanti le chiavi di cifratura . Dopo di che ogni client si identifica con un identificativo e poi riceve materialmente il trasferimento. Tutti i messaggi hanno struttura prefissata con una parte di prefisso, una parte di identificativo del messaggio e poi il payload. <lenght prefix><message ID><payload>

Telematica 2 - Lezione 12 A

Telematica 2 - Lezione 12 B

RIEPILOGO:

Abbiamo visto cosa una pointer query. Serve a fare il processo inverso rispetto alla risoluzione simbolica del nome. Mi serve cio a sapere dato lip il nome che ha nella rete. Per fare questo si sfrutta un branch a sinistra della gerarchia, per ricostruire a partire da ip numerico il nome simbolico. Il principio lo stesso della query normale, solo che si utilizzano i due nodi Arpa e inAddr, cio il nome DNS corrispondente ad un determinato indirizzo lindirizzo rovesciato seguito da .in-addr.arpa. Se vediamo les. a pag 57- 58 possiamo notare come facciamo una richiesta al DNS del poliba e questo ci risponde che la macchina si chiama dee227.poliba.it oltre ad ulteriori informazioni: accettiamo di fare ricorsione, messaggio non troncato, la parte riservata rimane riservata, la parte non autenticata questa volta non accettabile, abbiamo tecnicamente bisogno di una risposta di tipo autoritativo. Da notare che il DNS che risponde autoritativo, la macchina di poliba.it quindi una macchina che fa parte di quel dns, ovviamente avremo una risposta autoritativa (tra laltro la query richiedeva per forza una risposta autoritativa qui nellesempio, una non autoritativa infatti non sarebbe stata accettata). La risposta autoritativa ci mostra inoltre 4 nomi autoritativi : cstar,server2,anthares,dns2 e dei records addizionali. 193.204.49.36 ovvero cstar autoritativo, inoltre c un dns secondario che anthares perch nella logica un secondario ha un ip seguente a quello del primario 193.204.49.36.36 il primo193.204.49. 37 il secondo. Questultimo allinea la propria cache memory rispetto al primo.

Query Mx

Sta per Mail Exchange ed lultimo tipo di query possibile.Anche per SMTP il riferimento che si usa per il raggiungimento del mailserver simbolico. Ovviamente il riferimento simbolico che si sta adoperando corrispondente alla seconda parte della mail quella che segue la @ , va risolto in un indirizzo ip perch ci permette di raggiungere un socket su cui mandare uno stream. Quando facciamo invio di un messaggio che succede? Abbiamo un agente (MTA), che inglobato nello user agent che effettua una risoluzione di nome al mailserver relativo al dominio del destinatario. Se stiamo scrivendo una mail ad uno che ha una mailbox su un server libero.it, il nostro MTA deve risolvere lip di libero.it. Come fa? Fa una query DNS per recuperare dal nome del destinatario il dominio e da questo lip. Che cosa viene risposto ad una query mx? Vengono restituiti una serie di

Telematica 2 - Lezione 12 B

hostname che possono recepire il messaggio di posta che stiamo cercando di inviare. Perch una serie di host? Perch possibile che debba attraversare pi intermediari prima di raggiungere il destinatario ( chiaramente questi devono essere accreditati dal destinatario finale che sceglie i punti di passaggio). La necessit di avere pi intermediari quella di garantire il transito del messaggio che vogliamo inviare. Teniamo conto che il nostro messaggio lo inviamo direttamente al nostro mail server locale, poi questo si incarica di indirizzarlo attraverso la rete. Come gestisce questo linvio? Avr una serie di intermediari ognuno etichettato da un preference number che uno score che viene assegnato ad ogni server, ed il nostro mail server locale sceglie quello che ha preference number pi basso(cio a priorit pi alta). Quindi il meccanismo di gestione di una query mx sostanzialmente analogo rispetto a quello canonico di una query dns. A cosa serve? Serve ad abbinare ad una componente di dominio che si trova alla parte conclusiva dellindirizzo ip. In realt vengono abbinati pi indirizzi ip corrispondenti ad un set di mail server accreditati dal destinatario. Questi vengono scelti dal mittente in base al preference number che ogni mail server porta dietro e che pu essere esplicitato solo esclusivamente dopo lesito di una query dns. Questa struttura di una query diversa da quella dns perch ce labbiamo? Perch da un punto di vista pratico ci si resi conto della necessit per forza di cose di implementare lesistenza di pi mail server in corrispondenza di uno stesso dominio,per motivi di spazio. Come faccio a gestire questa cosa? Ho necessit di modificare leggermente la risposta di una query. In una query mx rispondo con pi soluzioni alternative etichettate con un preference number per fare in modo che di norma si segua una certa direzione. Comando NSLOOK-UP : serve ad effettuare una query dns ed avere un indirizzo ip a partire da un certo indirizzo simbolico. Inoltre fornisce altre informazioni come anche il canonical name wwwcirp.poliba.it con la sua risoluzione. Questultimo per lesigenza di avere un alias in corrispondenza di nomi difficilmente memorizzabili. Quindi sisinflab.poliba.it un alias diretto di cirp.poliba.it Comando HOST : scrivendo host sisinflab.poliba.it lui mi risponde facendo facendo una conversione da hostname a ip, quindi una query di tipo A oppure potrebbe fare allinverso una query ptr inserendo ip e ottenendo il nome simbolico. Il comando host pu fare anche query MX. Come? Vogliamo risolvere la parte finale di un indirizzo di posta. Quindi in particolare lip di un certo dominio. Nel fare questo aggiungo il -t e MX davanti a poliba.it (vedere dispense) e lui risponde che poliba.it gestito da mail.poliba.it e c un alternativa che anthares.poliba.it . Osserviamo che ognuno dei due ha uno score (preference number), in particolare cercher di inviare a mail.poliba.it che ha priorit pi alta.

Telematica 2 - Lezione 12 B

Comando DIG: esegue query pi complesse. E un analogo dei comandi precedenti, fa cose simili ma d risposte pi complete. Permette di effettuare una interrogazione diretta verso il name server con criteri di filtraggio che si ottengono con dei parametri. Quello che ci interessa vedere dalla struttura del comando la risposta ad una query mx con dig. Usando questo che uno strumento pi completo e come dominio di riferimento poliba.it possiamo osservare la risposta a pag:66. Le risposte vere e proprie sono quelle senza il ; davanti che sono commenti. Le risposte sono quelle che abbiamo trovato facendo query diretta con comando host e poi tutto quello che ci serve per risolvere i nomi, cio il riferimento dei name server autoritativi che sono i soliti cstar, anthares ecc con i loro ip. A noi interessa trovare l indirizzo di poliba.it e attraverso questa query lho ottenuto. Ora posso aprire un socket su questo per instaurare connessione smtp. Quindi DNS non solo importante per http, ma anche per smtp e altro. Ultimo comando WHOIS : serve ad ottenere informazioni riguardanti la registrazione del dominio. Quando si utilizza un dominio, non solo e non semplicemente si assegna al dominio una corrispondenza con ip, ma si danno delle informazioni accessorie che rimangono come traccia allinterno della registrazione. Sono pubbliche e possono essere ricavate con il comando whois. Mi risponder dicendo che poliba.it riferito ad un organizzazione del politecnico di bari, il nome dellindirizzo dei name server,altre informazioni non rilevanti e in particolare troviamo informazioni su persone responsabili della rete con indirizzo e numeri di telefono. Se facciamo query whois attualmente troviamo anche il nome del responsabile scientifico della rete che Di Sciascio. Ci sono delle persone responsabili e otteniamo informazioni riguardo a che titolo sono responsabili. [pag. 74] Qual il dns che pi tipicamente si utilizza? Si chiama BIND (berkeley internet name domain server). In particolare il demone di bind si chiama named. Se lo andate a cercare, si trova coi demoni, lavora su un file di log. Quando andate ad impostare un name server, voi potete generalmente fissare 2 configurazioni tipiche. Potete impostare il name server come authoritative-only nameserver (il nameserver pu risolvere esclusivamente gli indirizzi del dominio per cui autorizzativo e ci si ripercuote nel settaggio dei flag di authority all interno delle risposte) o dns caching server (si tratta di un nameserver non necessariamente o non solo autoritativo che gestisce una cache e quindi pu rispondere, grazie alla memorizzazione delle corrispondenze, all interno di questa cache, anche ad indirizzi per i quali non autoritativamente responsabile). Come fatta una configurazione di bind,

Telematica 2 - Lezione 12 B

per esempio? Abbiamo detto che il demone si chiama named. Trovate questa roba se prendete per esempio una macchina linux in /etc/named.conf (file di configurazione). [pag. 75] Troviamo tutta una serie di informazioni. Innanzitutto la directory dove stanno i file di configurazione secondari, una serie di file che possono essere adoperati per i settaggi di livello pi basso della configurazione; generalmente stanno in /var/named. Dopodich come vengono gestite le corrispondenze? Avete un file che si chiama root.hints dove trovate gli indirizzi ip dei root name servers zone. Poi ci sono tutte le informazioni che servono a definire la zona, a poter effettuare successivamente le risoluzioni di query di tipo ptr. Se avete una macchina linux, e avete voglia di installarvi sopra un dns, potete andare a vedere come si setta automaticamente in fase di installazione il valore di alcuni parametri che abbiamo gi visto dal punto di vista teorico. Detto questo passiamo a guardare le reti peer to peer. Come funziona una rete peer to peer? Il paradigma peer to peer molto differente dai paradigmi che abbiamo visto fin qui (che erano client-server). Il p2p utilizzato ad esempio anche in campo mobile, con ambienti senza infrastruttura. Questo un campo di ricerca molto in voga. I vantaggi solo la mobilit totale. Questi paradigmi sono estremamente flessibili. Si possono mettere in piedi applicazioni come quelle della distribuzione del calcolo, vista le crescenti capacit computazionali dei dispositivi mobili. Altre applicazioni sono: il mobile learning, l apprendimento della rete; gli scenari di disastri vari, come attacchi terroristici e disastri naturali. Questo perch in tutti questi casi, la possibilit di creare da zero un infrastruttura utilizzando dispositivi che hanno un minimo di capacit computazionali diventa fondamentale. Infatti disastri come quelli terroristici fanno subito perdere tutte le infrastrutture esistenti. Come si fa allora? Un cargo passa e distribuisce nell ambiente a pioggia sensori, questi sensori, appena giunti a terra, iniziano a comunicare tra di loro. Dopodich in maniera abbastanza semplice possibile recuperare tutta una serie di informazioni ambientali. Altro utilizzo quello di consentire a persone con dispositivi mobili che si muovono in vari ambienti, di avere fruizione continua dei servizi che stanno adoperando. Ad esempio lo streaming video continuo. Non vogliamo quindi i vincoli che sono introdotti dalla presenza di una rete fissa e dalla presenza di protocolli che impongono ai client di fare domande e ai server di dare risposte.

Telematica 2 - Lezione 12 B

Noi guarderemo dal punto di vista esclusivamente protocollare le reti p2p. Facciamo un breve richiamo delle caratteristiche generali delle reti p2p e poi vedremo l esempio di un protocollo p2p abbastanza consolidato che bit torrent con un confronto diretto con eDonkey ed eMule. eDonkey 2000 la rete p2p su cui si basa eMule. Qual la furbata delle reti p2p? La trovata intelligentissima di chi si posto il problema di creare un alternativa ai paradigmi client-server quella di rivoluzionare appunto il punto di vista dei paradigmi client-server. Il problema principale di un interazione client-server, qual ? Abbiamo un rapporto n a 1 tra una macchina server (provider) e tutta una serie di client che hanno come funzione esclusiva inoltrare una richiesta e attendere una risposta. Qual il problema principale di un approccio di questo genere? Serve una macchina con notevoli doti computazionali per poter soddisfare un numero non meglio precisato di client. Inoltre occorre una larghezza di banda che deve essere in grado di soddisfare le esigenze di pi utenti contemporaneamente. Da questo punto di vista i server sono costosi e sono single point of failure, se cade un server, si ha un interruzione del servizio. Nelle reti p2p si tende ad invertire il punto di vista; si da un ruolo attivo ai client che comunque hanno capacit computazionali e sono titolari di banda sia in download che in upload. L idea di fondo che 1. non voglio point of failure, voglio moltiplicare i provider di servizi e possibilmente voglio un approccio non centralizzato ma distribuito. Voglio un numero estremamente elevato di service provider 2. voglio far s che la banda complessiva a disposizione venga gestita in maniera pi razionale rispetto al caso client-server.

Quali sono gli approcci tipici, attualmente in voga nelle reti p2p? Essenzialmente approcci di file sharing, infatti attualmente l approccio tende a sostituire l approccio ftp (o perlomeno a dargli problemi). Perch l approccio p2p mostra migliore efficienza rispetto a ftp in termini di velocit di download. Molte distribuzioni linux mettono a distribuzione un torrent per effettuare il download. E possibile guardare a questo tipo di approccio in linea un po pi avanzata, proprio dal punto di vista che dicevamo prima; cio guardare a questo tipo di approccio come una distribuzione dei provider dei servizi ed un annullamento dei single point of failure. Da questo punto di vista io posso fare in modo di trasmettere dati anche ad alto contenuto informativo in real-time sfruttando proprio la possibilit di avere una distribuzione della banda pi razionale e la possibilit di non avere single point of failure. Nonostante questo gli approcci p2p attuali sono una minima parte di ci che si pu fare con una rete p2p.

Telematica 2 - Lezione 12 B

Una rete p2p fatta da una serie di peer, una serie di host aventi caratteristiche comuni con pari dignit dal punto di vista della rete (al contrario in un approccio client-server: i client fanno i client e i server fanno i server). Nel p2p una macchina, in corrispondenza di una data sessione pu essere server, in corrispondenza di una sessione diversa pu essere un client nei confronti di un altro peer. Quindi una macchina che fa il client, non detto che sia a vita un client. Le reti p2p si classificano in pure e ibride. Nelle pure (il caso che abbiamo descritto fin qui) abbiamo una serie di peer che possono agire sia come client che come server. Non abbiamo directory-server che permettono la gestione centralizzata della rete. E non abbiamo router di rete. Cio non centralizziamo nulla. La rete in s un entit, una blackbox. Alla domanda: dove il contenuto informativo della rete? Si risponde: il contenuto informativo della rete la rete stessa. Le reti ibride hanno alcuni directory-server che hanno il ruolo di mantenere informazioni riguardo gli host all interno della rete. I peer si incaricano come unico ruolo di rendere note le loro risorse e il loro stato presso i directory-server. Non si confonda la rete p2p ibrida con il paradigma client-server. Nella p2p ibrida troviamo comunque una serie di host che possono fungere da client e da server. Service provider sono tutti gli host in rete. In un sistema client-server abbiamo pochi server che forniscono servizi.

LEZIONE 28/06/2007 (II Parte)


Cerchiamo di capire quale la differenza tra un sistema Client-Server ed una rete P2P ibrida: In un sistema Client-Server vi sono pochi Server (o Service Provider) che forniscono servizi e inoltre vi sono tanti Client, ovviamente in rapporto 1 a molti o pochi a molti nei confronti del/i Server. Mentre nelle reti P2P ibride questa cosa non vale, perch manca una netta divisione tra Client e Server, infatti vi sono tanti host che possono fungere talvolta da Client e talvolta da Server. Inoltre nelle reti P2P ibride, a differenza delle reti P2P pure vi la presenza di alcune macchine (Directory Server) che si incaricano di tenere traccia dello stato degli host allinterno della rete. Nelle reti P2P pure, invece, queste macchine sono assenti. Le reti P2P ibride vengono viste come punto di passaggio tra il sistema Client-Server e le reti P2P pure. Per un approccio mobile, importante notare che risulta pi indicata una rete P2P pura rispetto ad una rete P2P ibrida. Questo perch la presenza delle Directory Server uno dei problemi maggiori dei dispositivi mobili perch se la rete veramente mobile tutti gli host sono in movimento, ed essendo in movimento il rapporto tra di essi variabile istante per istante, quindi ci che risulta essere maggiormente indesiderato avere un approccio ibrido. Questo spiegabile molto semplicemente, infatti basta pensare ad un host mobile della rete che supponiamo esca, nel corso del suo movimento, dal raggio di azione della rete stessa, ebbene in quellistante si perderebbero tutte le informazioni ed i collegamenti con la rete in questione. Quindi un approccio P2P puro un approccio particolarmente indicato per reti mobile in cui vogliamo una distribuzione totale del servizio. Nelle reti P2P pure vi sono tecniche note come Advertisement attraverso le quali gli host segnalano i servizi che mettono a disposizione, questo lo si fa per sopperire alla mancanza delle Directory Server.

Se ho una rete P2P, ho come caratteristiche fondamentali innanzitutto la razionalizzazione della banda, e poi in realt posso distribuire il calcolo. Dire che posso distribuire il calcolo abbastanza

comprensibile perch non vi la necessit di avere una macchina in cui si debbano centralizzare le capacit computazionali. Stesso discorso dicasi per lo storage, infatti se distribuiamo lorganizzazione delle risorse su pi macchine posso decrementare le capacit di storage di ogni macchina, se invece devo centralizzare, le capacit di storage devono necessariamente incrementarsi. Questo significa che non ho necessit di usare macchine straordinarie per la realizzazione della rete, ma posso utilizzare macchine con prestazioni ordinarie. La forza di una rete P2P rappresentata dal n di peer, infatti perch pi aumenta il n di peer pi sale la capacit computazionale globale, pi sale la capacit di storage globale e quindi complessivamente la black box che rappresenta la nostra rete P2P avr una serie di caratteristiche e di peculiarit migliori. Stessa cosa non si pu dire per un approccio Client-Server, perch al crescere del n dei Client abbiamo un rapporto inversamente proporzionale di quelle che sono le capacit computazionali e lo storage. Pi Client devo servire, pi necessito di storage e pi mi serve capacit di calcolo. In una rete P2P al crescere del n dei Client e dei Server si ottiene una crescita di capacit computazionale e di storage dellintero sistema. Detto in altre parole aumentando il n di peer in un approccio P2P cresce la QoS, invece, aumentando la quantit di Client in un approccio Client-Server decresce la QoS. Oltre a parlare di qualit del servizio in termini computazionali e di storage, parliamo anche di robustezza. In termini di robustezza le reti P2P sono ideali, perch andando a replicare le risorse su pi host in una rete si va a creare ridondanza, la quale ridondanza risulta essere il requisito fondamentale al fine di ottenere una elevata robustezza. Se pensiamo ad una rete P2P di tipo puro il fatto di dover replicare i dati e di rendere la rete robusta, al termine di un processo di advertisement, consente di ottenere informazioni sulla rete stessa. Quindi ogni nodo dopo un certo periodo di tempo sar conscio di quella che la conformazione della rete ad un cero istante. Un altro vantaggio delle reti P2P lautoconfigurazione della rete stessa, il che diventa ancora pi importante quando si ha a che fare con delle reti mobili. Ovviamente le reti P2P non presentano solo dei vantaggi, ma nella realizzazione di queste reti e nel loro utilizzo si riscontrano anche dei problemi.

Il primo problema che salta agli occhi una vulnerabilit agli attacchi, ovviamente nel momento in cui noi andiamo a decentralizzare il sistema dobbiamo renderci conto che diminuiamo in un certo qual modo cognizioni dirette di quello che accade allinterno della rete. Gli attacchi pi tipici sono il poisoning attacks, il quale consiste in una pubblicizzazione di un servizio che in realt non corrisponde a quello che viene fornito (es. file che viene indicato come contenitore di una determinata risorsa e poi ne contiene unaltra differente). Un altro tipo di attacchi sono quelli che provocano una pollution o inquinamento, questi consistono in una pubblicizzazione del servizio in una determinata maniera, il servizio fornito sostanzialmente quello pubblicizzato, ma inserisco componenti totalmente discordi (es. ho un file generale allinterno del quale inserisco dei frammenti (chunk), che sono tuttaltro). Questo tipo di attacco ovviamente pi subdolo perch in una prima visualizzazione il file non appare corrotto, ci si accorge solo in seguito dellattacco ricevuto. Nel caso precedente la corruzione del file rilevabile immediatamente. Un'altra categoria di attacchi sono i c.d. attacchi defection, i quali sono attacchi che sono fraudolenti nel senso che utenti generici o comunque host adoperano la rete in maniera unilaterale, cio solo ed esclusivamente come Client, quindi adottano in download risorse dalla rete senza contribuire in upload a fornire risorse alla rete. Questo problema si risolve generalmente attraverso una penalizzazione degli utenti pigri fatta dai protocolli P2P, a discapito di un incremento di prestazioni, invece, per un utente che mette a disposizione risorse. Oltre agli attacchi appena visti vi sono unaltra serie di attacchi di tipo pi subdolo.

Il primo tipo ovvero gli attacchi denial of service attacks sono attacchi che vanno a penalizzare il funzionamento della rete attraverso una saturazione artificiosa, essi mirano ad abbattere le potenzialit dellinfrastruttura tempestando linfrastruttura stessa di richieste fraudolente. Lobiettivo di questi attacchi far apparire fuori servizio linfrastruttura, anche se linfrastruttura in

quello stesso momento sta funzionando correttamente. Per fare apparire linfrastruttura fuori servizio la si sovraccarica di richieste non specifiche fino al limite massimo sopportabile, in questo modo lattivit verr notevolmente rallentata e si otterr un disservizio della rete. Questi tipi di attacchi vengono spesso simulati durante la progettazione di una rete, al fine di verificare come la rete reagisce, se riesce ad individuare il responsabile dellattacco e soprattutto in quanto tempo riesce a ripristinare il suo corretto funzionamento. Il secondo tipo di attacchi sono quelli di tipo filtering, in questo caso gli operatori di rete impediscono il transito dei pacchetti imponendo restrizioni su alcune porte tipicamente adoperate. Il caso tipico quello dei provider che inibiscono dei P2P filtrando le porte che di norma vengono usate. Dal punto di vista della rete P2P questo un attacco a tutti gli effetti perch inibisce il funzionamento della rete stessa. Gli identity attacks sono attacchi che violano la privacy dellutente, infatti risultano essere il principale problema delle rete P2P in scala globale perch molto facile identificare un utente allinterno di una rete e poi dopo, grazie alle informazioni raccolte, fare tentativi fraudolenti per perseguire legalmente, attraverso il passaggio in chiaro dellIP, gli utenti che mettono a disposizione determinati contenuti. Ovviamente questo particolare attacco pu essere visto in chiave positiva qualora si diffondano contenuti vietati dalla legge (es. delinquenti che fanno propaganda di pedofilia). Lultimo caso lo spamming, cio inviare informazioni non richieste attraverso la rete agli utenti grazie a tutte le informazioni e dati che sono stati recuperati in precedenza. Fino ad ora abbiamo visto le caratteristiche generali di una rete P2P, ora per chiudere il discorso vediamo un caso particolare che quello della rete BitTorrent.

BitTorrent uno dei pi famosi protocolli per reti P2P che nellintento del suo creatore, Cohen, doveva servire a diffondere grossi quantitativi di dati proprio evitando luso di Server costosi. Soprattutto cera la necessit di avere un utilizzo pi razionale della banda. Questo protocollo molto recente ed ovviamente ce ne sono altri simili ad esso, con i quali successivamente faremo un

confronto (es. eMule). BitTorrent, ideato nel 2001, si basa sul principio per il quale, durante un trasferimento di un file, chi scarica utilizza la banda in download lasciando totalmente libera la banda in upload, ovvero se faccio un download di una risorsa da un Server e cos anche un altro utente, in quel momento staremo utilizzando la banda soltanto in download ma non la banda in upload. Evidentemente la banda in uscita sottoutilizzata, quindi BitTorrent doveva risolvere lo spreco facendo in modo che un Client che stesse facendo download di un dato file, consentisse contemporaneamente un download di un file che lui possedeva da parte di un altro Client della rete. Quindi metteva a disposizione la propria banda in upload per consentire di inviare risorse nello stesso tempo in cui stava scaricando risorse da altri host. Vediamo ora come funziona la rete: BitTorrent una rete P2P ibrida basata su una serie di categorie di utenti che sono i Seeder, i Leechers e i Tracker.

Un Seeder un utente che possiede file completi, un Leecher un Client o un host in rete che possiede chunk di file (pezzi di file). Inoltre vi sono dei track service che si chiamano Tracker. I Tracker o look-up service mantengono traccia della situazione dei Seeder e dei Leechers allinterno della rete, ovvero mantengono costantemente aggiornata quella che la situazione dei peer allinterno della rete e dei servizi di cui essi dispongono. Un Leecher a differenza di un Seeder un utente alla ricerca di una risorsa di cui evidentemente possiede una parte, quindi sostanzialmente un Leecher, in riferimento ad una risorsa, un utente che pu fungere sia da Client che da Server; funge da Client per la restante parte della risorsa che a lui manca e funge da Server per la parte di risorsa che invece gi possiede. Il Seeder invece in riferimento ad una risorsa pu fungere esclusivamente da Server. La rete funziona in modo tale che colui il quale desidera ricevere una risorsa pu essere soltanto un Leecher, egli pu ricevere la risorsa o da un altro Leecher (se questo ha uno o pi chunck che lui non possiede), o da un Seeder. Inoltre importante notare come il Seeder che ha tutta la risorsa in ogni caso deve fornire il contributo al Leecher nel momento in cui

il Leecher ha tutte le componenti e deve riassemblarle in maniera corretta per costruire il file completo. Il Seeder in ogni caso al termine dei download dei singoli chunk fornisce delle informazioni utili allassemblaggio corretto dellintera risorsa. Quindi un Leecher pu fare download direttamente dal Seeder (o di tutto il file o delle informazioni da assemblare), o fare download da un altro Leecher. Il Tracker, invece, mantiene direttamente traccia di tutto quello che accade allinterno della rete. BitTorrent una rete ibrida per la presenza dei Tracker, ovvero degli oggetti che devono fare il look-up di quello che accade allinterno della rete. In particolare il Tracker mantiene informazioni riguardanti tutta la rete e per questo motivo viene definito single point of failure e questo comporta che il Tracker deve essere ridondato, altrimenti se dovesse venir meno si avrebbe linterruzione del servizio. Oltre alla presenza del look-up server in una rete di tipo BitTorrent bisogna avere un riferimento ad una data risorsa. Il riferimento ad una data risorsa si ottiene attraverso un file .torrent che viene pubblicizzato mediante un Web Server. Ci significa che data una risorsa che si vuole propagandare, il canale utilizzato per farlo il protocollo HTTP, cio noi esponiamo un file .torrent attraverso un Web Server.

Un file .torrent (il quale deve essere scaricato prima di cominciare il download della risorsa) contiene tutte le informazioni riguardo al Tracker, cio il file .torrent consente di procurare informazioni riguardo al primo anello della catena che serve a risalire alla risorsa, ovvero il Tracker. Grazie al Tracker di riferimento per quella risorsa potremo successivamente incominciare a recuperare i vari pezzi. Lidea di base di BitTorrent quella di propagandare le risorse attraverso il Web. E importante notare, invece, che altri tipi di approcci non hanno niente a che fare con il Web e non lo sfruttano per pubblicizzare le loro risorse. In particolare un BT Client non fa altro che raggiungere un Web Server accreditato (scelto da una lista di Web Server accreditati) alla ricerca di un .torrent, poi aprir il file .torrent, ricaver il valore del Tracker di riferimento per la data risorsa e dopo grazie al Tracker recuperer informazioni riguardo ai Seeder o ai Leechers. Ovviamente nel

momento in cui si ha la possibilit di fare una decentralizzazione totale del download si ottiene un guadagno, in primis sicuramente in termini di banda, nel confronto rispetto al FTP, essa risulta essere distribuita rispetto al n di Seeder o di Leecher che consentono di fare download. Nelle reti P2P possibile scaricare dati diversi da host, quindi sostanzialmente possibile ripartire in maniera uniforme la banda che ho a disposizione. Oltre a questo c il vantaggio che in upload la banda che non era adoperata ora viene messa a disposizione. Ora vediamo dove sono in problemi in BitTorrent.

Questi problemi hanno portato a recenti modifiche del Client BitTorrent; il primo problema lanonimato, infatti gli utenti che usano BitTorrent non sono per niente anonimi anzi c una rintracciabilit totale degli utenti. Questo dovuto proprio alla presenza dei look-up service che hanno proprio come compito principale quello di tener traccia delle informazioni degli host in rete, non solo degli utenti che stanno attualmente condividendo risorse in rete, ma degli utenti che hanno condiviso anche in passato risorse nella suddetta rete. Questo viene fatto attraverso lutilizzo di opportuni file di LOG, allinterno dei quali si tiene nota degli IP degli utenti che hanno usato la rete. Il secondo problema che se non ho un Seeder a disposizione non posso ricostruire i file anche se ho disponibilit di tutti i Leechers del mondo. Un altro problema la mancanza di incentivi degli utenti della rete a mettere in condivisione le loro risorse dopo che hanno completato il download, il che implica una mancanza di Seeder e limpossibilit dei Leechers di ricostruire un file una volta che hanno completato la ricezione dei vari chunk.

Telematica 2 - Lezione 14

LEZIONE 28/06/2007 (II Parte)


Cerchiamo di capire quale la differenza tra un sistema Client-Server ed una rete P2P ibrida: In un sistema Client-Server vi sono pochi Server (o Service Provider) che forniscono servizi e inoltre vi sono tanti Client, ovviamente in rapporto 1 a molti o pochi a molti nei confronti del/i Server. Mentre nelle reti P2P ibride questa cosa non vale, perch manca una netta divisione tra Client e Server, infatti vi sono tanti host che possono fungere talvolta da Client e talvolta da Server. Inoltre nelle reti P2P ibride, a differenza delle reti P2P pure vi la presenza di alcune macchine (Directory Server) che si incaricano di tenere traccia dello stato degli host allinterno della rete. Nelle reti P2P pure, invece, queste macchine sono assenti. Le reti P2P ibride vengono viste come punto di passaggio tra il sistema Client-Server e le reti P2P pure. Per un approccio mobile, importante notare che risulta pi indicata una rete P2P pura rispetto ad una rete P2P ibrida. Questo perch la presenza delle Directory Server uno dei problemi maggiori dei dispositivi mobili perch se la rete veramente mobile tutti gli host sono in movimento, ed essendo in movimento il rapporto tra di essi variabile istante per istante, quindi ci che risulta essere maggiormente indesiderato avere un approccio ibrido. Questo spiegabile molto semplicemente, infatti basta pensare ad un host mobile della rete che supponiamo esca, nel corso del suo movimento, dal raggio di azione della rete stessa, ebbene in quellistante si perderebbero tutte le informazioni ed i collegamenti con la rete in questione. Quindi un approccio P2P puro un approccio particolarmente indicato per reti mobile in cui vogliamo una distribuzione totale del servizio. Nelle reti P2P pure vi sono tecniche note come Advertisement attraverso le quali gli host segnalano i servizi che mettono a disposizione, questo lo si fa per sopperire alla mancanza delle Directory Server. Se ho una rete P2P, ho come caratteristiche fondamentali innanzitutto la razionalizzazione della banda, e poi in realt posso distribuire il calcolo. Dire che posso distribuire il calcolo abbastanza comprensibile perch non vi la necessit di avere una macchina in cui si debbano centralizzare le capacit computazionali. Stesso discorso dicasi per lo storage, infatti se distribuiamo lorganizzazione delle risorse su pi macchine posso decrementare le capacit di storage di ogni macchina, se invece devo centralizzare, le capacit di storage devono necessariamente incrementarsi. Questo significa che non ho necessit di usare macchine straordinarie per la realizzazione della rete, ma posso utilizzare macchine con prestazioni ordinarie. La forza di una rete

Telematica 2 - Lezione 14

P2P rappresentata dal n di peer, infatti perch pi aumenta il n di peer pi sale la capacit computazionale globale, pi sale la capacit di storage globale e quindi complessivamente la black box che rappresenta la nostra rete P2P avr una serie di caratteristiche e di peculiarit migliori. Stessa cosa non si pu dire per un approccio Client-Server, perch al crescere del n dei Client abbiamo un rapporto inversamente proporzionale di quelle che sono le capacit computazionali e lo storage. Pi Client devo servire, pi necessito di storage e pi mi serve capacit di calcolo. In una rete P2P al crescere del n dei Client e dei Server si ottiene una crescita di capacit computazionale e di storage dellintero sistema. Detto in altre parole aumentando il n di peer in un approccio P2P cresce la QoS, invece, aumentando la quantit di Client in un approccio Client-Server decresce la QoS. Oltre a parlare di qualit del servizio in termini computazionali e di storage, parliamo anche di robustezza. In termini di robustezza le reti P2P sono ideali, perch andando a replicare le risorse su pi host in una rete si va a creare ridondanza, la quale ridondanza risulta essere il requisito fondamentale al fine di ottenere una elevata robustezza. Se pensiamo ad una rete P2P di tipo puro il fatto di dover replicare i dati e di rendere la rete robusta, al termine di un processo di advertisement, consente di ottenere informazioni sulla rete stessa. Quindi ogni nodo dopo un certo periodo di tempo sar conscio di quella che la conformazione della rete ad un cero istante. Un altro vantaggio delle reti P2P lautoconfigurazione della rete stessa, il che diventa ancora pi importante quando si ha a che fare con delle reti mobili. Ovviamente le reti P2P non presentano solo dei vantaggi, ma nella realizzazione di queste reti e nel loro utilizzo si riscontrano anche dei problemi. Il primo problema che salta agli occhi una vulnerabilit agli attacchi, ovviamente nel momento in cui noi andiamo a decentralizzare il sistema dobbiamo renderci conto che diminuiamo in un certo qual modo cognizioni dirette di quello che accade allinterno della rete. Gli attacchi pi tipici sono il poisoning attacks, il quale consiste in una pubblicizzazione di un servizio che in realt non corrisponde a quello che viene fornito (es. file che viene indicato come contenitore di una determinata risorsa e poi ne contiene unaltra differente). Un altro tipo di attacchi sono quelli che provocano una pollution o inquinamento, questi consistono in una pubblicizzazione del servizio in una determinata maniera, il servizio fornito sostanzialmente quello pubblicizzato, ma inserisco componenti totalmente discordi (es. ho un file generale allinterno del quale inserisco dei frammenti (chunk), che sono tuttaltro). Questo tipo di attacco ovviamente pi subdolo perch in una prima visualizzazione il file non appare corrotto, ci si accorge solo in seguito dellattacco ricevuto. Nel

Telematica 2 - Lezione 14

caso precedente la corruzione del file rilevabile immediatamente. Un'altra categoria di attacchi sono i c.d. attacchi defection, i quali sono attacchi che sono fraudolenti nel senso che utenti generici o comunque host adoperano la rete in maniera unilaterale, cio solo ed esclusivamente come Client, quindi adottano in download risorse dalla rete senza contribuire in upload a fornire risorse alla rete. Questo problema si risolve generalmente attraverso una penalizzazione degli utenti pigri fatta dai protocolli P2P, a discapito di un incremento di prestazioni, invece, per un utente che mette a disposizione risorse. Oltre agli attacchi appena visti vi sono unaltra serie di attacchi di tipo pi subdolo. Il primo tipo ovvero gli attacchi denial of service attacks sono attacchi che vanno a penalizzare il funzionamento della rete attraverso una saturazione artificiosa, essi mirano ad abbattere le potenzialit dellinfrastruttura tempestando linfrastruttura stessa di richieste fraudolente. Lobiettivo di questi attacchi far apparire fuori servizio linfrastruttura, anche se linfrastruttura in quello stesso momento sta funzionando correttamente. Per fare apparire linfrastruttura fuori servizio la si sovraccarica di richieste non specifiche fino al limite massimo sopportabile, in questo modo lattivit verr notevolmente rallentata e si otterr un disservizio della rete. Questi tipi di attacchi vengono spesso simulati durante la progettazione di una rete, al fine di verificare come la rete reagisce, se riesce ad individuare il responsabile dellattacco e soprattutto in quanto tempo riesce a ripristinare il suo corretto funzionamento. Il secondo tipo di attacchi sono quelli di tipo filtering, in questo caso gli operatori di rete impediscono il transito dei pacchetti imponendo restrizioni su alcune porte tipicamente adoperate. Il caso tipico quello dei provider che inibiscono dei P2P filtrando le porte che di norma vengono usate. Dal punto di vista della rete P2P questo un attacco a tutti gli effetti perch inibisce il funzionamento della rete stessa. Gli identity attacks sono attacchi che violano la privacy dellutente, infatti risultano essere il principale problema delle rete P2P in scala globale perch molto facile identificare un utente allinterno di una rete e poi dopo, grazie alle informazioni raccolte, fare tentativi fraudolenti per perseguire legalmente, attraverso il passaggio in chiaro dellIP, gli utenti che mettono a disposizione determinati contenuti. Ovviamente questo particolare attacco pu essere visto in chiave positiva qualora si diffondano contenuti vietati dalla legge (es. delinquenti che fanno propaganda di pedofilia). Lultimo caso lo spamming, cio inviare informazioni non richieste attraverso la rete agli utenti grazie a tutte le informazioni e dati che sono stati recuperati in precedenza. Fino ad ora abbiamo visto le

Telematica 2 - Lezione 14

caratteristiche generali di una rete P2P, ora per chiudere il discorso vediamo un caso particolare che quello della rete BitTorrent. BitTorrent uno dei pi famosi protocolli per reti P2P che nellintento del suo creatore, Cohen, doveva servire a diffondere grossi quantitativi di dati proprio evitando luso di Server costosi. Soprattutto cera la necessit di avere un utilizzo pi razionale della banda. Questo protocollo molto recente ed ovviamente ce ne sono altri simili ad esso, con i quali successivamente faremo un confronto (es. eMule). BitTorrent, ideato nel 2001, si basa sul principio per il quale, durante un trasferimento di un file, chi scarica utilizza la banda in download lasciando totalmente libera la banda in upload, ovvero se faccio un download di una risorsa da un Server e cos anche un altro utente, in quel momento staremo utilizzando la banda soltanto in download ma non la banda in upload. Evidentemente la banda in uscita sottoutilizzata, quindi BitTorrent doveva risolvere lo spreco facendo in modo che un Client che stesse facendo download di un dato file, consentisse contemporaneamente un download di un file che lui possedeva da parte di un altro Client della rete. Quindi metteva a disposizione la propria banda in upload per consentire di inviare risorse nello stesso tempo in cui stava scaricando risorse da altri host. Vediamo ora come funziona la rete: BitTorrent una rete P2P ibrida basata su una serie di categorie di utenti che sono i Seeder, i Leechers e i Tracker. Un Seeder un utente che possiede file completi, un Leecher un Client o un host in rete che possiede chunk di file (pezzi di file). Inoltre vi sono dei track service che si chiamano Tracker. I Tracker o look-up service mantengono traccia della situazione dei Seeder e dei Leechers allinterno della rete, ovvero mantengono costantemente aggiornata quella che la situazione dei peer allinterno della rete e dei servizi di cui essi dispongono. Un Leecher a differenza di un Seeder un utente alla ricerca di una risorsa di cui evidentemente possiede una parte, quindi sostanzialmente un Leecher, in riferimento ad una risorsa, un utente che pu fungere sia da Client che da Server; funge da Client per la restante parte della risorsa che a lui manca e funge da Server per la parte di risorsa che invece gi possiede. Il Seeder invece in riferimento ad una risorsa pu fungere esclusivamente da Server. La rete funziona in modo tale che colui il quale desidera ricevere una risorsa pu essere soltanto un Leecher, egli pu ricevere la risorsa o da un altro Leecher (se questo ha uno o pi chunck che lui non possiede), o da un Seeder. Inoltre importante notare come il Seeder che ha tutta la risorsa in ogni caso deve fornire il contributo al Leecher nel momento in cui

Telematica 2 - Lezione 14

il Leecher ha tutte le componenti e deve riassemblarle in maniera corretta per costruire il file completo. Il Seeder in ogni caso al termine dei download dei singoli chunk fornisce delle informazioni utili allassemblaggio corretto dellintera risorsa. Quindi un Leecher pu fare download direttamente dal Seeder (o di tutto il file o delle informazioni da assemblare), o fare download da un altro Leecher. Il Tracker, invece, mantiene direttamente traccia di tutto quello che accade allinterno della rete. BitTorrent una rete ibrida per la presenza dei Tracker, ovvero degli oggetti che devono fare il look-up di quello che accade allinterno della rete. In particolare il Tracker mantiene informazioni riguardanti tutta la rete e per questo motivo viene definito single point of failure e questo comporta che il Tracker deve essere ridondato, altrimenti se dovesse venir meno si avrebbe linterruzione del servizio. Oltre alla presenza del look-up server in una rete di tipo BitTorrent bisogna avere un riferimento ad una data risorsa. Il riferimento ad una data risorsa si ottiene attraverso un file .torrent che viene pubblicizzato mediante un Web Server. Ci significa che data una risorsa che si vuole propagandare, il canale utilizzato per farlo il protocollo HTTP, cio noi esponiamo un file .torrent attraverso un Web Server. Un file .torrent (il quale deve essere scaricato prima di cominciare il download della risorsa) contiene tutte le informazioni riguardo al Tracker, cio il file .torrent consente di procurare informazioni riguardo al primo anello della catena che serve a risalire alla risorsa, ovvero il Tracker. Grazie al Tracker di riferimento per quella risorsa potremo successivamente incominciare a recuperare i vari pezzi. Lidea di base di BitTorrent quella di propagandare le risorse attraverso il Web. E importante notare, invece, che altri tipi di approcci non hanno niente a che fare con il Web e non lo sfruttano per pubblicizzare le loro risorse. In particolare un BT Client non fa altro che raggiungere un Web Server accreditato (scelto da una lista di Web Server accreditati) alla ricerca di un .torrent, poi aprir il file .torrent, ricaver il valore del Tracker di riferimento per la data risorsa e dopo grazie al Tracker recuperer informazioni riguardo ai Seeder o ai Leechers. Ovviamente nel momento in cui si ha la possibilit di fare una decentralizzazione totale del download si ottiene un guadagno, in primis sicuramente in termini di banda, nel confronto rispetto al FTP, essa risulta essere distribuita rispetto al n di Seeder o di Leecher che consentono di fare download. Nelle reti P2P possibile scaricare dati diversi da host, quindi sostanzialmente possibile ripartire in maniera uniforme la banda che ho a disposizione. Oltre a questo c il vantaggio che in upload la banda che non era adoperata ora viene messa a disposizione. Ora vediamo dove sono in problemi in

Telematica 2 - Lezione 14

BitTorrent. Questi problemi hanno portato a recenti modifiche del Client BitTorrent; il primo problema lanonimato, infatti gli utenti che usano BitTorrent non sono per niente anonimi anzi c una rintracciabilit totale degli utenti. Questo dovuto proprio alla presenza dei look-up service che hanno proprio come compito principale quello di tener traccia delle informazioni degli host in rete, non solo degli utenti che stanno attualmente condividendo risorse in rete, ma degli utenti che hanno condiviso anche in passato risorse nella suddetta rete. Questo viene fatto attraverso lutilizzo di opportuni file di LOG, allinterno dei quali si tiene nota degli IP degli utenti che hanno usato la rete. Il secondo problema che se non ho un Seeder a disposizione non posso ricostruire i file anche se ho disponibilit di tutti i Leechers del mondo. Un altro problema la mancanza di incentivi degli utenti della rete a mettere in condivisione le loro risorse dopo che hanno completato il download, il che implica una mancanza di Seeder e limpossibilit dei Leechers di ricostruire un file una volta che hanno completato la ricezione dei vari chunk. Il chunk un informazione che viene fornita dal pc??

Vediamo di concludere con bit torrent. Facciamo un paragone con altri sistemi un po pi recenti rispetto a bit torrent. Abbiamo visto i punti a favore; vediamo di capire, facendo un paragone, dove stanno i pregi e i difetti di bit torrent rispetto ad altri sistemi. eDonkey 2000 la rete peer to peer che supporta eDonkey o per esempio eMule. Con BitTorrent ogni istanza del client si concentra nel trasferimento di un singolo file. Invece nel caso di eMule o eDonkey io posso decidere di effettuare un opzione su pi file, condividere e scaricare un numero di file maggiore di uno. Evidentemente se faccio questo sicuramente la larghezza di banda di eDonkey 2000 in upload ridotta rispetto a BitTorrent e questo potrebbe essere un problema specialmente se lavorate con l adsl. Nell adsl c asimmetria, la gestione dell asimmetria comporta gi in partenza una riduzione della banda in upload rispetto alla banda in download. Se oltre a questo voi peggiorate la gi critica situazione dell asimmetria con una spalmatura della banda su pi upload -> la qualit del servizio da questo punto di vista potrebbe essere peggiore, di eDonkey2000 rispetto al caso di BitTorrent. Quindi in cosa si vede la differenza? BitTorrent generalmente pi veloce per fa opzione su un singolo file quindi eDonkey pi lento ma consente di lavorare su pi file. Una cosa simpatica di eDonkey / eMule la gestione dell assegnazione dei crediti per coloro i quali mettono a disposizione delle risorse, per evitare il

Telematica 2 - Lezione 14

fenomeno di cui dicevamo prima, di assenza di risorse, cio quell attacco che impone l utilizzo della rete p2p solo in un senso, cio solo per scaricare. Altre differenze, BitTorrent non ha un metodo specifico per fare indicizzazione dei file condivisi infatti abbiamo detto che per poter recuperare un file utilizziamo un web server. Chiaramente non tutti i web server sono disposti ad ospitare .torrent. Questo potrebbe essere un limite; quindi da questo punto di vista possibile che il numero di risorse sia inferiore rispetto alla rete eDonkey. Tenete conto che eDonkey nel protocollo ingloba gi un servizio di indicizzazione, cio non dovete rivolgervi ad un web server per trovare un .torrent. Se provate a lanciare eMule, gi nel client eMule potete riscontrare quelle che sono le macchine che vi possono fornire quello che cercate. Difatti Cohen sta lavorando per un motore di ricerca per le prossime versioni di BitTorrent e contiene una serie di ridondanze per evitare il problema del single point of failure. Oltre a questo non ci rimane che accennare ai dettagli di protocollo. Come funziona Bit torrent da un punto di vista protocollare? Tutti i file devono essere codificati, adoperando una tecnica detta di B-encoding. E una tecnica di codifica molto semplice; le stringhe sono codificate con un valore numerico che ne identifica la lunghezza seguito da due punti e da stringa data. Gli interi sono codificati con un carattere di inizio i e uno di fine e, che contengono al loro interno il valore dellintero decimale in codice ASCII. Oltre a questo la codifica di B-encoding pone delle restrizioni alla codifica di liste e di dizionari. Una lista codificata come una sequenza con un carattere di inizio(l) e uno di fine (e); allinterno dei due caratteri troviamo le singole stringhe rappresentate come una sequenza di lunghezza_stringa:stringa lunghezza_stringa:stringa. Un dizionario una sequenza di copie chiave-valore; cio tante copie che ad ogni attributo specificato fanno corrispondere un campo valore. Un dizionario in B-encoding si codica in tal modo: vi un carattere di inizio (d) e uno di terminazione (e) e poi una serie di coppie chiave-valore. Ogni coppia avr anche una corrispondente lunghezza. A che serve questo tipo di codifica? Vediamo come fatto un file .torrent; un file .torrent un file che trovo sul web server che ci permette di rintracciare il Tracker. Il file .torrent contiene un dizionario; esso stesso un dizionario codificato via encoding. I campi chiave di un file .torrent sono: Info (obbligatorio) contiene il riferimento ad un dizionario che descrive completamente il file da scaricare, cio la risorsa Announce (obbligatorio) contiene un URL del tracker, cio lidentificatore unico del tracker allinterno della rete TCP Creation date contiene la data di creazione del file in formato UNIX epoch

Telematica 2 - Lezione 14

Comment Create by ossia nome e versione del programma usato per la generazione del file

Vediamo come fatto il dizionario info; info il campo chiave, il valore il dizionario. Il dizionario fatto cos: a sua volta contiene altri campi chiave : length: lunghezza del file in byte (intero) lunghezza del file in byte (intero) name : nome del file (stringa) piece length: lunghezza in byte di ciascun pezzo in cui suddiviso il file (intero) Md5sum stringa di 32 valori esadecimali che contiene la stringa md5 del file; limpronta md5 con cui, una volta fatto il download del file, posso verificare la correttezza formale del file. Pieces valore di hash a 20 byte calcolato con un altro algoritmo crittografico che in corrispondenza di ciascun chunck fa la stessa procedura che facciamo su file, cio fa un controllo di errore.

Quindi ho un doppio meccanismo di controllo dellerrore, uno su singoli chunck e laltro sullintero file; limpronta che si utilizza md5 su file e SHA1 per quanto riguarda i pieces. Questo qua linfo che stava nel file . torrent. Vediamo come funziona il protocollo nel dettaglio. il tracker il servizio che sta sopra http perch un .torrent lo troviamo nel web server, quindi questo un layer di servizio che sfrutta http. In realt funziona adoperando le GET. I metodi per inviare dati sono o GET o POST; in entrambi i casi posso passare qualcosa. Con GET passo dei parametri (separati da &) con la richiesta http purch la loro dimensione non ecceda 1024 byte(massima dimensione di una richiesta URI). I parametri risultano essere visibili(a differenza del POST), e sono quelli che mi permettono di raggiungere i dati che mi interessano cio i protocolli; oltre a questo come parametri passo i metodi che servono per riportare le statistiche. Come funziona questo tipo di interazione? I parametri che passo in una richiesta sono[94] : 1. info_hash : sono 20 byte e corrispondono alla SHA1 hash relativo al valore del campo info nel .torrent; 2. peer_id : identificativo del peer/client(stringa di 20 byte); 3. port: numero di porta su cui il client in ascolto(6881-6889); 4. uploaded : numero totale di byte trasferiti in upload(per fare statistiche); 5. downloaded : numero di byte scaricati;

Telematica 2 - Lezione 14

6. left : numero di byte da scaricare; 7. event : uno tra i valori started(in corso), completed(completato), stopped(temporaneamente sospeso) che indicano lo stato del trasferimento; 8. ip : indirizzo ip del client(opzionale), il tracker pu comunque dedurlo dalla connessione TCP. La risposta che il client riceve prevede un documento nel tipo MIME text/plain contenente un dizionario bencoded con le seguenti chiavi[95]: 1. failure reason : motivo del problema ( se presente le altre chiavi potrebbero non essere presenti); 2. interval : intervallo, in secondi, che il client deve attendere prima di inviare una nuova richiesta al tracker(i client possono mandare una richiesta al tracker prima del termine specificato solo se viene invocato un evento stopped/completed o se il client ha bisogno di conoscere un maggior numero di peer, quindi interval pu essere modificato al variare di event) ; 3. tracker id : identificativo univoco del tracker; 4. complete : numero dei peer con file completo; 5. incomplete : numero di peer con file incompleto; 6. peers : una lista di dizionari con le seguenti chiavi: peer id, ip, port.

Il protocollo di riferimento si chiama peer wire, il quale utilizza queste strutture dati e questi file che abbiamo visto e utilizza la codifica bencoded su queste strutture dati. Un client deve mantenere delle informazioni di stato per potere gestire una connessione con un altro client remoto. Come fa a mantenere queste informazioni di stato? Utilizza 2 stati differenti[96]: 1. choked : indica che il peer remoto ha messo in stato di chocked questo client, cio il peer remoto non accetta richieste da questo client; 2. interested: indica che un eventuale peer remoto interessato a qualcosa che io ho da offrirgli. una notifica che il peer remoto inizier a richiedere blocchi quando il client lo pone in stato unchoked(consento allaltro peer di accedere).

Quindi ho questi 2 stati che mi servono per etichettare il client, in base alla combinazione di questi 2 stati identifico i client interessati alle risorse che io ho e poi posso bloccare o sbloccare(se mi comporto da server) .

Telematica 2 - Lezione 14

10

A pag. 99 troviamo la sintassi dell handshake tra client e server e dopo di che il passaggio completo del messaggio. Troviamo a pag. 100 la struttura dei messaggi. Nel momento in cui un client e un server si mettono daccordo per il trasferimento di un chank fanno un handshake che riguarda un accordo sul protocollo che sto utilizzando e tutte le informazioni riguardanti le chiavi di cifratura .

Dopo di che ogni client si identifica con un identificativo e poi riceve materialmente il trasferimento. Tutti i messaggi hanno struttura prefissata con una parte di prefisso, una parte di identificativo del messaggio e poi il payload. <lenght prefix><message ID><payload>

Telematica 2 - Lezione 14

11