Anno Accademico 2004/2005 Corso di Laurea in INGEGNERIA ...xoomer.virgilio.it/appuntinweb/Sistemi...

51
Anno Accademico 2004/2005 Corso di Laurea in INGEGNERIA INFORMATICA TELEMATICA Realizzato da: Domenico Latanza Aurelio Longo

Transcript of Anno Accademico 2004/2005 Corso di Laurea in INGEGNERIA ...xoomer.virgilio.it/appuntinweb/Sistemi...

Anno Accademico 2004/2005 Corso di Laurea in

INGEGNERIA INFORMATICA

TELEMATICA

Realizzato da: Domenico Latanza Aurelio Longo

Capitolo 1 – Generalità sulle reti Questo capitolo fornirà le conoscenze necessarie per affrontare i successivi. Saranno illustrati i caratteri generali delle reti di telecomunicazioni. 1.1. Hardware di rete Esistono grosso modo due modalità di comunicazione nelle reti:

BROADCAST Come ad esempio la TV satellitare. La macchina sorgente invia lo stesso messaggio a tutte le macchine connesse.

PUNTO-PUNTO Come ad esempio internet. La connessione coinvolge solo due macchine. C’è quindi una sola sorgente ed una sola destinazione. A questo punto bisogna distinguere 2 sottomodalità in base a come il messaggio da trasmettere utilizza la rete a disposizione:

COMMUTAZIONE DI CIRCUITO: (telefono di casa). Prima di instaurare una comunicazione è necessario che sorgente e destinazione creino un canale logico(fisico) che serve solo il loro collegamento (più avanti si vedrà però il concetto di MULTIPLEXING) settando dei parametri opportuni e allocando le dovute risorse.

COMMUTAZIONE DI PACCHETTO: non è necessario impegnare una linea per comunicare. Il messaggio viaggia in “pacchetti” che possono essere recapitati anche a distanza di un certo tempo l’uno dall’altro e soprattutto non in un ordine preciso. In pratica non serve più avere un canale per ogni comunicazione da effettuare.

Ognuna delle due filosofie ha una sua ragione di esistere!!!

1.1.1. Tipologie di reti Esistono diversi tipi di reti in base a 3 caratteristiche principali: AREA COPERTA, VELOCITA’, MEZZO DI TRASMISSIONE (con o senza fili).

RETI LOCALI (le LAN in genere) Servono ambienti dell’ordine di qualche Km e viaggiano a velocità 10MBps<X<100MBps. Le LAN BROADCAST sono di 2 tipi:

BUS LINEARE: ad ogni istante è master al più una macchina. C’è un meccanismo di arbitraggio che regola un eventuale accesso multiplo al canale.

ANELLO: ogni bit si propaga in modo autonomo lungo l’anello senza aspettare la fine del pacchetto cui appartiene. C’è un meccanismo di arbitraggio che regola un eventuale accesso multiplo al canale.

L’allocazione del canale può essere di 2 tipi:

STATICA: il tempo viene diviso in n intervalli discreti (TIME SLOT) all’interno dei quali è master una sola macchina per ogni time slot.

DINAMICA: c’è un algoritmo che regola l’accesso al canale da parte delle macchine.

N.B. L’allocazione dinamica evita che si sprechi il canale nei time slot in cui si ha il turno di una macchina che non ha nulla da trasmettere.

MAN (Metropolitan Area Network) Ad esempio le reti della TV via cavo in alcune città degli USA.

WAN (Wide Area Network) E’ la tipica rete che copre vaste aree geografiche (internet). Un pacchetto, durante il percorso sorgente destinazione deve attraversare più router. Il router si comporta come una memoria

temporanea che immagazzina il pacchetto prima di inoltrarlo verso il router successivo che si trova sul miglior percorso possibile (la tecnica di memorizzazione è necessaria poiché il router successivo potrebbe risultare temporaneamente saturo). Si ha quindi un processo STORE & FORWARD.

WIRELESS (senza fili come BLUETOOTH) 1.2. Software di rete Accanto alle architetture hardware ci sono le architetture software. Attualmente si hanno software che utilizzano architetture basate sulla stratificazione dei compiti. Si parla quindi di software a LIVELLI GERARCHICI dove ognuno di essi si occupa di un determinato compito nell’economia di una telecomunicazione. Tra due livelli è presente un’INTERFACCIA (operazioni elementari e servizi tra un livello e l’altro). Invece il PROTOCOLLO è l’insieme di norme che regolano a strati omologhi della sorgente e della destinazione di “capirsi” tra loro. 1.2.1. Architettura ISO OSI E’ l’architettura che analizzeremo ed è composta da 7 livelli come in figura:

1.3. Architettura di internet Ecco come un utente generalmente si connette ad internet con un normale modem: MODEM RETE TELEFONICA POP ISPLOCALE BACKBONE NAP ROUTER SERVER MODEM: converte i segnali digitali del PC in segnali analogici adatti alla linea telefonica; POP: letteralmente “punto di presenza” ovvero quel numero di telefono locale che ogni ISP possiede. Da qui in poi si ha commutazione di pacchetto; ISP LOCALE: gestore di servizi (ES. LIBERO, TISCALI…) responsabile del collegamento internet; BACKBONE: è la struttura portante di tutto. E’ gestita da grandi operatori di rete (TELECOM, AT&T…); NAP: è una sala di router che consentono il passaggio da un backbone all’altro. ROUTER: ognuna delle vie d’accesso (situate in un NAP) ai backbone. 1.4. Reti orientate alla connessione (X.25, Frame Relay, ATM) Perché le società telefoniche preferiscono delle reti di questo tipo (filosofia “a commutazione di circuito” ?

1) Il servizio è più affidabile; 2) E’ più facile fatturare, perché si hanno i parametri necessari (tempo di occupazione del

canale e risorse allocate per la comunicazione) molto più concretamente. 1.4.1. X.25 E’ una rete nata negli anni ’70 quando in genere in una nazione operava un solo gestore. Essa funziona così:

1) Il sorgente stabilisce una connessione con un computer remoto; 2) Alla connessione viene dato un numero di collegamento;

3) Ogni pacchetto dati è formato da: un’INTESTAZIONE di 3 byte e un CORPO di un massimo di 128 byte. A sua volta l’intestazione è così suddivisa: NUMERO DI CONNESSIONE, NUMERO SEQUENZA PACCHETTO, NUMERO DI ACKNOWLEDGE, ALTRI BIT.

1.4.2. Frame Relay Negli anni ’80 ha gradualmente sostituito X.25 ed è una rete orientata alla connessione ma senza controllo di flusso o di errore. 1.4.3. ATM E’ la più importante. Il nome significa Asynchronous Transfer Mode poiché è l’unica che offre trasmissioni asincrone (senza clock). ATM è orientata alla connessione. Funziona in questo modo:

Il primo pacchetto inviato serve a configurare la connessione; Man mano che il pacchetto di configurazione avanza lungo i router questi si rendono

disponibili e allocano risorse per creare un circuito virtuale di connessione (che può essere temporaneo o permanente) tra sorgente e destinazione;

Ad ogni connessione così configurata viene assegnato un numero identificativo; A questo punto iniziano a partire i pacchetti dati, dove ogni cella è lunga 53 byte (5 di

intestazione e 48 di corpo utile). Le più comuni reti ATM operano tra 155 e 622MBps.

1.5. Standardizzazione delle reti Esistono standard DE FACTO (si affermano da soli grazie alle scelte dei produttori e dei consumatori) e DE JURE (stabiliti da organizzazioni di controllo). A livello mondiale esistono (o sono esistiti) degli organismi di controllo degli standard delle telecomunicazioni: ITU CCITT (nome con cui venne chiamato ITU dal ’56 al ’93) Di ITU fanno parte enti di controllo di varie nazioni, tecnici… che regolamentano nuove architetture hardware e software per quanto riguarda il mondo delle telecomunicazioni.

Gli standard internazionali in genere sono invece controllari da ISO (ANSI negli Stati Uniti) e quindi ad ogni prodotto o normativa viene associato il nome ISO XXXX…. Per i prodotti elettrici e informatici l’organismo di controllo è IEEE e quindi ogni standard ha un nome in codice IEEE XXXX…

Capitolo 2 – Lo strato fisico 2.1. Rappresentazione dei segnali Qualsiasi funzione periodica regolare con periodo T può essere ottenuta sommando un numero infinito di seni e coseni:

∑ ∑∞ ∞

+=1 1

)2cos(*)2sin(*)( ftbnftantg ππ , dove f=1/T è la frequenza fondamentale del segnale e an

e bn sono le ampiezze di seno e coseno dell’n-sima armonica. Ma i mezzi di trasmissione non attenuano uniformemente le varie componenti della Serie di Fourier e ciò genera distorsioni. Le ampiezze sono trasmesse senza modifiche tra 0 e Fc(frequenza centrale), mentre da qui in poi vengono attenuate. Questo intervallo è definito BANDA PASSANTE. Secondo Nyquist, se abbiamo un filtro la cui ampiezza di banda è H, possiamo ricostruire bene il segnale utilizzando 2H campioni al secondo. In pratica, se il segnale ha V livelli discreti (ES. se ha 4 livelli ci sono 2 bit perché 2^2=4) abbiamo:

sec/log*2max 2 bitVHcanalevelocità =

Su canali rumorosi, dove il rumore (in decibel) è: decibelinrumoresegnalerapportoNS /log10 = ,

la formula precedente diventa:

sec/1log*max 2 bitNSHcanalevelocità ⎟⎠⎞

⎜⎝⎛ +=

2.2. Mezzi di trasmissione

MEZZI MAGNETICI Sono i dischi e i nastri magnetici di grandi capacità. Hanno il difetto di non comunicare i dati in tempo reale.

DOPPINO TELEFONICO E’ formato da 2 conduttori di rame isolati spessi circa 1mm, avvolti uno attorno all’altro (poiché 2 fili paralleli sono una buona antenna, mentre avvolti non irradiano). Esistono doppini di categoria 3, 5, 6, 7, dove il primo tipo (il più vecchio) ha meno spire per centimetro del secondo – e così a salire verso l’ultimo tipo – cosa che significa peggiore resistenza alle interferenze e all’attenuazione su lunghe distanze. Inoltre la categoria 5 ha banda 100MHz contro i 16 della categoria 3. Tutti questi cavi sono detti UTP (non schermati).

CAVO COASSIALE Esiste di 2 tipi: a 50ohm (per trasmissioni digitali) e a 75ohm (per trasmissioni analogiche). La forma è questa:

FIBRA OTTICA Ha una banda di circa 1GHz (anche se è in evoluzione) e si basa sulla trasmissione luminosa dei segnali. C’è un laser trasmittente, un mezzo guidato che trasporta la luce e infine un rilevatore di segnali luminosi. Il mezzo di trasmissione è la fibra di vetro e la luce si irradia con più angolazioni (fibra multimodale). Per angoli di incidenza sulla parete della fibra maggiori si un valore critico le onde luminose non riescono a fuoriuscire e vi rimangono intrappolate, riflettendosi completamente. Fibre piccole (del diametro paragonabile alla lunghezza d’onda del segnale) propagano la luce in linea retta e possono ospitare una sola onda (fibra monomodale). Sono perciò dette guide d’onda. Le fibre ottiche hanno bassissima attenuazione e possono quindi propagare un segnale su lunghe distanze senza perdite di rilievo. L’attenuazione è data da:

ricevutaenergiatrasmessaenergialog10

Un cavo è così formato: all’interno ospita tre fibre ognuna delle quali ha un’anima in vetro, un rivestimento di vetro dal diverso coefficiente di rifrazione e un ulteriore rivestimento protettivo.

2.3. Multiplexing Poiché si potrebbe avere l’esigenza di trasmettere più comunicazioni su uno stesso canale, esistono delle strategie di suddivisione del canale, in modo da “accontentare” più utenti. Questa tecnica è il MULTIPLEXING. Può essere:

FDM (divisione del canale per frequenza) E’ la strategia adottata nel sistema telefonico fisso. La banda del canale viene divisa in N parti corrispondenti al numero di utenti. Chiaramente se qualcuno degli utenti non comunica nulla si perde banda; se arriva un altro utente non può comunicare! E comunque tra le N parti deve essere compresa una BANDA DI GUARDIA libera, per evitare che 2 comunicazioni adiacenti interferiscano.

TDM (divisione del tempo in intervalli detti time slot) Il tempo viene diviso in time slot. Ogni utente può utilizzare tutta la banda disponibile nel suo time slot, terminato il quale deve “cedere” il canale ad un altro. E’ chiaro che essendo i time slot molto piccoli la comunicazione è “frammentata”. Appare evidente che tale sistema non può essere utilizzato a commutazione di circuito: cadrebbe continuamente la linea! Anche qui se un utente non comunica nulla nel suo time slot, questo viene sprecato.

CDMA (multiplexing per codice) E’ il sistema più efficiente. Non c’è alcuno spreco, poiché tutte le comunicazioni occupano tuta la banda e il tempo disponibili. Tutte le comunicazioni viaggiano insieme, contrassegnate ognuna dal proprio codice, che è riconosciuto univocamente solo da una stazione trasmittente ed una ricevente. Immaginiamo una sala d’aeroporto dove vengono comunicati messaggi in più lingue: noi riconosciamo solo il nostro, mentre tutto il resto ci sembra spazzatura senza significato! Funziona così: ogni coppia sorgente ricevente ha una SEQUENZA CHIP, ovvero un codice di n bit univoco di identificazione (dove n è pari alla codifica usata. Se si conversa a 8 bit il CHIP è pure di 8 bit). Quando viene comunicato un 1 si manda la propria sequenza; per comunicare lo 0 si manda il complemento a 1 della propria sequenza. ESEMPIO Una coppia di stazioni con CHIP 00011100 per mandare un 1 scriverà proprio 00011100, mentre per mandare 0 scriverà 11100011. ESEMPIO Abbiamo 3 coppie di stazioni A, B, C ognuna con una propria sequenza di chip: A: 00011011 B: 00101110 C: 01011100 Convertiamoli in segnali bipolari: A: -1-1-1+1+1-1+1+1 B: -1-1+1-1+1+1+1-1 C: -1+1-1+1+1+1-1-1 Immaginiamo ora che A,B e C comunicano rispettivamente 1, 0, 1. Il messaggio totale nel canale sarà dato dalla somma delle loro sequenze chip nel formato bipolare: Messaggio Totale= -1-1-1-1+1+1-1+1+1 + +1+1-1+1-1-1-1+1 + questa è invertita perché B comunica 0. -1+1-1+1+1+1-1-1 =

-1+1-3+3+1-1-1+1 Se vogliamo conoscere il messaggio che C doveva ricevere basta:

- moltiplicare membro a membro il messaggio totale per il chip di C in formato bipolare;

- sommare gli 8 termini ottenuti; - dividere il risultato ottenuto per 8 (che è il numero di bit del chip) Si otterrà così il bit trasmesso!

Capitolo 3 – Il livello Data Link Il livello Data Link si trova immediatamente sopra il livello fisico e serve a fornire i seguenti servizi:

Un’ottima interfaccia per lo strato superiore (strato NETWORK) Gestire gli errori di trasmissione Regolare il flusso di dati per evitare che fonti di informazione veloci sovraccarichino

dispositivi riceventi troppo lenti. Il livello Data Link prende i bit e li impacchetta formando i frame da mandare allo strato Network (passaggio livello fisico livello data link), oppure prende i pacchetti e li incapsula in frames (passaggio livello network livello data link). Ogni frame ha un’INTESTAZIONE(Header), un CARICO UTILE (informazione vera e propria), una CODA. FIG. 3.1. Servizi forniti allo strato Network Immaginiamo un processo su una macchina sorgente localizzato nello strato Network di quest’ultima. Lo strato Data Link di questa macchina deve prelevare l’informazione, mandare il frame risultante al suo strato Fisico, che lo scompone in bit da inviare all’altra macchina, la quale poi dovrà ricevere l’informazione iniziale nel proprio strato Network. FIG. Lo strato Data Link può offrire 3 diversi tipi di servizio (che ovviamente lo mette in comunicazione – tramite il “protocollo” – col corrispettivo strato data link della macchina destinazione):

Servizio UNACNKOWLEDGED senza connessione Consiste in questo: vengono inviati dei frame dalla macchina sorgente alla macchina destinazione senza un ordine preciso, poiché prima della “conversazione” non viene stabilito un collegamento fisico(logico) sorgente-destinazione (da ciò il titolo: SENZA CONNESSIONE). Inoltre, dopo l’invio del frame, sia che esso arrivi a destinazione, sia che esso si perda o si danneggi a causa di rumore del canale, il ricevente non restituisce al chiamante un messaggio (da qui UNACKNOWLEDGED). Questo tipo di servizio è chiaramente indicato per comunicazioni che avvengono su canali con pochi errori o comunque per comunicazioni real time, dove è meglio perdere qualcosa piuttosto che attendere una ritrasmissione di un frame danneggiato o perso.

Servizio ACKNOWLEDGED senza connessione Se serve una maggiore affidabilità si ricorre a questo tipo di servizio. In questo caso si continua a non usare nessuna connessione fisica, ma c’è una conferma di ricezione (ACKNOWLEDGED) da parte del ricevente, per informare il mittente che il frame è arrivato. Se il mittente non riceve la conferma entro un certo tempo ritrasmette il frame perso. Questo tipo di servizio si usa per reti molto inaffidabili come quelle WIRELESS.

Servizio ACKNOWLEDGED con connessione In questo caso le macchine sorgente e destinazione devono stabilire una connessione logica, settando alcuni parametri di comunicazione, prima di iniziare a comunicare (siamo in presenza di un esempio simile alla COMMUTAZIONE DI CIRCUITO). Ogni frame trasmesso è numerato ed inoltre il ricevente restituisce un messaggio di avvenuta consegna. Da ciò deriva il fatto che i frame vengono sicuramente ricevuti nell’ordine corretto. Se il servizio fosse senza connessione, un messaggio di conferma perso farebbe sì che un frame venisse inviato più volte, ottenendo così sulla macchina ricevente dei doppioni. Questo tipo di servizio viene utilizzato per fornire allo strato Network un flusso di bit molto affidabile.

3.2. Funzionamento del router Il software dello strato Data Link controlla che il frame ricevuto sia quello che si aspettava. Se ciò è avverato passa al software di routing il pacchetto contenuto nel campo di carico utile (payload). Il software di routing sceglie allora l’opportuna via d’uscita, inviando il pacchetto allo software data link che lo trasmette.

3.3. Suddivisione dei bit in frame (passaggio STRATO FISICO STRATO DATA LINK) Prima di inviare il pacchetto allo strato Network, lo strato Data Link preleva ovviamente i bit che stanno arrivando dallo strato Fisico. Poiché il flusso di bit in arrivo non è esente da errori, il suo compito è proprio quello di rilevare e eventualmente correggere gli errori. Come avviene tutto ciò? Lo strato Data Link suddivide in bit in frame e calcola il checksum (modalità di controllo). Quando il frame arriva a destinazione il checksum viene ricalcolato. Se ci sono discrepanze, lo strato sa che è avvenuto un errore e quindi prende i dovuti provvedimenti. Suddividere i bit grezzi in frame non è semplice. Si potrebbe ricorrere ad intervalli temporali tra un frame e l’altro, ma – soprattutto in commutazione di pacchetto – questi intervalli (molti di essi) andrebbero persi durante la comunicazione. Immaginiamo cosa succederebbe! Si ricorre così a 4 strategie di suddivisione:

Conteggio dei caratteri Questa tecnica consiste nell’utilizzare un campo dell’intestazione del frame per “comunicare” il numero di caratteri che seguiranno prima della fine del frame. Appare evidente che un errore di comunicazione della cifra contenuta in quel campo elimina ogni possibilità di conoscere la fine del frame in questione e quindi l’inizio del successivo…Perciò, poiché un piccolo errore può compromettere grandi quantità di dati, questo metodo non si utilizza più.

Flag Byte con Byte Stuffing Un metodo utilizzato per evitare la perdita di sincronizzazione (riconoscimento inizio e fine di un frame) è l’utilizzo del FLAG BYTE. E’ un byte che si pone in testa e in coda al frame cosicché questo viene delimitato. Una successione di 2 flag byte indica la fine di un frame e l’inizio di un altro. Se si manipolano dati binari può succedere però che il flag byte compaia naturalmente nella sequenza di dati “ingannando” il ricevente. Si ricorre allora ad un byte aggiuntivo (Byte di ESCAPE) posto davanti al flag byte accidentale. Questo metodo, detto BYTE STUFFING, ci informa se il flag byte incontrato è un byte dati o un vero e proprio flag byte. Se anche il byte di escape si presenta casualmente, lo si fa precedere da un ulteriore byte di escape. Naturalmente tutti i byte di escape verranno rimossi dallo strato data link prima di inviare il pacchetto allo strato Network. Questo metodo è una semplificazione di quello usato nel protocollo PPP, utilizzato dai pc per connettersi ai provider. Il problema di tale metodo è che vincola i caratteri ad essere codificati ad 8 bit, poiché il byte stuffing impiega 1 byte=8 bit per le proprie segnalazioni. Eventuali codifiche con maggior numero di bit non sono quindi ammesse. E questo è un grosso problema!

Flag di inizio e fine con Bit Stuffing Un’evoluzione del sistema precedente è proprio l’utilizzo di un BIT STUFFING. Come si evince dal nome, in questo caso viene utilizzato un solo bit di segnalazione e non un byte! Vediamo come opera. Con questa tecnica si possono creare frame dal numero di bit arbitrario oltre a poter utilizzare codifiche di carattere con numero di bit qualunque. Ogni frame deve iniziare e finire con un gruppo speciale di bit (FLAG BYTE: 01111110). Quando lo strato data link incontra 5 bit con valore 1 consecutivi, inserisce automaticamente uno 0 (BIT STUFFING). La macchina destinazione che riceve tale sequenza, elimina automaticamente lo 0 e passa il tutto allo strato Network. Se la sequenza FLAG (01111110) appare casualmente nei dati, essa verrà trasmessa come 011111010 e poi riconvertita sulla macchina destinazione come 01111110.

Violazioni della codifica dello strato fisico Questo metodo si applica solo a reti particolari come alcune LAN. Infatti esse, poichè rappresentano ogni 1 come una coppia ALTO-BASSO e uno 0 come una coppia BASSO-ALTO, riconoscono le coppie ALTO-ALTO e BASSO-BASSO come confini di frame. Queste coppie non sono infatti destinate alla comunicazione dei dati. 3.4. Controllo degli errori Per assicurare l’arrivo a destinazione di tutti i frame viene utilizzato tipicamente un messaggio di conferma destinazione sorgente che, se è positivo significa che il frame è stato ricevuto correttamente, altrimenti (se negativo) il frame viene ritrasmesso. Se addirittura un frame viene perso per problemi hardware (eccessivo rumore sul canale) e la destinazione non ha alcun “materiale” per il quale deve restituire un messaggio di avvenuta consegna, la sorgente può restare in attesa di un messaggio che non arriverà mai! Viene allora introdotto un timer che scatta dopo il tempo normalmente necessario (da parte della destinazione) a ricevere un frame e inviare l’acknowledgement. Passato tale tempo senza risposta la sorgente sa che c’è un problema e ritrasmette il frame. Ma si potrebbe comunque verificare, per un qualsiasi problema, che il timer scatti comunque prima della risposta e allora la destinazione si ritroverà con due copie dello stesso frame. Basta allora inserire un numero di riconoscimento per ogni frame cosicché la destinazione potrà riconoscere eventuali doppioni. 3.5. Controllo del flusso Potrebbe capitare che la sorgente mandi frame troppo velocemente rispetto a quanti potrebbe gestirne la destinazione (macchina sorgente veloce o carico di lavoro basso, macchina destinazione lenta o carico di lavoro eccessivo). Accadrà inevitabilmente che la destinazione perderà alcuni frame, non riuscendoli a processare in tempo. Vengono così usati due modalità di controllo:

• CONTROLLO DI FLUSSO TRAMITE FEEDBACK La destinazione manda un messaggio alla sorgente per darle il permesso di inviare altri dati. • CONTROLLO DI FLUSSO TRAMITE LIMITAZIONE DI VELOCITA’ Il protocollo contiene un algoritmo che limita la velocità di trasmissione dei dati senza bisogno di alcun feedback da parte della destinazione.

CONTROLLO DEGLI ERRORI Per assicurare l’affidabilità dell’arrivo dei dati tipicamente il protocollo richiede che la destinazione mandi indietro degli speciali frame di controllo che contengono un acknowledgement positivo o negativo relativamente ai frame ricevuti. RILEVAZIONE E CORREZIONE DEGLI ERRORI Mentre gli errori sono rari nella parte digitale, sono ancora comuni nei collegamenti locali. Le comunicazioni wireless sono sempre più comuni, e qui la frquenza degli errori e di un ordine di grandezza maggiore rispetto ai rami interoffice in fibra ottica. Per via dei processi fisici che li generano, in alcuni mezzi di trasporto, gli errori tendono a presentarsi in grappoli piuttosto che singolarmente.Il vantaggio di avere errori burst è che i dati nei computer sono sempre trasmessi in blocchi di bit, se gli errori appaiono in gruppi (errori burst) di 100, solo uno dei due blocchi su 100 saranno affetti da errori. Lo svantaggio invece di avere errori burst è che sono molto più difficili da correggere degli errori isolati. CODICI PER LA CORREZIONE DEGLI ERRORI Sono state sviluppate due strategie di base per gestire gli errori. Una consiste nell’includere in ciascun blocco dati trasmesso una quantità di informazioni ridondanti, tale da permettere di ricostruire il contenuto del blocco in caso di errore tale strategia usa una codifica a correzione di errore. L’altra strategia codifica a rilevazione di errore consiste nell’introdurre abbastanza ridondanza da permettere alla destinazione di capire che c’è stato un errore, ma non di correggerlo. In questo modo la destinazione potrà richiedere una ritrasmissione del blocco di dati. L’uso delle codifiche a correzione di errore è spesso indicato come forward error correction (correzione d’errore in anticipo). Su canali affidabili, come ad es le fibre ottiche, è più economico usare codifiche a rilevazione d’errore e limitarsi a ritrasmettere quei blocchi che eventualmente risultino corrotti. Invece su canali rumorosi come il wireless, è più conveniente aggiungere ad ogni blocco una ridondanza tale che (in caso di errore) la destinazione sia in grado di ricostruire il blocco, invece di dover richiedere una nuova trasmissione. Di solito un frame consiste di m bit di dati (il messaggio) e r bit ridondanti per i controlli. Definiamo la lunghezza totale n dove n=m+r . Un’unità di n bit che contiene dati e bit di controllo viene chiamata codeword di n bit. Se consideriamo due parole di codice definiamo la distanza di Hamming il numero di bit corrispondenti nelle due sequenze (3 bits). Se due parole di codice hanno una distanza di Hamming di vuol dire che saranno necessari d errori di singoli bit per convertire l’una nell’altra. Per rilevare d errori è necessario un codice con distanza d+1 poiché con questo codice non c’è modo che d errori di bit singolo mutino una codeword valida in un’altra codeword valida. Per correggere d errori è necessario un codice con distanza di 2d+1 poiché le sue parole valide sono così distanti che anche con d mutazioni, la parola originale è ancora la più vicina valida e può quindi essere individuata. Esempio: immaginiamo di voler progettare un codice con m bits di messaggio e r bits di controllo che garantisca la correzione di tutti gli errori singoli. Ognuno dei 2m messaggi legali ha n parole di codice illegali a distanza 1. Ognuno de 2m messaggi legali necessita n+1 combinazioni di bit dedicate. Poiché il numero totale di combinazioni è 2n si devono avere (n+1) 2m <= 2n , sapendo che n=m+r si ha che (m+r+1)<= 2r . Dato m, questo

definisce un limite inferiore al numero di bit di controllo necessari per correggere un errore singolo. CODIFICHE A RILEVAZIONE D’ERRORE La codifica polinomiale nota come CRC (controllo ciclico di ridondanza) è basata sul fatto di trattare le sequenze di bit come dei polinomi a coefficienti che possono assumere solo i valori 0 oppure 1. TECNICHE ARQ- PAR ARQ (Automatic Repeat reQuest)richiesta automatica di ripetizione - PAR (Positive Acknowledgement with Retransmission)risposta positiva con ritrasmissione .Sono protocolli in cui la sorgente aspetta un acknowledgement positive prima di avanzare nella trasmissione. Essi si suddividono in protocolli:

• Stop and wait • Go back N • Selective repeat

Stop and wait (fermati e aspetta) sono i protocolli in cui il mittente manda un frame e poi aspetta l’acknowledgement prima di procedere. I frame viaggiano in entrambe le direzioni, quindi il canale di comunicazione fra i due strati data link deve essere capace di trasmettere informazioni in modo bidirezionale, ma questo protocollo impone una rigida alternanza del flusso. La tecnica che consiste nel ritardare gli acknowledgment in uscita in modo da agganciarli al successivo frame di dati è chiamata piggy-backing (trasportare in groppa). Il vantaggio principale di tale tecnica rispetto agli acknowledgement separati, sta nel miglior uso della banda disponibile. Ma il campo piggyback introduce una complicazione non presente nei protocolli con acknowledgement separato. Se lo strato data link aspetta più a lungo del periodo di timeout della sorgente, il pacchetto verrà ritrasmesso, rendendo vano l’acknowledgement. I protocolli sliding window (finestra scorrevole), sono caratterizzati dalla dalla dimensione delle finestre sorgente e destinazione che ci dicono l’insieme dei frame accettabili, quando sono entrambi uguali a 1 il protocollo è stop-and-wait. Si dice che 1questi frame si trovano nella finestra di invio. Quando la finestra è maggiore di 1 la destinazione può essere programmata in due modi: o per scartare tutti i frame eccetto il successivo in sequenza, o per mettere in un buffer i frame ricevuti fuori sequenza prima del loro uso. Il bisogno di avere una finestra larga da parte della sorgente si ha quando il prodotto tra banda e ritardo di trasmissione totale è particolarmente grande. Il prodotto di questi due fattori indica essenzialmente qual è la capacità della pipeline (tubo). La sorgente, per poter operare alla massima efficienza, ha bisogno di poterla utilizzare tutta senza fermarsi. Questa tecnica è detta pipelining (instradamento nel tubo). Se il canale ha una capacità di b bit/sec la dimensione del frame è l bit e il tempo totale di propagazione e R sec, allora il tempo necessario per trasmettere un singolo frame è l/b sec. Ma il pipelining dedi frame su un canale di comunicazione non affidabile comporta alcuni seri problemi. Perché quando un frame nel mezzo di una lunga sequenza viene danneggiato o perso, una grande quantità di frame arriverà alla destinazione prima che la sorgente riesca a sapere che ci sono stati errori di trasmissione. Quando un frame danneggiato arriva a destinazione, deve essere scartato. Per il ripristino degli errori in presenza di pipelining sono disponibili due approcci base.

• Uno è chiamato go back n e vuole che la destinazione semplicemente scarti tutti i frame successivi all’errore senza mandare l’acknowledgment per questi frame

1 LO STRATO DATA LINK

scartati. In altre parole lo strato data link, rilevato l’errore, si rifiuta di accettare qualunque frame eccettuato il successivo che deve inviare allo strato network. Se la finestra della sorgente si riempie prima che il timer scatti, la pipeline comincia a svuotarsi. Questo approccio può far perdere molta banda se la frequenza degli errori è alta.

• L’altra strategia generale per trattare gli errori in presenza di pipelining è la ripetizione selettiva, con tale metodo un frame in errore viene scartato, mentre i frame buoni ricevuti successivamente vengono messi in un buffer. La ripetizione selettiva è spesso associata al fatto che la destinazione invia un ack. Negativo (NAK) quando trova un errore, per es quando riceve un erroe di checksum o un frame fuori sequenza. I NAK stimolano la trasmissione prima che il timer corrispondente scatti, e quindi aumentano le performance. In effetti il NAK serve per accelerare la ritrasmissione di uno specifico frame. La ripetizione selettiva corrisponde ad avere una finestra di ricezione maggiore di 1(mentre 1 era nel go back n). ogni frame nelle finestra può essere accettato e messo in buffer fino a che tutti quelli che lo precedono sono stati passati allo strato network. Si può usare un approccio oppure l’altro a seconda di quale risorsa è più scarsa.

ESEMPI DI PROTOCOLLI DATA LINK: HDLC(High Level Data Link Control) Questi protocolli sono tutti derivati da un protocollo usato in principio nell’ambiente IBM dei mainframe ossia il protocollo SDLC (protocollo di controllo sincrono del data link), dopo IBM ha sottoposto le sue specifiche ad ANSI e ISO perché le accettassero come standard americani e internazionali. Da ANSI è nato ADCCP (procedura avanzata per la comunicazione di dati). Mentre lo standard ISO è diventato HDLC (High Level Data Link Communicatons , controllo del data link ad alto livello). HDLC può operare in molti modi differenti e con diversi meccanismi di controllo d’errore e di flusso: (half-duplex o full-duplex, master-slave (sbilanciato), o peer-to-peer (bilanciato) Tutti questi protocolli usano dei flag byte per delimitare i frame e il bit stuffing per evitare che un flag byte venga erroneamente inserito nei dati. Un’altra caratteristica comune è l’uso del controllo di flusso di tipo SLIDING WINDOW. HDLC ha diverse modalità di funzionamento:

- NRM (Normal Response Mode): Una stazione primaria è collegata ad una o più stazioni secondarie in modalità half-duplex. Solo la primaria può inviare i comandi e le stazioni secondarie trasmettono solo in seguito al permesso esplicito (polling) della primaria.

- ARM (Asynchronous Response Mode). Il colloquio è come per la precedente ma la stazione secondaria ha la possibilità di iniziare a trasmettere senza il permesso della primaria (poco usata).

- ABM (Asynchronous Balanced Mode): è una modalità bilanciata su comunicazioni punto-punto tra stazioni “combinate” che possono in modalità full-duplex inviare informazioni in modo indipendente e asincrono. E’ l’unico modo di funzionamento conforme con lo stack OSI.

Il protcollo data link principale per le linee punto-punto di Internet è il PPP (point-to-point-Protocol). Fra le varie funzionalità di PPP troviamo: - la rilevazione degli errori - il supporto per più protocolli - la possibilità di negoziare gli IP al momento della connessione e la possibilità di effettuare

l’autenticazione

Capitolo 4 – Il sottostrato MAC (Medium Access Control) Il problema che affronteremo in questo capitolo è il trattamento dei canali broadcast, ovvero di canali multiaccesso in cui è necessario regolare il “traffico” utenti. Di ciò si occupa il MAC, che è un sottostrato del livello DATA LINK, e questo è un problema riguardante soprattutto le reti LAN. Esistono degli schemi statici e altri dinamici per l’assegnazione del canale. Vediamo come funzionano. 4.1. Assegnazione statica del canale in Lan e Man Per assegnare un singolo canale di una linea telefonica si usa il multiplexing FDM. Se ci sono N utenti, la banda viene divisa in N parti uguali. Questo schema è ottimo per un numero costante di utenti e con un traffico dati ben definito (es. centrale di commutazione interurbana). Ma cosa succede se gli utenti diventano minori o maggiori di N? Nel primo caso viene sprecata banda; nel secondo l’utente non può comunicare non avendo banda disponibile. Le scarse prestazioni di un sistema FDM statico si possono vedere così: T ritardo medio del canale C bps capacità del canale k frame/sec frequenza degli arrivi uC frame/sec frequenza di servizio Per tempi di servizio e arrivo di Poisson, abbiamo: T=1/(uC-k) Gli stessi ragionamenti si possono fare quando si adottano tecniche TDM statiche. Quando un utente non comunica nel suo time slot, questo si perde! Vediamo allora tecniche di allocazione dinamiche. 4.2. Assegnazione dinamica del canale in Lan e Man Le premesse fondamentali di questo processo sono:

1) Modello della stazione composto da N stazioni indipendenti monoutente (computer, telefoni, ecc.) ognuno che genera frame in trasmissione. La probabilità che un frame venga generato in un intervallo t è kt, dove k è la frequenza di arrivo di nuovi frame. Generato il frame la stazione rimane bloccata finchè esso non è trasmesso con successo.

2) Presupposto del canale singolo. Tutte le stazioni possono trasmettere solo tramite questo canale.

3) Presupposto della collisione. Due frame trasmessi contemporaneamente si sovrappongono e il segnale finale è distorto. Questo evento è una collisione.

4) TEMPO: - Continuo, se la trasmissione del frame può iniziare in qualunque istante; - Discreto, se il tempo è diviso in intervalli (slot). Un intervallo può contenere 0 frame

(intervallo vuoto), 1 frame (trasmissione con successo), più frame (collisione). 5) OCCUPAZIONE DEL CANALE:

- Verificabile, se le stazioni sono in grado di vedere il canale e allora non trasmettono finchè è occupato;

- Non verificabile, se le stazioni non vedono il canale e allora sanno se la trasmissione ha avuto buon fine solo successivamente.

4.3. Protocolli ad accesso multiplo Presenteremo ora gli algoritmi per assegnare un canale multiaccesso.

Vediamo il sistema ALOHA, che presenta 2 varianti: puro e slotted (il tempo è diviso in intervalli discreti contenenti i frame). ALOHA puro L’idea di fondo del sistema ALOHA è di consentire a tutti gli utenti di trasmettere ogni volta che devono inviare messaggi. Naturalmente questa politica si presta alla possibilità di collisioni, che però possono essere scoperte grazie alle proprietà di feedback della trasmissione broadcast (per LAN immediato, per i satelliti circa 270ms). Se non è possibile ascoltare il canale serve invece un sistema di acknowledge. I sistemi che condividono un canale unico dove possono esservi conflitti si dicono “A CONTESA”. N.B. La capacità di trasporto dei sistemi ALOHA è massima quando i frame hanno dimensione uniforme. Se i frame occupano contemporaneamente il canale, collidono e sono da ritrasmettere (anche se solo un bit è danneggiato, poiché sarebbe difficile e logorante controllare anche quanto è andato perduto). Supponiamo che ci siano davanti alle stazioni degli utenti che possono trovarsi in due stati: scrittura o attesa. Quando viene terminata una riga l’utente rimane in attesa e la sua stazione trasmette un frame che contiene la riga e controllando il canale sa anche se tutto va a buon fine. Se così è, l’utente può tornare a scrivere. Se ammettiamo una popolazione infinita di utenti che genera nuovi frame con distribuzione di Poisson e media N frame per tempo di frame (tempo di trasmissione di un frame standard di misura frame/bit-rate), abbiamo che: se N>1 gli utenti generano più frame a frequenze più elevate di quelle supportate dal canale se 0<N<1 il canale non potrà mai essere sovraccaricato Supponiamo ora – ricordando che mentre vengono trasmessi nuovi frame vengono ritrasmessi quelli non andati a buon fine – di avere probabilità k tentavi di trasmissione per tempo di frame, con media G per tempo di frame. Possiamo avere due possibilità: Minimo Carico (N=0) non ci sono collisioni e quindi G=N Massimo Carico molte collisioni possibili e quindi G>N La capacità di trasporto è S=G*P, ovvero il carico per la probabilità per una trasmissione di successo (senza collisioni). Dal grafico sottostante si evince invece che, poiché i sistemi ALOHA non controllano il canale prima di trasmettere, è facile incappare in un altro frame e generare collisioni multiple poiché siamo a tempo continuo.

La probabilità che k frame siano generati in un tempo di frame è:

Perciò la probabilità di zero frame è e^-G. Mentre in un intervallo di due tempi di frame abbiamo 2G frame e pertanto la probabilità che non ci sia traffico nel periodo vulnerabile è P=e^-2G. Quindi la capacità di trasporto è S=Ge^-2G e se G=0.5 otteniamo quella massima che è S=1/2e. Slotted ALOHA Si ottiene dividendo il tempo in intervalli discreti (ad ognuno corrisponde un frame) delimitati da una stazione che emette un segnale di clock. In questo sistema per trasmettere bisogna attendere l’inizio di uno slot. Il periodo di collisione è dimezzato, perciò la probabilità che non ci sia altro traffico è P=e^-G e quindi la capacità di trasporto è S=Ge^-G. Per G=1 si ottiene il valore di S=1/e che è il massimo possibile oltre che il doppio dell’ALOHA puro. PROTOCOLLI CON RILEVAMENTO DELLA PORTANTE Questi protocolli, a differenza degli ALOHA, rilevano il traffico nel canale e quindi riducono il rischio di collisioni. Perciò si possono ottenere valori di trasporto maggiori di 1/e. Vediamo:

CSMA 1-persistente: quando deve trasmettere dati, una stazione rileva il traffico del canale. Se è occupato attende, altrimenti inizia a trasmettere con probabilità di 1 (da qui il nome del protocollo). Il nodo di questo protocollo è il ritardo di propagazione: se è eccessivo una stazione che non vede arrivare frame potrebbe iniziare la sua trasmissione causando una collisione.

CSMA non persistente: in questo caso, se il canale è occupato, la stazione non controlla continuamente lo stato del traffico per iniziare a trasmettere. Invece attende un intervallo di tempo casuale prima di ritrasmettere l’algoritmo. Ciò ottimizza l’utilizzo del canale ma aumenta i ritardi.

CSMA p-persistente: quando la stazione è pronta a trasmettere controlla il canale. Se è libero trasmette con probabilità p e rimanda (eventuale ritrasmissione) fino all’intervallo successivo con probabilità q=1-p. Se anche quell’intervallo è occupato la stazione trasmette o rimanda ancora. Il processo è ripetuto finchè il frame non viene trasmesso o finchè un’altra stazione non inizia la trasmissione (in quest’ultimo caso la “nostra” stazione interpreta l’accaduto come una collisione e attende in modo casuale prima di ritrasmettere).

• CSMA con rilevamento delle collisioni: CSMA/CD I protocolli CSMA persistente e non sono un miglioramento rispetto ad ALOHA in quanto garantiscono che nessuna stazione trasmette se il canale risulta occupato. Un nuovo miglioramento si ottiene consentendo a ogni stazione di annullare la propria trasmissione in caso di collisione. Infatti la terminazione rapida dei frame danneggiati risparmia tempo e banda. Il throughput allora è più elevato rispetto al CSMA, il vantaggio rispetto a quest’ultimo è tanto più elevato quanto più il tempo necessario perché le varie stazioni coinvolte nella collisione se ne accorgano, è piccolo rispetto al tempo di trasmissione della trama. Esso è ampiamente utilizzato nel sottostrato MAC delle LAN e costruisce la base delle LAN Ethernet.

STANDARD IEE 802 L’IEEE 802 introduce l’idea che le LAN devono fornire un’interfaccia unificata verso il livello di rete, pur utilizzando tecnologie trasmissive diverse. Il livello data link viene suddiviso in due sottolivelli:

1. LLC (Logical Link Control) che svolge funzionalità di recupero degli errori, controllo di flusso, gestione della connessione logica. Esso è comune a tutte le tipologie di LAN.

2. MAC (Media Access Control) che svolge funzionalità di controllo di accesso, indirizzamento, strutturazione delle informazioni in “trame” e controllo di errore. Esso è di tipo diverso del tipo di protocollo di accesso utilizzato, così come il livello fisico (codifica, sincronizza ed interfaccia il mezzo trasmissivo), al quale è strettamente associato che dipende dal protocollo MAC. Esso determina chi può utilizzare il canale (tx), discrimina quali messaggi sono destinati alla stazione tramite l’utilizzo di indirizzi (ricezione). Gli indirizzi di livello MAC identificano i diversi nodi sulla LAN.

STANDARD IEE 802.3: La Rete Ethernet La rete Ethernet è una delle reti locali più diffuse al mondo. Nel 1983 l’IEEE iniziò lo sviluppo dello Standard 802.3 che è basato su Ethernet ma che differisce per alcune caratteristiche logiche ed elettroniche. Le caratteristiche principali sono: topologia a bus, cablaggio tipo bus o stella il canale trasmissivo viene gestito con protocollo CSMA/CD, Velocità trasmissiva 10 Mb/s, Throughput max utile 5-7 Mb/s. Il livello fisico è diviso in 3 sottostrati:

- Mezzo fisico - PMA (Physical Medium Attachment) - PLS (Physical signaling)

CABLAGGIO ETHERNET Ce ne sono diversi: cablaggio con cavo coassiale: Thick 10Base5 (10 Mbps Baseband 500 metres). Un esempio tipico è che se due stazioni su segmenti diversi tentano di trasmettere nello stesso momento, le loro trasmissioni collidono. Tra i segmenti ethernet sono presenti i ripetitori che servono a interconnettere gli stessi essi sono degli apparati trasparenti a livello MAC che non memorizzano dati in un buffer e non isolano un segmento da un altro. Thin 10Base2: è molto meno costoso del precedente, non è in genere impiegato da solo in reti di grandi dimensioni per motivi di affidabilità, essendo il cavo di rete accessibile all’utente è esposto a scollegamenti accidentali.

10BaseT: permette l’utilizzo di ripetitori multiporta (HUB) per poter connettere più di due stazioni in rete la topologia è a stella. Questa topologia consente di evitare in caso di interruzione di un singolo elemento la perdita di funzionalità della rete.

STANDARD IEEE 802.4: (Token Bus) La topologia usata è ad anello mentre il cablaggio è a bus. Ogni stazione conosce gli indirizzi delle stazioni a destra e sinistra. All’inizio la stazione con indirizzo più alto può spedire il primo frame. Dopo essa concede il permesso tramire un gettone (token) esso viene propagato su tutto l’anello e il possessore ha il diritto di trasmettere. In questo modo non si avranno collisioni e il tempo di attesa sarà determinabile a priori. STANDARD IEEE 802.4: (Token Ring) La topologia è ancora ad anello ma il cablaggio è a stella. Una rete token ring consiste in un certo numero di stazioni collegate serialmente tramite un mezzo trasmissivo e richiuse ad anello. Poiché le stazioni devono ripetere continuamente i pacchetti delle altre stazioni, per ragioni di affidabilità la rete viene cablata a stella. Essendo il protocollo di accesso di tipo distribuito le stazioni si scambiano mutuamente il permesso a trasmettere sull’anello, quindi non possono verificarsi a priori conflitti nell’accesso simultaneo di più stazioni al mezzo trasmissivo. Il token viene trasmesso continuamente da una stazione all’altra attraverso l’anello anche se le stazioni non hanno niente da trasmettere. Per quanto riguarda la trama il frame centrale serve a garantire le operazioni di manutenzione dell’anello e di distribuzione del token. La priorità di accesso funziona nel seguente modo: ogni stazione dice il suo traffico quale priorità dovrebbe avere (8 tipoligie di traffico) e man mano che il token viaggia se ha priorità > si sovrascrivono 3 bit altrimenti attendo il primo token, una volta che il token completa il giro la prima stazione che vede il valore = alla propria priorità inserisce i dati. HUB, BRIDGE E ROUTER L’Hub: è un dispositivo di livello fisico: cioè un ripetitore che opera a livello di bit; ripete i bit ricevuti da un’interfaccia su tutte le altre (broadcast), inoltre decodifica le stringhe seriali di bit ricevute su una porta e le ricodifica sulle altre porte, ritemporizzando tutti i bit da trasmettere, si occupa della gestione della collisione. I vantaggi sono che sono semplici e poco costosi, riescono ad estendere la max distanza tra coppie di nodi (100m per Hub), possono essere organizzati in modo gerarchico e in caso di rottura di uno l’hub dorsale può rilevare il problema e scollegarlo dalla LAN e i restanti possono continuare a funzionare. I limiti sono che il throughput del caso gerarchico è lo stesso che nel caso di un solo segmento. Essi sono limitati sul numero di nodi e sull’estensione geografica dell’unica LAN connessa; non possono connettere Ethernet di tipo diverso Bridge: sono dispositivi a livello di link che operano sulle trame, ne esaminano le intestazioni e le inoltrano sulla base dell’indirizzo MAC della destinazione. Trasmettono la trama soltanto sulla porta alla quale è collegata la stazione di destinazione della trama. Hanno una banda aggregata molto superiore a quella della singola porta. I vantaggi sono che isolano i domini di collisione e incrementa il max throughput totale. Non ci sono limiti sul numero di nodi né sull’estensione geografica della LAN interconnessa. Può interconnettere diversi tipi di LAN dato che è un dispositivo store and forward, non c’è bisogno di cambiare nulla negli adattatori degli host connessi alla LAN.

Router: Essi lavorano a livello 3 OSI (livello di rete), esaminano le intestazioni del livello rete. Inoltre mantengono tabelle di routing implementano algoritmi di routine. Dovendo fare un confronto con i bridge entrambi sono dispositivi store-and-forward, i bridge sono plug & play, mentre i router richiedono la configurazione dell’indirizzo IP, richiedono meno banda per il processing, ma non offrono protezione dalle “broadcast storm”, mentre i router si (broadcasting senza fine da parte di un host viene inoltrato da un bridge portando al collasso dell’intera rete). I bridge funzionano bene in reti piccole (poche centinaia di host) mentre i router sono usati in reti grandi (migliaia di host) Switch: Uno switch è un bridge multi-porta che realizza in hardware l’algoritmo di inoltro dei pacchetti ed ha prestazioni superiori rispetto a quelli che operano in software. Essi si sostituiscono ai repeater nei centro stella, hanno una banda aggregata molto superiore a quella della singola porta. Possono gestire porte a diverse velocità, più sono le porte e più alto è il tasso di trasmissione magiore è il costo dello switch. Molti switch operano in modalità “full-duplex”, cioè possono spedire e ricevere trame contemporaneamente sulla stessa interfaccia. L’impiego di uno switch con n porte che sia in grado di gestire n/2 trasferimenti contemporanei aumenta le prestazioni della rete rispetto all’impiego di un HUB di un fattore > di n/2.

Capitolo 5: IL LIVELLO DI RETE Il modello di servizio della rete definisce le caratteristiche del trasporto end-to-end dei dati fra un “estremo” della rete e l’altrocioè fra i terminali che spediscono e quelli che ricevono. Forse la più importante astrazione fornita dallo strato di rete allo strato superiore è il so uso dei circuiti virtuali (VC virtual circuit). Esiste una sottile ma importante differenza tra instaurazione del VC a livello di strato di rete e instaurazione della connessione a livello dello strato di trasporto (es hanshake a 3 vie TCP). L’instaurazione della connessione nello strato di trasporto coinvolge solo due terminali. Essi si accordano per comunicare e insieme determinano i parametri della loro connessione, ma non si curano dei commutatori all’interno della rete. Invece con un circuito virtuale dello strato di rete, i commutatori dei pacchetti lungo il pecorso fra i due terminali sono coinvolti nell’instaurazione del circuito e ciascun commutatore è pienamente consapevole di tutti i VC che l’attraversano.

CLASSIFICAZIONE DELLA RETE

RETE DI TELECOMUNICAZIONE

RETE A COMMUTAZIONE DI

CIRCUITO

RETE A COMMUTAZIONE

DI PACCHETTO

FDM TDM Rete a Circuito VIRTUALE

Rete a DATAGRAMMI

• Una rete a datagrammi; può fornire alle sue applicazioni sia servizi orientati alla connessione

(TCP) sia senza connessione (UDP) in essa nel pacchetto determina il prossimo passo, i percorsi possono cambiare da sessione a sessione.

• In un rete a circuito virtuale; ogni pacchetto contiene un tag (virtual circuit ID) che identifica il prossimo passo, i percorsi sono fissati al momento della call setup per tutta la durata della chiamata, i router conservano le informazioni sullo stato per-call.

Nelle reti a commutazione a pacchetto si può incorrere a ritardi e perdite in quanto i pacchetti vengono messi in coda nei buffer dei router, se il rate di arrivo dei pacchetti eccede la capacità di putput del link allora i pacchetti si accodano per essere spediti. Possiamo distinguere 4 cause per i ritardi:

- ritardo di elaborazione - ritardo della coda - ritardo di trasmissione - ritardo di propagazione

PRINCIPI DI INSTRADAMENTO: link state e distance vector Per trasferire i pacchetti da un host che spedisce all’host di destinazione, lo strato di rete deve determinare il percorso (path) o rotta (route) che i pacchetti devono seguire. Sia che lo strato di rete fornisca un servizio datagram o un servizio a circuito virtuale, comunque esso deve determinare il percorso di un pacchetto, questo è il compito del protocollo di instradamento (routine protocol). Tipicamente un terminale è direttamente attaccato a un router, il cosiddetto router di default. Quando un terminale emette un pacchetto, il pacchetto viene trasferito al suo router di default. Il problema di instradare un pacchetto da terminale sorgente al terminale destinazione si riduce al problema di instradare il pacchetto dal router sorgente al router destinazione. Il nucleo di ciascun protocollo di instradamento è un algoritmo (algoritmo di instradamento) che determina il percorso di un pacchetto. Il suo scopo è: dato un gruppo di router, con i link che li collegano esso trova un “buon percorso” dalla sorgente alla destinazione. Un buon percorso è quello che ha il minimo costo. ci sono diversi modi per classificare gli algoritmi di instradamento:

• Algoritmo di instradamento globale/decentralizzato; il primo il minor costo tra sorgente e destinazione usando conoscenze sulla rete complete, globali. Il secondo lo fa in modo interattivo distribuito.

• Algoritmi statici/dinamici; negli statici le rotte cambiano molto lentamente nel tempo, mentre i dinamici sono più reattivi alle variazioni della rete.

• Algoritmi sensibili al carico/insensibili al carico; nel caso sensibile i costi dei link variano dinamicamente per riflettere lo stato attuale di congestione del link in questione.

ALGORIMO DI INSTRADAMENTO BASATO SULLO STATO DEI LINK In un algoritmo basato sullo stato dei link, la topologia della rete e tutti i costi dei link sono noti; cioè disponibili come input dell’algortimo. Un esempio di algoritmo molto conosciuto è quello di Dijkstra che calcola il percorso di minor costo da un nodo a tutti gli altri nodi della rete. Esso è iterativo e ha la proprietà che dopo la k-esima iterazione esso conosce il percorso di minor costo per K nodi di destinazione, e fra tutti i percorsi di minor costo verso tutti i nodi di destinazione, questi k percorsi avranno i k costi minori. ALGORITMO DI INSTRADAMENTO DISTANCE VECTOR Mentre l’agoritmo link state usa l’informazione globale, l’algoritmo distance vector (DV, vettore delle distanze) è iterativo asincrono e distribuito. Esso è distribuito perché ciascun nodo riceve alcune informazioni da uno o più vicini ai quali è direttamente collegato, esegue un calcolo, e può quindi distribuire i risultati del suo calcolo indietro ai suoi vicini. È iterativo perché questo processo continua finchè non viene più scambiata alcuna informazione tra i vicini.

5.2 PROTOCOLLI INTERNET Il protcollo di rete internet è chiamato IP (internet protocol). Oggi si usano 2 versioni del protocollo IP la versione più usata è la IPv4. INDIRIZZAMENTO: IPv4 Tipicamente un host ha un solo link nella rete. Quando l’IP in un host vuole spedire un datagram, lo fa su questo link. Il confine tra l’host e link fisico è chiamato interfaccia. Il lavoro di un rputer è quello di ricevere un datagram da un link in ingresso e di rilanciarlo su qualche link in “uscita”, un router deve necessariamente essere collegato a due o più link. Il confine fra il rputer e ciascuno dei suoi link e anch’esso chiamato interfaccia. Poiché ciascun host e router è in grado di spedire e ricevere datagram IP, il protocollo Internet richiede che ciascuna interfaccia abbia un indirizzo IP è tecnicamente associato ad un’interfaccia piuttosto che all’host o al router che contiene quell’interfaccia. Ciascun indirizzo IP è lungo 32 bit, e ci sono in totale 232 possibili indirizzi IP, essi sono scritti nella notazione puntale decimale. Ciascuna interfaccia di ciascun host e router nella globalità di Internet deve avere un indirizzo che è globalmente unico. Il fatto che un indirizzo IP debba essere lungo esattamente uno, 2 o 3 byte diventa problematico per il crescente numero delle società con reti di piccole e medie dimensioni. COME OTTENERE UN INDIRIZZO Di rete: P er ottenere un blocco di indirizzi IP da utilizzare all’interno della rete di un organizzazione, un amministratore di rete deve prima contattare il suo ISP, che può fornire gli indirizzi estraendoli da un gruppo di indirizzi più grande che è stato già a lui assegnato. Di terminale: Ci sono due modi in cui a un host può essere assegnato un indirizzo IP:

• Configurazione manuale: Un amministratore di sistema configura manualmente l’indirizzo IP nell’host (tipicamente un file).

• Dynamic Host Configuration Protocol (DHCP). DHCP permette a un host di ottenere un indirizzo IP automaticamente, e anche di avere informazioni aggiuntive, come l’indirizzo del suo router di default e l’indirizzo del suo router di default e l’indirizzo del suo server DNS.

TRASPORTO DI UN DATAGRAM DA SORG. A DEST: INDIRIZ, INSTRADAMENTO E RILANCIO Il datagramma rimane immodificato, nel viaggio da sorgente a destinazione, gli unici campi di interesse sono quelli di indirizzamento. Se ad es A deve inviare un datagramma IP a B:

- A consulta la sua tabella di forwarding cercando l’indirizzo di rete B; - Trova che B è sulla stessa rete di A; - Il livello link invierà il datagramma direttamente a B all’interno di un frame di livello link - B e A sono connessi in maniera diretta.

Se invece l’host A vuole inviare un datagram ad un altro host E che appartiene ad una rete diversa:

- L’host A consulta ancora la sua tabella di rilancio IP e trova una voce in accordo con i bit principalei dell’indirizzo IP dell’host E.

- La tabella di instradamento dice ad A che esso per inviare il datagram ad E deve prima inviarlo ad un altro indirizzo (l’interfaccia del router a cui è collegata direttamente l’interfaccia di A).

26

- Sebbene il datagram venga spedito all’interfaccia del ruoter il suo indirizzo di destinazione rimane quello dell’ultima destinazione (host E).

- Il datagram è ore nel router, ed è compito del router inoltrare il datagram alla sua destinazione finale.

Dunque le tabelle di rilancio nei router hanno un ruolo centrale nell’instradamento dei datagram attraverso Internet. Mentre gli algoritmi di instradamento hanno il compito di configurare e conservare le tabelle di rilancio. FRAMMENTAZIONE E RIASSEMBLAMENTO DEL DATAGRAM IP Non tutti i protocolli dello strato di collegamento possono trasportare pacchetti della stessa dimensione. I link di rete infatti hanno un limite sulla max dimensione del pacchetto trasferibile MTU (unità massima trasferita). La soluzione di questo problema è “frammentare” i dati del datagram IP in due o più datagram IP di dimensione inferiori, e quindi spedire questi datagram più piccoli sopra il link in uscita. A ciascuno di questi datagram più piccoli ci si riferisce come a un frammento. Il “riassemblamento” è effettuato solo alla destinazione finale. L’intestazione IP è usata per identificare e ordinare frammenti correlati. DHCP: Dynamic Host Configuration Protocol Esso dà la possibilità agli host di ottenere dinamicamente un indirizo IP da un server di rete quando questi si uniscono alla rete. L’assegnazione dell’indirizzo IP avviene in 4 fasi: - l’host manda in broadcast un msg di “DHCP discover” - il server DHCP risponde con un messaggio “DHCP offer” - l’host richiede indirizzo IP: msg “DHCP request” - il server DHCP risponde al messaggio di richiesta con un messaggio “DHCP ack”.

NAT: Network Address Translators È un approccio più semplice di allocazione degli indirizzi sempre più diffuso: la traduzione degli indirizzi di rete. Il router che opera secondo NAT non comunica con il router dell’ISP a cui è attaccato mediante un protocollo di instradamento inter-AS; invece il router NAT si comporta per il mondo esterno come un singolo dispositivo con un singolo indirizzo IP. In sostanza il router NAT sta nascondendo i dettagli della rete domestica al mondo esterno. Il router riesce a conoscere il terminale interno a cui deve rilanciare un certo datagram grazie a una tabella di traduzione NAT nel router NAT e d includere nelle voci della tabella i numeri di porta oltre agli indirizzi IP. Instradamento intra-sistema autonomo in Internet: RIP e OSPF Un protocollo di instradamento intra-AS è usato per configurare e mantenere le tabelle di instradamento all’interno di un sistema autonomo (AS). RIP: Routine Information Protocol Il RIP è stato uno dei primi protocolli di Internet per l’instrdamento intra-AS ed è ancora molto usato oggi. Esso è un protocollo distance vector, esso usa il conteggio degli hop come metrica di costo; cioè ciascun link ha costo 1. il massimo costo di un percorso è 15 limitando cosi l’uso del RIP ai sistemi autonomi che hanno un diametro inferiore a 15 hop.

27

OSPF: Open Shortest Path First Come il RIP questo instradamento è usato per l’instradamento intra-AS . “Open” in OSPF indica che le specifiche del protocollo di instradamento sono disponibili al pubblico. Esso era concepito come successore del RIP e come tale ha molte caratteristiche avanzate. Con OSPF un router costruisce una mappa topologica completa (grafo orientato) dell’intero sistema autonomo. Il router quindi mette in funzione localmente l’algoritmo di Dijstra per il percorso di costo minimo per determinare l’albero dei percorsi più corti verso tutte le reti. La tabella di rilancio del ruoter è ricavata da questo albero dei percorsi più brevi. BGP: Border Gateway Protocol Esso è a tutti gli effetti il protocollo standard per l’instradamento inter-dominio nell’internet attuale. Come protocollo di instradamento inter-sistema autonomo, esso fornisce l’instradamento fra sistemi autonomi. Esso è un protocollo path vector (vettore di percorsi) perché i router BGP si scambiano informazioni dettagliate sui percorsi piuttosto che informazioni sui costi. Perché si usano diversi protocolli di instradamento Inter-AS e Intra-AS? Per diversi obiettivi:

• Politica: Inter si concentra con aspetti politici quale provider scegliere o evitare. Intra si applica in una singola organizzazione cui si applica stessa politica.

• Dimensioni: si realizza un routine gerarchico e si diminuisce il traffico per aggiornare le tavole di routing.

• Prestazioni: Intra si concentra su prestazioni; Inter è difficile propagare informazioni su costi; inoltre aspetti politici prevalgono.

PORTE IN INGRESSO E PORTE IN USCITA La porta di ingresso svolge diverse funzioni. Svolge la funzione dello strato fisico di terminare un link fisico in ingresso al router , svolge la funzione dello strato di collegamento, di ricerca e di rilancio fondamentale per la funzione di commutazione dei router. All’interno di un router più porte sono spesso su una singola line card. La scelta della porta di uscita è effettuata usando le informazioni contenute nella tabella di rilancio. Le porta di uscita immagazzina i pacchetti che le sono stati rilanciati attraverso il dispositivo di commutazione, e poi li trasmette sul link in uscita. La porta di uscita compie quindi all’inverso le funzionalità dello strato di collegamento e dello strato fisico rispetto alla porta di ingresso. DOVE SI VERIFICA L’ACCODAMENTO Il punto reale in cui si perdono i pacchetti alle code sia alla porta d’ingresso sia alla porta di uscita dipenderà dal carico di traffico e dalle velocità relative del dispositivo di commutazione e della linea. Una conseguenza dell’accodamento alla porta di uscita è che lo scheduler di pacchetto di questa porta, fra i pacchetti accodati deve sceglierne uno per la trasmissione. Lo scheduler ha un ruolo fondamentale nel fornire garanzie di qualità del servizio. Analogamente se non c’è abbastanza memoria per un pacchetto entrante, si deve decidere se scartare il pacchetto in arrivo (perdita di coda) o rimuovere uno o più pacchetti già memorizzati nella coda per fare spazio. IPv6 È sto introdotto inizialmente perché lo spazio di indirizzamento a 32-bit sarà completamente utilizzato entro il 2008. Inoltre il formato dell’header contribuisce nel processamento e nel forwarding del pacchetto; l’header può facilitare politiche di QoS. Per quanto riguarda il formato

28

del datagramma l’header di lunghezza fissata a 40 byte, e non è concessa frammentazione. Le opzioni sono più semplificate. Il metodo più immediato di introdurre i nodi IPv6 compatibili è l’approccio dual-stack in cui i nodi IPv6 hanno anche una completa implementazione IPv4. questo nodo può inviare e ricecere entrambi i protocolli. Un’alternativa al dual-stack è il tunneling : es due nodi IPv6 vogliono interoperare usando un datagram IPv6 ma che sono legati tra loro attraverso l’intervento di router IPv4. Il nodo IPv6 dal lato che spedisce del tunnel prende l’intero datagram IPv6 e lo inserisce nel campo dati di un datagram IPv4, questo datagram IPv4 è quindi indirizzato al nodo IPv6 del lato ricevente del tunnel e inviato al primo nodo del tunnel. Mobilità in IP Mobile IP è uno standard flessibile, che supporta molti diversi modi di funzionamento, per esempio con o senza un foreign agent (entità della rete “straniera che realizza le funzioni mobilità per conto del mobile), molti modi per gli agent e i nodi mobili per scoprirsi a vicenda. Lo standard mobile comprende consiste in tre componenti principali:

- scoperta degli agent - registrazione presso l’home agent - instradamento indiretto dei datagram.

29

Capitolo 6: LO STRATO DI TRASPORTO

6.1 Servizi dello strato di trasporto Un protocollo dello strato di trasporto fornisce una comunicazione logica fra i processi applicativi che funzionano su host differenti, in altre parola dal punto di vista dell’applicazione è come se i terminali su cui girano i processi fossero direttamente connessi, in realtà i terminali possono trovarsi agli estremi opposti della terra ed essere connessi attraverso numerosi router e diversi tipi di link. Lo strato di trasporto è collocato nella pila protocollare sopra quello di rete. Mentre un protocollo dello strato di trasporto fornisce una comunicazione logica tra i processi che funzionano su differenti host; un protocollo dello strato di rete fornisce la comunicazione logica fra gli host. Il protocollo dello strato di trasporto “vive” nei terminali; all’interno di un terminale, un protocollo di trasporto muove i messaggi dal processo dello strato di applicazione all’estremità della rete (cioè lo strato di rete) e viceversa. Per quanto riguarda il lato mittente: esso divide le applicazioni in segmenti e li passa al livello rete. Dal lato ricevente: ma esso non interviene si come i messaggi sono spostati nella sezione interna della rete. I router intermedi né agiscono su, né riconoscono, qualsiasi informazione che lo strato di trasporto può aver agganciato ai messaggi dell’applicazione. Panoramica dello strato di trasporto in Internet Internet o più in generale una rete TCP/IP , rende disponibili due distinti protocolli dello strato di trasporto allo strato di applicazione UDP e TCP. L’UDP (User Datagram Protocol), fornisce alle applicazioni che a esso si appoggiano un servizio inaffidabile, senza conessione. Il TCP (Transmission Control Protocol), fornisce alle applicazioni un servizio affidabile orientato alla connessione. Nel progettare un’applicazione di rete il progettista deve specificare uno di questi due protocolli. Il protocollo dello strato di rete di Internet: si chiama protocollo di Internet (IP, Internet Protocol). L’IP fornisce la comunicazione logica fra gli host. Il modello di servizio di IP è un servizio best effort (“miglior sforzo”), significa che IP “fa del suo meglio” per consegnare i segmenti tra i due host in comunicazione, ma non dà garanzie. In particolare non garantisce la consegna dei segmenti, l’ordine di consegna e l’integrità dei dati nei segmenti, per questi motivi si dice che IP è un servizio inaffidabile. La maggiore responsabilità di UDP e TCP è di estendere il servizio di spedizione di IP fra due terminali al servizio di spedizione fra due processi che funzionano sui terminali. L’estensione della spedizione da host ad host alla spedizione da processo a processo è detta multiplexing e demultiplexing dello strato di trasporto. Il TCP converte dunque il servizio inaffidabile IP fra due terminali in un servizio affidabile di trasferimento dei dati fra processi. Il TCP usa anche il controllo della congestione, che previene la saturazione da parte di qualsiasi connessione TCP, con un traffico eccessivo dei link e dei commutatori situati fra gli host comunicanti, questo si ottiene regolando la velocità a cui i lati dei TCP che spediscono possono inviare il traffico nella rete. Il traffico UDP, d’altra parte non è regolabile. Un’applicazione che usa il trasporto UDP può spedire a qualsiasi velocità, per tutto il tempo che vuole.

30

6.2 Multiplexing e Demultiplexing Il lavoro di recapitare i dati di un segmento dello strato di trasporto al corretto socket (una porta attraverso la quale i dati passano dalla rete al processo, e attraverso la quale i dati passano dal processo alla rete). è chiamato multiplexing. Il lavoro di ottenere i dati dall’host sorgente dai diversi socket, completare i dati con le informazioni di intestazione per creare segmenti e di passare i segmenti allo strato di rete è detto multiplexing. La multiplazione allo strato di trasporto richiede che i socket abbiano identificatori unici e che ogni segmento abbia speciali campi che indicano il socket al quale il segmento deve essere consegnato. Questi campi speciali sono il campo numero di porta sorgente e il campo numero di porta di destinazione. Ciascun numero di porta è a 16 bit e va da 0 a 65535. I numeri di porta che vanno da 0 a 1023 sono chiamati numeri di porta ben conosciuti e sono riservati. Quando progettiamo una nuova applicazione dobbiamo assegnare un numero di porta all’applicazione stessa. Multiplazione e Demultiplazione senza connessione In questo caso l’applicazione assegna un numero di socket specifico al socket UDP. Se il programmatore che scrive il codice sta realizzando il lato server di un protocollo ben noto allora il programmatore deve assegnare il corrispondente numero ben noto di porta. Multiplazione e Demultiplazione con conessione Una sottile differenza tra un socket TCP e un socket UDP; è che un socket TCP è identificato da una 4-upla (indirizzo IP di sorgente, numero di porta sorgente, indirizzo IP di destinazione, numero di porta di destinazione. L’host ricevente usa tutti e 4 i valori per dirigere il segmento al socket appropriato. L’host server può supportare molti socket TCP contemporanei: ogni socket è identificato da una tupla a 4 campi. 6.3 Trasporto senza connessione: UDP L’UDP prende i messaggi dal processo dell’applicazione, aggiunge i campi con i numeri di porta sorgente e destinazione per il servizio di mux demux , aggiunge altri due piccoli campi e passa il segmento che ne risulta allo strato di rete. Lo strato di rete incapsula i segmenti in un datagram IP e quindi tenta in modalità best effort di consegnare il segmento all’host di destinazione. Con l’UDP, prima della spedizione del segmento, non c’è handshake (stretta di mano) fra le entità dello strato di trasporto che spediscono e ricevono. Per questo si dice che l’UDP è senza connessione. Il DNS è un esempio di un protocollo dello strato di applicazione che usa l’UDP. Utilizzi E-mail, accesso a terminali remoti, Web e trasferimento dei file funzionano su TCP perché hanno necessità di trasferimento affidabile dei dati del TCP. L’UDP è usato per l’aggiornamento delle tabelle di instradamento del RIP, perché l’aggiornamento è inviato periodicamente così che un aggiornamento perso è sostituito da quello più recente. L’UDP è preferito al TCP per i dati di gestione della rete , perché le applicazioni di gestione della rete devono funzionare spesso con la rete in stato di sovraccarico:esattamente quando è difficile ottenere un trasferimento dei dati affidabile con un controllo della congestione. L’UDP è oggi usato anche per le applicazioni multimediali, come la telefonia Internet, video conferenze in tempo reale, e per lo streaming di file audio e video in memoria.

31

UDP Checksum Esso effettua il rilevamento degli errori. La checksum è usata per determinare sei i bit nel segmento UDP sono stati alterati (da rumore dei link, o mentre erano mem. in un router) nel loro percorso dalla sorgente alla destinazione. UDP dal lato del mittente effettua il complemento a 1 della somma di tutte le parole a 16 bit del segmento. Al ricevente arrivano tutte le parole a 16 bit, inclusa la checksum. Se nel pacchetto non sono stati introdotti errori la somma al ricevente deve essere tutti 1, se uno dei bit è a 0, abbiamo la conferma che nel pacchetto sono stati introdotti degli errori. Trasferimento affidabile dei dati Il TCP è un protocollo di trasferimento affidabile dei dati che è implementato sopra uno strato di rete (IP) inaffidabile da terminale a terminale. Le caratteristiche di un canale inaffidabile determinano la complessità di implementazione di un protocollo affidabile dei dati (rdt: reliable data transfer). Rdt 1.0 È un esempio di protocollo per il trasferimento affidabile dei dati su un canale completamente affidabile. Esso è costituito da una macchina a stati finiti per il mittente (sender) e una per il destinatario (receiver), esse sono separate ed hanno uno stato ciascuna quindi la transizione è necessariamente da uno stato a se stesso. In questo semplice protocollo non c’è distinzione fra unità dati e pacchetto, essendo perfettamente affidabile non c’è necessità per il receiver di fornire alcun feedback (risposta) al sender perché nulla può essere sbagliato. Rdt 2.0: trasferimento affidabile dei dati su un canale con errori sui bit.

- Un modello più realistico del canale sottostante la trasmissione è uno in cui i bit in un pacchetto possono essere alterati. In un tipico scenario chi riceve il messaggio in maniera chiara potrebbe dire “Ok” mentre se sente una frase distorta potrebbe chiedere di ripetere la frase. Questo protocollo di dettatura del messaggio usa sia un riscontro negativo (“per favore ripeti”) e uno positivo (“OK”).

Il protocollo rdt2.0 sembra funzionare, ma non valuta la possibilità che i pacchetti ACK o NAK possano essere alterati e problema ancora più complicato è di come il prtocollo potrebbe trovare gli errori nei pacchetti ACK o NAK, Occorre aggiungere un numero di bit alla checksum in modo che il receiver riesce sia a rilevare che a correggere il problema. Un altro problema è quello della duplicazione dei pacchetti. In questo caso una soluzione è aggiungere un nuovo campo al pacchetto dati e di numerare i pacchetti con un numero di spedizione inserendo questo numero di sequenza. Il protocollo rdt2.1 usa invece riscontri sia positivi che negativi dal receiver al sender. rdt3.0: Trasferimento affidabile dei dati su un canale con perdite e con errori sui bit In questo caso oltre all’alterazione dei bit, il canale sottostante può anche perdere i pacchetti quindi le difficoltà sono: come rilevare la perdita dei pacchetti e cosa fare quando si perdono i pacchetti. Per il secondo problema si utilizzano le tecniche usate in rdt2.2 (checksum, pacchetti ACK e ritrasmissione). Per il primo problema si adotta che il sender scelga con giudizio un valore del tempo tale che faccia supporre, anche se non lo garantisce che il pacchetto sia andato perso; se entro questo tempo non è ricevuto un ACK il pacchetto viene ritrasmesso.

32

6.4 Protocolli Pipeline Il protocollo rdt3.0 funzionalmente è corretto ma difficilmente riesce a soddisfare le reti ad alta velocità. Il problema fondamentale dell’rdt3.0 è che esso è un protocollo stop-and-wait . Esempio: consideriamo 2 terminali che si trovano uno rispetto all’altro sulla costa opposta degli USA e che: - RTT: ritardo di propagazione (roun trip) = 30 ms - R= velocita di trasmissione del canale = 1 Gbit/s (109 bit al sec) - Pacchetto di dimensioni, L= 1000 bytu (8000 bit) x pacchetto Dunque il tempo reale richiesto per trasmettere il pacchetto sul link da 1 Gbit/s è:

Ttras = L/R

Mentre definiamo l’utilizzazione del sender (o del canale) come la frazione di tempo in cui il sender è davvero occupato a spedire bit attraverso il canale

Usender = RLRTT

RL/

/*3+

= 8 microsec.

- Da quest analisi risulta una capacità effettiva (throughput) di soli 267 kbit/s sebbene

fosse disponibile una capacità di 1 Gbit/s, inoltre sono stati trascurati sia il tempo di elaborazione del protocollo dello strato inferiore sia al sender che al receiver e i ritardi di elaborazione e di coda dei router intermedi. La soluzione a questo problema è invece di operare in modo stop and wait, al sender si consente l’invio di più pacchetti senza che debba aspettare riscontri. In questo modo l’utilizzazione del sender viene triplicata. Poiché i molti pacchetti in transito tra sender e receiver possono essere visualizzati come se riempissero una conduttura (pipeline) quest tecnica e nota come pipelining.

Per quanto riguarda la riparazione degli errori si possono identificare due approcci:

- Go-Back-N - Ripetizione selettiva -

GO BACK N

In questo tipo di protocollo, il sender può trasmettere pacchetti multipli senza aspettare il riscontro, ma è costretto ad avere non più di un certo numero massimo consentito di pacchetti non riscontrati N nella pipeline. La gamma permessa dei numeri di sequenza per i pacchetti trasmessi ma non ancora riscontrati può essere considerata una finestra di dimensione N che si apre su una gamma di numeri di sequenza. Con il protocollo in funzione, questa finestra scorre in avanti sullo spazio dei numeri di sequenza. Per questo motivo, ci si riferisce spesso a N come alla dimensione della finestra e al protocollo GBN come al protocollo a finestra scorrevole.

33

RIPETIZIONE SELETTIVA

Ma anche il GBN potrebbe avere dei problemi di prestazioni, in particolare quando la dimensione della finestra e il prodotto ritardo-larghezza di banda sono entrambi grandi, nelle pipeline possono trovarsi molti pacchetti. Un singolo errore di pacchetto può allora costringere il GBN a ritrasmettere un grande numero di pacchetti molti dei quali potrebbero non essere necessari. I protocolli a ripetizione selettiva evitano le ritrasmissioni non necessarie grazie alla rispedizione di quei soli pacchetti che si sospetta siano giunti al receiver con errori. Per quanto riguarda la dimensione della finestra: essa deve essere inferiore o uguale alla metà delle dimensioni dello spazio dei numeri di sequenza per i protocolli SR.

6.5 TRASPORTO ORIENTATO ALLA CONNESSIONE: La connessione TCP

Il TCP è orientato alla connessione perché prima che un processo applicativo possa cominciare a spedire dati a un altro, i due processi devono scambiarsi un handshake; cioè essi devono prima inviarsi alcuni segmenti preliminari per stabilire i parametri del successivo trasferimento di dati. Per stabilire la connessione TCP, entrambi i lati della connessione inizializzano molte “variabili di stato” di TCP. Il protocollo TCP funziona solo nei terminali e non negli elementi intermedi della rete (router, bridge), questi elementi non mantengono lo stato della connessione TCP. Una connessione di questo tipo fornisce un trasferimento dei dati full duplex, cioè consente ai dati di viaggiare contemporaneamente nelle due direzioni. Una TCP è anche sempre point- to-point, cioè fra un singolo sender e un singolo receiver. Con il TCP il “multicasting “ ossia il trasferimento di dati da un sender a più receiver in una singola operazione è impossibile, due host infatti sono una compagnia e tre sono una folla. Per quanto riguarda il fatto di come viene stabilita una connessione: il client invia dapprima uno speciale segmento TCP; il server risponde con un secondo segmento speciale TCP; e alla fine il client risponde ancora con un terzo segmento speciale. I primi due segmenti non contengono “carico utile” (payload), vale a dire nessun dato dello strato di applicazione; il terzo di questi segmenti può trasportare carico utile. Poiché tre segmenti sono scambiati tra i due host, questa procedura viene detta handshake a tre vie. La quantità massima di dati che può essere prelevata e inserita in segmenti è limitata dalla dimensione massima del segmento (Maximum Segment Size). Il valore di MSS dipende dall’implemetazione del TCP determinata dal sistema operativo e spesso può essere configurato. Da notare che l’MSS è la massima quantità di dati del livello dell’applicazione nel segmento, non la massima dimensione del segmento TCP. STRUTTURA DEL SEGMENTO TCP Esso consiste in campi di intestazione e di un campo dati. Il canmpo dati contiene una parte dei dati dell’applicazione. L’intestazione comprende numeri di porta sorgente e di destinazione, che sono usati per il multiplexing/demultiplexing dei dati da/verso le applicazioni dello strato superore, inoltre come l’UDP comprende un campo checksum.

34

Stima del tempo di round trip e timeout TCP usa un meccanismo di timeout/ritrasmissione per recuperare perdite dei pacchetti. Consideriamo la stima del round-trip time fra sender e receiver: L’RTT campione (SampleRTT) per un segmento è il tempo richiesto dal momento della spedizione del segmento al momento in cui si riceve un riscontro per il segmento stesso. Per poter stimare un valore per l’RTT bisogna fare una media (EstimatedRTT) dei valori di SampleRTT. TRASFERIMENTO AFFIDABILE DEI DATI Il servizio internet dello strato di rete (servizio IP) è inaffidabile, non garantisce né la consegna dei datagram , né il loro ordine e nemmeno l’integrità dei dati contenuti. Il TCP crea invece un servizio di trasferimento affidabile dei dati sopra al servizio inaffidabile best effort fornito da IP. Esso assicura che il flusso di dati che un processo estrae per la lettura dal suo buffer TCP non è alterato e privo di buchi e di duplicazioni e nella giusta sequenza. le procedure di gestione dei timer TCP usano un unico timer di ritrasmissione, ACKs cumulativi, segmenti in pipeline. Le ritrasmissioni sono causate da:

- eventi di timeout - acks duplicati.

RITRASMISSIONE VELOCE Uno dei problemi delle ritrasmissioni innescate da timeout è che proprio il periodo di timeout è spesso lungo. Quando viene perso un segmento il timeout (lungo) costringe il mittente ad aspettare a lungo prima di rimandare il pacchetto perso aumentando quindi il ritardo. Il mittente però può rilevare la perdita di un pacchetto molto prima che si verifichi il timeout notando gli ACK duplicati; ossia Nel caso in cui siano ricevuti tre duplicati ACK, il TCP esegue una ritrasmissione veloce, ritrasmettendo il segmento mancante prima che il timer di quel segmento scada. TCP somiglia al go-back-N, ma esso trasmette un solo pacchetto alla volta e non pacchetti successivi. Se combinato con la ritrasmissione selettiva, il TCP somiglia al protocollo Selective Repeat. Quindi il meccanismo di recupero di errore di TCP può essere classificato come un ibrido dei protocolli Go-Back-N e ripetizione selettiva. CONTROLLO DI FLUSSO Il TCP fornisce alle sue applicazioni un servizio di controllo di flusso, per eliminare la possibilità che il sender saturi il buffer del receiver. Il controllo del flusso è quindi un servizio di adattamento delle velocità a cui il sender sta inviando i dati a quella con cui l’applicazione ricevente sta leggendoli. Il TCP fornisce il controllo del flusso attraverso il mantenimento nel sender di una variabile detta finestra di ricezione (Fig. 3.37) (receive window). Essa è usata per dare al sender un’idea di quanto spazio è disponibile nel buffer del receiver. La finestra di ricezione è dinamica cioè essa varia durante il tempo di connessione.

35

6.6 CONTROLLO DELLA CONGESTIONE: le cause e i costi Consideriamo 3 scenari di complessità crescente in cui si verfica la congestione:

1. Due sender, un router con buffer infinito: consideriamo due host (A e B) ciascuno con una connessione che condivide un singolo hop (salto di, router) fra sorgente e destinazione . Assumiamo che stia passando dati al protocollo dello strato di trasporto attraverso un socket a una velocità media di λin byte/s. I dati sono incapsulati e spediti e non viene eseguito alcun recupero di errori (es ritrasmissione). L’host B opera in modo simile e per semplicità assumiamo che esso stia inviando dati alla velocità di λin byte/s. Il throughput per la connessione ( numero di bit al secondo al receiver) è R/2, questo limite superiore è una conseguenza della capacità del link fra le due connessioni , Quando la velocità supera R/2 il numero medio in coda nel router diventa illimitato e il ritardo medio tra sorgente e destinazione diventa infinito. Il costo della congestione della rete in questo caso è che ci si devono aspettare grandi ritardi di coda quando la velocità di arrivo dei pacchetti è prossima alla capacità del link.

2. Due sender, un router con buffer finito: Siccome il buffer è finito i pacchetti saranno scartati quando raggiungono un buffer già pieno. Inoltre assumiamo che ciascuna connessione sia affidabile. Le prestazioni dipenderanno da come è compiuta la ritrasmissione. Consideriamo λ’in =0.5R (velocità di trasmissione dei dati originali più le ritrasmissioni) si vede un altro costo della congestione: il sender deve eseguire ritrasmissioni per compensare i pacchetti scartati a causa del sovraccarico del buffer. Infine consideriamo il caso in cui il timeout del sender scada prematuramente e il sender ritrasmetta un pacchetto che è stato ritardato dalla coda, ma che non è ancora perso. Allora un altro costo è dato dal fatto che le ritrasmissioni non necessarie da parte del sender a fronte di grandi ritardi, possono costringere il router a usare la larghezza di banda del suo link per inoltre copie non necessarie di un pacchetto.

3. Quattro sender, router con buffer finito e percorsi a salti multipli In questo caso il costo è dovuto alla congestione è dato: che quando un pacchetto è perso lungo un percorso, la capacità di trasmissione che è stata usata in ciascuno dei router a monte per inoltrare quel pacchetto al punto in cui si è perso è stata sprecata. APPROCCI AL CONTROLLO DELLA CONGESTIONE

• Controllo della congestione end-end: Lo strato di rete non fornisce alcun supporto esplicito allo strato di trasporto per il controllo della congestione. La presenza della congestione della rete deve essere dedotta dai terminali basandosi sull’osservazione del comportamento della rete (perdita pacchetti e ritardi). Il TCP deve necessariamente adottare questo approccio perché lo strato IP non fornisce alcun feedback relativo alla congestione della rete ai terminali.

• Controllo della congestione assistito dalla rete: I router (componenti dello strato di rete) forniscono al sender un feedback esplicito relativo allo stato di congestione nella rete. Questo approccio è stato recentemente proposto per le reti TCP/IP, esso è usato per il controllo della congestione nell’ Available Bit-Rate dell’ATM.

36

CONTROLLO DELLA CONGESTIONE DEL TCP Il TCP uso il controllo della congestione end-end invece di quello assistito dalla rete, poiché lo strato di IP nono fornisce ai terminali alcun feedback esplicito circa la congestione della rete. L’approccio seguito da TCP è da fare sì che ogni mittente limiti il ritmo a cui immette traffico nella sua connessione in funzione della congestione in rete percepita. Il meccanismo di controllo della congestione del TCP da entrambe i lati della connessione deve tener traccia di un’altra variabile: la finestra di congestione (CongWin) impone una limitazione alla quantità di traffico che un host può inviare in una connessione; L’algoritmo che un sender TCP usa per regolare il suo ritmo di invio in funzione della congestione percepita è detto algoritmo di controllo della congestione di TCP. Esso ha tre componenti principali:

1) incremento additivo; 2) partenza lenta (slow start), decremento moltiplicativo; 3) reazione a eventi di timeout.

L’idea alla base del controllo della congestione di TCP è quella di far ridurre al mittente il suo ritmo di invio, diminuendo la dimensione della sua finestra di congestione CongWin quando si verifica un evento di perdita. Il decremento moltiplicativo dimezza il valore attuale di CongWin dopo un evento di perdita. Mentre quando non si verificano eventi di perdita è naturale che il TCP aumenti il suo ritmo di invio perché è probabile che sia della banda libera e quindi non sfruttata.

1) Quindi un mittente TCP incrementa additivamente il suo ritmo di invio quando percepisce che nel percorso non c’è congestione, e decrementa moltiplicativamente il suo ritmo di invio quando capisce che il percorso è congestionato.

2) Partenza lenta: il mittente TCP continua ad aumentare il suo ritmo di invio a velocità esponenziale fino a quando non si verifica un evento di perdita, e quindi CongWin viene dimezzato e cresce linearmente. Questa fase iniziale è chiamata partenza lenta, e il mittente TCP inizia trasmettendo a un ritmo lento (partenza lenta) ma aumenta il proprio ritmo di invio a velocità esponenziale.

3) Dopo un evento di timeout, il mittente TCP entra in una fase di partenza lenta: Il TCP gestisce queste dinamiche mediante una variabile Threshold (soglia) che determina la dimensione della finestra alla quale deve terminare la partenza lenta e cominciare la prevenzione della congestione.

TCP FAIRNESS Consideriamo K connessioni TCP, ciascuna con un diverso percorso, ma passanti tutte attraverso un link collo di bottiglia con ritmo di trasmissione pari a R bit/s. Un meccanismo di controllo della congestione è detto fair (equo) se il ritmo di trasmissione medio di ogni connessione è pari a R/K, cioè ogni connessione ottiene un’uguale porzione della banda del link.

37

MODELLAZIONE DEL RITARDO DI TCP

- Definiamo la latenza, il tempo da quando il client inizia una connessione TCP a quando riceve l’oggetto richiesto nella sua interezza. Per semplicità assumiamo che nella rete non ci sia congestione, cioè che la connessione TCP che trasporta l’oggetto non debba spartire la larghezza di banda del link con altro traffico TCP o UDP.

Nel caso in cui non esiste limitazione della finestra di congestione la latenza totale è di 2 RTT + O/R, ma la procedura di partenza lenta (slow start) con la sua finestra dinamica prolunga questa latenza. FINESTRA STATICA DI CONGESTIONE Consideriamo il caso di una finestra statica di congestione. Poniamo W positivo intero che denota la dimensione fissa di una finestra statica di congestione. Per la finestra statica di congestione al server non è permesso avere più di W segmenti in attesa di riscontro. Bisogna considerare due casi:

1) WS/R>RTT+S/R: in questo caso, il server riceve un riscontro per il primo segmento nella prima finestra prima di aver completato l’invio della prima finestra. Quindi da quando il server comincia a trasmettere segmenti al tasso R, continua a farlo finchè è trasmesso l’intero oggetto. La latenza è: 2 RTT+O/R.

2) WS/R<

3) RTT+S/R : il server trasmette i segmenti nella prima finestra prima di ricevere il riscontro

per il primo segmento nella finestra. La latenza è: 2RTT+O/R+(K-1)*[S/R+RTT-WS/R]. Se combiniamo i due casi otteniamo:

Latenza = 2RTT+O/R+(K-1)*[S/R+RTT-WS/R]+

Dove il ritardo ha 3 componenti: 2RTT: per instaurare la connessione TCP e richiedere di iniziare a ricevere l’oggetto; O/R: il tempo necessario al server per trasmettere l’oggetto (K-1)*[S/R+RTT-WS/R]+ : per la quantità di tempo in cui il server è in stallo.

FINESTRA DINAMICA DI CONGESTIONE Il server inizia prima con una finestra di congestione di un segmento e invia un segmento al client. Quando riceve un riscontro per il segmento, aumenta la sua finestra di congestione a due segmenti e li invia al client . Appena riceve il riscontro per i due segmenti, aumenta la finestra di congestione a quattro segmenti e spedisce i 4 segmenti al client. Il processo continua, con la finestra di congestione che si raddoppia a ogni RTT. Il numero di finestre che compongono l’oggetto è K che possiamo definire in termini di O/S (n° segmenti nell’oggetto):

K = min {k; 20 +21 +……..+ 2k-1≥ O/S} = [log2 (O/S+1)]

38

Capitolo 7: LO STRATO DI APPLICAZIONE

Un processo può essere pensato come un programma che gira all’interno di un terminale (host). I processi che girano sullo stesso terminale comunicano tra loro usando la comunicazione interprocesso. I processi su due diversi terminali comunicano tra di loro scambiandosi messaggi attraverso la rete di calcolatori. L’applicazione Web è costituita da molti componenti che comprendono gli standard per i formati dei documenti (html), i browser del web (Netscape, Explorer), i server del Web (Apache, Microsoft e Nescape). E un protocollo dello strato di applicazione http (Hypertext Transfer Protocol), che definisce come i messaggi vengono passati fra browser e server Web. Quindi http è solo una parte dell’applicazione Web. Il principale protocollo dello strato di applicazione per la posta elettronica è l’SMTP (Simple Mail Transfer Protocol) esso è solo però una parte dell’applicazione di posta elettronica. Un protocollo dello strato di applicazione definisce:

• I tipi di messaggi scambiati; • La sintesi dei vari tipi di messaggio; • La semantica dei campi; • Le regole per determinare quando e come un processo invia messaggi o risponde a

messaggi. Un’applicazione di rete ha tipicamente due lati lato client e lato server. Per esempio, un browser Web implementa il lato client dell’HTTP e un server Web implementa il lato server. Nella posta elettronica, il server che invia la posta implementa il lato client dell’STMP e il server ricevente ne implementa il lato server. In quasi tutte le applicazioni di rete lhost che inizia la sessione è etichettato come client. Un processo invia e riceve messaggi dalla rete attraverso il proprio socket. Il socket di un processo può essere immaginato come una porta reale. Esso costituisce l’interfaccia fra gli strati di applicazione e di trasporto all’interno di un host. All’interfaccia ci si riferisce anche come all’API (Application Programmers’ Interface), fra l’applicazione e la rete; poiche un socket è l’interfaccia di programmazione con cui le applicazioni di rete sono costruite in Internet. INDIRIZZAMENTO DEI PROCESSI Perché un processo su un host possa inviare messaggi a un processo su un altro host, il processo che trasmette deve identificare il processo ricevente. Per l’identificazione del processo ricevente occorre tipicamente specificare due tipi di informazione:

1) il nome o l’indirizzo della macchina host; 2) un identificatore che specifichi l’identità del processo ricevente sull’host di destinazione.

L’host di destinazione è specificato dall’indirizzo IP. Esso è una quantità di 32 bit che identifica in modo univoco il terminale (cioè identifica in modo unico l’interfaccia di rete che connette quell’host a Internet. Oltre a conoscere l’indirizzo del terminale a cui il messaggio è destinato, l’applicazione trasmittente deve anche specificare informazioni che permettano all’host ricevente di inviare il messaggio all’appropriato processo su quell’host. In Internet un numero di porta del lato ricevente assolve a questo scopo.

39

L’agente dell’utente è invece un’ interfaccia fra l’utente e le applicazioni di rete (es Nescape Navigator, Microsoft Internet Explorer). Alla domanda a che servizi può richiedere un’applicazione di rete a un protocollo di trasporto, si risponde che possiamo classificare i requisiti di servizio di un’applicazione in tre dimensioni:

- perdita dei dati; - larghezza di banda; - tempismo.

Alcune applicazioni come la post, trasferimento di file, accesso a host remoti richiedono un trasferimento affidabile dei dati cioè senza perdita. Altre invece sono perdite-tolleranti specie le applicazioni multimediali, audio, video possono tollerare qualche perdita dei dati. Per la larghezza di banda alcune applicazioni devono essere in grado di trasmettere i dati a una certa velocità per essere efficaci quindi sono banda-dipendente che richiedono un dato ammontare di banda. Mentre altre applicazioni elastiche possono fare uso di una larghezza di banda grande o piccola in funzione della sua disponibilità. Infine il tempismo (timing) riguarda applicazioni interattive in tempo reale, come la telefonia Internet, gli ambienti virtuali, teleconferenza e i giochi per essere efficaci richiedono una stretta limitazione dei tempi di spedizione dei dati. Per esempio molte di queste applicazioni richiedono che i ritardi end-to-end siano dell’ordine di poche centinaia di millisecondi o inferiori. SERVIZI FORNITI DAI PROTOCOLLI DI TRASPORTO INTERNET: TCP/UDP TCP comprende un servizio orientato alla connessione e un servizio di trasferimento affidabile dei dati. Esso però non garantisce una velocità minima di trasmissione dei dati, ossia a un processo trasmissivo non è permesso di trasmettere dati a qualsiasi velocità ma la velocità è regolata dal servizio di controllo della congestione del TCP, che forza il mittente a spedire ad una bassa velocità media. Inoltre il TCP non fornisce alcuna garanzia sul ritardo. In particolare quando un processo di spedizione passa dati nel socket, i dati arriveranno prima o poi al socket ricevente, ma il TCP non garantisce assolutamente alcun limite al tempo impiegato dai dati per arrivarci. UDP è senza connessione, quindi non c’è handshake prima che i due processi inizino a comunicare. Esso fornisce un servizio di trasferimento non affidabile, cioè non dà garanzie che il messaggio raggiungerà il socket ricevente. Inoltre i messaggi che arrivano al socket ricevente possono non arrivare in ordine. L’UDP non comprende un meccanismo di controllo della congestione così un processo che spedisce può pompare dati nel socket dell’UDP a qualsiasi velocità, poiché le applicazioni in tempo reale possono tollerare qualche perdita di dati ma richiedono il rispetto di una velocità minima, per queste applicazioni conviene usare UDP. IL WEB & HTTP La cosa che attrae maggiormente gli utenti web è che esso opera su richiesta. Gli utenti ricevono quello che vogliono, quando vogliono a differenza delle trasmissioni radio-televisive. È molto facile rendere disponibile qualunque informazione a costi molto ridotti. http (Hypertext Transfer Protocol) è il protocollo dello strato di applicaizione del Web, esso costituisce il cuore del Web. È definito nella RCF 1945, e RCF 2616. Esso è implentato in due programmi: un programma client e uno server, i quali sono eseguiti su due diversi terminali, parlano tra loro scambiandosi messaggi http. L’http definisce la struttura di questi messaggi e il modo in cui client e server se li scambiano. Una pagina web consiste di oggetti. Un oggetto è semplicemente un file (file HTML, immagine JPEG, GIF, audio clip ecc.) che è indirizzabile attraverso un singolo URL.

40

Un browser (interprete) è un agente dell’utente per il Web, esso mostra la pagina Web richiesta e fornisce molte caratteristiche di navigazione e configurazione. I browser del Web implementano anche il lato client dell’http. Un server Web memorizza gli oggetti Web ciascuno indirizzabile da un URL formata da host name e path name (es www.ciaoweb.it/somefig/pic.gif). L’HTTP definisce come i client Web (cioè i browser) richiedono le pagine Web dai server (cioè i server Web) e come i server trasferiscono le pagine Web ai client. Quando un utente richiede una pagina Web, il browser invia messaggi di richiesta all’http per gli oggetti nella pagina al server. Il server riceve la richiesta e risponde con messaggi di risposta http consententi gli oggetti. Un grande vantaggio dell’architettura a strati dell’HTTP è che non deve preoccuparsi dei dati persi, o dei dettagli sul modo in cui il TCP ritrova o riordina i dati entro la rete. Questo è compito del TCP e dei protocolli degli strati più bassi della pila protocollare. È importante notare che il server invia ai client file richiesti senza immagazzinare alcuna informazione di stato relativa al client, questo perhè un server http non conserva le informazioni relative ai client, l’http è detto protocollo senza stato (stateless protocol). I protocolli che mantengono informazioni sono complessi, se server o client si bloccano i loro stati possono essere inconsistenti. CONNESSIONE NON PERSISTENTE E PERSISTENTE L’http può impiegare sia la connessione non persistente sia quella persistente. L’http 1.0 usa la connessione non persistente, ossia su una connessione TCP è trasferito un singolo oggetto Web. HTTP 1.1 usa le connessioni non persistenti nella sua modalità di default. Con le connessioni persistenti non è necessario instaurare una nuova connessione per trasferire ogni oggetto Web; invece, durante il tempo di vita di una singola connessione si possono trasferire più oggetti Web. CONNESSIONE NON PERSISTENTE Supponiamo che l’utente richieda l’URL:

1) Il client http inizia la connessione TCP verso il server http situato a www.ciaoweb.it sulla porta 80;

2) Il client http invia request message (contenente l’URL) sul socket della connessione TCP. Il messaggio indica che il client vuole l’oggetto : someDep/home.index;

3) Il server http riceve il messaggio di richiesta attraverso il socket associato alla connession, trova l’oggetto richiesto nel sito in cui è immagazzinato, incapsula l’oggetto all’interno di un messaggio di risposta http e invia il messaggio di risposta al client attraverso il socket;

4) Il server http dice al TCP di concludere la connessione TCP ma questo non lo fa fino a quando non è certo che il client abbia ricevuto il messaggio di risposta intatto;

5) Il client http riceve il messaggio di risposta. La connessione TCP si conclude, il client estrae il file dal messaggio di risposta, analizza il file HTML (oggetto incapsulato) e trova i riferimenti agli oggetti. I primi 4 passi vengono ripetuti per ciascuno degli oggetti JPEG cui si fa riferimento.

Per fare un calcolo di stima sul tempo intercorrente dalla richiesta da parte di un client del file di base HTLM alla sua ricezione bisogna definire il tempo di percorso circolare RTT (Round-Trip Time) che è il tempo occorrente a un piccolo pacchetto per viaggiare dal client al server e ritornare al client. Esso comprende il ritardo di propagazione del pacchetto, il ritardo di coda nei router intermedi e nei commutatori e il ritardo di elaborazione del pacchetto.

41

CONNESSIONE PERSISTENTE Uno dei difetti delle connessioni persistenti è che per ogni oggetto richiesto deve essere stabilita e mantenuta una nuova connessione. Per ciascuna di queste connessioni devono essere allocati i buffer del TCP e le variabili del TCP devono essere conservate sia nel client che nel server. Questo potrebbe appesantire in odo serio il server che si troverebbe a smaltire simultaneamente le richieste di centinaia di server. Il secondo difetto delle connessioni non persistenti è che ciascun oggetto subisce due RTT uno per stabile la connessione, l’altro per richiedere e ricevere un oggetto. Esistono due versioni della connessione persistente:

- senza parallelismo (without pipelining) - con parallelismo (with pipelining)

Con la versione senza parallelismo il client emette una nuova richiesta solo quando la risposta precedente è stata ricevuta. Uno svantaggio però, è che dopo che il server ha spedito un oggetto sulla connessione TCP persistente, la connessione resta (senza scopo) in attesa dell’arrivo di un’altra richiesta e questo comporta spreco delle risorse del server. Quando si usa invece il parallelismo si impiega un solo RTT per tutti gli oggetti in riferimento, inoltre la connessione TCP con parallelismo resta in attesa per una frazione di tempo più piccola. FORMATO DEL MESSAGGIO HTTP La prima linea di un messaggio di richiesta http è detta linea di richiesta (request line); le linee seguenti sono linee di intestazione, poi c’è la linea vuota e il corpo dell’entità. La linea di richiesta ha tre campi: il campo metodo, il campo di URL e il campo versione dell’http. Il campo metodo può assumere valori: get, post e head. Il metodo get è usato quando il browser richiede un oggetto, con l’oggetto richiesto identificato nel campo URL. Il corpo dell’entità non è usato con il metodo get, ma viene usato il metodo post. Il cliente http usa il metodo post quando l’utente compila un form; es quando ricerca una parola su un motore di ricerca. Il messaggio di risposta è suddiviso in tre parti; una linea di stato , sei linee di intestazione e un corpo dell’identità. Il corpo dell’entità è il nucleo del messaggio contiene infatti l’oggetto richiesto. AUTORIZZAZIONE Molti siti richiedono agli utenti di fornire un username e password per poter accedere ai documenti archiviati sul server. A questi requisiti ci si riferisce come autorizzazione. La richiesta e la ricezione dell’autorizzazione avviene spesso usando speciali intestazioni e codici di stato dell’http. Il client prima invia un messaggio di richiesta ordinario senza alcuna linea di intestazione. Il server risponde con un corpo dell’entità vuoto e con un codice di stato 401 Authorization Required esso include anche l’intestazione WWW-Authenticate; che specifica come eseguire l’autenticazione. Il client (browser) riceve il messaggio di risposta e suggerisce all’utente di inserire username e password. Il client allora rispedisce il messaggio di richiesta, e questa volta include una line di intestazione Authorization che comprende username e password inseriti dall’utente.

42

COOKIE I cookie sono un meccanismo alternativo che i siti possono usare per tenere traccia degli utenti. La tecnologia dei cookie ha 4 componenti: 1) una linea cookie dell’header nel messaggio di risposta http; 2) una linea cookie dell’header nel messaggio di richiesta http; 3) un file cookie situato nel terminale dell’utente e gestito dal browser dell’utente; 4) un database di back-end nel sito Web. I cookie possono essere usati per autenticare un utente. La prima volta che un utente visita un sito, può fornire un identificativo di utente (eventualmente il suo nome). Il browser passa quindi al server un header cookie durante tutte le visite successive al sito, identificando quindi l’utente al server. I cookie anche se semplificano la pratica dello shopping elettronico, una loro combinazione e di informazioni bancarie fornite dall’utente, un sito Web può conoscere molte cose di un utente, e potenzialmente vendere ciò che sa a terzi. GET CONDIZIONATO Il Web caching mediante la memorizzazione degli oggetti trovati in precedenza può ridurre il ritardo di ricerca dei documenti e diminuire le quantità di traffico Web inviato su Internet. Sebbene esso riduca i tempi di risposta percepiti dal client, essa introduce un nuovo problema: una copia di un oggetto residente nella cache può invecchiare; cioè subire delle modifiche mentre una copia è nella cache del client. Ma l’HTTP ha un meccanismo che permette al client di impiegare il chaching assicurando che tutti gli oggetti passati al browser sono aggiornati. Questo meccanismo è detto GET condizionato. Un messaggio di richiesta http è detto anche messaggio GET condizionato se

1) il messaggio di richiesta usa il metodo GET e 2) il messaggio di richiesta comprende una linea di intestazione If-Modified-Since

TRASFERIMENTO DI FILE: FTP HTTP e FTP sono entrambi protocolli per il trasferimento dei file che hanno molte caratteristiche comuni; per esempio, entrambi girano su TCP. Però hanno delle differenze importanti. L’FTP usa due connessioni TCP in parallelo per trasportare un file: una connessione di controllo e una connessione dati; la prima è usata per spedire le informazioni di controllo tra due host (identificazione utente, password e comandi put e get). La connessione dati è quella che davvero invia un file. L’FTP usa una connessione di controllo separata , si dice cioè che l’FTP invia le su informazioni di controllo fuori dalla banda. HTTTP, invia le linee di intestazione di richiesta e di risposta nella stessa connessione TCP che compie anche il trasferimento dei file. Per questo si dice che http si dice che spedisce le sue informazioni di controllo nella banda. I comandi dal client al server, sono inviati attraverso la connessione di controllo in formato ASCII a 7 bit. Quindi come peri comandi http i comandi FTP sono leggibili dalla persone.

43

POSTA ELETTRONICA IN INTERNET Una vista generale del sistema Internet di posta elettronica è costituito da tre componenti principali: gli agenti dell’utente (user agent), i server di posta (mail server) e l’SMTP (Simple Mail Transfer Protocol). Consideriamo che un mittente Alice vuole inviare un messaggio a un destinatario Bob. Gli agenti dell’utente permettono agli utenti di leggere, rispondere inoltrare, salvare e comporre messaggi, a volte sono chiamati mail reader, lettori di posta. Quando il mittente termina la composizione del messaggio, il suo agente dell’utente invia il messaggio al suo server di posta, dove viene accodato alla fila dei messaggi in uscita. Quando il destinatario (Bob) vuole leggere il messaggio, il suo agente dell’utente rintraccia il messaggio dalla sua casella di posta nel suo server di posta. I server di posta formano il nucleo dell’infrastruttura per l’e-mail. Ciascun destinatario ha una mailbox situata in uno dei server di posta. Un tipico messaggio comincia il suo viaggio nell’agente dell’utente del mittente, arriva al server di posta del mittente e quindi viaggia fino al server di posta del destinatario, dove viene depositato nella casella di posta. Se il server del mittente non può inviare la posta al server del destinatario, allora mantiene il messaggio in una coda. L’SMTP è il protocollo principale dello strato di applicazione per la posta elettronica in Internet. Esso usa il servizio di trasferimento dati affidabile del TCP per trasferire la posta dal server di posta del mittente a quello del destinatario. L’SMTP ha due lati: un lato client, che gira sul server di posta del mittente e un lato server che gira sul server di posta del destinatario. Entrambi i lati client e server dell’STMP girano su qualsiasi server di posta. Un difetto dell’SMTP è che possiede alcune caratteristiche un po’ arcaiche; in particolare restringe il corpo di tutti i messaggi di posta per portarli alla semplice forma ASCII a 7 bit. Ciò aveve senso nei primi anni ’80 quando la trasmissione era scarsa ma oggi nell’era multimediale, la restrizione ASCII a 7 bit è un po’ dolorosa perché richiede che i dati binari multimediali siano codificati in ASCII prima della spedizione sull’SMTP. È importante il fatto che l’SMTP di solito non usa server di posta intermedi per spedire la posta, anche quando i due server si trovano ai lati opposti della terra. Infatti la connessione TCP è una connessione diretta tra i server, se il server del destinatario è guasto, il messaggio rimane nel server di posta del mittente e aspetta un nuovo tentativo, cioè il messaggio non viene sistemato in nessun server di posta intermedio. Vediamo come l’SMTP trasferisce un messaggio da un server di posta mittente a uno destinatario: il client STMP fa instaurare una connessione sulla porta 25 al server STMP. Se il server è fuori uso, il client tenterà ancora più tardi. Una volta stabilita questa connessione, il server e il client eseguono alcuni handshake sullo strato di applicazione. Quando gli SMTP client e server si sono presentati, il client spedisce il messaggio. Esso può contare sul servizio di trasferiemento affidabile dei dati del TCP per ottenere il messaggio al server senza errori. Il client quindi ripete questo processo sulla stessa connessione TCP se ha altri messaggi da spedire al server; altrimenti, da istruzioni al TCP perché chiuda la connessione. CONFRONTO CON HTTP Entrambi i protocolli sono usati per trasferire file da un host a un altro; HTTP trasferisce file da un Web server a un Web client. Quando trasferiscono file, entrambi usano la connessione persistente. Ma ci sono importanti differenze. La prima è che http è un protocollo pull (tira ed estrai): qualcuno carica informazioni su un server Web e gli utenti usano l’http per estrarre informazioni dal server a loro piacere. L’SMTP è un protocollo push (spingi); il server di posta che spedisce spinge i file verso quello destinatario. In particolare la connessione TCP è iniziata dalla macchina che vuole spedire i file. Una seconda importante differenza è che l’SMTP richiede che ciascun messaggio sia in formato ASCII a 7 bit. Un terza differenza riguarda la gestione di un documento. L’http incapsula ciascun oggetto nel suo proprio messaggio di risposta.

44

FORMATI DEI MESSAGGI DI POSTA E MIME Le linee di intestazione e il corpo del messaggio sono separate da una linea vuota. La RCF 822 specifica l’esatto formato delle linee di intestazione. Come con http, ciascuna linea contiene testo leggibile, consistente di una parola chiave seguita da due punti e da un valore. Dopo l’intestazione del messaggio, segue una linea bianca, poi il corpo del messaggio (in ASCII). Il messaggio si chiude con una linea contenente solo un punto, come visto sopra. Ma le intestazioni dei messaggi descritti nella RCF 822 non sono abbastanza sofisticate per i messaggi multimediali (immagini, video, foto) o per trasportare testi in formato non-ASCII. Per spedire contenuti diversi dai testi ASCII, l’agente dell’utente del mittente deve incorporare intestazioni aggiuntive al messaggio. Questa estensione è definita MIME (Multipurpose Internet Mail Extensions). Due intestazioni chiave MIME per supportare i multimedia sono: Content-Type, Content-Transfer-Encoding. Bisogna ricordare che un messaggio i testo non-ASCII deve essere codificato in formato ASCII per evitare di confondere l’SMTP. Quando un agente dell’utente riceve un messaggio con queste due intestazioni, prima usa il valore dell’intestazione Content-TransferEncoding: per convertire il corpo del messaggio nella sua forma originale non-ASCII, poi usa l’intestazione Content-Type: per determinare qual è l’azione da compiere sul corpo del messaggio. Dopo i nomi tipo e sottotipo, il resto del campo di intestazione consiste di un set di parametri. In generale il tipo di livello più alto usato per dichiarare il tipo generico di dati, mentre il sottotipo specifica il formato particolare per quel tipo di dati. Attualmente sono definiti sette tipi di alto livello. Per ogni tipo esiste un elenco di sottotipi associati, e la lista di sottotipi cresce di anno in anno: text: il tipo testo è usato per indicare all’agente dell’utente del destinatario che il corpo del messaggio contiene informazioni in forma di testo. image: il tipo image indica all’agente dell’utente destinatario che il corpo del messaggio è un’immagine. application: il tipo applicazione è per i dati che non appartengono ad alcuna delle altre categorie. multiparte: è molto importante, perché anche un messaggio e-mail può contenere molti oggetti (testo, immagini, applet). La posta elettronica in Internet, pone tutti gli oggetti nello stesso messaggio. PROTOCOLLI DI ACCESSO ALLA POSTA: POP3, IMAP SMTP è stato progettato per trasferire la posta elettronica da un host a un altro. In particolare trasferisce la posta da un server di posta del mittente a un server di posta del destinatario, esso è anche usato per trasferire la posta da un agente dell’utente del mittente al server di posta del mittente. Invece il protocollo di accesso alla posta POP3 è usato per trasferire la posta dal server di posta del destinatario all’agente dell’utente del destinatario. POP3 è un protocollo estremamente semplice e le sue funzioni sono piuttosto limitate. Il POP3 esordisce quando l’agente dell’utente (client) apre una connessione TCP al server di posta (il server) sulla porta 110. Con la connessione TCP in atto, il POP3 procede attraverso tre fasi: autorizzazione, transazione e aggiornamento. In una transazione POP3, l’agente dell’utente invia comandi, e il server dà una risposta a ciascun comando. Ci sono due possibili risposte: +OK, usata dal server per indicare che i comandi sono corretti, e –ERR, usata dal server per indicare che nei precedenti comandi c’è qualcosa che non va. Ma il POP3 non va bene per gli utenti che preferiscono mantenere un ordinamento gerarchico delle cartelle su un server remoto cui si possa accedere da qualunque calcolatore perché questo non è possibile perché esso non da alcun mezzo all’utente per creare cartelle remote e per assegnare i messaggi alle cartelle. Per risolvere questo e altri problemi è stato creato IMAP (Internet Mail Access Protocol) esso infatti offre molte più possibilità rispetto a POP3 ma è anche più complesso.

45

Un server IMAP associa ogni messaggio ad una cartella; appena un messaggio arriva al server, esso viene associato alla cartella INBOX del destinatario. Il destinatario può quindi spostare il messaggio in una nuova cartella creata dall’utente, leggerlo , cancellarlo ecc. Il protocollo IMAP fornisce i comandi per permettere agli utenti di creare cartelle e muovere messaggi da una cartella a un’altra, fornisce comandi che permettono agli utenti di ricercare su cartelle remote messaggi che rispondano a determinati criteri. Inoltre consente all’agente dell’utente di estrarre solo l’intestazione di un messaggio, o solo una parte di un messaggio MIME multiparti. INDIRIZZO IP Anche gli host di Internet, come gli uomini possono essere identificati, un identificativo per un host è il suo hostname es (www.yahoo.com, gaia.cs.umass.edu). Comunque gli hostname non danno nessuna informazione sulla dislocazione dell’ host all’interno di Internet, inoltre dato che possono essere costituiti da caratteri alfanumerici di lunghezza variabile, sono difficili da elaborare per i router. Per questi motivi gli host sono identificati anche dall’indirizzo IP. Esso è composto da 4 byte ed ha una struttura gerarchica molto più rigida es (121.7.106.83) dove ciascun punto separa uno dei byte espresso in notazione decimale da 0 a 255. Un indirizzo IP è gerarchico perché quando lo leggiamo da sinistra a destra otteniamo molte informazioni specifiche sulla locazione dell’host in Internet. 7.2 DNS Ci sono dunque due modi per identificare un host; attraverso un hostname o per mezzo di un indirizzo IP. Le persone preferiscono l’identificatore hostnamen più mnemonico, mentre i router preferiscono l’indirizzo IP, di lunghezza fissa e gerarchicamente strutturato. Per conciliare tra loro queste preferenze, abbiamo bisogno di un servizio che tratti archivi di nomi per convertire gli hostname in indirizzi IP. Questo è il compito principale del sistema dei nomi di dominio DNS (Domain Name System). Il DNS è :

- un database distribuito implementato in una gerarchia di server di nomi - un protocollo dello strato di applicazione che permette agli host di comunicare con i server

dei nomi in modo da fornire il servizio di traduzione. Esso gira su UDP e usa la porta 53. è comunemente impiegato da altri protocolli dello strato di applicazione compresi (HTTP SMTP, FTP). Il DNS al contrario del trasferimento dei file e delle applicazioni e-mail è un’applicazione con cui l’utente non interagisce direttamente. Invece esso fornisce un’attività centrale per Internet, cioè tradurre i nomi degli host nei corrispondenti indirizzi IP per le applicazioni dell’utente e per il software in Internet. Ma un difetto del DNS è che aggiunge un ritardo addizionale a volte consistente alle applicazioni Internet che lo usano. Per fortuna, l’indirizzo IP è spesso collocato in una cache “vicina” di un server dei nomi DNS, e questo aiuta a ridurre sia il traffico DNS sulla rete sia il ritardo medio DNS. Il DNS fornisce altri importanti servizi:

- alias degli hostname - alias dei server di posta - distribuzione del carico, fra le repliche di un server per i siti affollati, che vengono replicati

su diversi server, con ciascun server che funziona su terminali differenti con differenti indirizzi IP.

46

COME FUNZIONA DNS Dal punto di vista dell’applicazione richiedente nell’host dell’utente, il DNS è una scatola nera che fornisce un semplice, diretto, servizio di traduzione. Ma in realtà questa scatola è molto complessa perché costituita da un gran numero di server dei nomi distribuiti sul pianeta. Dato che un un database centralizzato in un singolo server dei nomi non è scalabile, di conseguenza il progetto per il DNS prevede la distribuzione, esso infatti è un magnifico esempio di come un database distribuito può essere implementato in Internet. Per risolvere il problema della scalabilità, il DNS usa un gran numero di server dei nomi, organizzati in modo gerarchico e distribuiti in tutto il mondo, le correlazioni sono distribuite attraverso tutti i server dei nomi. Ci sono tre tipi di server dei nomi: server dei nomi locali: ciascun ISP (universitario, privato, società) ha un server dei nomi locale. Quando un host invia un messaggio di richiesta, il messaggio viene prima inviato al server dei nomi locale dell’host. L’indirizzo IP del server dei nomi locale tipicamente è inserito a mano in un host. , server dei nomi radice, server dei nomi assoluto. Server dei nomi radice: esistono dozzine di questi nomi soprattutto in Nord America. Quando un server dei nomi locale non può soddisfare immediatamente la richiesta di un host (perché non ha la registrazione), il server dei nomi locale si comporta come un client DNS e invia una richiesta a un server dei nomi radice, quest’ultimo non può avere la registrazione dell’hostname ma può conoscere l’indirizzo IP di un server dei nomi assoluto. Server dei nomi assoluto: (authoritative name server). Ciascun host è registrato con un server dei nomi assoluto. Tipicamente il servere dei nomi assoluto per un host è il server dei nomi situtato nel suo ISP locale. Un server dei nomi si dice assoluto per un host se, ha sempre un record DNS che traduce l’hostname dell’host per l’indirizzo IP di quell’host. Quando un server dei nomi assoluto riceve una richiesta da un server dei nomi radice, esso dà una risposta DNS che contiene la correlazione richiesta. Il server radice allora invia la correlazione al server dei nomi locale che a sua volta la gira all’host richiedente. Molti server dei nomi agiscono da server dei nomi sia locale sia assoluto. Il protocollo DNS oltre alle richieste ricorsive (quando un host o server dei nomi A fa una richiesta richiesta a un server B, allora il server dei nomi B ottiene la correlazione richiesta a nome di A e quindi la invia ad A). Esso permette anche richieste iterative in qualunque fase della catena tra un host richiedente e un server dei nomi assoluto. Un’importante caratteristica del DNS e il caching che serve per migliorare le performance rispetto al ritardo e per ridurre il numero di messaggi DNS nella rete. Quando un server dei nomi riceve una correlazione DNS per qualche hostname, esso la deposita nella sua memoria locale (disco o RAM) mentre il messaggio attraversa la catena dei server dei nomi. Data una correlazione hostname/indirizzo IP depositata nella cache se ariva un’altra richiesta per lo stesso hostname esso può fornire l’indirizzo IP desiderato anche se non è il server dei nomi assoluto per quell’hostname. RECORD DNS I server dei nomi che insieme implementano il database distribuito del DNS, immagazzinano record di risorse contenenti le correlazioni fra gli hostname e gli indirizzi IP. Un record di risorsa è un quartetto che contiene i seguenti campi:

(Name, Valur, Type, TTL) TTL è il tempo di vita del record di risorsa, esso determina il momento in cui una risorsa dovrà essere rimossa dalla cache. I significati di Name e Value dipendono dal Type: Se type= A allora Name è un hostname e Value è l’indirizzo IP dell’hostname Se type = NS allora Name è un dominio e Value è l’hostname di un server dei nomi assoluto che sa come ottenere gli indirizzi IP per gli host del dominio. Se Type = CNAME allora Value è l’hostname canonico per l’alias Name. Se Type =MX allora Value è un hostname di un server di posta che ha l’alias Name.

47

MESSAGGI DNS

• I primi 12 byte costituiscono la sezione dell’intestazione (header section). • La sezione domanda contiene informazioni sulla richiesta che è stata fatta. • La sezione risposta contiene i record di risorsa per il nome che era stato richiesto in origine. • La sezione assoluta (authority section) contiene record di altri server assoluti. • La sezione aggiuntiva contiene altri record “utili”.

PRORAMMAZIONE DEI SOCKET CON TCP Il client ha il compito di iniziare il contatto con il server. Perché il server possa reagire al contatto, deve essere pronto occorrono due cose: Ossia il programma del server deve funzionare come un processo prima che il client tenti di stabilire il contatto, il programma del server deve avere un socket che accoglie i contatti iniziali di un client in funzione su una macchina arbitraria. Con il processo server in funzione, il processo client può iniziare una connessione TCP al server. Questo è realizzato nel programma client con la creazione di un oggetto socket. Esso specifica l’indirizzo del processo saerver, cioè l’indirizzo IP del server e il numero di porta del processo, fatto questo il TCP nel client inizia un handshake a tre vie e stabilisce una connessione TCP con il server. Quest’ultimo è trasparente ai programmi client e server. Al termine della fase di hanshake, esiste una connessione TCP fra il socket del client e quello nuovo del server (socket di connessione del server). PROGRAMMAZIONE DEL SOCKET CON UDP Anche l’UDP permette a due o più processi che funzionano su differenti host di comunicare tra loro. Ma UDP differisce da TCP perché è senza connessione non c’è alcuna fase di handshake iniziale durante la quale si stabilisce un canale tra due processi. L’UDP è simile ad un servizio di taxi: ogni volta che un gruppo di persone prende un taxi, il gruppo deve dare al tassista l’indirizzo di destinazione esso è una coppia consistente dell’indirizzo IP dell’host di destinazione e del numero della porta del processo di destinazione. Dopo aver creato il pacchetto, il processo che spedisce lo spinge nella rete attraverso un socket. Un difetto dell’UDP è che fornisce un trasferimento inaffidabile dei dati, non dà garanzie che un datagram raggiungerà la destinazione finale. DISTRIBUZIONE DI CONTENUTI Per ridurre il verificarsi dei lunghi ritardi una strategia “naturale” è quella di replicare il contenuto di uno o più server nella rete, e indirizzare la richiesta di un utente verso il miglior server che contiene una copia del contenuto desiderato. Il server “migliore” è quello che fornisce nel più breve tempo di risposta dall’istante della richiesta all’istante di ricezione dell’intero file. Nel corso degli anni sono stasi messi a punti diversi schemi per la distribuzione dei contenuti che possiamo classificare in tre categorie:

- Web caching. - Reti per la distribuzione di contenuti (CDN, Content Distributon Networks). - Condivisione di file da pari a pari. Un fornitore di contributi (content provider) è un individuo, organizzazione o ente che ha dei contenuti che vuole rendere disponibili agli utenti di Internet. Il server di origine per un dato oggetto di contenuto è il server in cui l’oggetto era situato originariamente e in cui risiede sempre una copia

48

LA CACHE DEL WEB La cache del web detta anche proxy server è un’entità della rete che soddisfa le richieste http attraverso un server di origine. La cache del web ha un proprio disco di archiviazione e conserva nella sua memoria copie degli oggetti richiesti di recente. Una cache è contemporaneamente un server e un client. Quando riceve richieste da e manda risposte a un browser, essa è un server. Quando manda richieste e riceve risposte da un server di origine è un client. Occorre notare che il fornitore di contenuti non deve supervedere alla replicazione, il contenuto è replicato on demand in funzione delle richieste degli utenti. Le cache web hanno un grande successo per almeno tre motivazioni: 1) essa può ridurre sostanzialmente il tempo di risposta a una richiesta del client 2) può ridurre il traffico in modo sostanziale su un link di accesso Internet di una istituzione,

migliorando le performance di tutte le applicazioni; 3) un Internet fitto di cache del web fornisce un’infrastruttura per la rapida distribuzione dei

contenuti, anche per i contenuti di quei provider i cui siti funzionano su server lenti, con link di accesso a bassa velocità, questi contenuti possono essere copiati velocemente nella cache di Internt per soddisfare le alte richieste del pubblico.

CACHING COOPERATIVO Caching del Web multiple, situate in diversi posti in Internet, possono cooperare e migliorare le performance generali. Le cache ottengono gli oggetti l’una dall’altra usando una combinazione di HTTP e ICP (Internet Caching Protocol). ICP è un protocollo di strato di applicazione che permette a una cache di chiedere velocemente a un’altra se ha un dato documento, una cache allora può usare HTTP per recuperare l’oggetto da un’altra cache. RETI PER LA DISTRIBUZIONE DI CONTENUTI Nei tardi anni ’80 si è diffusa una nuova forma di distribuzione di contenuti, ovvero, le reti per la distribuzione di contenuti (CDN Content Distribution Web). le CDN usano un “modello affaristico” differente rispetto al caching del Web. per un CDN gli utenti paganti non sono più gli ISP ma son invece i fornitori di contributi. Es. un fornitore di contributi come Yahoo paga una ditta fornitrice di CDN (es. Akamai) per far arrivare i suoi contenuti agli utenti con ritardi più bassi. La ditta fornitrice di CDN installa centinaia di server CDN in Internet. Il servizio di CDN avviene nel seguente modo: 1) La ditta fornitrice di CDN tipicamente pone i server CDN in centri di Internet hosting, quest’ultimo è posseduto e gestito da una terza parte, esso tipicamente un edificio pieno di macchine server. I centri di hosting si trovano in ISP di livello inferiore, vicini alle reti di accesso degli ISP. 2) La CDN replica i contenuti dei suoi clienti nei server CDN. Quando un cliente aggiorna i suoi contenuti, la CDN ridistribuisce il nuovo contenuto nei server CDN. 3) La ditta fornitrice di CDN usa un meccanismo tale che quando un utente richiede un contenuto, il contenuto viene fornito dal server CDN che lo può trasferire all’utente più rapidamente. CONDIVISIONE DI FILE DA PARI A PARI Un utente può scaricare oggetti da server Web di origine che sono gestiti da fornitori di contenuti, da cache proxy che sono gestite da ISP, o da server CDN che sono gestiti da aziende di CDN. Ma c’è anche la possibilità che i PC all’accesso della rete (“pari”) possono scaricare oggetti direttamente l’uno dall’altro. Questà è l’essenza dei paradigmi di condivisione di file da pari a pari (peer-to-peer, P2P), compresi Napster, Gnutella, Freenet e FastTrack.

49

La condivisione di file P2P è un paradigma di contenuti avvicenti, in quanto tutti i contenuti vengono trasferiti direttamente tra normali pari, senza passare attraverso server di terza parte (come il server Web di origine , le cache del Web o i server CDN). Quindi il P2P sfrutta le risorse (banda, memoria e CPU) di una molteplicità di pari (a volte milioni!) per distribuire i contenuti. La condivisione di file P2P è ampiamente scalabile. Importante ricordare che la condivisione di file da pari pari usa il paradigma client-server, è il pari scelto è il server. Il file viene inviato dal pari server al pari client con un protocollo di trasferiemento di file. Il caso più tipico che possiamo considerare è quello in cui il protocollo di trasferiemento di file P2P sia HTTP, in questo caso Alice (richiedente) sceglie BOB per scaricare, sul calcolatore di Alice gira l’applicazione di condivisione di file P2P, e il suo “pari” (calcolatore portatile) è sia un client Web sia un server Web temporaneo. Il suo pari è un server Web in quanto fornisce contenuti all’interno di risposte HTTP, è temporaneo perché è connesso a internet in modo intermittente (poche ore al giorno) DIRECTORY CENTRALIZZATA È uno degli approcci più immediati per localizzare i contenuti (Napster è stata la prima azienda). In questa architettura il servizio di condivisione di file P2P usa un grande server per fornire il servizio di directory. L’applicazione che gira sul pari informa il server di directory del suo indirizzo IP e dei nomi degli oggetti contenuti nel suo disco locale che rende disponibili per la condivisione. Il server di directory raccoglie queste informazioni da ogni pari che si attiva, creando un database centralizzato che mette in corrispondenza ogni nome di oggetto con una serie di indirizzi IP. Usare una directory centralizzata comporta una serie di svantaggi però:

• Un unico punto di rottura. Se il server di directory si blocca, allora si blocca l’intera applicazione P2P.

• Collo di bottiglia delle prestazioni. In un grande sistema con centinaia di migliaia di utenti connessi, un server centralizzato deve mantenere aggiornato un enorme database e deve rispondere a migliaia di richieste al secondo.

• Violazione del copyright, un procedimento legale può far si che l’azienda debba spegnere il server directory. Mentre è più difficile spegnere le architetture più decentralizzate.

Lo svantaggio PRINCIPALE di usare server directory centralizzato è che l’applicazione P2P è solo parzialmente decentralizzata. Il trasferimento di file tra pari (PC all’accesso della rete) è decentralizzato ma il processo di locazione del contenuto è fortemente centralizzato DIRECTORY DECENTRALIZZATA Per allontanarsi dall’architettura centralizzata, è naturale distribuire la directory per la localizzazione del contenuto tra pari stessi. Un certo numero di pari (decine, centinaia, migliaia) sono nominati capigruppo. Il capogruppo tiene traccia del contenuto di tutti i suoi membri. Allora i pari chiedono ai capigruppo; il capogruppo può chiedere a sua volta ad altri capigruppo. Dopo aver conosciuto l’indirizzo IP del suo capogruppo, il pari contatta il suo capo e lo informa dei contenuti che si appresta a condividere. I pari e le loro relazioni di comunicazione formano una rete logica astratta detta rete sovrapposta. C’è un ramo tra ogni pari e il suo capogruppo e c’è un ramo tra ogni coppia di capogruppo che comunicano direttamente. È da notare che questi rami non sono link fisici di comunicazione, ma link virtuali tra pari. La rete sovrapposta si evolve dinamicamente. Affinché un pari si possa aggregarsi alla rete esso deve stabilire almeno un ramo tra sé e un qualche altro pari già presente nella rete; cioè deve conoscere l’indirizzo IP di almeno un altro pari nella rete. Per questo scopo il sistema di condivisione P2P deve avere uno o più nodi di bootstrap (avviamento). Poiché essi sono sempre accesi i pari possono utilizzare il DNS per localizzarli. Un vantaggio di questo approccio è che non esiste più un server dedicato per il database della directory le dimensioni del database sono relativamente piccole perché ogni capogruppo tiene traccia solo dei

50

contenuti del suo gruppo. Ma ci sono anche degli svantaggi: uno è che bisogna attivare un protocollo abbastanza complesso per costruire e mantenere aggiornata la rete sovrapposta, inoltre i pari che sono capogruppo non sono equivalenti ai normali pari, mentre dovrebbero esserlo (sistema decentralizzato e distribuito), infatti i capogruppo hanno più responsabilità, maggiore valore quindi possono diventare colli di bottiglia. È necessaria la presenza di uno o più nodi bootstrap. QUERY FLOODING (INONDAZIONE DI RICHIESTE) La rete sovrapposta di Gnutella ha una topologia piatta, non strutturata, tutti i pari sono uguali, non esiste una struttura gerarchica con capigruppo. Un pari come nel caso precedente si aggrega alla rete contattando un nodo di bootstrap, ogni pari nella rete conosce solo i suoi pari vicini. Come prima è richiesto un protocollo abbastanza complesso per mantenere aggiornata la rete sovrapposta. Per localizzare gli oggetti Gnutella non usa directory centralizzate o decentralizzate ma un’inondazione di richieste ossia quando un pari vuole un oggetto manda la richiesta ad ognuno dei suoi vicini. Se un pari che riceve la richiesta ha una copia dell’oggetto desiderato manda indietro una risposta dicendo che ha una copia di esso. I vantaggi oltre che i pari sono uguali è che nessuno di essi memorizza informazioni di directory, quindi l’assenza di un database semplifica enormemente la progettazione. Ma uno svantaggio è che essa non è scalabile, nella rete viene immessa una grande quantità di traffico e ogni pari viene bombardato da messaggi di richiesta. Per risolvere questo problema è stato introdotto un limite al raggio di propagazione delle richieste con un campo contatore. Ciò riduce il traffico di richieste con lo svantaggio che è possibile che non vengano trovati tutti i pari con il contenuto desiderato.

51