Appunti del corso Reti di telecomunicazione e Internet ∗ < daniele.iamartino at mail.polimi.it > Revisione del 2 Marzo 2012 Premessa Questo documento contiene i miei appunti relativi al corso di Reti di telecomunicazione ed Internet seguito presso il Politecnico di Milano nel primo semestre dell'anno scolastico 2011/2012. Ho pensato, man mano che seguivo il corso, che sarebbe stato molto utile preparare degli appunti chiari, utili non solo a me ma anche eventualmente ad altri. Mi sono reso conto che nella mia carriera potrebbe essermi molto utile anche avere una semplice reference per questi argomenti, motivo in più per scrivere. Ho pensato quindi di renderlo più approfondito possibile integrando il materiale di vari libri, che trovate nella bibliograa. errori (avendo scritto questo documento tra notti insonni e la non vi do quindi nessuna garanzia sulla correttezza dei contenuti. Segnalatemi pure eventuali Sono ben consapevole che potrebbero esserci svariati sera dopo le lezioni), errori se ne trovate. Se volete inserire un paragrafo o fare grosse modiche sono ovviamente (in pieno spirito open source ) disponibile per integrare le vostre modiche e aggiungere un vostro riferimento negli autori. Vi prego di ricordare le regole di licenza Creative Commons nel caso voleste ridistribuire questo documento. Ringraziamenti Ringrazio Eugenio Guidetti per la realizzazione delle immagini vettoriali dei primi paragra e la segnalazione di alcuni errori. Lo strato datalink (livello 2 ISO/OSI) Servizi oerti agli strati superiori Gestione del collegamento Delimitazione Indirizzamento Controllo di errore: Controllo di usso Buer di ritrasmissione dati per lo scambio di trame delle trame a livello di rete interna (tra gli altri che possono ricevere la stessa trama) mostrare agli strati superiori un canale di comunicazione ideale senza errori : Evitare la perdita di trame a causa di saturazione della destinazione Procedure per il controllo d'errore Esistono due metodi per il controllo di errore: FEC - Forward Error Correction ARQ - Automatic Repeat reQuest (Correzione dell'errore in avanti) (Richiesta di ripetizione automatica) ∗ Quest'opera è sotto licenza Creative Commons Attribuzione - Condividi allo stesso modo 2.5 Italia License. 1 FEC - Forward Error Correction Viene aggiunta dell'informazione a livello 2 per correggere gli errori. Si parla di codice a correzione d'errore. Non è prevista la necessità di invio di un riscontro per confermare la corretta ricezione. La quantità di informazione trasferita sul collegamento dati è indipendente dal tasso di errore. Un esempio di tecnica FEC utilizzabile con canali con tassi di errore di 1 bit per pacchetto dati è l'utilizzo di un bit di parità. ARQ - Automatic Repeat reQuest Ai dati in ogni pacchetto si aggiunge un campo che contiene un codice a rivelazione d'errore, capace di rilevare la presenza di errore ma non di correggerlo. Si richiede poi al trasmettitore di rinviare il pacchetto corrotto. È necessario un canale di ritorno anche per comunicazioni monodirezionali. La quantità di dati trasferiti sul canale è dipendente dal tasso di errore. È inoltre necessario un buer di ritrasmissione. I protocolli di tipo ARQ sono così suddivisi: Stop & Wait Continuous ARQ Go-back-n Selective repeat Tassonomia sui tempi di trasmissione I vari tempi sono quindi: T tempo di trasmissione della trama τ tempo di propagazione del segnale T tempo di processing della trama T tempo di trasmissione del riscontro f p a Lf Tf = = C TON τ= dove v∼ = 2 3 · c = 2 · 108 m s Lf = P d v per segnali guidati all'interno di un mezzo 2 Tp e Ta sono spesso approssimati a 0 Il tempo totale viene spesso espresso come TT OT = Nf · (Tf + Ta + 2 · Tp + 2 · τ ) Nf è il numero delle trame. tempo di propagazione normalizzato viene spesso utilizzato per comodità ed è denito come: dove Il a= τ Tf Protocolli Stop & Wait Trasmetto una trama e aspetto il riscontro positivo (ACK) (Non esiste NACK) Il destinatario eettua controllo di usso rallentando i riscontri In assenza di errori: Calcoliamo le prestazioni tenendo conto della quantità di tempo in cui stiamo eettivamente inviando dati utili In generale abbiamo che l'ecienza del protocollo è data quindi da: η= Tf TT OT E quindi in questo caso particolare: η= Supponendo Tp = Ta ' 0 allora η= Tf Tf + Ta + 2 · Tp + 2 · τ Tf 1 = Tf + 2 · τ 1+2·a Aumentiamo l'ecienza aumentando la lunghezza della trama. Un'altra stima di ecienza, il throughtput viene fatta tenendo conto anche della frequenza di cifra: T HR = η · C In presenza di errori: Denisco un tempo di timeout To tra l'invio della trama e un suo nuovo reinvio. Utilizzando un timeout risolviamo il problema dei riscontri persi o trame totalmente perse (e non corrotte) Il tempo di timeout non può essere scelto a caso ma deve essere almeno di un valore minimo To ≥ Ta + 2 · Tp + 2 · τ che considerando Tp = Ta ' 0 diventa: To ≥ 2 · τ 3 Per denizione il tempo di timeout parte ad essere conteggiato dopo il completo invio del pacchetto (Tf ) Per evitare di ricevere due volte la stessa trama e pensare che la seconda sia nuova (se viene perso il riscontro), è necessaria una numerazione di pacchetti ad almeno 1 bit. Calcoliamo le prestazioni : p errore sul singolo bit. P è la probabilità di errore nella trasmissione di una trama. ai è la probabilità di successo alla trasmissione della i-esima trama. NS è la probabilità di è il numero medio di tentativi di trasmissione per trama ricevuta con successo. Ipotizzando gli errori sui bit statisticamente indipendenti, sappiamo che una trama sarà ritrasmessa quando c'è almeno un bit sbagliato nella trama o nel riscontro. Abbiamo quindi che: P = 1 − (1 − p) *L *L * (1 − p) Lf +La f è la lunghezza della trama a è la lunghezza del riscontro è la probabilità di successo nell'invio di 1 bit, Lf +La (1 − p) è la probabilità di successo nell'invio di trame e riscontri, sottraendo a 1 si ottengono tutti gli altri casi. Calcoliamo ora il numero medio NS di tentativi di trasmissione per trama trasmessa (di cui solo l'ultimo tentativo ha successo): NS = * *P * ∞ X i · ai = i=0 ∞ X i · P i−1 · (1 − P ) = (1 − P ) · i=1 La prima sommatoria ∞ X i · P i−1 = (1 − P ) · i=1 P∞ i=0 i · ai 1 (1 − P ) 2 = 1 (1 − P ) è la somma pesata del numero di tentativo e la relativa probabilità di successo. i−1 è la probabilità di fallimento per le precedenti, La serie ∞ P i·P i−1 (1 − P ) è la probabilità di successo per l'ultima è una serie nota: è la derivata della somma della serie geometrica. i=1 Quindi il tempo di invio di una trama lunga Lf è: TT OT = (NS − 1) · (Tf + To ) + Tf + Ta + 2 · Tp + 2 · τ * Dove (NS − 1) · (Tf + To ) sono tutti i tentativi precedenti in cui scatta il timeout. 4 L'ecienza è quindi: η= dove considerando che Tf TT OT NS = = Tf (NS − 1) · (Tf + To ) + Tf + Ta + 2 · Tp + 2 · τ 1 (1−P ) : η= Tf · (1 − P ) Tf + To · P + (Ta + 2 · Tp + 2 · τ ) · (1 − P ) Per calcolare l'ecienza massima ci poniamo nella condizione limite di timeout (To ). L'ecienza diventa quindi: η = ηM AX = ipotizzando poi come al solito Ta = Tp ' 0 = Ta + 2 · Tp + 2 · τ Tf · (1 − P ) Tf + Ta + 2 · Tp + 2 · τ abbiamo che ηM AX = 1−P 1+2·a Notiamo che l'ecienza è fortemente legata al timeout scelto. Protocolli Continuous ARQ: Tentiamo di aumentare l'ecienza permettendo la trasmissione di più trame consecutive in attesa dei riscontri delle prime trasmesse. È necessaria una numerazione delle trame in modulo N. Di solito T T OT N = 2b = Nf · Tf + Ta + 2 · τ L'ecienza può quindi essere calcolata come η= Tf TT OT = Tf Nf · Tf + Ta + 2 · τ Come sempre il throughtput è calcolato come: T HR = η · C 5 Sliding Window Si stabiliscono due nestre di trasmissione e ricezione che memorizzano la lista di trame che possono essere ricevute e inviate: WS = Numero WR = Numero di trame che posso inviare (send ) di trame che posso ricevere (recive ) Dobbiamo tenere conto anche degli estremi delle due nestre: LR = Estremo inferiore della nestra di ricezione LS = Estremo Il inferiore della nestra d'invio trasmittente è autorizzato ad inviare tante trame n tali che: LS ≤ n ≤ (LS + WS − 1)(mod N ) Il ricevente è autorizzato a ricevere le trame n tali che: LR ≤ n ≤ (LR + WR − 1)(mod N ) Il ricevitore all'invio del riscontro relativo alla trama numero LS , incrementa il valore di LS di una unità (in LR di una unità (in modulo N ). Il trasmettitore alla ricezione del riscontro per la trama numero LR , incrementa il valore di modulo N ). L'incremento di LR e fa ruotare le rispettive nestre (in senso antiorario). n = 23 Solitamente nel caso Per LS si rappresenta così: garantire che ci sia un invio continuo di trame no all'arrivo del primo riscontro, è necessario imporre un valore minimo per WS : WS · Tf ≥ Tf + Ta + 2 · τ WS · Tf Tf + Ta + 2 · τ è il tempo totale di trasmissione di tutte le trame della nestra è il tempo necessario alla ricezione del primo riscontro Se questa relazione non è soddisfatta, si dice che il meccanismo a nestra strozza la piena utilizzazione del collegamento. Nel caso in cui Ta ' 0 abbiamo: WS · Tf ≥ Tf + 2 · τ e ricordando ancora che strozzatura è: a = τ Tf , riscriviamo più semplicemente che WS ≥ 1 + 2 · a 6 la condizione per evitare la Piggybacking Notare che nei canali bidirezionali non è sempre necessario inviare un riscontro separato, ma è possibile semplicemente inserirlo insieme ai dati che si stanno inviando, in questo modo il riscontro si procura un passaggio gratis a bordo di un pacchetto dati già in trasmissione. Vincolo sulla apertura delle nestre Per evitare ambiguità sui numeri di sequenza ricevuti ed evitare di confondere quindi una ritrasmissione con un nuovo pacchetto, è necessario soddisfare la relazione: WS + WR ≤ N Protocolli go-back-n Accetto le trame inviate solo se le ho ricevute strettamente in sequenza ciclica modulo N. Quindi sempre Per il vincolo prima discusso abbiamo quindi: WS ≤ N −1 ⇒ WR = 1. WS ≤ 2b −1 , dove il caso migliore da scegliere è sempre WS = 2b − 1 ACK i NACK i : sinica ho ricevuto la trama i è tutte le precedenti. signica non ho ricevuto i ma ho ricevuto le precedenti no a i-1, ora aspetto che mi rimandi i e scarto eventuale altra roba in arrivo no a quando non mi arriva i . C'è un timeout che scatta alla sorgente dopo che un pacchetto non ha ancora ricevuto un ACK dopo La sorgente non ruota la nestra no a quando non riceve l'ACK di LS To secondi. alla destinazione. Ipotizzeremo che la trasmissione di una trama venga sempre portata a termine, anche se intanto mi sta arrivando un NACK o altro. Protocollo selective repeat W R >1 e ricordiamo che W S + WR ≤ N . Per l'ecienza massima del protocollo conviene scegliere WS = WR = ACK i NACK i N 2 : Ho ricevuto i e anche tutte le precedenti : Non ho ricevuto la trama i, non ti dico niente sulle precedenti. Accetto eventuali trame seguenti che rientrano nella nestra (senza però ruotarla quando le ricevo). Timeout che scatta dopo To secondi dall'invio della trama come per il protocollo go-back-n. Ecienza dei protocolli Continuous ARQ In assenza di errori: In base alla condizione di strozzatura (che in questo caso è l'unico vincolo di ecienza): η= ( 1 WS ·Tf Tf +2·τ se se WS ≥ 1 + 2a WS < 1 + 2a In presenza di errori: Ricordiamoci che Lf +La P = 1 − (1 − p) . η= NS Tf 1 = NS · Tf NS è il numero medio di trasmissioni per trasmettere una trama. 7 Selective repeat Non c'è perdita di ecienza legata alla latenza (a dierenza di Stop & Wait ) Poichè la ritrasmissione interessa solo una trama e non altre: NS = 1 (1 − P ) e quindi η = (1 − P ) Go-back-n K= Numero di trame consecutive che devono essere ritrasmesse in seguito ad un errore (è esclusa dal conto la trama con successo). Con 1 errore: k+1 trame Con 2 errori: k+2 trame P ... i · (1 − P ) = Probabilità di accumulare i errori su i trasmissioni ripetute della stessa trama. NS = 1 · (1 − P ) + (K + 1) · P · (1 − P ) + (2K + 1) · P 2 · (1 − P ) + ... NS = ∞ X (i · K + 1) · P i · (1 − P ) = i=0 con K '2+2·a si ottiene η= 1 + (K + 1) · P K ·P +1= 1−P 1−P 1−P 1−P +2·a·P Otteniamo quindi in ne che: ( η= 1−P 1+P +2·a·P WS ·(1−P ) (1+2·a)·[1+(WS −1)·P ] se se WS ≥ 1 + 2a WS < 1 + 2a Conclusioni sull'ecienza in caso di errori: Sotto ipotesi di non strozzatura W η= Sotto ipotesi di strozzatura W S ≥ 1 + 2a : ( (1 − P ) S Selective Repeat (1−P ) 1+P +2·a·P Go-back-n < 1 + 2a : ( W ·(1−P ) S η= 1+2·a WS ·(1−P ) (1+2·a)·[1+(WS −1)·P ] Selective Repeat Go-back-n Selective repeat è meglio di go-back-n ma la dierenza tra i due si riduce man mano che diminuisce la distanza. In caso di tasso di errore particolarmente basso però go-back-n diventa paragonabile o anche meglio di Selective repeat, a causa della WS maggiore. Stop & Wait ha praticamente sempre pessime prestazioni. Protocollo HDLC Tipi di stazioni Stazione primaria (controllo del collegamento mediante comandi) Stazione secondaria (Opera sotto una stazione primaria ed emette risposte) Stazione combinata (Combina operazione primaria e secondaria, emette comandi e risposte) 8 Tipi di congurazione Congurazione bilanciata: Sono presenti due stazioni combinate Congurazione sbilanciata: Sono presenti una stazione primaria e una o più stazioni secondarie Tre modalità di trasferimento ABM - Asynchronous Balanced Mode (Full-Duplex) Utilizzato in congurazioni bilanciate Ognuna delle due stazioni combinate può iniziare a trasmettere NRM - Normal Response Mode (Half-Duplex) Utilizzato in congurazioni sbilanciate La primaria può iniziare a trasmettere, una secondaria può solo rispondere ARM - Asyncronous Response Mode (chiamato anche LAP-B) Utilizzato in congurazioni sbilanciate La primaria e le secondaria possono iniziare a trasmettere In tutte le modalità è sempre la stazione primaria ad essere responsabile dell'inizializzazione del collegamento Struttura della trama HDLC 8·n Flag Address 8 · n Flag Address (8 bit) ( bit) Control (8/16 bit) Information (8 ·n bit) FCS (16/32 bit) Flag (8 bit) (8 bit): Presente in testa e in coda, svolge la funzione di delimitatore della trama, vale ( 01111110. bit): Campo a 8 bit, estendibile a multipli di 8, specica la stazione secondaria ricevente (nel caso di comandi emessi dalla primaria), oppure la stazione secondaria trasmittente nel caso di risposte. L'indirizzo composto da tutti 1 è un indirizzo di broadcast Possiamo indirizzare no a 128 stazioni Il campo address diventa ridondante per congurazioni punto-punto Control (8/16 bit): Campo a 8 bit, estendibile a 16 Specica il tipo di trama in trasmissione Gestisce i meccanismi di numerazione e riscontro Ci sono tre tipi di campo di controllo, a seconda dei primi due bit: * Information (I) : Informazione utente, contiene il numero della trama trasmessa e il numero della prossima trama che si aspetta di ricevere, N(R), mandando l'acknowledge implicito di N(R)-1. Il campo P/F sarà descritto in seguito · Nella versione a 8 bit: Contenuto: 0 Numerazione: 0 · N(S) 1 2 P/F 3 4 N(R) 5 6 7 6 7 8 Nella versione a 16 bit: Contenuto: 0 Numerazione: 0 * Supervisory (S) N(S) 1 2 3 4 5 N(R) P/F 9 10 11 12 13 14 15 : Utilizzato per gestire i riscontri di trama ed eventuale stato di fuori servizio. N(R) indica la prossima trama in attesa di essere ricevuta. A seconda del protocollo ARQ può signicare anche ACK no a N(R)-1. S è un campo utilizzato per specicare altre informazioni che verranno descritte in seguito. · Nella versione a 8 bit: Contenuto: 1 0 Numerazione: 0 1 · S 2 N(R) P/F 3 4 5 6 7 Nella versione a 16 bit: Contenuto: 1 0 Numerazione: 0 1 * Unnumbered (U) S 2 3 0 0 0 0 P/F 4 5 6 7 8 N(R) 9 10 11 12 13 14 15 : Gestione del collegamento dati: inizializzazione, chiusura, reset per errore. 9 · Nella versione a 8 bit: Contenuto: 1 1 Numerazione: 0 1 · M 2 P/F 3 4 M 5 6 7 Nella versione a 16 bit: Contenuto: 1 1 Numerazione: 0 1 M 2 3 0 0 0 0 P/F 4 5 6 7 8 M 9 10 11 12 13 14 15 Il campo P/F presente in varie trame del campo Control serve a identicare se il messaggio signica domanda o risposta: * * P/F posto ad 1 serve a sollecitare una risposta (poll ) da parte della stazione primaria. P/F posto a 0 serve per segnalare una risposta ad un poll (nal ) da parte di una stazione secondaria. Information FCS ( 8 · n bit ): Può avere lunghezza variabile multipla di 8 bit. È sempre presente in trame di tipo I. (16 o 32 bit): Campo a 16 o 32 bit che svolte la funzione di rivelazione d'errore per la trama, utilizzando CRC . il checksum di tipo Nota: Il piggybacking viene sempre eettuato quando possibile. Bit stung per il ag Per poter riconoscere l'inizio di una trama viene utilizzata una sequenza di sei 1 consecutivi, preceduta e seguita da zeri. Cosa accade se questa sequenza è però già presente nella trama o nei dati? Come evitiamo di confondere la ne della trama con un dato? Ci sono vari modi per risolvere questo problema. Quello scelto da HDLC è il bit stung, che funziona nel seguente modo: In invio, aggiungo un bit 0 dopo ogni occorrenza di 5 bit 1 (eccetto che nel ag ) In ricezione, dopo ogni gruppo di cinque 1, tolgo lo zero (se c'è) che segue. CRC - Cyclic redundancy check k= n= Messaggio [b , b , b , ..., b , b , b ] Deniamo un polinomio P (x) Lunghezza in bit del checksum CRC Lunghezza in bit del messaggio da proteggere : n n−1 n−2 2 1 0 di grado n−1 P (x) = bn · X n−1 + bn−1 · X n−2 + ... + b1 · X + b0 · 1 Polinomio divisore D (x) Esempio per Per k=4 di grado k, preassegnato dal protocollo. abbiamo D (x) = x4 + x3 + 1 k = 16: * D (x) = x * D (x) = x 16 + x12 + x5 + 1 CRC-16EU 16 + x15 + x2 + 1 CRC-16US 1. Moltiplico: P (x) · xk 2. Divido il risultato per è D (x) con l'operazione di divisione tra polinomi e mi segno il resto R (x). Il mio checksum R (x). (a) Possiamo esprimere l'intero messaggio (checksum compreso) con la notazione: P 0 (x) = P (x) · xk + R (x) 3. In ricezione al posto di ricalcolare e confrontare, posso dividere P 0 (x) per D (x), se R (x) = 0 è corretto. Nella divisione tra polinomi in modulo 2, i segni non contano nulla (1 Ricordarsi di sottrarre gli esponenti nella divisione tra polinomi. 10 + 1 = 0 , 0 − 1 = 1). allora il checksum Esempio k = 4 , n = 10 , Messaggio: 1001000101 , Divisore D (x) = x4 + x3 + 1 P (x) · x P (x) = x9 + x6 + x2 + 1 Il nostro polinomio è quindi x13 x13 \ k = x13 + x10 + x6 + x4 x10 12 x x12 x12 \ x x9 x10 11 x x11 x11 x10 x10 x9 \ \ x9 x9 x8 x8 \ \ P (x) = x Dunque il resto è 0 x x8 \ \ x4 x3 x6 x4 x9 x8 x6 x4 1 13 x7 x5 x3 x1 7 x x7 x6 x4 5 x7 x7 x6 x6 R (x) = x3 + x \ x x5 x4 5 4 x x5 x x4 \ \ e quindi l'FCS è x3 x3 x x x3 01010 + x10 + x6 + x4 + x3 + x Divisore D (x) = x4 + x3 + 1 x10 x12 x12 x12 x4 8 \ x13 x13 x6 9 x10 x9 x9 x11 x11 x11 x10 x10 x9 \ \ x9 x9 x8 x8 \ \ Avendo quindi x8 x8 R (x) = 0 x7 x7 x6 x4 x3 x x4 x3 x6 x4 x3 x x9 x8 x6 x4 x3 x x6 x7 x7 x6 x6 \ \ x4 x3 x x5 x5 x4 x3 x3 x x5 x5 x4 x4 \ x x \ \ 1 x7 x5 x3 x1 \ il checksum è corretto. Tipi di errori rilevabili Errori su singolo bit, se D (X) ha almeno due termini D (X) non rappresenta ( 1 ≤ m < n+k ) Errori su due bit, se lunghezza di trama Errori su un numero dispari di bit, se D (X) un fattore di Xm + 1 per ogni valore di è esprimibile come fattore di m minore della massima X +1 Errori a burst, con lunghezza del burst inferiore o uguale a quella dell'FCS, cioè a k bit. Tipi di trame S nel protocollo HDLC Vengono utilizzate per il controllo di usso e di errore. Recive ready (RR): Si tratta del messaggio di acknowledgement/riscontro utilizzato quando non faccio piggybacking. Indico un ACK di N(R), cioè ho ricevuto no a Recive not ready (RNR) N (R) − 1 e ora mi aspetto l'arrivo di : Si tratta del messaggio di acknowledgement/riscontro no a N (R) − 1 N (R) , però non posso più ricevere! (Ad esempio perché ho il buer pieno) Reject (REJ) : Messaggio NACK : mi manca la trama N (R), ma ho ricevuto no a N (R) − 1 . Messaggio utilizzato nel protocollo go-back-n Selective Reject (SREJ) : NACK , mi manca la trama N (R), rimandala! Non ti dico niente sulle trame precedenti. È possibile richiedere la ritrasmissione di più trame (ad esempio SREJ,7,0: rimandami le trame tra 0 e 7) 11 Tipi di trame U nel protocollo HDLC SNRM/SNRME SARM/SARME DISC UA Abilita NRM o NRM esteso (la versione estesa utilizza numerazione delle trame a 7 bit) Abilita ARM o ARM esteso Richiesta di disconnessione Informazioni di conferma (riscontro per messaggi di inizializzazione ) Protocollo ABM I, 0, 1 È di tipo full duplex. Si fa piggybacking dei riscontri sulle unità informative signica trama informativa con N (S) = 0 e N (R) = 1 È possibile scegliere di sfruttare un protocollo go-back-n oppure selective repeat. C'è il solito timeout To È un protocollo pensato per una comunicazione punto-punto tra due stazioni Protocollo NRM È un protocollo half-duplex multiplato, dove c'è una stazione primaria e altre secondartie L'inizializzazione del protocollo viene fatta con ciascun client della rete Il bit P/F viene settato a P (poll ) dalla sorgente quando si aspetta una risposta dalla destinazione, viene invece inviato il bit F (nal ) quando la destinazione manda l'ultimo pacchetto di risposta. Una stazione secondaria aspetta di essere interrogata da una stazione primaria. La scelta go-back-n/selective repeat è arbitraria. Ecienza dei collegamenti HDLC ABM Prendiamo a confronto l'utilizzo di go-back-n e selective repeat su un collegamento Caso 1: b = 3 bit ⇒ N = 23 = 8 Con go-back-n terrestre e uno satellitare. WR = 1 Con selective repeat WS = 7 e WR = WS = 4 Caso 2: b = 7 bit ⇒ N = 27 = 128 Con go-back-n WR = 1 Con selective repeat e WS = 127 WR = WS = 64 Caso di un collegamento terrestre con probabilità di errore media Per b=3 il protocollo di tipo nestra d'invio Per b = 7 WS go-back-n risulta leggermente più eciente di selective repeat perché la sua è più ampia. il protocollo di tipo selective repeat è sempre meglio di go-back-n . I due protocolli tuttavia si eguagliano all'eccessivo aumento della lunghezza della trama. Caso di un collegamento satellitare con probabilità di errore media o molto grandi, Go-back-n go-back-n e selective repeat si eguagliano, però per Per la lunghezza di trama molto piccole b = 7 selective repeat è nettamente superiore. ha prestazioni pessime perché manda un molte trame inutili perdendo parecchio tempo. Caso di un collegamento con bassa probabilità di errore p = 10−6 ), go-back-n è peggio di selective repeat In caso di bassa probabilità di errore (ad esempio ma non moltissimo. Per lunghezze di trama brevi migliore. 12 go-back-n è Reti locali LAN (Local Area Network ) Spesso sono implementate con mezzo trasmissivo condiviso. Tecniche ad accesso multiplo Canalizzazione FDMA (Suddivisione delle frequenze) TDMA (Suddivisione a slot di tempo) CDMA (Suddivisione a divisione di codice) Accesso dinamico Prenotazione: Si suddivide il tempo in slot in cui ciascuna stazione può segnalare la propria volontà di trasmettere prenotandosi, poi ogni stazione in ordine inizia a trasmettere. È eciente ma richiede una buona sincronia (costosa). Trasferimento di permesso: Usato nelle arcaiche reti token ring. C'è un gettone di permesso che ruota tra i vari client e gli dà il permesso di trasmettere sulla rete. Accesso a contesa (o anche accesso casuale ) Ogni stazione ha la liberà di decidere quando trasmettere, se avviene una collisione di dati è necessario fermarsi è riprovare. Il canale di comunicazione è solitamente a bus. CSMA/CD (Carrier Sense Multiple Access / Collision Detection ) Il canale viene utilizzato in modo half-duplex . Prima di iniziare qualunque comunicazione, la stazione ascolta il canale di comunicazione per vedere se è già occupato (funzionalità di carrier sense ). Rivelazione di collisioni dei segnali sul bus ed emissione di una sequenza di jamming. Algoritmo di backo esponenziale binario: In seguito ad una collisione aspetto di slot . i k i · T secondi prima di trasmettere nuovamente. T = 51, 2µs è 0, ..., 2k − 1 dove k è il numero di collisioni avvenute. il tempo è un numero scelto a caso tra resta sso a 10 come valore massimo. Dopo 16 collisioni consecutive viene dichiarato errore. Se la trama trasmessa dalla sorgente non è abbastanza lunga, si rischia che la collisione torni quando ormai ho terminato la trasmissione della trama e quindi penso che quella collisione non la riguardi. Per evitare questo problema la condizione che deve essere soddisfatta, è che: dmax Lmin =2·τ =2· C v dove dmax è la distanza massima tra due stazioni e Nel caso di Ethernet classico abbiamo Lmin è la lunghezza minima delle trame trasmesse. Lmin = 64Byte , C = 10 Ms b e quindi dmax = 5, 12 Km Progetto IEEE802 Strati superiori Rete (802.2) LLC 802.3 802.5 802.11 altro CSMA/CD Token ring WiFi ... Fisico UTP,STP,bra ottica,radio,... 802.1 LLC - Logical Link Control Nel documento Collegamento dati viene denita la struttura generale delle trame 802 e lo schema qui sopra disegnato : Ha il compito della gestione dei collegamenti logici tra i vari protocolli di livello 2. MAC - Medium Access Control : È specico per ogni tipo di LAN, anche se hanno caratteristiche comuni tra loro (vedi MAC address in 802.3 e 802.11). Governa le procedure di accesso al mezzo trasmissivo. 13 Strato LLC (Logical Link Control ) Ha il compito di mostrare allo strato network una interfaccia unicata per tutti i vari protocolli di livello 2. Il livello LLC è implementato a software (mentre il livello MAC solitamente è implementato in hardware) Prende spunto da HDLC. Fornisce servizi di: Servizio connectionless senza riscontro Servizio connection-oriented Servizio connectionless con riscontro Struttura della trama LLC DA LLC SA Control Information 1 Byte 1 Byte 1/2 Byte Variable LLC DA (1 Byte): Indirizzo LLC di destinazione. Si tratta di indirizzi a livello applicativo all'interno delle stazioni LLC SA Control (1 Byte): Indirizzo LLC sorgente (1 o 2 Byte a seconda del tipo di PDU): Sono denite PDU informative e supervisive, in cui il campo di controllo è di 2 byte, mentre le PDU non numerate sono caratterizzate da un campo di controllo di 1 byte. La struttura di questo campo è uguale a quella del protocollo HDLC Information : Payload Strato MAC (Medium Access Control ) generico Provvede alla consegna delle unità informative LLC sulla rete Gestisce l'indirizzamento tramite un indirizzo univoco chiamato MAC Address Struttura della trama MAC DA MAC SA Information FCS 6 Byte 6 Byte Variable 4 Byte MAC DA MAC SA Information FCS : Indirizzo MAC di destinazione : Indirizzo MAC sorgente : Payload : checksum Indirizzi MAC I MAC address sono indirizzi da 6 Byte (48 bit) univoci per ciascuna scheda di rete al mondo. suddiviso in due parti: OUI OUI Serial number (48 bit) Il mac address è Serial number : È l'identicatore del produttore della scheda di rete (24 bit) : È un numero di serie univoco assegnato dal produttore alla scheda di rete (24 bit). L'ultimo bit consente di distringuere tra indirizzi singoli di broadcast, globali o locali. FF : FF FF : FF : FF : FF : è l'indirizzo di broadcast per inviare a tutte le stazioni della rete locale. L'ordine di trasmissione è dal bit meno signicativo Gli indirizzi universally administered e locally administered si distinguono per mezzo del settaggio del secondo bit meno signicativo del byte più signicativo dell'indirizzo. Se il bit è a 0, l'indirizzo è universally locally administered o local scope ; se viceversa è a 1, esso è globally administered o global scope. 14 Ethernet 802.3 Contenuto: Preamble SFD Destination Address Source Address Lenght LLC/PDU Padding FCS Dimensione (Byte): 7 1 6 6 2 0-1500 0-46 4 Preamble SFD : è una sequenza di bit stabilita a priori, destinata alla sincronizzazione del segnale. 10101011 : è la sequenza che contiene una violazione della codica Manchester. Viene utilizzato come Flag per indentifcare l'inizio del frame. Destination/Source Address Lenght : sono i MAC address destinazione e sorgente. : è la lunghezza del campo informativo seguente. Se il valore rappresentato è maggiore di 1500, si assume PDU pari a 1500 e si ignora Lenght. Padding : è un campo utilizzato per garantire che la lunghezza delle trame inviate sia sempre pari alla lunghezza minima di 64 Byte . FCS IFG (Inter Frame Gap) : è un codice a controllo di errore (checksum ) di tipo CRC-32. : Non si tratta di un campo della trama. È il tempo di attesa tra la ne di una trama e l'inizio della seguente. Per Ethernet classico abbiamo IF G = 9, 6µs Mezzi trasmissivi per Ethernet a 10Mb/s (802.3) XBaseY dove X =velocità in Mb/s , Base signica in banda base, Y è la lunghezza massima del cavo o altro. 10Base5 10Base2 10Base-T 10Base-FP 10Base-FL 10Base-FB Cavo coassiale Cavo coassiale Doppino UTP Fibra ottica Fibra ottica Fibra ottica 500m max. 185m max. 100m max. 500m max. 2000m max. 2000m max. 100 stazioni max 30 stazioni max. 2 senza hub 33 con hub 2 stazioni max 2 stazioni max Link segment Link segment Link segment Dettagli per 10Base5 Due stazioni devono essere distanti almeno 2,5m tra di loro Il cavo che collega la stazione al bus (cavo AUI ) non può essere più lungo di 50m. Dettagli per 10Base2 Due stazioni devono essere distanti almeno 0,5m tra di loro. Il cavo che collega la stazione al bus (cavo AUI ) non può essere più lungo di 50m. Regole di interconnessione Nel seguito considereremo un hub come un repeater con più porte. In realtà l'hub emette anche jamming per aiutare CSMA/CD. Ethernet classico utilizza sempre la codica manchester Un dominio di collissione è una zona dove sicamente le stesse trame ethernet possono collidere tra loro. In base ad alcune regole empiriche: Tra due stazioni qualunque ci possono essere al massimo: * * * 5 segmenti 4 repeater 2 transreciver Nel caso di 5 segmenti e 4 ripetitori: * Massimo 3 mixing segmenti 15 Fast Ethernet (802.3u) - Ethernet a 100Mb/s (1995) Trama uguale a Ethernet classimo, cambiano i tempi: Tf M IN = 5, 12µs , Lf M IN = 64 Byte Limite teorico: Introdotto il , Slot time = 5, 12µs , C = 100 Ms b 500m , limite reale: 250m full-duplex utilizzando due canali di comunicazione con switch Viene aggiunto uno strato di riconciliazione dei mezzi sici sotto a CSMA/CD 100Base-TX 100Base-FX 100Base-T4 100Base-T2 2 UTP CAT5 Fibra ottica 4 UTP CAT3 2 UTP CAT3 Stella Stella Stella Stella 4B5B-MLT-3 4B5B-NRZ-I 8B6T PAM5x5 Full-duplex Full-duplex Half-duplex Full-duplex 100m 100m 100m 100m Gigabit Ethernet (802.3z) - Ethernet a 1Gb/s (1998) Viene aggiunto alla trama ethernet un campo extension dopo FCS, per garantire una lunghezza minima della trama di 512 Byte. L f M IN = 512 Byte , Tf M IN = 4, 096µs , dteorica = 400m La distanza massima reale è 200m È possibile trasmettere più trame consecutive senza interporre l'IFG. Full duplex solo se uso switch-switch oppure switch-endsys. 1000Base-T = 25m 1000Base-SX = 550m 10 Gigabit Ethernet (802.3ae) - Ethernet a 10Gb/s (2003) Solo full-duplex Vietato l'uso di hub Permesso solo l'utilizzo di bra ottica come mezzo trasmissivo. 100 Gigabit Ethernet (802.ba) - Ethernet a 100Gb/s e 40Gb/s (2010) Richiede apparati molto potenti, permette di scegliere tra 40Gb/s e 100Gb/s. LAN Wireless - WiFi (802.11) Con la diusione di dispositivi mobili, si è pensato di standardizzare dei protocolli a livello 2 per utilizzare le onde radio come mezzo trasmissivo. L'utilizzo delle onde radio porta numerosi problemi che non è possibile risolvere interferenze piccola quantità di spettro elettromagnetico a disposizione, la variabilità della potenza del segnale e la necessità di gestire problemi relativi al risparmio di energia. applicando le stesse idee utilizzate per Ethernet standard. Basti pensare ai problemi dei disturbi e delle elettromagnetiche, alla Lo sviluppo delle wireless LAN ha avuto luogo facendo uso di porzioni dello spettro elettromagnetico non soggette per denizione a regolamentazione e quindi utilizzabili da chiunque (senza bisogno di licenze). spettro sono chiamate Queste porzioni di ISM (Instrumental, Scientic, Medical ) e sono in tre gruppi: 900 MHz, 2.4GHz, 5GHz. Gli standard sviluppati per le reti wireless sono tutti sottostandard del più generale IEEE 802.11 (la cui prima versione risale al 1997), spesso chiamato informalmente WiFi (Wireless Fidelity ). Strato sico di 802.11 Lo strato sico di 802.11 è stato suddiviso concettualmente in due parti: Physical Layer Convergence Procedure (PLCP) Physical Medium Dependent (PMD) 16 Phyisical Layer Convergence Procedure In questa parte dello strato sico si specica come riuscire a trasmettere ecaciemente le trame MAC sul mezzo sico. A dierenza di Ethernet, sul mezzo sico non viene inviata la trama MAC direttamente, ma è incapsulata a sua volta all'interno di una PLCP PDU strutturata come segue: PLCP Preamble PLCP Header PLCP Preamble PLCP Header PLCP SDU : realizza la funzione di sincronizzazione in ricezione e segnala l'inizio della trama : specica i parametri utilizzati nella trasmissione, come ad esempio la frequenza di cifra, la lunghezza della PLCP SDU e fornisce funzionalità di controllo d'errore. PLCP SDU (Physical Layer Convergence Procedure - Service Data Unit ): è la parte che contiene la trama del sottostrato MAC. Si noti che l'header della trama PLCP svolge funzioni speciche ed aggiuntive rispetto a quelle svolte a livello MAC. Physical Medium Dependent In questa parte dello strato sico si descrivono i vari metodi di trasmissione sica. Come già accennato, IEEE 802.11 utilizza come bande radio le frequenze ISM; in particolare sono utilizzate le frequenze 2,4GHz e 5GHz. Nel primo standard IEEE 802.11 i metodi di trasmissione erano tre e operavano nell'ordine dei 1-2Mb/s: Infrared Frequency Hopping Spread Spectrum ( FHSS ) Direct Sequence Spread Spectrum ( DSSS ) I due metodi a spettro diuso (spread spectrum ) eettuano la trasmissione di un usso di dati di B bit/s utilizzando una banda W molto più grande della frequenza di cifra del segnale numerico da trasmettere. Questo signica che il W B è molto maggiore di interessare il segnale trasmesso. rapporto Infrared 1 . Il motivo di questa scelta è tentare di combattere le interferenze che possono È un metodo di trasmissione a infrarossi che funziona in modo simile ai telecomandi operando su lunghezza d'onda 850-950 nm con modulazione PPM (Pulse Position Modulation ) ed uno schema di codica chiamato codice Gray che riduce gli errori dovuti alla sincronizzazione. La trasmissione può avvenire in modalità punto-punto o in modalità diusa. In questo secondo caso si ha lo svantaggio di una bassa copertura (10-20 metri) e l'interferenza dovuta ai raggi solari. Frequency Hopping Spread Spectrum (FHSS) Vengono utilizzati 79 canali larghi 1Mhz ciascuno, che iniziano dal margine inferiore della banda ISM a 2,4GHz. La sequenza numerica da trasmettere viene modulata con tecnica FSK (Frequency Shift Keying ) su una portante che viene cambiata frequentemente in modo pseudocasuale. Tutte le stazioni conoscono il seme casuale utilizzato per generare le frequenze, quindi possono mantenere la sincronizzazione. La quantità di tempo spesa in ogni frequenza, ossia il minore di 400 msec. tempo di rotazione, è un parametro regolabile che deve essere La rotazione della frequenza portante permette di ottenere un po' di sicurezza contro inter- cettazioni (un attaccante deve conoscere il seme di rotazione) e rende il sistema abbastanza insensibile alle interferenze radio. Ha buone prestazioni anche per collegamenti su lunghe distanze. Il suo svantaggio principale è la banda ridotta. Direct Sequence Spread Spectrum (DSSS) In questa tecnica ogni bit viene trasformato in una sequenza di segnali elementari chiamati chip PSK (Phase Shift Keying ). Per la trasmissione dei ussi a 2Mb/s viene utilizzata la modulazione (utilizzando la sequenza Barker ), che vengono trasmessi mediante modulazione QPSK (Quaternary Phase Shift Keying). Physical Medium Dependent - I nuovi standard Successivamente a questi primi metodi di trasmissione, sono stati standardizzati nuovi metodi che utilizzano velocità superiori: 802.11a, 802.11b, 802.11g, 802.11n. 802.11a Utilizza la banda ISM intorno ai multiportante utilizzata è 5 GHz per distribuire no a 54 Mb/s. La tecnica di modulazione OFDM (Orthogonal Frequency Division Multiplexing ), che utilizza 52 frequenze (48 dati e 4 per la sincronizzazione) e trasmette contemporaneamente su più frequenze nello stesso momento. Anche se la velocità massima è 54Mb/s, sono state denite altre velocità operative tra cui scegliere, ed è possibile operare anche a 6Mb/s. Viene utilizzata la modulazione PSK per le velocità no a 18Mb/s, velocità superiori. QAM (Quadrature Amplitude Modulation ) per OFDM era stato scelto per garantire la compatibilità con un altro standard europeo chiamato HiperLAN/2. 17 802.11b Nonostante il nome, questo standard è stato approvato e messo sul mercato prima di 802.11a. standard viene chiamato anche Questo HR-DSSS (High Rate Direct Sequence Spread Spectrum ). Si basa sulla modulazione spread spectrum come DSSS, utilizza però una tecnica di codica più complessa chiamata CCK (Complementary Code Keying ). Sono denite quattro velocità possibili per il usso dati: 1, 2, 5.5 e 11 Mb/s. La velocità da utilizzare viene scelta automaticamente analizzando la qualità del canale. Per garantire la retrocompatiblità con DSSS, alle velocità 1 e 2 Mb/s si utilizza lo stesso metodo di codica di DSSS. Per le ultime due velocità si opera a 1,375 Mbaud con 4 e 8 bit per baud, usando i codici Walsh/Hadamard . 802.11b è più lenta di 802.11a, ma il suo campo d'azione è circa sette volte più ampio. 802.11g Nel Novembre 2001 è stato pubblicato questo nuovo standard, derivato da 802.11b. Viene utilizzato il metodo di modulazione OFDM (come in 802.11a) ma opera nella più ristretta banda ISM del 2,4 GHz. La velocità massima utilizzabile è 54 Mb/s. Struttura della rete In una rete radiomobile si distinguono due tipi di congurazioni: servizio radiomobile base e il servizio radiomobile esteso. Nel servizio di tipo base le stazioni, il cui insieme è chiamato BSS (Basic Service Set ), possono comunicare l'una AP (Access Point ) agisce da stazione radio base con l'altra senza restrizioni. Se presente, un'altra stazione chiamata che consente la comunicazione delle altre stazioni con altri apparati remoti di rete. Se non è presente nessun Access Point, la rete prende il nome di rete ad-hoc . È possibile collegare tra loro più insiemi di BSS in un ESS (Extended Service Set ). Ciò viene realizzato con l'interconnessione degli AP delle varie BSS mediante un sistema di distribuzione (DS , Distribution System ), che è tipicamente una LAN cablata (per esempio una rete Ethernet). Il problema della stazione nascosta/esposta Nonostante il successo delle reti Ethernet, le reti wireless non utilizzano il protocollo CSMA/CD. Il motivo principale è che con i collegamenti radio, la potenza del segnale ricevuto è strettamente dipendente dalla positizione del terminale e quindi non si ha più la certezza di poter rilevare collisioni. Il problema più noto nelle reti radiomobili è il problema della stazione nascosta . Poiché non tutte le stazionisono all'interno del campo radio delle altre, le trasmissioni che avvengono in una parte della cella possono non essere ricevute in un'altra parte della stessa cella. Può dunque succedere che una stazione, che non riceve i segnali di altre che stanno comunicando tra loro, pensi erroneamente che il canale di comunicazione sia libero e inizi a trasmettere. Il problema complementare, cioè quello della stazione esposta accade quando una stazione rileva del traco adiacente e decide di non trasmettere, anche se la sua destinazione è pronta a ricevere e la trasmissione non inuenzerebbe il traco adiacente. Protocollo CSMA/CA È un protocollo di accesso diverso che cerca di prevenire le collisioni. Il nome CSMA/CA signica Carrier Sense Multiple Access with Collision Avoidance . Dunque abbiamo ancora la funzione di sensing del canale ma la possibile presenza di collisioni viene gestita in modo diverso. CSMA/CA supporta due modalità operative: Nella prima modalità la stazione controlla se il canale è libero prima di trasmettere. Durante la trasmissione la stazione non controlla il canale ma emette l'intero frame, che può comunque rimanere danneggiato. Se il canale è occupato la stazione rimanda l'operazione no a quando il canale non diventa libero e poi invia i dati. In caso di collisione, le stazione coinvolte rimangono in attesa per un tempo casuale adottando l'agoritmo di backo esponenziale binario, quindi ritentano. Nell'altra modalità operativa di CSMA/CA (basata su MACAW ), viene utilizzato un meccanismo di controllo di presenza del canale virtuale più sosticato. Viene introdotta la procedura di esplicita autorizzazione alla trasmissione da una stazione all'altra, eseguita mediante l'invio di una trama Request To Send (RTS ) , cioè richiedo invio e risposta positiva con una trama Clear To Send (CTS ) cioè puoi inviare. Naturalmente pur adottando questo meccanismo le collisioni possono comunque avvenire. Si prevede quindi che le trame dati ricevute correttamente siano esplicitamente riscontrate inviando una trama di acknowledgement (ACK ) cioè di riscontro. Di seguito ci riferiremo sempre a questa seconda modalità operativa (la prima è poco utilizzata). A causa di svariati motivi, il tasso di errore sulle reti wireless è nettamente superiore a quelle cablate. Per questo motivo si prevede che le trame dati di lunghezza superiore ad una data soglia vengano suddivise in frammenti consecutivi. In questo modo si limita il numero delle trame da ritrasmettere in caso di errore. Ogni trama ha il proprio checksum, i frammenti sono numerati e inviati con una sorta di protocollo stop-and-wait. 18 Protocollo di accesso Lo standard 802.11 prevede due modalità di accesso al canale radio condiviso: Distributed Coordination Function (DCF ): Modalità distribuita di accesso al mezzo secondo il protocollo Point Coordination Function (PCF ): Procedura aggiuntiva che può essere eettuata in presenza di un Access CSMA/CA che può dar luogo a collisioni. Point per evitare l'occorrenza di collisioni. Questa seconda modalità è utilizzata molto raramente. La seconda modalità operativa prima discussa si basa tutta su un discorso di dierenziazione dei tempi di ritardo, quattro diversi intervalli minimi di tempo tra le trasmissioni di trame consecutive, detti InterFrame Spacing (IFS ) che elenchiamo qui dal più breve al per gestire la priorità nell'accesso al mezzo trasmissivo. Vengono identicati più lungo: Short Interframe Spacing (SIFS ): Minimo tempo di attesa dopo la rivelazione della ne trasmissione di una trama. È anche il tempo atteso prima di trasmettere trame ad alta priorità, che sono: Trame CTS, ACK Trame di risposta a interrogazioni dell' AP Frammenti successivi di altri frammenti trasmessi con successo PCF InterFrame Spacing (PIFS ): Intervallo di tempo intermedio utilizzato per garantire priorità di accesso al mezzo nella modalità PCF. DCF InterFrame Spacing (DIFS ): Intervallo di tempo più lungo adottato dalle stazioni che operano in modalità DCF per trasmettere il primo frammento delle trame dati e trame di gestione. Extended InterFrame Spacing (EIFS ): L'intervallo di tempo dopo cui una stazione che ha ricevuto un frammento danneggiato/sconosciuto può annunciarlo alle altre stazioni. Questi tre tipi di ritardi sono calcolati a partire dal momento in cui termina l'occupazione del canale. All'intervallo DIFS soltanto segue un intervallo di tempo, detto nestra di contesa, in cui le stazioni che operano in modalità DCF tentano di prendere il controllo del canale mediante l'utilizzo del protocollo CSMA/CA. Lo slot di di tempo contesa τ è nell'ordine dei 5 − 50µs. Di seguito è illustrato il diagramma a stati delle operazioni su CSMA/CA (riferito alla modalità Descriamo ora il funzionamento del protocollo nei due casi DCF e PCF Modalità DCF È la modalità maggiormente utilizzata. Partiamo dall'esempio della comunicazione rappresentato in gura: 19 DCF): In questo esempio ipotizzeremo l'assenza di collisioni di cui comunque parleremo dopo. La stazione A ha una trama da inviare alla stazione B. Aspetta un intervallo di tempo DIFS in cui si assicura che il canale sia libero e poi trasmette una trama RTS di richiesta trasmissione destinata alla stazione B. La stazione B attende un tempo SIFS e acconsente alla trasmissione inviando ad A una trama CTS. La stazione A attende un tempo SIFS dalla ricezione della trama CTS e inivia i dati. Dopo un intervallo di tempo SIFS successivo all'invio dei dati, la stazione B invia una trama ACK per confermare l'avvenuta ricezione dei dati. Al ne di evitare altre trasmissioni mentre la stazione A sta inviando, che possono provocare collisioni, le trame RTS e CTS contengono al loro interno l'informazione sull'intervallo di tempo di occupazione del mezzo trasmissivo per l'invio e il riscontro della trama in questione (compresi gli intervalli SIFS). Questa informazione di occupazione è chiamata NAV (Network Allocation Vector ). Le altre stazioni che ricevono queste trame (RTS e CTS) restano inattive durante l'intervallo di tempo NAV (signicato dei blocchi NAV per le stazioni C e D nella gura precedente). Il fatto che l'indicazione del tempo sia anche all'interno della trama CTS (oltre a quella RTS) permette di fare in modo che se ad esempio D non riceve il segnale di A ma riceve quello di B, riesce ad accorgersi comunque che è in corso una trasmissione. Questo meccanismo risolve il problema della stazione nascosta. Caso del canale occupato Una stazione che rivela il canale occupato, attende che il canale permanga libero per un tempo DIFS. Ciò garantisce che le trasmissioni a priorità superiore (cioè tutte quelle che attendono un intervallo di tempo inferiore a DIFS) possano essere eettuate. Se il canale risulta libero dopo un tempo DIFS, viene trasmessa la trama RTS di richiesta di trasmissione. Altrimenti la stazione applica l'algoritmo di backo. Algoritmo di backo di CSMA/CA Se si entra in fase di backo, la trasmissione viene ritardata di un tempo casuale di i slot, selezionato a caso all'interno di un intervallo di durata massima di K slot. K cresce man mano con il numero di tentativi di trasmissione che non hanno successo. Il valore iniziale dell'intervallo è ritardo iniziale è un numero di slot tra Una 0 e 7. K = 7 slot, così che 22+i − 1 slot. il Al tentativo i -esimo, l'intervallo ha ampiezza massima particolarità dell'algoritmo di backo utilizzato da CSMA/CA è che gli slot di attesa vengono calcolati solo durante le eettive nestre di contesa, cioè quando il mezzo è libero. Il conteggio degli slot di attesa viene sospeso se si rivela una nuova trasmissione in corso. Il conteggio viene ripreso un intervallo di tempo DIFS dopo la ne dell'occupazione del canale. Esaurito il backo si trasmette la trama RTS. Collisioni Nonostante il protocollo implementi i meccanismi di permesso con RTS, CTS e il backo, possono comunque avvenire delle collisioni tra le trame. Può infatti succedere che due stazioni emettano una trama RTS nello stesso slot temporale. In questo caso la stazione destinataria non emette (come previsto) la trama CTS entro un tempo SIFS e quindi la stazione che ha emesso la trama RTS applica l'algoritmo di backo. Questo meccanismo si applica anche quando una trama dati non viene riscontrata da una trama ACK dopo un tempo SIFS. In quest'ultimo caso si noti che è possibile che ci sia un errore sulla trama dati (quindi scartata dalla destinazione ricevente che non conferma con ACK), sia una collisione che ha interessato la trama di riscontro ACK, che non torna al mittente. Per risolvere questi problemi le trame e i frammenti sono numerati, cosa che permette di riconoscere duplicati in caso di ritrasmissioni. Frammenti Come già accennato prima, la trasmissione del primo frammento dati richiede un tempo di attesa DIFS, mentre i successivi frammenti vengono inviati dopo un intervallo di tempo libero SIFS. In questo modo si dà priorità al completamento della trasmissione di tutti i frammenti di una trama rispetto all'invio di nuove trame. 20 Modalità PCF Nella modalità PCF (raramente utilizzata), una stazione agisce da coordinatore (Coordination Point, P C) e controlla in modo centralizzato l'accesso al mezzo trasmissivo. Questo meccanismo di controllo centralizzato avviene in modo simile a quanto già visto per la modalità NRM del protocollo HDLC. Quindi in modalità PCF non possono vericarsi collisioni a priori, dato che è la stazione centrale a gestire tutti i permessi. La stazione PC risiede su un Access Point e attiva la modalità PCF inviando una trama speciale dopo un tempo PIFS dall'ultima occupazione del canale. La stazione PC invia poi delle trame di interrogazione poll a cui le stazioni rispondono con una distanza temporale pari ad un intervallo SIFS. Servizi e trama di 802.11 Nel protocollo 802.11 ci sono tre tipi principali di trame: Trame di gestione Autenticazione Associazione Sincronizzazione ... Trame di controllo RTS, CTS, ACK Trame dati Servizi oerti Lo standard 802.11 stabilisce nove servizi che ogni LAN wireless deve fornire. I primi cinque sono servizi di distribuzione (riguardano la gestione dell'appartenenza alla cella), gli altri quattro sono servizi stazione (si occupano dell'attività all'interno della singola cella). 1. Associazione: Servizio utilizzato dalle stazioni mobili per eettuare la connessione alla stazione base. La stazione annuncia la propria identità e le funzionalità (velocità, servizi PCF, gestione alimentazione), la stazione base può decidere se accettare o meno. Se accetta il passo successivo è l'autenticazione 2. Separazione: La stazione mobile o quella base possono separarsi interrompendo la relazione. Una stazione mobile dovrebbe utilizzare questo tipo di messaggio per avvisare la stazione base prima di lasciare la cella. 3. Riassociazione: Con questo servizio una stazione mobile può cambiare la propria stazione base da una cella all'altra. Se viene sfruttata correttamente, questa funzionalità permette di evitare la perdita di dati nel passaggio da un access point all'altro. 4. Distribuzione: Servizio che stabilisce come instradare i frame verso la stazione base. Se la stazione base è direttamente accessibile verranno inviati via radio, altrimenti via rete cablata. 5. Integrazione: Servizio che permette la traduzione tra indirizzi di tipo diverso per instradare un frame attraverso una rete non 802.11. (seguono le operazioni interne alle celle aettuate solo dopo l'associazione) 1. Autenticazione: Per garantire la sicurezza nell'accesso alla rete, la stazione base manda un frame challenge per vedere se la stazione mobile conosce la risposta, se la conosce la stazione mobile risponde con un frame cifrato alla stazione base, per confermare di conoscere il segreto condiviso. Se il risultato è corretto la stazione mobile viene denitivamente registrata all'interno della cella. 2. Invalidamento: Quando si desidera abbandonare la rete, si invalida l'autenticazione precedentemente eettuata. 3. Riservatezza: Le informazioni trasmesse sulla LAN wireless possono essere cifrate per garantirne la riservatezza. Questo servizio gestisce la codica e decodica dei dati. Il sistema che gestisce la riservatezza, integrato nello standard 802.11 è WEP (Wired Equivalent Privacy ) che fa uso di RC4 come algoritmo di cifratura. Questo sistema ha soerto di seri problemi di progettazione, che permettono ad un attaccante di violare la sicurezza di una rete WEP nel giro di pochi minuti. In risposta a questi problemi di sicurezza sono stati inventati i sistemi WPA (Wi-Fi Protected Access ). 4. Trasferimento dei dati: 802.11 fornisce ovviamente un modo per trasmettere e ricevere dati. Così come Ethernet però la trasmissione non è adabile e gli strati superiori devono gestire il rilevamento e la correzione degli errori. 21 Formato di trama La trama del sottostrato MAC del protcollo 802.11 è strutturata come segue: Contenuto: FC Duration/ID Address 1 Address 2 Address 3 Seq.Control Address 4 Info FCS Byte 2 2 6 6 6 2 6 0-2312 4 Discuteremo dei vari campi Address nel segito, vediamo il signicato dei vari campi: FC Frame Control (2 Byte): Comprende un sottinsieme di informazioni strutturate come segue: , Prot.Ver. Type Sub Type To DS From DS More Flag Retry Pwr Mng More Data WEP Order 2 bit 2 bit 4 bit 1 bit 1 bit 1 bit 1 bit 1 bit 1 bit 1 bit 1 bit I cui campi sono: Protocol Version (2 bit): Specica la versione del protocollo (quella corrente è la 0) Type (2 bit): Distingue tra 3 tipi di trama: gestione (00), controllo (01) e dati (10) SubType (4 bit): Specica ulteriormente il sotto tipo di trama: (sotto-)trama di assocazione (trama di gestione), (sotto-)trama RTS (trama di controllo) To DS (1 bit): Specica come interpretare i campi indirizzo From DS (1 bit): Specica come interpretare i campi indirizzo More Flag (1 bit): Settato se si tratta di un frame frammento Retry (1 bit): Specica se la trama è una ritrasmissione o è la prima volta che viene trasmessa Power Management (1 bit): Indica lo stato attivo o in risparmio energetico della stazione radiomobile. More Data (1 bit): Indica alla stazione in stato di risparmio energia che ci sono altre trame in attesa nell'AP indirizzate alla stessa stazione. WEP (1 bit): Indica che l'informazione trasportata dalla trama è cifrata mediante il sistema WEP. Order (1 bit): Specica alla stazione destinazione che le trame devono essere elaborate nell'ordine inviato. Duration/ID (2 Byte): Indica la durata di occupazione prevista del canale (NAV ), espressa in microsecondi. Se si utilizza la modalità PCF, nel caso di trame di controllo per interrogazione (poll) indica invece l'identicazione dell stazione sorgente della trama che sta rispondendo ad una interrogazione. Sequence Control numero del frammento della trama in corso di numero di sequenza (tra 0 e 4095). Ovviamente il numero di trama è (2 Byte): Indica, con i primi 4 bit il trasmissione e con i successivi 12 bit il lo stesso per più frammenti della stessa trama. Information (0-2312 Byte): Contiene le informazioni del protocollo superiore trasportate dalla trama (il livello LLC ). FCS , Frame Check Sequence (4 Byte): Contiene il codice di controllo d'errore (checksum) di tipo CRC-32. I diversi signicati dei quattro campi Address dipendono dai valori assunti dai campi to DS e From DS. In ogni caso gli indirizzi sono MAC address a 48 bit, strutturati allo stesso modo di quelli Ethernet. Di seguito una tabella riassuntiva con le varie congurazioni: Caso To DS From DS Address 1 Address 2 Address 3 Address 4 A 0 0 Dest. Addr. Source Addr. BSS ID - punto-punto B 0 1 Dest. Addr. BSS ID Source Addr. - Uscente dal DS C 1 0 BSS ID Source Addr. Dest. Addr. - Entrante nel DS D 1 1 Reciver Addr. Transmitter Addr. Dest. Addr. Source Addr. Da BSS a BSS Nel Il Tipo di trama caso A il trasferimento della trama avviene all'interno della BSS, di cui viene specicato l'identicatore. caso B si riferisce ad una trama inviata dal sistema di distribuzione (DS) a una stazione di cui si specica l'indirizzo all'interno di un dato BSS. Il caso C, speculare al precedente, si riferisce ad una trama inviata da una stazione all'interno di un dato BSS verso il sistema di distribuzione (DS) Il caso D si riferisce alla trasmissione di una trama tra stazioni di BSS dierenti. Il reciver address indica l'indirizzo MAC dell'AP di transito nel BSS sorgente che riceve, allo stesso modo trasmitter address indica l'indirizzo dell'AP del BSS di destinazione. 22 Prestazioni delle reti LAN Metriche Traco smaltito Probabilità di perdita Tempo di attraversamento Ritardo causato dal buer Ritardo di trasmissione Ritardo di propagazione Parametri N= λ= C= L= Numero dei nodi (esclusi i punti di attraversamento) Frequenza media di arrivo in una generica stazione delle unità informative Velocità della rete bit s Lunghezza ssa del pacchetto trasmesso Conseguenze Traco oerto alla rete (da tutti): A = N · (λ · L) Traco smaltito dalla rete: A = (N · λ · L) · (1 − π ) o S πp bit s p è la proababilità di errore per pacchetto Se ipotizziamo πp = 0 0≤ρ≤1 T HR = S · C allora il throughtput di rete normalizzato è S=ρ= (N ·λ·L) C [Erlang] = [1] indica la quantità di tempo in cui la rete è occupata bit s Nel seguito considereremo il mezzo trasmissimo ideale e privo di errori Traco su una rete TDMA Trama 1 1 2 Trama 2 3 ... NL C N S=ρ= 1 2 3 ... NL C Trama 3 N 1 Per ogni slot il tempo di trasmissione è 2 ... TT = L C N ·λ·L C Trascurando il tempo di propagazione, abbiamo 3 componenti di ritardo: TT tempo di trasmissione nel mezzo TW tempo di attesa nella stazione TSync tempo di sincronizzazione, di attesa per l'arrivo dello slot assegnato T T = · = · T = · Delay di attraversamento medio Il tempo W Sync (attesa che i pacchetti nel buer vengano inviati) W è determinato da una coda di tipo ρ 2·(1−ρ) N ·L C 1 µ ρ 2·(1−ρ) M/D/1 N ·L C 1 2 mediamente : DT DM A = L ρ N ·L N ·L + · + C 2 · (1 − ρ) C 2·C Delay di attraversamento medio normalizzato: D̂T DM A = DT DM A N ·ρ N =1+ + TT 2 · (1 − ρ) 2 23 Traco su una rete FDMA Stazione 1 Stazione 2 C N C N ... ... C Stazione N C N t 1 T = = = [s] [ ] = [1] S =ρ=λ·T =λ· M/D/1 Delay di attraversamento medio: Assumiamo bit Hz L V elocità T N ·L C L C N N ·L C T Erlang con sempre 0≤ρ≤1 Ipotizziamo ancora una coda di tipo DF DM A = N ·L ρ N ·L + · C 2 · (1 − ρ) C Il termine NC·L è da intendere come il tempo di trasmissione ρ Il termine 2·(1−ρ) · N ·L C è il tempo TW TT nel buer Non c'è tempo di sync Delay di attraversamento medio normalizzato: D̂F DM A = N · (2 − ρ) 2 · (2 − ρ) osserviamo quindi che rispetto al caso TDMA: D̂F DM A = D̂T DM A + N −1 2 Quindi TDMA è soprendentemente più eciente di FDMA. Protocollo ALOHA T = S= G= S={ Niente carrier sensing, niente collision detection T Tempo di trasmissione del pacchetto Numero medio di trasmissioni con successo in un intervallo di tempo Numero medio di trasmissioni tentate in un intervallo di tempo Arrivo dei pacchetti con distribuzione di Poisson con Probabilità di passare} = G · {Probabilità Il massimo si ottiene per G= 1 2 Λ= che in ⇒ S = 0, 184 T T G T 2·T non trasmette nessuno} cioè passa al massimo solo il = G · e−2·G 18% del traco! In base alla metrica del ritardo: DALOHA = e2·G − 1 · TT + 2 · τ + k−1 2 · TT + TT + τ 2·G Il termine e − 1 rappresenta il numero di tentativi * * senza successo per ottenere una trasmissione che vada a buon ne. Il termine k−1 2 · TT rappresenta la media del tempo di backo. Abbiamo quindi un delay di attraversamento medio normalizzato pari a k+1 2 +2·a +1+a Se aumento S e k,D tende ad esplodere 24 D̂ALOHA = e2·G − 1 · Interconnessione di reti locali Dominio di collisione : È una zona della rete dove due trame provenienti da due stazioni, possono collidere tra di loro. Dominio di broadcast : È l'insieme delle stazioni di una rete a cui viene consegnata una trama con indirizzo broadcast generata da una qualunque delle stazioni stesse. Interconnessione tramite repeater o hub Si tratta di due tipi di dispositvi hardware che lavorano a livello protocollare 1 (sico) Quando è semplicemente necessario amplicare il segnale attenuato dai limiti sici del mezzo, possiamo utilizzare un repeater che legge il segnale in ingresso e lo ritrasmette amplicato. Quando dobbiamo connettere più stazioni allo stesso mezzo condiviso, con i cavi UTP è necessario utilizzare un hub. Un hub è sostanzialmente un repeater con più porte. Un hub legge il segnale ricevuto su una porta e lo ritrasmette su tutte le altre. In realtà c'è una piccola dierenza: quando un hub intercetta una collisione, provvede ad emettere la sequenza di jamming su tutte le porte, cosa che il repeater non fa. Un hub unisce domini di collisione e broadcast. Interconnessione tramite bridge (e switch) Un bridge è ben più evoluto di un hub. Esso infatti non si limita a ritrasmettere segnali a livello sico, ma si occupa anche di leggere le trame informative di livello 2 che vengono ricevute. Un bridge può interconnettere sia reti che utilizzano lo stesso protocollo di livello 2, cioè lo stesso protocollo MAC, sia reti che utilizzano protocolli MAC diversi (ad esempio 802.3u e 802.11g). Sostanzialmente un bridge interconnette tra loro reti diverse per costituire un unico dominio di broadcast senza tuttavia unire i domini di collisione. Il bridge di tipo più diuso è il così detto transparent bridge . Esiste un altro tipo di bridge, utilizzato nelle sole reti token ring, chiamato source routing bridge. Tra i compiti del bridge abbiamo l'unicazione di reti con: Dierente frequenza di cifra Dierente dimensione massima del campo informativo Dierenti meccanismi di gestione di priorità e riscontro delle trame Passiamo ora a vedere come funziona un bridge. Per sapere dove inviare le trame, ogni bridge dispone di una di inoltro tabella dove memorizzare l'associazione tra l'identicatore di una stazione (l'indirizzo MAC) e la porta del bridge attraverso cui la stazione può essere raggiunta. Per evitare la crescita incontrollata della tabella, ad ogni voce della tabella è associato un campo età, che consente di eliminare dalla tabella quelle voci che non sono aggiornate entro un intervallo di tempo massimo (per esempio 10 minuti). La dierenza tra bridge e switch è abbastanza sottile. Solitamente per switch si intendono dei bridge a più porte che lavorano solo su rete Ethernet 802.3 (e non tra diversi tipi di reti) e solitamente ogni porta comunica con un solo host, e non con una rete a bus. La tabella di inoltro potrebbe quindi apparire in modo simile a questo: Porta MAC address Età 1 00:12:34:03:AB:01 3 min 4 01:44:AF:41:E7:02 1 min Operazioni svolte dal bridge Vediamo in che modo il bridge popola le proprie tabelle di inoltro. Fase di inoltro Dopo aver vericato l'assenza di errori nella trama per mezzo del campo FCS, il bridge esamina il campo destinazione della trama stessa. Se la destinazione è presente nella tabella di inoltro, la trama viene inviata su quella porta. Se invece la destinazione non è presente nella tabella di inoltro (oppure se l'indirizzo coincide con quello di broadcast), la trama viene inviata su tutte le porte eccetto quella da cui è stata ricevuta. Fase di apprendimento La popolazione della tabella di inoltro avviene in modo automatico nella fase di apprendi- mento, osservando il campo dell'indirizzo sorgente nella trama ricevuta. Se il mittente non è presente nella tabella di inoltro, viene aggiunto. Se il mittente è già presente nella tabella, viene aggiornato il campo età e eventualmente l'identicatore della porta, nel caso in cui fosse diverso da quello memorizzato precedentemente (ad esempio quando una stazione si sposta da una rete all'altra). 25 MAC ooding Esiste un tipo di attacco con il quale un possibile attaccante potrebbe riempire le tabelle di inoltro di un bridge (rallentandone le prestazioni) emettendo molte trame con indirizzi sorgente fasulli. Spanning tree È abbastanza ovvio che, in presenza di diversi bridge possono venire a formarsi dei cicli (loop ) all'interno della rete. Questi cicli devono essere evitati per eliminare il fenome dei broadcast storm (tempeste di broadcast). La rimozione del loop viene attuata mediante la costruzione dello spanning tree , che consiste nell'etichettare opportunamente le porte dei bridge in modo che alcune di queste possano essere disabilitate, con il risultato di identicare un albero che unisce tutti i bridge. Si ricorda in proposito che gli alberi sono per denizione aciclici. Ciascun bridge è individuato mediante un unico identicatore (ID) e in particolare si denisce root-bridge quello con ID più basso. Questo identicatore è ricavato a partire da un indirizzo MAC del bridge come vedremo in seguito. Le porte di ogni bridge possono assumere uno tra i seguenti ruoli: root R designated blocked B ( ): la porta che individua il percorso più breve che porta dal bridge al root-bridge ( (D): la porta che determina il percorso più breve della LAN interfacciata verso il root-bridge ): identica una porta disabilitata Vediamo alcune caratteristiche: Un root-bridge è dotato solo di porte di tipo D. Se più bridge interfacciano la stessa LAN, solo uno di essi ha una porta di tipo D verso la LAN Ogni bridge ha solo una porta marcata come B. La costituzione dello spanning tree è realizzata mediante lo Spanning Tree Protocol STP [IEEE 802.1D]. Questo standard denisce lo scambio di apposite unità informative denominate Bridge Protocol Data Unit (BPDU), che permettono di eleggere il root bridge e l'etichettatura delle porte di tutti i bridge. Trama BPDU (22 Byte, 176 bit) Contenuto Root Identier (ID) Root Path Cost (RPC) Bridge Identier (BI) Port Identier (PI) Byte 8 4 8 2 Vediamo la descrizione dei vari campi: Root Identier, RI (8 byte): identicatore (ID) del root bridge secondo il bridge emittente (BI) che invia la trama BPDU. Questo identicatore è composto di due parti: Bridge Priority (2 Byte): È un valore che può essere modicato dall'amministratore di rete per cambiare le priorità dei vari birdge. Il valore di default è 32768. MAC address (6 Byte) Root Path Cost, RPC (4 Byte): costo della via dal bridge BI che emette la BPDU, al (presunto) root- bridge RI, espresso con opportuna metrica. Una regola comunemente utilizzata consiste nel porre il costo di 1000 attraversamento di una rete con frequenza di cifra di C Mbit/s uguale al valore C (ad esempio per una rete Fast Ethernet si ottiene 10). Bridge Identier, BI (2 Byte): identicatore del bridge che emette la trama BPDU. È suddiviso in due parti uguali a quelle presenti nel campo root identier Port Identier, PI (2 Byte): identicatore della porta attraverso cui la BPDU viene trasmessa. È suddiviso in due campi: Port priority (1 Byte): È un valore che può essere modicato dall'amministratore di rete per cambiare le priorità delle porte (vedremo in seguito a cosa può servire). Il valore di default è 128. Port number (1 Byte): Identicatore della porta sica. massimo 256 porte. 26 Essendoci 1 Byte abbiamo a disposizione al Meccanismo di scambio delle trame BPDU Ogni bridge che riceve una BPDU ne aggiorna il valore y del campo RPC ricevuto sommandovi il costo n dell'ultima rete attraversata per ottenere un nuovo vaore y+n del campo RPC. In caso di dubbi sul costo, sommare 1 può essere una scelta adeguata. Inizialmente ogni bridge ritene di essere il root bridge, quindi invia in rete delle BPDU del tipo x (x, 0, x, −) dove è l'identicatore del bridge in questione. Un birdge che riceve su una porta una BPDU in cui il valore di RI è più piccolo del proprio BI, capisce di non essere il root bridge e imposta il valore di RI ricevuto come valore del root bridge e marca la porta come R. Nel caso di più BPDU ricevute, viene scelta quella con priorità più il più piccolo valore di RPC ricevuto, a parità di questo con il più piccolo valore di BI ricevuto, alta: con a parità di questo con il pià piccolo valore di Port Identier del bridge stesso. Un bridge che non sia root bridge provvede a ritrasmettere le BPDU che riceve sulla porta R verso tutte le altre porte D, aggiornando i campi BI, RPC e PI. Se la BPDU emessa su una porta ha una priorità più bassa (secondo le stesse regole citate prima per la elezione della porta root di un bridge), di almeno una delle BPDU ricevute sulla stessa porta, la porta viene etichettata come B, e quindi disabilitata per elimitare il loop. In caso contrario la porta resta etichettata come D. Attenzione: questo confronto di priorità viene fatto prima di aggiornare il valore RPC della trama BPDU! Le porte R ricevono trame BPDU, non si invia su porte R. Il root bridge etichetta tutte le sue porte come D e sarà l'unico ad inviare trame BPDU. Le porte bloccate B non possono essere utilizzate per inviare, ma si può ricevere dati per aggiornarsi. Lan virtuali (802.1Q) Per svariati motivi, ad esempio di congestione della rete, di suddivisione in gruppi lavorativi etc.. Può essere utile suddividere una rete locale in più reti locali virtuali, dette anche VLAN (Virtual Local Area Network) . Le VLAN sono assolutamente indipendenti dalla congurazione sica della struttura di una LAN. È quindi possibile eettuare lo spostamento di una stazione da una LAN a un'altra senza dover operare alcuna modica di cablatura sica della stazione stessa. Esistono svariati modi per identicare una stazione all'interno di una LAN: In base alla porta del bridge/switch su cui arriva la trama In base all'indirizzo MAC della stazione Per il tipo di protocollo di livello 3 utilizzato Lo standard 802.1Q ha fatto alcune piccole modiche alla trama standard Ethernet, al ne di poter meglio identicare 1 a quale rete appartiene una stazione. Vediamo la nuova struttura della trama : Contenuto Preamble SFD Destination Address Source Address VLAN prot. Priority, CFI, VLAN ID Byte 7 1 6 6 2 2 Length LLC/PDU Padding FCS 2 0-1500 0-42 4 Vediamo nel dettaglio le aggiunte fatte dallo standard: VLAN protocol (2 Byte): In realtà questo campo, che ha sempre valore esadecimale 0x8100, permette di identicare che si tratta di una trama di tipo 802.1Q. In una trama Ethernet normale infatti, al suo posto ci sarebbe il campo Length, che non può superare il valore 1500, quindi grazie a questo campo aggiunto non c'è il rischio di confondere una nuova trama 802.1Q con una vecchia 802.3 Priority (3 bit): Permette di associare un livello di priorità ad un usso di traco a livello 2. In realtà questa è considerabile una leggera violazione della straticazione protocollare, secondo la quale sarebbe più consono gestire la qualità del servizio a livelli superiori. Dato che la modica della trama Ethernet è un evento molto raro, qualcuno ha pensato di aggiungere questo campo. Canonical Format Indicator, CFI (1 bit): Specica, se posto ad 1, che la trama è di tipo Token Ring, ed è quindi necessaria una elaborazione particolare. VLAN Identier, VLAN ID (12 bit): Indica la VLAN a cui appartiene la trama, con valori ammessi da 1 a 4094 (i valori 0x000 e 0xFFF sono riservati). 1È stata qui rappresentata su due righe per motivi di impaginazione 27 In realtà molte delle apparecchiature non supportano ancora questo standard, ed è quindi necessario, sugli switch/bridge, eettuare una conversione prima di consegnare la trama Ethernet. Poi, volendo guardare alla sicurezza, è meglio evitare di ricevere trame 802.1Q dalle stazioni connesse agli switch, perché esse potrebbero ngersi parte di un'altra VLAN. È meglio invece assegnare le VLAN a ciascuna porta sica dello switch (via software) e inviare trame Ethernet standard ai client, utilizzando trame Ethernet 802.1Q solo per la comunicazione tra switch. Questa è una pratica abbastanza diusa. Congurazione delle VLAN sui sistemi GNU/Linux Sui sistemi GNU/Linux (e tutti gli altri sistemi che implementano la suite di comandi iproute2 ) è possibile creare una scheda di rete virtuale associata ad una determinata vlan con un comando tipo: ip link add link eth2 name eth2.5 type vlan id 5 Con questo comando si crea una interfaccia di rete virtuale chiamata eth2.5 , che è in realtà la interfaccia sica eth2 per tutte le trame Ethernet con identicatore VLAN 5. Il comando dovrebbe occuparsi di abilitare automaticamente il modulo del kernel 8021q che gestisce le trame 802.1Q. Per cancellare l'interfaccia: ip link delete eth2.5 Lo strato di rete (livello 3 ISO/OSI) Qualità del servizio Le esigenze di un usso dati possono essere svariate e sono caratterizzate principalmente da quattro parametri fondamentali: Adabilità : Il fatto di ricevere informazioni non corrotte ed essere sicuri che arrivino a destinazione. Il trasferimento di les, posta elettronica e pagine web è importante che sia adabile, mentre per applicazioni multimediali audio/video, telefonia etc.. possiamo anche permetterci di ricevere dati parzialmente errati o perdere qualche pacchetto. Ritardo: Abbastanza importante in quasi tutte le applicazioni eccetto la posta elettronica e la navigazione web, tuttavia è essenziale per la telefonia. Un ritardo superiore al secondo nell'invio o ricezione dei dati rende una telefonata pessima. Jitter : Si tratta della variabilità del ritardo. È molto importante per applicazioni come video in streaming, le telefonate e le videoconferenze. Se un video è in ritardo anche di qualche secondo non è essenziale, è importante però che questo ritardo resti costante. Se il ritardo continua a variare non sarà possibile neanche utilizzare dei buer per compensare l'eetto del ritardo. Banda : Importante in tutte le applicazioni, anche se si fa sentire maggiormente su quelle audio/video. Trac shaping Esaminiamo la tecnica del trac shaping, cioè la uidicazione del traco di rete. Il trac shaping regola la velocità media della trasmissione dei dati. Al contrario, i protocolli a nestra scorrevole studiati precedentemente limitano la quantità di dati in transito in ogni momento, e non la velocità di trasmissione. Tecnica isaritmica Viene utilizzata principalmente per gestire l'accesso alla rete. Consiste nello stabilire che all'interno della rete debba circolare un numero sso di pacchetti. Ogni nodo ha un certo numero di permessi. Ogni volta che invia una pacchetto consuma un permesso, ogni volta che riceve un pacchetto acquisisce un nuovo permesso. L'algoritmo leaky bucket Non si tratta d'altro che di un sistema che permette di prendere un usso irregolare di pacchetti in ingresso e lo trasforma in un usso regolare di pacchetti in uscita. Si immagini un secchio con un piccolo buco sul fondo. Qualunque sia la velocità d'ingresso dell'acqua, e per quanto possa essere irregolare, l'uscita di acqua dal foro sottostante sarà sempre costante. Se l'acqua raggiunge la cima del secchio esce (viene scartata). Lo stesso concetto viene applicato anche nel caso delle reti: i pacchetti in ingresso vengono accodati in una coda nita (con logica FIFO ) e man mano rilasciati in uscita a intervalli regolari. Se la coda è piena i pacchetti in ingresso vengono scartati. Il problema dell'algoritmo leaky bucket è che si potrebbe aumentare pericolosamente il ritardo dei dati che lo attraversano, che può risultare svantaggioso per molte applicazioni. 28 Nel leaky bucket c'è una coda di capacità Ps W pacchetti, che riceve pacchetti dalla sorgente a frequenza di cifra bit . I pacchetti vengono accettati a condizione di trovare spazio nella coda, altrimenti vengono scartati. La s 1 coda si svuota a frequenza costante v : ogni v secondi viene generato il permesso per trasmettere un pacchetto. Se ci sono pacchetti in coda viene preso quello più vecchio e trasmesso, se la coda è vuota non si fa nulla. Se ogni pacchetto trasmesso è grande Lb bit e la frequenza di svuotamento della coda è v , abbiamo che la frequenza media di trasmissione in uscita dal nostro token bucket sarà Ab max = Lp · v Pacchetti a lunghezza variabile In realtà questo algoritmo opera bene con pacchetti a lunghezza costante. Se i pacchetti sono a lunghezza variabile è meglio operare lo stesso meccanismo con un conteggio di Byte anzichè di pacchetti. Poichè ogni pacchetto deve essere trasmesso per intero, si pongono delle condizioni sul numero minimo di Byte. L'algoritmo token bucket Con la tecnica leaky bucket siamo in grado di controllare rigidamente la frequenza in uscita dei pacchetti indipendentemente dal fattore di burstness della sorgente. Questo signica che aumentiamo la latenza della connessione e se dobbiamo mandare anche solo un pacchetto, esso verrà rallentato. L'algoritmo token bucket si adatta meglio a sorgenti che emettono segnali bursty . W , questa volta però 1 , quindi ogni s v secondi viene generato un nuovo permesso e inserito all'interno della coda. Quando la coda è piena di permessi, non ne vengono Come prima utilizziamo un secchio a capacità nita: una coda (sempre FIFO ) di capacità la coda raccoglie dei permessi. Un permesso viene generato con la frequenza v permessi aggiunti altri. Quando arriva un pacchetto dalla sorgente, esso viene immagazzinato in una memoria separata (sempre in logica FIFO ) e viene trasmesso non appena c'è un permesso disponibile nella coda. Questo meccanismo permette di accumulare permessi e trasmettere tanti pacchetti in successione quando c'è un burst. C'è eventualmente anche la possibilità di accumulare picco in uscita Pb . W permessi e inviare quindi W pacchetti alla velocità di In questo modo si riduce anche il ritardo del bucket. Si presti attenzione al fatto che nell'algoritmo token bucket sono solo i permessi ad essere scartati, i pacchetti possono potenzialmente essere acumulati senza limiti. Anche in questo caso abbiamo: Ab max = Lp · v Ovviamente Ab max non può mai eccedere la frequenza di trasmissione sulla linea di uscita, cioè Ab max ≤ Pb . Pacchetti a lunghezza variabile Anche con token bucket è possibile gestire i pacchetti a lungehezza variabile. Per farlo è possibile trasformare il permesso per il pacchetto in un permesso per un certo numero di byte. Politiche store and forward e cut-through Ci sono due modalità in cui può operare un algoritmo di tipo bucket. In modalità store and forward la trasmissione di un pacchetto non può avere inizio prima che tutti i suoi bit siano stati ricevuti. In modalità cut-through , invece, la trasmissione avviene senza nessun ritardo. Si noti che in questo secondo caso la modalità può essere applicata solo se la frequenza di uscita non è superiore alla frequenza di ingresso. Altri metodi di trac shaping Solitamente si preferisce adottare insieme token bucket e leaky bucket mettendoli in cascata uno dopo l'altro. Protocollo IP Principi generali dello strato network di Internet2 Assicurarsi che funzioni Mantenerlo semplice Fare scelte chiare : non ultimare il progetto o lo standard no a quando non è stato testato a dovere. : eliminare le funzionalità non strettamente necessarie. : Se la stessa cosa può essere fatta in modo diversi, sceglierne uno. Fare la stessa cosa in due modi signica andare a cercare guai. 2 Riassunto dei punti citati da A.Tanenbaum in Reti di calcolatori 29 Sfruttare la modularità Aspettarsi l'etereogenità : separare il progetto in varie parti distinte di modo da non dover modicare tutto. : aspettarsi l'utilizzo di diversi tipi di hardware, diversi tipi di applicazioni, attrez- zature di trasmissione... Evitare opzioni e parametri statici : Se i parametri sono inevitabili, invece di fare scelte sse è meglio lasciare che trasmettitore e ricevitore concordino tra loro un valore. Mirare ad un buon progetto, non è necessario che sia perfetto : Non è necessario progettare qualcosa che funziona sempre bene, ma almeno funziona bene nella stragrande maggioranza dei casi. Rari casi speciali gestiti male sono poco rilevanti. Essere rigorosi nella trasmissione e tolleranti nella ricezione : Inviare pacchetti che si attengono rig- orosamente agli standard ma aspettarsi di tutto in ingresso. Pensare alla scalabilità : Se il sistema deve poter gestire sia pochi host che milioni o miliardi in modo ecacie. Il carico deve essere il più distribuito possibile. Considerare le prestazioni e i costi : Se una rete ha scarse prestazioni e/o alti costi nessuno la utilizzerà. Caratteristiche generali di IP best eort (perciò non garantito e connection-less ) traspostare i datagrammi inviati da una sorgente a una destinazione, senza tener conto della posizione Lo scopo dello strato network è fornire un mezzo di tipo per delle macchine (che possono trovarsi su reti diverse) e della eventuale presenza di reti intermedie (poste tra le macchine). A dierenza della maggior parte dei protocolli di strato network più vecchi, IP è stato progettato n dall'inizio pensando alla comunicazione tra reti. Lo strato di trasporto prende i ussi da inviare e li sperara in datagrammi che passa allo strato network. In teoria ogni datagramma può essere grande 64KB, ma in realtà nella pratica la dimensione dei datagrammi non supera i 1500 byte (per poter essere incapsulata in un frame Ethernet). Lo strato network si concentra sull'instradamento delle informazioni. Ogni datagramma che attraversa Internet può essere frammentato in unità più piccole e a destinazione deve essere riassemblato per riottenere il datagramma originale. La consegna dei datagrammi non è garantita. Non c'è nessun meccanismo di riscontro Struttura del datagramma IP (versione 4 - IPv4) Version (4 bit) HLEN (4 bit) 32 bit Service type (8 bit) Identication (16 bit) Time to live (8 bit) Total length (16 bit) Flags (3 bit) Protocol (8 bit) Fragmentation oset (13 bit) Header checksum (16 bit) Source IP address (32 bit) Destination IP address (32 bit) Options Data La parte ssa dell'instazione è lunga 20 Byte, estendibile con opzioni. Viene trasmessa in ordine big endian: da dinistra a destra, a partire dal bit di ordine più elevato del campo version. I campi dell'header sono: Version (4 bit): Tiene traccia della versione del protocollo usato per il datagramma. Grazie a questa infor- mazione è possibile pensare nuove versioni del protocollo. La versione attualmente più utilizzata è la 4, anche se è in corso una migrazione alla versione 6 (IPv6) a causa della scarsità di indirizzi. IPv5 è stato un protocollo sperimentale di streaming in tempo reale, mai utilizzato nella realtà. HLEN (4 bit): Viene utilizzato per indicare la lunghezza dell'instazione espressa in parole di 32 bit (poiché essa non è costante a causa del campo opzioni). Il valore massimo di questo campo è 15, quindi la dimensione massima dell'instazione è 60 Byte, che escludendo i 20Byte ssi si traduce in un massimo di 40Byte di opzioni. In realtà alcune opzioni (come ad esempio quella record route ) necessitano più di 40 Byte, quindi sono costretti ad ignorare questo campo. Service type (8 bit): Era utilizzato per distinguere diverse classi di servizio, sono ammesse diverse combinazioni di adabilità e velocità. 30 Originariamente era strutturato come segue: Precedence (3 bit) * Precedence *D *T *R * Not used (8 bit) D T (3 bit): R Not used (2 bit) indica la priorità del datagramma. Priorità 0 signicava pacchetto normale, priorità 7 signicava pacchetto di controllo. (1 bit): Signica minimize delay (1 bit): Signica maximize throughtput (1 bit): Signica maximize raliability (massimizza l'adabilità) (2 bit): Sono due bit inutilizzati. È stato poi aggiunto anche il bit C minimize cost : Precedence (3 bit) (8 bit) D T R C Not used (1 bit) In seguito, IETF ha deciso di cambiare il signicato del campo: (8 bit) Service class (6 bit) Not used (2 bit) Dove il campo service class identica il tipo di servizio. Nella pratica i router di Internet ignorano completamente il campo Service type. Viene sfruttato solo all'interno delle reti locali o con gli host nali. Total length (16 bit): tiene conto di tutto il contenuto del datagramma, intestazione e dati. Grazie a questo campo è possibile capire dove terminano i dati. La lunghezza massima è 65535 Byte. Questo limite superiore oggi è tollerabile, ma le reti gigabit del futuro potrebbero trovarlo limitante. Identication (16 bit): Serve all'host di destinazione per determinare a quale datagramma appartiene il fram- mento appena arrivato. Tutti i frammenti di uno stesso datagramma contengono lo stesso valore identication. Flags (3 bit): 3 bit Not used D M Not used (1 bit) D (1 bit): Do not fragment (non frammentare). Indica ai router di non dividere in frammenti il datagramma perchè la destinazione non è in grado di di rimettere insieme i pezzi. M (1 bit): More fragments (altri frammenti). Non può essere usato per l'ultimo frammento di un datagramma frammentato (ovviamente). Fragment oset (13 bit): Indica la posizione del frammento nel datagramma corrente. Tutti i frammenti tranne l'ultimo in un datagramma devono essere multipli di 8 byte, che è la dimensione del frammento elementare. Poiché ci sono 13 bit, ci sono al massimo 8192 frammenti per ogni datagramma. Time To Live, TTL (8 bit): È un contatore che viene utilizzato per limitare il tempo di vita di un pacchetto. Ogni router su cui passa il datagramma decrementa di una unità questo valore. Nello standard originale questo valore veniva decrementato ogni secondo se il datagramma stazionava su un router. Nella realtà al giorno d'oggi viene solo decrementato negli hop che attraversa. Quando questo valore raggiunge lo zero il pacchetto deve essere scartato. Questa funzionalità impedisce a datagrammi errati di girare a vuoto per sempre in Internet (evento che potrebbe facilmente accadere in caso di danneggiamento delle tabelle di routing). Protocol (8 bit): È un identicatore del protocollo di trasporto utilizzato all'interno dei dati trasportati dal pacchetto IP. TCP e UDP sono delle possibilità. Un'altra è ad esempio ICMP. La numerazione dei protocolli è univoca e assegnata dall'ente IANA. Con 8 bit ci sono 256 possibili protocolli di trasporto. Di seguito una lista dei più famosi: Nome Valore decimale 0 Riservato RFC / 1 ICMP RFC792 2 IGMP RFC1112 4 IP (per incapsulazione IP over IP) / 5 TCP RFC793 8 EGP RFC888 9 IGP / 17 UDP RFC768 41 SIP / ... ... ... 31 Header checksum (16 bit): È un codice a controllo di errore che verica la correttezza della sola intestazione (non dei dati). Questo checksum aiuta a rilevare errori generati da locazioni di memoria difettose nel router. Il metodo di calcolo è analogo a quello utilizzato in TCP e UDP, si rimanda ai paragra successivi sul metodo di calcolo. Si noti poi che questo checksum deve essere ricalcolato da ogni router su cui transita il pacchetto, dal momento che almeno un campo cambia sicuramente (Time To Live ). Source IP address (32 bit): È l'indirizzo sorgente dell'host che ha trasmesso il pacchetto. Gli indirizzi IP sono univoci in tutta Internet. Destination IP address (32 bit): È l'indirizzo sorgente dell'host a cui è destinato il pacchetto. Gli indirizzi IP sono univoci in tutta Internet. Options : È un campo di estensione dell'header per aggiungere delle opzioni. Tra le più note ci sono: Record route option: costringe ogni router che riceve il pacchetto IP ad aggiungere il proprio indirizzo IP in coda ad una lista di indirizzi di transito all'interno dell'header. Questa opzione è solitamente supportata dai router di Internet. Il formato di questa opzione è il seguente: Code 7 Length 00000111 (Total length) Pointer First IP address (32 bit) ... Last IP address (32 bit) Strict source routing option: Si specica all'interno del pacchetto IP inviato, l'intero percorso che deve seguire per arrivare a destinazione. Il formato di questa opzione è il seguente: Code 137 Length 10001001 (Total length) Pointer First IP address (32 bit) ... Last IP address (32 bit) Loose source routing option: Si specica all'interno del pacchetto IP inviato, alcuni punti di passaggio forzati che il pacchetto deve seguire per arrivare a destinazione: Code 131 Length 10000011 (Total length) Pointer First IP address (32 bit) ... Last IP address (32 bit) Timestamp option: Viene richiesto ad ogni host su cui transita il pacchetto IP di inserire in coda ad una lista il proprio indirizzo IP ed un timestamp. Code 68 Lenght 01000100 (Total lenght) Pointer O-Flow Flags (4 bit) (4 bit) First IP address (32 bit) ... Last IP address (32 bit) Security option: era stata introdotta una opzione per specicare che dei dati erano condenziali (ad esempio dati militari,...) in realtà non è mai stata usata ed è attualmente ignorata. Struttura del datagramma IPv6 Nuova versione, introdotta principalmente per ovviare al problema della mancanza di indirizzi IPv4, ma anche per semplicare e migliorare il datagramma IP. Version (4 bit) (32 bit) Trac class (8 bit) Payload lenght (16 bit) Flow label (20 bit) Next header (8 bit) Hop limit (8 bit) Source IP address (128 bit) Destination IP address (128 bit) Extension headers (variable) 32 Version Trac class (4 bit): Specica la versione del protocollo IP utilizzata, in questo caso 6. (8 bit): Specica il tipo di servizio distinguendolo in varie classi: dati che necessitano basso ritardo, alto throughtput,etc.. Flow label (20 bit): Viene utilizzato per specicare ai router che è necessario un trattamento speciale per il pacchetto. Può essere utilizzato per specicare particolari modalità di trattamento dei datagrammi. Payload lenght (16 bit): Indica la lunghezza del payload del datagramma in numero di Byte. Quindi il payload può essere lungo no a 65535 Byte. A diernza di IPv4, i 40 Byte dell'intestazione non sono conteggiati nel calcolo della lunghezza. Next header (8 bit): È un campo che serve a specicare il tipo di campo che segue i 40 Byte di intestazione. È infatti possibile aggiungere opzioni/estensioni all'intestazione, una incatenata dopo l'altra. L'ultima di queste (o nel caso in cui non ce ne fossero) deve avere in next header un identicatore che specica cosa contiene il payload (TCP/UDP/...) Hop limit (8 bit): Denisce il numero di salti che possono essere fatti per raggiungere la destinazione. Ogni host su cui transita il pacchetto decrementa questo valore. Funziona come il vecchio TTL di IPv4. Source address/Destination address Extension headers: (128 bit): indica l'indirizzo IP sorgente/destinazione. Header Tipo di informazione Hop-by-hop options Richieste per elaborazione nodo per nodo Routing Percorso di rete richiesto per il datagramma Fragment Tipo di frammentazione eettuata (dal mittente) Destination options Informazioni addizionali per la destinazione Authentication Informazioni di autenticazione sul mittente Encapsulating security payload Informazione di sicurezza per la destinazione Nella progettazione di IPv6 si è deciso di rimuovere il campo checksum, poiché molto costoso sui router e relativamente inutile (altri controlli vengono già fatti a livelli superiori). Non viene utilizzata più la frammentazione. Tutti gli host IPv6 compatibili devono determinare dinamicamente la dimensione del datagramma da utilizzare. La dimensione minima del datagramma è stata portata a 1280 Byte. Quando un router non è in grado di inoltrare un pacchetto troppo grande, invia un messaggio di errore al mittente (ICMPv6 packet too big ) al posto di frammentarlo. Solo la sorgente può frammentare il datagramma. Probabilmente si continuerà ad utilizzare 1500 Byte come dimensione massima di modo da contenere l'intero pacchetto in una trama Ethernet. Una sotto-opzione che fa parte dell'opzione hop-by-hop options è l'intestazione estesa per grandi datagrammi (jumbogrammi). Quando è utilizzata, il campo payload lenght nell'intestazione è impostato a 0. La struttura di questa opzione è: (32 bit) next header 0 194 4 jumbo payload lenght Questa opzione è importante per alcune applicazioni che devono inviare gigabytes di dati attraverso Internet. Indirizzamento IPv4 Il protocollo IP (versione 4) adotta un meccanismo di indirizzamento a 32 bit. Ogni host connesso in rete è identicato da uno o più indirizzi IP. In teoria non possono esistere su Internet due host con lo stesso indirizzo IP. Ogni indirizzo IP è formato da una parte che rappresenta l'identicatore di rete (net-id ) e da una parte che rappresenta l'identicatore dell'host (host-id ). Possiamo pensare a queste due parti come a un presso e un susso. Solitamente per comodità gli indirizzi IP vengono rappresentanti con la cosiddetta notazione decimale puntata del tipo x.y.z.w, in cui ognuno di questi quattro elementi (anche detti teti a volte) può assumere un valore tra 0 e 255. In eetti ognuno dei quattro elementi decimali dell'indirizzo, rappresenta un byte. Per esempio l'indirizzo esadecimale C0290614 corrisponde all'indirizzo 192.41.6.20, decisamente più comodo da ricordare. Indirizzamento per classi Tutti i possibili indirizzi IP (che sono 232 nella versione 4 di IP), sono stati suddivisi per comodità in cinque classi, che si dierenziano per la diversa congurazione e lunghezza delle due parti net-id e host-id. Questo tipo di suddivisione non è più attualmente in uso (vedremo tra poco il metodo utilizzato ad oggi), ma è didatticamente molto utile a comprendere il resto. 33 ° (1 Byte) ° (2 (32 bit) Byte) net-id ° (3 Byte) ° (4 Byte) host-id Classe A 0 Classe B 1 0 Classe C 1 1 0 Classe D 1 1 1 0 indirizzi multicast Classe E 1 1 1 1 riservato per usi futuri net-id host-id net-id host-id Nel dettaglio: Classe A (0.0.0.0 - 127.255.255.255): 7 bit di net-id, preceduti da un bit sso sempre posto a 0. Denisce poche reti (125 quelle utilizzabili su Internet), ognuna contenente un grande numero di host (al massimo 16'777'214 host). Gli indirizzi compresi in 0.0.0.0 - 0.255.255.255 sono utilizzati per identicare la rete stessa Gli indirizzi compresi in 127.0.0.0 - 127.255.255.255 sono utilizzati come indirizzi di loopback , non possoo essere utilizzati come indirizzi di rete esterni, sono riservati per le comunicazioni locali internet all'host. Classe B (128.0.0.0 - 191.255.255.255): 14 bit di net-id, preceduti da due bit ssi, sempre posti a 1 0. Denisce 16'384 reti (16'368 quelle utilizzabili su Internet), ciascuna contenente al massimo 65534 host. Classe C (192.0.0.0 - 223.255.255.255): 21 bit di net-id, preceduti da tre bit ssi, sempre posti a 1 1 0. Denisce molte reti (2'096'896 quelle utilizzabili su Internet), ciascuna contenente solo 254 host. Classe D (224.0.0.0 - 239.255.255.255): Si tratta di indirizzi riservati per servizio di tipo multicast. Questi indirizzi iniziano sempre con una parte ssa composta dai quattro bit 1 1 1 0. Classe E (240.0.0.0 - 255.255.255.255): Si tratta di indirizzi riservati per utilizzi futuri. Sono sempre preceduti da una parte ssa composta dai quattro bit 1 1 1 1. Indirizzi speciali In ciascuna rete, ci sono due sussi host-id che non vengono utilizzati mai. L'indirizzo composto da tutti zeri nel campo host-id è un identicatore per riferirsi alla rete stessa. L'indirizzo composto invece da tutti 1 nel campo host-id è un identicatore per riferisti a tutti gli host di quella rete (indirizzo di broadcast ). Questi due speciali indirizzi non possono essere assegnati a host sici della rete. Quando facciamo i calcoli sul numero di host disponibili dobbiamo quindi sempre assicurarci di sottrarli dal conteggio. Inoltre l'indirizzo 255.255.255.255 è un indirizzo di broadcast per riferirsi a tutti gli host della rete stessa (nel caso in cui non si conosca l'indirizzo della rete ad esempio). Spesso gli amministratori di rete disabilitano questo indirizzo su alcuni protocolli (ex: ICMP ping a 255.255.255.255 spesso è bloccato dal router). L'indirizzo 0.0.0.0 è invece utilizzato per identicare l'host sorgente di una connessione e la rete corrente, quando non ne si conosce l'indirizzo. Indirizzi privati Esistono poi una serie di indirizzi delle classi A,B e C che non possono essere utilizzati su Internet, perché riservati ad utilizzo privato. In una rete interna di una azienda potrebbero essere utilizzati per sfruttare il protocollo IP pur non avendo assegnati degli indirizzi. In teoria questi indirizzi non sono pensati per poter essere connessi ad Internet, tuttavia come vedremo in seguito, mediante la tecnica del NAT è possibile farlo. Blocco Indirizzo iniziale Indirizzo nale 1 10.0.0.0 10.255.255.255 Il 2 172.16.0.0 172.31.255.255 3 192.168.0.0 192.168.255.255 primo blocco è composto da 16'777'216 indirizzi della classe A, di cui 16'777'214 utilizzabili (escludendo l'indirizzo di rete e quello di broadcast). Il secondo blocco è composto da 16 reti di classe B adiacenti tra loro. Ciascuna di queste 16 reti può contenere 65534 host, per un totale di 1'048'544 host nelle 16 reti. Il terzo blocco è composto da 256 reti di classe C adiacenti tra loro. Ciascuna di queste 256 reti può contenere 254 host, per un totale di 65'024 host nelle 256 reti. (Come vedremo, utilizzando una maschera /16 possiamo arrivare ad avere 65534 host in questo blocco) 34 Registers L'univocità degli indirizzi IP in Internet è garantita da una organizzazione centrale denominata Assigned Number Authority IANA - Internet che provvede ad assegnare gli indirizzi. Poiché tutti gli interessati ad ottenere un indirizzo dovrebbero contattare la IANA, è stata istituita una gerarchia di registers, cioè di organizazioni che ricevono dalla IANA grandi blocchi di indirizzi, che risuddividono in blocchi più piccoli da assegnare. Nome Aree gestite ARIN Nord America RIPE Europa, Medio Oriente, Asia centrale APNIC Asia e Pacico LACNIC America Latina AFRINIC Africa Subnetting e routing Il meccanismo di indirizzamento per classi descritto precedentemente, si è rivelato negli anni particolarmente rigido. Può succedere ad esempio che una università prenda una classe B di indirizzi per il dipartimento di Ingegneria Informatica. Quando anche il dipartimento di Ingegneria Elettronica desidera accedere ad Internet si potrebbe estendere la LAN mettendo una serie di ripetitori. A breve però il limite dei quattro ripetitori verrebbe raggiunto. Servirebbe un'altra rete separata ma l'università ha già abbastanza indirizzi con la sua classe B. La soluzione consiste nel dividere internamente la rete in più parti, chiamate subnets. Nella RFC950 è stato proposto il meccanismo di subnetting, che consente di suddividere una rete generica in più sottoreti, la cui struttura resta un fatto interno all'organizzazione proprietaria e non deve essere comunicata ad altri. La denizione di sottoreti all'interno di una rete, viene fatta utilizzando un identicatore chiamato netmask, che accompagna l'indirizzo IP dell'host, e gli permette di capire quali sono gli indirizzi IP che fanno parte della sua sottorete. Una netmask è un indirizzo IP, che inizia con tutti 1 nel campo che corrisponde al presso di rete net-id e ha tutti 0 nel campo che corrisponde all'host-id. Supponiamo ad esempio di prendere una classe B con indirizzo 131.175.0.0 e di volerla suddividere in 256 reti. Anche se si tratta di un indirizzo di classe B e non C, possiamo aggiungere una netmask 255.255.255.0 su ciascun host della nostra organizzazione. La dierenza tra la net-id denita dalla classe e la net-id denita con la netmask, è chiamata subnet-id. In questo esempio abbiamo una subnet-id di 8 bit. Spesso per semplicità, dato che le netmask sono una sequenza di uni consecutivi da sinistra a destra, si utilizza anche una notazione /n, dove n è il numero di bit posti a uno osservando la netmask da sinistra verso destra. La netmask del precedente esempio è dunque anche rappresentabile con /24. Seguono delle netmask standard che corrispondono a quelle utilizzate normalmente per l'indirizzamento a classi, se la netmask non viene impostata manualmente. Notazione /n Classe Netmask decimale Netmask binaria A 255.0.0.0 11111111 00000000 00000000 00000000 /8 B 255.255.0.0 11111111 11111111 00000000 00000000 /16 C 255.255.255.0 11111111 11111111 11111111 00000000 /24 L'adozione di una netmask permette ad host e router di individuare velocemente se un indirizzo IP sorgente/destinazione fa parte o meno della propria sottorete. È suciente infatti eseguire un'operazione di AND logico tra i bit della netmask e l'indirizzo ricevuto. In questo modo si isola l'indirizzo della rete (escludendo la parte host-id ) ed è possibile confrontarlo. Questa è l'operazione fatta di norma dai router per l'instradamento dei pacchetti. Routing per subnet Una tabella di routing potremmo pensarla organizzata in questo modo (vedremo di seguito quella più realistica): Destination Netmask Flags Reference Use Gateway Interface 131.175.21.0 255.255.255.0 U 0 0 131.17.123.254 eth0 131.175.16.0 255.255.255.0 U 0 0 131.17.78.254 eth1 131.56.0.0 255.255.0.0 U 0 0 131.17.15.254 eth2 131.155.0.0 255.255.0.0 U 0 0 131.17.15.254 eth2 0.0.0.0 0.0.0.0 UG 0 0 131.17.123.254 eth0 Sappiamo inoltre la situazione delle interfacce del router: Interface eth0 IP address 131.17.123.1 Netmask 255.255.255.0 Interface eth1 IP address 131.17.78.1 Netmask 255.255.255.0 35 Interface eth2 IP address 131.17.15.12 Netmask 255.255.255.0 Per inoltrare un pacchetto, il router deve capire se questo appartiene ad una delle sottoreti delle sue interfacce. In caso contrario consulterà la sua tabella di routing. Quando arriva un pacchetto viene estratto il suo indirizzo IP di destinazione e per ogni interfaccia di rete del router viene fatta l'operazione: (IP destinazione) AN D (Netmask interfaccia) = Rete di destinazione E la rete di destinazione viene confrontata con la rete dell'interfaccia, che può essere (pre)calcolata facendo: (IP interfaccia) AN D (Netmask interfaccia) = Rete interfaccia Se le due reti coincidono, allora la subnet è la stessa e si procede all'inoltro diretto del pacchetto Se il confronto con le reti delle interfaccie non ha successo, si procede in modo analogo confrontando la tabella di routing voce per voce: (IP destinazione) AN D (Netmask interfaccia) = Rete di destinazione Confrontato con: (Destination regola n) AN D (Netmask regola n) = Rete della regola n In caso aermativo si invia il pacchetto a questo hop successivo che si preoccuperà di inoltrarlo a sua volta. Per inviare il pacchetto all'hop successivo si opera a livello 2. Ad esempio se i due router sono collegati da rete Ethernet, si invia una trama Ethernet mettendo come destinazione il MAC address del router indicato come gateway e inserendo come PDU il pacchetto IP (aggiornando il campo TTL ovviamente). Può capitare che due regole della tabella di routing soddino l'uguagianza. In questo caso viene scelta la rete con la netmask più lunga. L'ultima regola della tabella è la regola di default, specica a chi inoltrare tutti i pacchetti che non si sa come gestire. Viene utilizzata solo se nessuna delle altre regole è soddifatta, poiché la lunghezza della sua netmask è zero. Spesso per gestire il routing verso la rete locale e per evitare di ricalcolare la rete di ogni interfaccia, si aggiunge una riga alla tabella di routing per ogni interfaccia. Ad esempio in questo caso per l'interfaccia eth0 avremmo avuto una riga nella tabella di routing del tipo: Destination Netmask Flags Reference Use Gateway Interface 131.17.123.0 255.255.255.0 U 0 0 0.0.0.0 eth0 Riguardo agli altri campi non analizzati della tabella di routing: Flags: informazioni aggiuntive sulla regola di route *U *G *H *DM : Router attivo : Destinatario fuori dalla sottorete : destinatario host specico / : reindirizzamento eettuato con ICMP (vedi nella sezione seguente su ICMP) Reference: Numero di connessioni lungo il percorso Use: Numero di utilizzi di questa regola Interface: Nome dell'interfaccia su cui inoltrare il pacchetto (utile se si utilizzano gli stessi indirizzi su due interfaccie distinte) Si noti che questo meccanismo di subnetting non aumenta il numero di host sopportabili da Internet, ma aumenta solo la essibilità della suddivisione in classi, ritenuta oggi troppo rigida e penalizzante. Variable Length Subnet Mask (VLSM) Prima abbiamo parlato di netmask supponendo che ciascun host all'interno della nostra rete utilizzi la stessa. In realtà è possibile partizionare la rete con diverse netmask di lunghezza variabile. Questo è accompagnato da maggiore complessità nella divisione della rete e nella gestione delle tabelle di routing ma permette una divisione più eciente degli indirizzi. 36 Classless Inter-Domain Routing (CIDR) Il modo in cui sono suddivise le classi porta ad uno spreco enorme di indirizzi. Organizzazioni non certe della propria espansione, compravano classi B anche per collegare pochi host, spaventate dalla possibilità di esaurire una eventuale classe C. Per introdurre una maggiore essibilità si è deciso di abbandonare la struttura a classi e introdurre il Classless Inter-Domain Routing, che estende il concetto di subnetting su tutta l'Internet. Gli indirizzi IP assegnati ad una organizzazione vengono quindi deniti da: l'indirizzo più basso del blocco e il numero di bit più signicativi comuni a tutti gli indirizzi (l'n della notazione /n ). Utilizzando CIDR su Internet, non solo i router delle reti interne devono tenere conto delle netmask, ma anche i router di tutta Internet (che prima funzionavano invece in modo molto più semplice basandosi sulle classi). Supernetting Utilizzando CIDR è possibile nalmente assegnare liberamente indirizzi. Quando vengono utilizzati una serie di indirizzi di classe C ad esempio per creare una rete più grande mediante CIDR, si dice che si sta facendo una operazione di supernetting, perché si riuniscono, ad esempio,più classi in una classe più grande. Network Address Translation Poiché gli indirizzi IP(v4) iniziano a mancare e a diventare costosi, già dall'inizio degli anni 90 è stata introdotta la tecnica del NAT. Una organizzazione spesso non ha tutti gli host collegati ad internet. È quindi possibile farsi assegnare un numero di indirizzi IP inferiore a quelli realmente necessari. A questo punto possiamo utilizzare indirizzi IP privati all'interno della nostra organizzazione e mappare quando necessario un indirizzo pubblico su quell'indirizzo privato. Il router di frontiera dovrà memorizzare l'associazione indirizzo pubblico-indirizzo privato e quindi occuparsi di prendere i pacchetti IP provenienti/diretti al nostro host e modicare l'indirizzo IP sorgente/destinazione all'interno del pacchetto IP in ingresso/uscita. In realtà spesso si ha invece bisogno di collegare più macchine e si hanno a disposizione solo pochi indirizzi IP. La soluzione in questo caso (molto più utilizzata della precedente nella realtà) è il Translation ) NAPT (Network Address Port . Sapendo che la maggior parte delle operazioni in rete viene svolta mediante i protocolli di trasporto TCP e UDP (che hanno entrambi dei numeri di porta sorgente e destinazione), si possono collegare molti host dietro ad un unico indirizzo IP. Il meccanismo del NAPT è il seguente: Quando un pacchetto in uscita dall'host interno alla nostra rete, attraversa il router di frontiera per andare su Internet, il router: Osserva i campi source port del pacchetto TCP/UDP e source address del pacchetto IP Cerca un numero di porta non attualmente occupato sul router Modica il pacchetto TCP/UDP con un proprio numero di porta sorgente pubblica e salva in una tabella con la porta sorgente privata, l'IP privato dell'host interno e l'indirizzo IP di destinazione Modica l'indirizzo IP sorgente del pacchetto sostituendolo con l'indirizzo IP pubblico del router Quando un pacchetto in ingresso viene ricevuto da Internet dal router di frontiera, ed è diretto ad un host interno alla rete, il router: Osserva i campi porta destinazione del pacchetto TCP/UDP, l'indirizzo IP sorgente e verica se è in corso una connessione verso quell'indirizzo In caso aermativo viene sostituita la porta destinazione del pacchetto TCP/UDP in ingresso con la porta sorgente privata salvata prima in tabella Modica lindirizzo IP destinazione del pacchetto sostiuendolo con l'indirizzo IP privato dell'host a cui è diretto. La tabella del NAPT è qualcosa simile alla seguente: Indirizzo IP privato Porta sorgente privata Indirizzo IP destinazione Porta sorgente NAPT 10.0.0.2 1000 131.175.12.1 502 10.0.0.3 1054 131.154.3.22 554 Utilizzando il NAPT sono possibili no a 65536 (numero di porte disponibili) connessioni contemporanee per ogni indirizzo IP pubblico utilizzato dal router che eettua il NAPT. Questo fattore può essere limitante se utilizziamo un solo indirizzo IP per un intero ateneo o una azienda, perché quando tutti gli host stanno contattando contemporaneamente degli host esterni, potremmo esaurire le porte a disposizione. I pacchetti ICMP (descritti in seguito) possono essere trasmessi tramite NAPT sfruttando alcune proprietà sui numeri di sequenza e altro... 37 Perché il NAPT non andrebbe utilizzato (approfondimento ) NAPT viola la più importante regola di straticazione dei protocolli , secondo la quale un protocollo di livello k non dovrebbe fare nessuna assunzione riguardo a protocolli di livello k+1. Un router normalmente dovrebbe solo prendere i pacchetti IP che arrivano ed instradarli, invece con il NAPT deve anche andare a controllare il carico del pacchetto IP per vericare il numero di porta, cosa che non dovrebbe fare per le regole sulla straticazione dei protocolli. Questo causa inoltre overhead non previsto su un apparato che dovrebbe solo instradare e invece deve iniziare anche a tenere traccia di tutte le connessioni che lo attraversano. NAPT viola il modello gerarchico di IP , che aerma che ogni macchina collegata in rete è identicata in modo univoco a livello mondiale da uno o più indirizzi IP. I processi su Internet non sono obbligati ad utilizzare TCP e UDP . Se un utente dietro ad una NAT decide di utilizzare un diverso protocollo di livello 4 non potrà funzionare, perchè il NAPT si basa sull'idea di controllare i numeri di porta, che in alcuni protocolli di livello 4 potrebbero non esistere. ICMP, il protocollo per il controllo del funzionamento di IP e per la diagnostica di rete, non utilizza numeri di porta ed è stato necessario implementare nei router che fanno il NAPT dei particolari workaround per permettere di inviare e ricevere i pacchetti correttamente. Questo ovviamente è tutto altro carico sulle spalle del router. Il numero di connessioni contemporanee diminuisce . Poichè il router del NAPT deve allocare una delle sue porte sorgente per ciascuna connessione, essendo le porte utilizzabili 216 (in realtà le prime 4096 sono riservate ad usi speciali), non possiamo avere più di 61440 connessioni contemporanee per ogni indirizzo IP pubblico utilizzato dal router. Possono sembrare una valanga ma se usiamo un solo IP per la rete di una azienda o una università e magari qualcuno inizia a fare port-scanning o altre brutte cose che consumano un sacco di connessioni, il router satura subito le porte libere. Se abbiamo 614 computer dietro il NAT, ciascuno potrà fare circa 100 connessioni contemporanee, dopo di che il NAPT non ha più numeri di porta liberi. NAPT trasforma Internet da una rete ad assenza di connessione , in un tipo di rete orientata alle connessioni, perchè il dispositivo NAPT deve conservare le informazioni relative ad ogni connessione che lo attraversa. Se un dispositivo NAPT si blocca e la sua tabella di mappatura si perde, tutte le sue connessioni TCP/UDP verranno distrutte. In assenza di NAPT, i guasti ai router non hanno eetto su TCP/UDP, perchè il processo di ritrasmissione si attiva dopo il timeout di alcuni secondi. esporre dei propri servizi alla rete e permettere ad altri di collegarvisi. Purtroppo con l'introduzione del NAPT, se Solitamente ogni host collegato su Internet può eettuare delle connessioni a dei server, oppure ad esempio nella rete locale ci sono due host con server web sulla porta 80, non è possibile esporre entrambi quei servizi sullo stesso indirizzo sulla stessa porta 80, quindi l'unica soluzione possibile (quando viene manualmente abilitata con il così detto Port Forwarding), è di assegnare due porte distinte dell'indirizzo pubblico ai due servizi dietro al NAPT, quindi ad esempio la porta 80 per uno dei due server web e la porta 81 per l'altro. Così facendo ovviamente i servizi che i vari host della rete locale possono esporre si riduce notevolemente. Se poi teniamo conto che gli stessi numeri di porta devono anche essere usati come porte sorgenti per le connessioni in uscita, la situazione è sempre peggiore. fanno uso degli indirizzi IP degli host da cui si originano le connessioni all'interno dei messaggi scambiati a livello applicativo per avvertire il server a cui si collegano di inviare i dati da scaricare su una certa porta del client. Il Molti protocolli a livello applicativo, tra cui DCC e il notissimo FTP (in modalità attiva) NAPT non sa nulla di tutto questo e il risultato è che questi protocolli non sono più in grado di funzionare perché i server FTP tentano di inviare i dati a porte sul router NAPT che non è a conoscenza di questa operazione in corso e non permette il passaggio. Su alcuni router sono stati implementati dei meccanismi per intercettare il traco a livello applicativo di questi protocolli e sbloccare le porte in ingresso per mettergli di funzionare. Questo è ancora più grave del primo punto perché con questo problema il router non deve solo andare a vedere il livello protocollare 4, ma addirittura anche i dati sul livello 7. Questo genera un overhead esagerato sulle operazioni di cui deve tenere traccia il povero router. Il NAPT non permette di mantenere connessioni aperte in stato idle . Spesso può capitare di dover tenere una connessione aperta dove non passa neanche un bit per settimane. TCP supporta questa cosa senza problemi ma il NAPT avendo pochi numeri di porta sorgente a disposizione non può permettersi di sprecarli per connessioni che non fanno nulla, quindi quando non viene rilevata attività per un po' di tempo in molte implementazioni di NAPT si è obbligati a cancellare dalla tabella del NAPT la connessione. La cosa peggiore di questa cosa è che i due host credono di essere ancora collegati tra loro, perché il NAPT non avvisa nè mittente nè destinatario che ha cancellato la riga nella tabella, quindi il client che ha aperto la connessione non vedrà nessun dato arrivargli anche se il server ha tentato di inviarli senza ricevere risposta. Va inne sottolineato come, purtroppo, a causa della mancanza di indirizzi pubblici da assegnare che si sta facendo sentire soprattutto negli ultimi mesi (nel 2011 la IANA ha terminato i blocchi assegnabili ai registers regionali), non abbiamo al giorno d'oggi altra solzione che costringersi ad utilizzare il NAT, nell'attesa dell'arrivo di IPv6 (che comunque già dal 2008 è ucialmente attivo su tutti i backbone di Internet). 38 Indirizzamento IPv6 La principale modica di IPv6 a IPv4 è stata la lunghezza degl indirizzi. IPv6 utilizza infatti indirizzi IP da 128 bit (16 byte). Gli indirizzi IPv6 vengono, per comodità, rappresentati da 8 blocchi da 4 caratteri esadecimali, come ad esempio: 8000 : 0000 : 0000 : 0000 : 0123 : 4567 : 89AB : CDEF Poichè molti indirizzi possono contenere parecchi zeri, sono state introdotte alcune ottimizzazioni: È possibile ometter gli zero iniziali di un gruppo, quinidi nel gruppo omettere lo 0123 dell'indirizzo precedente, è possibile 0. Dove sono presenti blocchi nulli consecutivi, è possibile semplicemente ometterli, quindi l'indirizzo precedente diventerebbe: 8000 :: 0123 : 4567 : 89AB : CDEF Inne gli indirizzi IPv4 possono essere scritti in notazione decimale a punti dopo una coppia di due punti: :: 192.31.20.46 2128 indirizzi, se l'intero pianeta, terraferma ed acqua, fosse coperto di computer, IPv6 permetterebbe di utilizzare 7 · 1023 indirizzi per metro quadro che, almeno per il momento, sembrano essere sucienti per adesso e per il futuro... Gli indirizzi non saranno assegnati in modo eciente, ma anche considerando il caso pessimo ci saranno più di 1000 Con indirizzi per metro quadro. Ogni indirizzo IPv6 è suddiviso in quattro parti: Tipo indirizzo Presso ISP Sottorete Identicatore host 3 bit 45 bit 16 bit 64 bit Tipo di indirizzo (3 bit): detto anche format prex, serve per specicare se si tratta di indirizzi unicast o multicast. Gli indirizzi di tipo unicast hanno la sequenza di bit Presso ISP 001 (45 bit): È un identicatore dell'Internet Service Provider, è suddiviso in varie parti: Top-Level Aggregation ID, TLA ID (bit #4-16): È un identicatore del provider a livello di backbone RES (bit #17-24): Campo riservato per uso futuro Next-Level Aggregation ID (bit #25-48): È un identicatore di ISP regionale e ID sito Sottorete (16 bit): Anche detto (Site-Level Aggregation ID - SLA ID ), è un identicatore di una sottorete dell'ISP regionale. Identicatore host (64 bit): Anche detto Interface ID , è un identicatore che ciascuna macchina della sot- torete può solitamente scegliere a piacere. Per convenzione combina solitamente l'indirizzo MAC della scheda di rete con le cifre esadecimali 0xFFFE. Un bit speciale (il bit 6 del primo byte) del MAC (il bit chiamato uni- versal/local bit ) deve essere complementato (RFC2373). Sfruttando questo sistema gli host vengono numerati in modo automatico, senza obbligo di DHCP o congurazione manuale. Questa parte dell'indirizzo sarà completamente controllata dalla sottorete, quindi gli ISP non hanno la possibilità di limitare il numero di indirizzi pubblici assegnati al di sotto dei 264 . Il fatto di utilizzare il MAC address all'interno dell'indirizzo pubblico potrebbe portare potenzialmente ad alcune problematiche di sicurezza. Un ipotetico attacante potrebbe dedurre il tipo di host dall'indirizzo e tentare qualche attacco. È anche vero però che quel campo può essere impostato ad un valore qualunque e non obbligatoriamente il MAC address. Assegnare indirizzi IPv6 è più semplice che assegnare indirizzi IPv4 perché bisogna tenere traccia solo della sottorete. Ogni sottorete ha un numero di indirizzi possibili enorme: 264 = 18446744073709551616 ' 1, 84 · 1019 Una modica interessante introdotta da IPv6 è che quando una organizzazione decide di cambiare ISP o comunque sottorete, sarà necessario cambiare solo la prima parte dell'indirizzo e non tutta. Questo permetterà di dover cambiare solo l'indirizzo principale sul router di frontiera. Anche gli indirizzi degli host della sottorete cambieranno, però la parte di identicazione host resterà uguale. In questo modo si ottiene una sorta di meccanismo analogo al NAT, senza tutti i problemi che però ha il NAT. L'utilizzo delle maschere di rete è comunque consentito per permettere tutti i meccanismi classici di Internet e anche per permettere di assegnare più sottoreti ad una stessa organizzazione. 39 Tipo e intervalli di indirizzi Presso IPv6 Allocazione 0000::/8 Riservati da IETF 2000::/3 Global Unicast fc00::/7 Unique Local Unicast fe80::/10 Link Local Unicast 00::/8 Multicast 3f:f::/32 Riservati per esempi e documentazione 2001:0DB8 Riservati per esempi e documentazione L'indirizzo ::1/128 è riservato per l'utilizzo locale (come il vecchio 127.0.0.1/8 ) Link Local Unicast (Scope:Link) : Indica che si tratta di un indirizzo IPv6 privato non routabile, valido solo all'interno della singola sottorete. Lo scopo di questi indirizzi è per collegamenti interni in reti ad-hoc (ad esempio servizi per conferenza). (Scope:Host ) : Indica che si tratta di un indirizzo IPv6 di loopback. I pacchetti provenienti da questo indirizzo non lasciano mai la macchina locale. Multicast in IPv6 è simile al broadcast IPv4, con alcune dierenze: un indirizzo di multicast invia solo ad alcuni host, non a tutti quelli nella sottorete.Il router farà passare poi i pacchetti del gruppo a cui appartiene anche lui stesso, di modo da poter ricevere le risposte. Tutti gli indirizzi di broadcast iniziano con . Anycast : è un indirizzo singolo assegnato a più nodi. Il pacchetto inviato a questo indirizzo sarà recapitato al primo host disponibile. Questa funzionalità è stata pensata per load-balancing e ridondanza dei servizi. Alcuni dei server DNS principali utilizzano questo tipo di indirizzo. Protocollo ICMP È un protocollo di supporto a IP che serve per controllare il corretto funzionamento dei router e degli host. Ci sono circa una ventina di tipi di messaggi ICMP, vedremo qui i più importanti. ICMP non corregge gli errori, si limita a segnalarli. I messaggi di errore contengono l'header del pacchetto ip che li ha generati e i suoi primi 8 byte di dati. Per altre informazioni dettagliate riguardo alle opzioni di ogni tipo di struttura ICMP è possibile consultare la pagina web http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml Struttura del datagramma ICMP Type (8 bit) (32 bit) Code (8 bit) Checksum (16 bit) Resto dell'header (32 bit) Sezione dati (lunghezza variabile) Type (8 bit): Specica il tipo di pacchetto ICMP. Sono possibili 256 tipi di pacchetto, quelli eettivamente utilizzati sono una ventina. Code Checksum Resto dell'header (8 bit): È un parametro che assume un signicato dierente a seconda del type che stiamo utilizzando (8 bit): checksum del pacchetto ICMP (32 bit): nel caso alcuni type lo richiedano si ha a disposizione un'altra parola da 32 bit per l'intestazione (che ha lunghezza ssa) Tipi di pacchetti ICMP Codice Messaggio Signicato 0 Echo reply Risposta ad una richiesta echo 3 Destination Unreachable Il datagramma non può essere consegnato 4 Source quench Datagramma scartato 5 Redirect Avverto la sorgente di un diverso router da contattare per raggiungere l'host 8 Echo request Richiesta echo ad un host per sapere se è attivo 11 Time exceeded TTL scaduto o tempo massimo di riassemblaggio dei frammenti scaduto 12 Parameter problem Pacchetto IP ricevuto non valido al byte x 13 Timestamp request Segnala all'host che riceverà un timestamp di chi l'ha inviato 14 Timestamp reply Risposta ad una richiesta di timestamp con in allegato il timestamp ricevuto 17 Address mask request Richiesta della netmask da utilizzare 18 Address mask reply Risposta della netmask da utilizzare ... ... ... 40 Esistono attualmente circa 40 type ICMP standardizzati dalla IANA. Destination unreachable (type 3) Type (3) Code (0-12) (32 bit) Checksum Non usato (0) Header IP + primi 64 bit dei dati che hanno causato il problema Quando un router scarta un pacchetto per qualche motivo, normalmente genera un messaggio di errore che invia alla sorgente del pacchetto Il campo code in questo caso viene utilizzato per segnaare il motivo che ha causato l'errore. Se la destinazione non è presente nella tabella di routing allora code è 7. I signicati di code: Valore Nome 0 Net unreachable 1 Host unreachable 2 Protocol unreachable 3 Port unreachable 4 Fragmentation needed and don't fragment was set 5 Source Route failed 6 Destination Network Unknown 7 Destination Host Unknown 8 Source Host isolated 9 Communication with destination network si administratively prohibited 10 Communication with destination host is administratively prohibited 11 Destination network unreachable for Type of service 12 Destination host unreachable for type of service 13 Communication Administratively prohibited 14 Host Precedence Violation 15 Precedence cuto in eect I messaggi standardizzati sono solo questi. Time exceeded (type 11) Code 0 Code 1 Type (11) Code (0-1) (32 bit) Checksum Non usato (0) Header IP + primi 64 bit dei dati che hanno causato il problema (messaggio inviato da un router): TTL è arrivato a 0 (messaggio inviato dalla destinazione): Non sono arrivati tutti i frammenti di un pacchetto entro un tempo massimo. Parameter problem (type 12) Type (12) Code (0-1) (32 bit) Pointer Checksum Non usato (0) Header IP + primi 64 bit dei dati che hanno causato il problema Viene utilizzato per segnalare un problema in un byte di un pacchetto IP. Code 0 Code 1 : incongruenza/errore in qualche campo, pointer punta al campo errato : opzione non implementata o qualche parte del campo opzioni è mancante. Redirect (type 5) Type (5) Code (0-3) (32 bit) Checksum Indirizzo IP del router Header IP + primi 64 bit dei dati che hanno causato il problema La destinazione o un router avvisa la sorgente che per contattare la sua destinazione deve utilizzare un altro router, il cui IP è passato all'interno dell'header ICMP. 41 Echo request/reply (type 8/0) Identier Sequence number Optional data Type (8 oppure 0) (32 bit) Code (0) Identier Checksum sequence number Optional data (16 bit): viene scelto a caso dal mittente della richiesta, nella risposta va ripetuto uguale. (16 bit): tiene traccia di pacchetti diversi relativi allo stesso identicatore. : Una sequenza arbitraria di dati può essere inserita e deve essere ripetuta uguale dal destinatario nella risposta. Type (13 o 14) (32 bit) Code (0) Identier Timestamp request/reply (type 13/14) Checksum Sequence number Originate timestamp Receive timestamp Originate timestamp Receive timestamp Transmit timestamp Transmit timestamp È un messaggio scambiato tra due host per conoscere qual'è la sincronia dei due clock. (32 bit): Viene riempito dalla sorgente (32 bit): Viene riempito dalla destinazione appena riceve il pacchetto (32 bit): Viene riempito dalla destinazione immediatamente prima di inviare il pacchetto. Type (17 o 18) Address mask request/reply (type 17/18) (32 bit) Code (0) identier Checksum sequence number Address mask (32 bit) Il campo address mask viene riempito dal destinatario. Il protocollo ARP È un protocollo di controllo che permette a IP di funzionare. ARP è l'acronimo di Address Resolution Protocol. Fornisce un metodo per tradurre indirizzi IP in indirizzi MAC. Viene incapsulato dentro un pacchetto Ethernet o comunque datalink Richiede alle stazioni di inviare dei messaggi in broadcast nella rete locale. La tipica comunicazione è chi è X.Y.Z.W? e c'è una risposta sì sono io 00:AA:01:23:45:67! Si utilzza una cache che viene invalidata nell'ordine dei minuti, per evitare di mandare troppe richieste Struttura del pacchetto ARP Hardware Type Hardware length (32 bit) Protocol Length Protocol Type Operation (1 request, 2 reply) Sender hardware address (ex: 6 bytes per Ethernet) Sender protocol address (ex: 4 bytes per IPv4) Target hardware address (non riempito in una richiesta) Target protocol address ARP è un protocollo, incapsulato all'interno di trame di livello 2, che permette di scoprire l'indirizzo di livello 2 di un host, conoscendone l'indirizzo di livello 3. L'utilizzo classico è all'interno delle reti Ethernet quando si cerca un host a partire dal suo indirizzo IP: Un host A vuole contattare un host B A invia un pacchetto ARP con il proprio MAC address sorgente all'indirizzo di broadcast FF:FF:FF:FF:FF:FF chiedendo quale sia il MAC address corrispondente all'indirizzo IP di B. B risponde con un pacchetto ARP di risposta, iviando ad A (di cui conosce il MAC address dalla risposta ricevuta), il proprio MAC address. In alcune congurazioni particolari potrebbe essere utile congurare un proxy ARP, cioè un host della rete che provvede a dare risposte ARP per conto di altri host. È tuttavia, molto spesso, sconsigliabile il suo utilizzo, preferendo un router o altri meccanismi. 42 Protocollo RARP RARP è un acronimo che sta per Reverse Address Resolution Protocol. Si tratta di un protocollo duale ad ARP, che permette ad un host appena avviato di scoprire il proprio indirizzo IP, a partire dal proprio MAC address, inviando la richiesta del proprio indirizzo in broadcast nella rete locale. Un server o qualche altro apparato di rete può occuparsi di fornire una risposta con l'indirizzo IP che l'host dovrà utilizzare. Si tratta quindi di un protocollo utilizzato per l'autocongurazione di rete. Questo protocollo presenta alcune limitazioni, tra cui il fatto che viene inviato solo l'indirizzo IP (e nessun'altra informazione) e che può essere utilizzato solo se il server RARP è nella stessa rete locale dell'host. Protocollo BOOTP A dierenza del protocollo RARP utilizza datagrammi IP e protocollo di trasporto UDP.Una stazione generica che desidera congurare la propria interfaccia di rete per accedere ad Internet, può inviare un messaggio BOOTP (Boot- strap ) indirizzato ad una specica porta UDP, utilizzando l'indirizzo IP broadcast di sottorete come destinazione e l'indirizzo nullo come sorgente (sorgente: 0.0.0.0, destinazione:255.255.255.255). Il server BOOTP (che può anche essere collocato in una LAN dierente appartenente però alla stessa sottorete, risponde all'host con un messaggio che può contenere indirizzo IP, netmask, indirizzo IP del le server, indirizzo IP del default router,... Questa risposta viene inviata dal server BOOTP sempre in broadcast in modo analogo a come fa il client per contattare il server. BOOTP funziona però grazie ad una tabella installata sul server che assegna gli indirizzi, dove è presenta una associazione di indirizzo IP da assegnare per ogni MAC address. Protocollo DHCP Il protocollo DHCP (Dynamic Host Conguration Protocol ), permette una riassegnazione dinamica degli indirizzi all'interno della rete in modo automatico, a dierenza di BOOTP che è pensato per una assegnazione statica mantenendo una tabella di assegnamenti ssa. Il server DHCP ha un serie di indirizzi assegnabili e ha la possibilità di concedere un tempo di licenza dell'indirizzo, al termine del quale può decidere di riassegnare l'indirizzo se non sia più in uso. L'host ha la possibilità di richiedere il rinnovo dell'indirizzo poco prima della sua scadenza. DHCP come BOOTP fa uso di pacchetti UDP sopra IP, quindi il server non deve necessariamente trovarsi nella stessa rete della stazione che richiede l'indirizzo, infatti i messaggi DHCP, che sono traposrtati dal protcollo UDP, possono attraversare anche più router. DHCP fa uso della porta UDP 67 come sorgente e UDP 68 come destinazione. Inizialmente l'indirizzo IP utilizzato dal client per mandare la richiesta sarà 0.0.0.0 e il destinatario sarà indicato con l'indirizzo di broadcast 255.255.255.255 Inizialmente l'host che richiedere un indirizzo invia un messaggio DHCPDISCOVER sulla sottorete IP a cui è collegato. Il server risponde con un DHCPOFFER (indirizzo IP, netmask, gateway e server DNS), a cui il client risponde con un DHCPREQUEST e inne DHCPACK. Il client potrebbe riutare un indirizzo oertogli, il che ha senso in presenza di più di un server DHCP. Per rilasciare un IP si utilizza un messaggio esplicito di DHCPRELEASE. Il protocollo ICMPv6 È la nuova versione del protocollo ICMP, parte integrante di IPv6. In esso sono state aggiunte nuove funzionalità che erano in precedenza gestite da altri protocolli (ARP e IGMP) e tolte altre inutilizzate del vecchio protocollo ICMP. Neighbor Discovery Protocol (NDP ) è una parte del protocollo ICMPv6 che permette di sostituire le operazioni svolte da ARP. Secure Neighbor Discovery Protocol (SEND ) è una estensione di NDP che permette maggiore sicurezza (vedi ARP spoong). Multicast Router Discovery (MRD ) sostituisce le operazioni svolte dal vecchio protocollo IGMP per il multicasting. ICMPv6 è stato denito in RFC4443. Come nella versione precedente, lo scopo principale di ICMP resta comunque monitorare lo stato della rete e inviare pacchetti di gestione o di errore. ICMPv6 viene trasportato da datagrammi IPv6 utilizzando come Next Header il valore 58. Struttura del pacchetto ICMPv6 Type (8 bit) Type (32 bit) Code (8 bit) Checksum (16 bit) Data (8 bit): Specica il tipo di messaggio ICMPv6. I valori nell'intervallo 0-127 indicano un messaggio di errore, mentre i valori 128-255 indicano un messaggio informativo. Code Checksum (8 bit): È un valore che dipende dal type che specica il sottotipo di messaggio. (16 bit): È un checksum per il controllo d'errore calcolato in modo simile al checksum UDP sfruttando uno pseudo-header (vedi nel seguito o RFC). 43 Messaggi di errore Type 1 Signicato Code Signicato 0 No route to destination 1 Communication with destination administratively prohibited 2 Beyond scope of source address 3 Address unreachable Destination Unreachable 4 Port Unreachable 5 Source address failed ingress/egress policy 6 Reject route to destination 7 Error in Source Routing Header 2 Packet Too Big 0 3 Time Exceeded 0 Hop limit exceeded in transit 1 Fragment reassembly time exceeded 4 Parameter Problem 100 Private experimentation 101 Private experimentation 127 Reserved for expansion 0 Erroneous header eld encountered 1 Unrecognized Next Header type encountered 2 Unrecognized IPv6 option encountered Messaggi informativi Type Signicato Code Signicato 128 Echo Request 0 RFC4443 129 Echo Reply 0 RFC4443 130 Multicast Listener Query 0 RFC2710 131 Multicast Listener Report 0 RFC2710 132 Multicast Listener Done 0 RFC2710 133 Router Solicitation (NDP) 0 RFC4861 134 Router Advertisement (NDP) 0 RFC4861 135 Neighbor Solicitation (NDP) 0 RFC4861 136 Neighbor Advertisement (NDP) 0 RFC4861 137 Redirect Message (NDP) 0 RFC4861 0 Router Renumbering Command 1 Router Renumbering Result 138 139 Router Renumbering ICMP Node Information Query 140 ICMP Node Information Response 141 Inverse Neighbor Discovery 142 Inverse Neighbor Discovery 255 Sequence Number Reset 0 Data conains IPv6 address subject 1 Data conains name of the subject 2 Data conains IPv4 address subject 0 Successful reply 1 Responder refuses to answer 2 Qtime of the query unknown 0 Solicitation Message 0 Advertisement Message 143 Multicast Listener Discovery reports (RFC3810) 144 Home Agent Address Discovery 0 RFC6275 0 RFC6275 Request Message 145 Home Agent Address Discovery Reply Message 146 Mobile Prex Solicitation 0 RFC6275 147 Mobile Prex Advertisement 0 RFC6275 148 Certication Path Soliciation (SEND) RFC3971 149 Certication Path Advertisement (SEND) RFC3971 151 Multicast Router Advertisement (SEND) RFC4286 152 Multicast Router Solicitation (MRD) RFC4286 153 Multicast Router Termination (MRD) RFC4286 200 Private experimentation 201 Private experimentation 255 Reserved for exapansion 44 Per funzionare correttamene, un host che fa uso di IPv6 deve obbligatoriamente accettare e rispondere ai messaggi ICMPv6 con valori type 135 e 136. Per altre informazioni sugli obblighi in ICMPv6 consultare la RFC4890. Lo strato di trasporto (livello 4 ISO/OSI) Protocollo UDP Il nome UDP sta per User Datagram Protocol. Si tratta di un semplicissimo protocollo di trasporto che poco aggiunge ai pacchetti IP. Permette il trasferimento di semplici datagrammi (senza instaurare una connessione) all'interno dei pacchetti IP. È un protocollo di tipo connectionless, come il sottostante IP. Non si occupa del controllo di usso, della congestione, degli errori o della ristrasmissione dopo la ricezione di un segmento errato. UDP aggiunge ad IP solo il multiplexing delle porte, che permettono ai pacchetti IP di essere multiplati su più applicazioni in ascolto. Richiede meno traco di un protocollo con connessione (tipo TCP ) perché non c'è bisogno di un meccanismo di instaurazione della connessione o di ritrasmissione. In caso di congestione, i pacchetti persi non sono ritrasmessi. Non ha numeri di sequenza, quindi può succedere che arrivino pacchetti duplicati o vengano consegnati fuori sequenza. La struttura del segmento UDP: 32 bit Source Port (16 bit) Destination Port (16 bit) UDP Lenght (16 bit) Checksum (16 bit) Dati (facoltativi) I campi del pacchetto sono: Source port/Destination port (entrambi da 16 bit): indicano la porta a cui è connessa l'applicazione che 232 − 1 = 65535. emette/riceve l'unità informativa. Il valore massimo è well-known . Le porte nel range 49152 − 65535 UDP length tutto a 0. Le porte nel range 0 − 1023 sono le porte sono assegnate dall'organo di Internet IANA, mentre le porte sono di uso libero e assegnabili dinamicamente. (16 bit): Lunghezza in byte dell'intero pacchetto UDP. Nel caso di pacchetto UDP vuoto (senza dati) il minimo è 8, cioè Checksum 1024 − 49151 0000000000000100. (16 bit): È un codice a controllo di errore opzionale. Se viene deciso di non utilizzarlo lo si imposta Non sussistono ambiguità perché il valore 0 non può essere mai utilizzato come codice di controllo. tutto il messaggio UDP (dati compresi) e anche una parte dell'header del 3 datagramma IP precedente detto pseudo-header . Se utilizzato, serve per proteggere Pseudo-header (caso IPv4): (32 bit) Source IP address (32 bit) Destination IP address (32 bit) 00000000 Protocol ID (8 bit) UDP Length (16 bit) Pseudo-header (IPv6): (32 bit) Source IP address (128 bit) Destination IP address (128 bit) UDP Lenght (32 bit) 000000000000000000000000 3 In Next header (8 bit) realtà questo viola i principi di straticazione dei protocolli perché UDP non dovrebbe sapere nulla di IP.. 45 Il contenuto del campo di checksum UDP viene calcolato come complemento ad 1 (cioè un NOT) della somma dei bit del segmento UDP e dello pseudo-header a blocchi di 16bit. Per questo motivo è necessario aggiungere nello pseudo-header un byte di zeri (di modo da allinearlo a 16 bit). Procedura per il calcolo del checksum dal trasmettitore: Eseguiamo la somma in blocchi da 16 bit dello pseudo-header, header UDP (con checksum impostato a 0) e i dati UDP. Se la lunghezza (in byte) dei dati UDP (payload) è dispari, aggiungo un byte di zeri. In questo modo ho tutte parole da 16 bit. Una volta ottenuta la somma, nego il risultato e lo imposto come valore di checksum. [immagine di esempio] Procedura per il calcolo del checksum dal ricevitore: Eseguiamo la somma in blocchi da 16 bit dello pseudo-header, header UDP e i dati UDP. Se come risultato della somma (non negato) ottengo tutti 1 allora il checksum è corretto. Utilizzare il checksum da maggiore sicurezza che i dati ricevuti dal pacchetto UDP siano corretti, però non ha molta utilità perché anche se trovo un errore non posso avvisare il mittente e farmi rimandare il pacchetto. UDP non è pensato per questo e inoltre non potrei comunque farlo dato che non ha numeri di sequenza sui pacchetti. In alcune applicazioni è meglio scartare il pacchetto piuttosto che leggere dati errati (ad esempio in qualche tipo di trasferimento les tra hosts) In altre applicazioni è meglio evitare di perdere tempo a calcolare il checksum e disinteressarsi se sono presenti alcuni bit errati (ad esempio nella telefonia). Caratteristiche di UDP UDP è un protocollo semplice e comodo per applicazioni che richiedono di inviare dati brevi, che non hanno bisogno di ritrasmissione o controllo di usso. Il servizio DNS ad esempio utilizza pacchetti UDP. Anche il servizio RTP fa uso di pacchetti UDP. Protocollo TCP Il nome TCP sta per Transmission Control Protocol , è il protocollo più utilizzato di Internet. to inizalmente in RFC793, poi aggiornato in RFC1122 e RFC1323. È stato deni- È un protocollo progettato per avere diverse caratteristiche: Fornire un usso di byte adabile end-to-end, su un inter-network inadabile. Parliamo di inter-network e non di rete perché le diverse parti su cui transita TCP possono avere larghezze di banda, ritardi, dimensioni dei pacchetti e altri parametri molto diversi tra loro. TCP è stato progettato per adattarsi dinatmicamente alle proprietà della inter-network e continuare ad orire solide prestazioni in presenza di molti tipi di errore. È un protocollo orientato alla connessione ( connection-oriented ). Fornisce un servizio di trasporto adabile. Permette multiplazione di più ussi mediante socket. Permette la consegna in sequenza dei pacchetti. Gestisce la perdita dei pacchetti, il controllo di usso e la congestione. Tutte le connessioni TCP sono full-duplex (il traco può uire sulla stessa connessione in due direzioni, come in UDP ) e punto-punto (perché ogni connessione ha esattamente due punti nali). TCP non supporta multicasting o broadcasting. Una connessione TCP è un usso di byte, non un usso di messaggi. Se il processo mittente fa ad esempio 4 scritture da 512 byte su un usso TCP, a destinazione i dati potrebbero essere ricevuti come 4 blocchi da 512 byte oppure 2 blocchi da 1024 byte oppure un solo blocco da 2048 byte. Quando una applicazione passa dei dati a TCP, lui potrebbe decidere di tenerli temporaneamente in un buer prima di inviarli. Caratteristiche generali L'adabilità nel trasporto si basa sulla numerazione byte per byte dei dati trasferiti nelle due dirazioni, invece che per singola unità informativa. Ogni byte in una connessione TCP ha il proprio numero di sequenza a 32 bit. Una volta con le linee a 54 Kbps ci voleva una settimana per esaurire i numeri di sequenza. Alle velocità attuali possono essere esauriti a velocità preoccupanti. 46 TCP si basa su un meccanismo a nestra variabile. Vengono adottati solo riscontri positivi (ACK ). La ritrasmissione dei segmenti mancanti si basa sulla scadenza di un timeout . Le ritrasmissioni possono includere intervalli di byte diversi rispetto alla trasmissione originale. Ogni segmento TCP, header compreso, non può superare la lunghezza di IP). In realtà ogni rete ha un ad esempio ha 65515 Byte (carico utile dal pacchetto MTU (Maximum Transfer Unit ) diversa a cui quindi TCP deve adattarsi. Ethernet M T U = 1500Byte (vedi paragrafo MTU in IP). Struttura del segmento TCP 32 bit Source port (16 bit) Destination port (16 bit) Sequence number (32 bit) Acknowledgement number (32 bit) TCP HLEN Reserved (6 bit) (4 bit) U R G A C K P S H R S T S Y N F I N Window Size (16 bit) Checksum (16 bit) Urgent pointer (16 bit) Option + padding (0 o più parole da 32 bit) Dati (facoltativo) (Nel caso migliore 65495 Byte) Source port/Destination port (16 bit): Come per UDP, indica la porta a cui è connessa l'applicazione che emette/riceve l'unità informativa. Sequence number, SN (32 bit): Indica il numero d'ordine del primo byte dati dell'unità informativa all'interno del usso inviato dalla sorgente. La numerazione dei byte della connessione è quindi modulo Acknowledgement number, AN (32 bit): Indica alla destinazione il numero d'ordine del prossimo byte che il processo si aspetta di ricevere. Quindi se a x−1 232 . AN è x, allora il processo sta riscontrando tutti i byte ricevuti no (in stile go-back-n ) TCP Header Lenght, HLEN (4 bit): Lunghezza dell'header in unità di 32 bit. Il valore minimo è 5. Il valore massimo è 15. Reserved (6 bit): Campo riservato per scopi futuri. ° Alcuni utilizzano una funzionalità aggiuntiva ( ECN - Explicit Congestion Notication , RFC3168) per il controllo di congestione, che fa uso del 6 bit di questo campo. In ogni caso un destinatario che non supporta questa funzionalità può tranquillamente ignorare questo bit. Code bits (6 bit): URG urgent : Indica la presenza di dati urgenti nel payload, la cui posizione è indicata dal campo urgent . Permette di generare un evento che comunica a TCP di interrompere il buering dei dati e trasmettere immediatamente tutto ciò che ha a disposizione nei dati urgenti. È un sistema di interrupt. ACK acknowledgement : È impostato ad 1 per indicare che acknowledgement number è valido e deve essere considerato. PSH push : È impostato ad 1 per richiedere all'entità ricevente di consegnare all'entità di applicazione i dati nel messaggio e di non archiviarli nel buer come farebbe per migliorare l'ecienza. RST reset : Quando impostato da 1, indica la reimpostazione di una connessione (diventata incongurente per qualche motivo). È anche utilizzato per riutare un segmento non valido o un tentativo di aprire una connessione verso una porta chiusa. SYN syncronize: Quando impostato ad 1, viene utilizzato per instaurare una connessione e ha ruolo diverso a seconda del valore del ag ACK: * * SYN=1, ACK=0 SYN=1, ACK=1 ⇒ CONNECTION ⇒ CONNECTION REQUEST ACCEPTED FIN nal : Viene utilizzato per il rilascio di una connessione. Indica che chi lo manda non ha più nulla da inviare, però questo mittente potrebbe potenzialmente continuare a ricevere dati. La chiusura della connessione deve essere fatta da ambo i lati. Window size (16 bit): Indica quanti byte il mittente è disposto a ricevere. Solitamente corrisponde con la quantità di spazio libera nel buer di ricezione, anche se non deve essere necessariamente così (vedi in seguito). Se ACK = x e W SIZE = y signica che il mittente è disposto a ricevere i byte da x a x + y − 1. aspettare ad inviare nuovi dati. Successivamente mostrando 16 permette l'invio di nuovi dati. Il valore massimo della nestra è 2 − 1 = 65535Byte. indica al destinatario di 47 Se W SIZE = 0, W SIZE 6= 0 si Checksum (16 bit): Consente la rilevazione di errori. Il calcolo del checksum viene eettuato con il complemento ad 1 della somma di parole a 16 bit, così come già descritto nel protocollo UDP. Lo pseudo-header utilizzato è sempre lo stesso mostrato per UDP. Pseudo-header (IPv4) : (32 bit) Source IP address (32 bit) Destination IP address (32 bit) 00000000 Protocol ID (8 bit) UDP Length (16 bit) Pseudo-header (IPv6): (32 bit) Source IP address (128 bit) Destination IP address (128 bit) TCP Lenght (32 bit) 000000000000000000000000 Urgent pointer byte urgente. da sola. Next header (8 bit) (16 bit): Indica l'oset in byte partendo dal numero di sequenza corrente in cui si trova l'ultimo La posizione iniziale del primo dato urgento non è indicata, l'applicazione deve determinarsela Per essere utilizzato questo campo, il ag utilizzata per recapitare dei byte prima di altri. PSH deve essere attivato. Questa funzionalità è spesso Era utilizzato in passato ad esempio su telnet per inviare il comando Ctrl+C. Options Padding : È un modo per aggiungere delle estensioni all'intestazione : Si garantisce che il TCP header sia multiplo di 32 bit. Il byte 00000001 serve come riempimento per avere un header multiplo di 32 bit (byte Il byte 00000000 serve come byte di riempimento nale (byte no-operation ). end-of-operation ). Opzioni comuni di TCP Maximum Segment Size (MSS) È una opzione di TCP che permette ad ogni host di specicare il carico utile massimo che TCP potrà accettare. Ogni host annuncia il proprio MSS e guarda quello del partner. Se non si utilizza questa opzione, si assume di default che il 536 Byte. Tutti gli host di Internet devono accettare segmenti TCP di 65535 Byte. carico utile sia pari a Il valore massimo è Code Length MSS (16 bit) 00000010 00000100 ............................................................. 536+20 = 556Byte. Window scale È una opzione di TCP (denita in RFC1323) che permette agli host di negoziare un fattore di scala per la dinesione della nestra di ricezione. Su una linea T3 (44,736 Mbps) bastano 12 millisecondi per spedire una intera nestra di 3 4 del tempo di una risposta. Per evitare questa situazione di inecienza, viene allargata la nestra con questo fattore di scala. La nestra dati da 64KB. Se il ritardo andata-ritorno (RTT) è 50 millisecondi, il mittente resta in attesa per vine aumentata di un fattore pari a 2 elevato al valore contenuto nel campo scale factor: Code Length Scale factor (8 bit) 00000010 00000100 ............................................................. Selective repeat In RFC2581 viene denita una opzione di TCP che permette ad un host di utilizzare un messaggio di riscontro negativo 4 NACK per avvisare il mittente di rinviare solo un certo pacchetto, riducendo la quantità di dati trasmessi . 4 Nei sistemi GNU/Linux questa funzionalità viene abilitata agendo sul le /proc/sys/net/ipv4/tcp_sack 48 Setup delle connessioni, Three-way handshake Il server eettua una LISTEN (o anche detta passive open ) per indicare a TCP che è pronto a ricevere connessioni. Il client eettua una CONNECT (o anche detta active open ) per indicare a TCP la volontà di instaurare una connessione con il server. 1. Il client sceglie a caso un numero di sequenza iniziale (ISN - Initial Sequence Number ) e invia un pacchetto con il numero di sequenza scelto (SN = ISN ) e SY N = 1. Eventualmente comunica anche MSS, Window scale,... nello stesso pacchetto. La scelta di un ISN casuale evita problemi nel dover distinguere due richieste dallo stesso host (ad esempio nel caso in cui i pacchetti della richiesta arrivino in seguito alla chiusura e riapertura di una connessione). 2. Il server riceve il SYN, estrae un altro ISN casuale e manda un segmento con SN = ISN , SY N = 1, ACK = 1 5 contenente come acknowledgement number il sequence number ricevuto dal client incrementato di una unità . Se il server non fosse in ascolto su quella porta, risponderà invece con un pacchetto RST. 3. Il client riceve il SYN/ACK del server e invia un ACK = 1 con acknowledgement number pari al sequence number inviato dal server incrementato di una unità. Inseriesce inoltre nel payload i primi byte di dati. 5I Se le due richieste di connessione dovessero arrivare nello stesso momento, il meccanismo funziona comunque. Di seguito una gura con tutti gli stati e le transizioni: messaggi SYN e FIN consumano convenzionalmente un byte 49 Gli stati del diagramma hanno i seguenti signicati: Stato Descrizione CLOSED Nessuna connessione è attiva o in sospeso LISTEN Il server è in attesa di una chiamata in ingresso SYN RCVD È arrivata una richiesta di connessione; attesa di ACK SYN SENT L'applicazione ha iniziato ad aprire una connessione ESTABLISHED Il normale stato di trasferimento dei dati FIN WAIT 1 L'applicazione aerma di avere terminato FIN WAIT 2 L'altro lato accetta il rilascio TIMED WAIT Attende la scadenza di tutti i pacchetti CLOSING Entrambi i lati hanno cercato di chiudere contemporaneamente CLOSE WAIT L'altro lato ha iniziato il rilascio LAST ACK Attende la scadenza di tutti i pacchetti Generazione degli ISN (Initial Sequence Numer) Ogni host possiede un contatore che conta ciclicamente in modulo 232 con passi di ore) Al momento dell'instaurazione della connessione viene scelto l'ISN attuale. 50 4µs (ciclo completo in 4,77 In realtà ci sono problemi di sicurezza poiché un eventuale attaccante potrebbe identicare i numeri di sequenza e sfrutturli per inserirsi in connessioni esistenti. L'implementazione reale della generazione degli ISN dipende dal sistema operativo, ma non è (solitamente) come quella qui descritta teoricamente. Gestione della connessione I numeri di sequenza in transito devono essere univoci, perché ogni byte di una connessione di rete deve essere univoco. Vogliamo evitare ambiguità di due byte con dati diversi e stesso sequence number. Per evitare ambiguità si ssa un tempo di vita massimo dei pacchetti che varia a seconda di quanto velocemente consumo i sequence number, cioè in base alla velocità della connessione. Stabiliamo quindi che il Maximum Segment Life (MSL) sia M SL < dove B è la capacità della connessione espressa in 232 · 8 B bit 6 s . Cioè il MSL deve essere minore dell'intervallo massimo tra due sequence number uguali . Normalmente si stabilisce di default accettabile (se B = 10M bps M SL = 2min = 120s , che se abbiamo una connessione a 10M bps è un valore 100M bps abbiamo 5 l'intervallo tra due sequence number uguali è circa 1 ora), se minuti tra due sequence number uguali. Per tenere traccia della scadenza di un pacchetto nel caso di reti molto veloci (ad esempio una rete 10 Gbit/s i numeri di sequenza si esauriscono in 3, 43 secondi) si utilizza l'opzione timestamp di TCP (vedi RFC1323) che 7 pur utilizzando anch'essa un contatore a 32 bit, lo incrementa con passo più ampio . Rilascio della connessione TCP ( Tear down) : Per rilasciare una connessione sono richiesti 4 segmenti (FIN e ACK da entrambi i lati). In realtà è possibile inserire il primo ACK e il secondo FIN nello stesso segmento riducendo il totale a 3. L'invio di una trama FIN da parte di un host signica non ho più nulla da inviarti, comunque continuo ad ascoltarti, il destinario deve rispondere con ok, confermo e poi con anche io smetto di inviare, ma comunque resto in ascolto, quendi il mittente conferma ok e la connessione è stata chiusa. Se uno di questi ACK viene perso, la connessione è chiusa per timeout. Criterio di trasmissione/ricezione di TCP Segmenti ricevuti correttamente, anche se fuori sequenza, sono accettati e immagazzinati nel buer, perchè all'interno della nestra di ricezione (come nei protocolli selective-repeat classici) I riscontri inviati sono solo positivi (ACK ) e sono di tipo cumulativo (come nei protocolli go-back-n ) I segmenti ricevuti correttamente vengono riscontrati singolarmente o con la tecnica del Delayed ACK , cioè ogni due segmenti e comunque entro un certo intervallo di tempo. La tecnida di piggybacking viene utilizzata. Una precisazione In realtà nella implementazione base di TCP, TCP Tahoe , si prevede che i segmenti fuori sequenza siano scartati (come nei protocolli go-back-n ), mentre nella implementazione più avanzata di TCP, TCP Reno , si prevede che i segmenti fuori sequenza (ma all'interno della nestra di ricezione) siano accettati e memorizzati. Controllo di usso in TCP - Silly Window Syndrome Il controllo di usso consiste nel problema di una sorgente molto veloce che manda dati rapidamente ad una sorgente lenta, che fatica quindi a rispondere. In particolare vediamo un problema specico del controllo di usso che genera insucienza del protocollo se non viene gestito correttamente. 6 Si noti che questo calcolo non è del 7 Nel sistema operativo GNU/Linux tutto corretto, perché si trascura la presenza dell'header IP. Resta quindi un caso pessimo limite. l'opzione timestamp è abilitata di default su tutti i pacchetti TCP in uscita mediante il procle /proc/sys/net/ipv4/tcp_timestamps che, nonostante il nome, gestisce le opzioni timestamp di TCP sia su IPv4 che su IPv6. 51 Lato ricevitore (algoritmo di Clark) Svuoto letamente il buer di ricezione (che è già pieno), appena libero un posto mando un ACK alla sorgente, che mi manda subito un nuovo pacchetto e il buer è nuovamente pieno e devo avvertire la sorgente di aspettare ad inviare altro (inviandole una dimensione della nestra nulla). In questo modo c'è alto overhead, segmenti corti, pessima ecienza del protocollo. La soluzione nel ricevitore consiste nell'utilizzare l'algoritmo di Clark. Utilizzando questo algoritmo, il ricevitore mente al trasmettitore, indicando una nestra nulla no a quando il suo buer in ricezione non si è svuotato per metà o per una porzione almeno pari a MSS. Cioè indico W SIZE = 0 no a quando Busy buer size 6= min Buer size 2 , M SS Inoltre il mittente può essere d'aiuto se evita di inviare segmenti di piccole dimensioni. Lato trasmettitore (algoritmo di Nagle) Il problema complementare si può presentare sul lato del trasmettitore. È questo il caso di un trasmettitore che genera pochi dati molto lentamente e il buer d'invio è quasi sempre vuoto. Invio segmenti molto piccoli man mano che vengono prodotti, c'è alto overhead e inecienza del protocollo. La soluzione adottata è chiamato algoritmo di Nagle. Questo algoritmo consiste nell'invio della prima porzione di dati, anche se corta, e in una successiva attesa. Se ricevo l'ACK, allora invio un altro segmento, altrimenti aspetto che il buer di uscita si riempia di almeno una dimensione pari ad un MSS e quindi invio il pacchetto. La gestione dei timer e dei timeout di TCP TCP utilizza vari timer, il più importante è il timer di ritrasmissione : quando viene inviato un segmento si avvia un timer di ritrasmissione, quando scade si rimanda il pacchetto, ma quanto deve essere lungo questo intervallo di tempo? Il problema qui non è come nei protocolli datalink in cui il tempo massimo di andata e ritorno massimo è ssato (ad esempio 2τ ). In Internet ogni rete ha un diverso tempo di transito ed è necessario adattarsi a ciascuna connessione. La soluzione è adottare un algoritmo altamente dinamico che regola costantemente l'intervallo di timeout in base a continue misurazioni delle prestazioni di rete. Algoritmo di Jacobson (1988) Per ogni connessione, TCP tiene una variabile, RTT (Round Trip Time), che rappresenta la migliore stima attuale del tempo di andata e ritorno per la destinazione in questione. Quando si avvia un segmento parte anche un timer che serve a due scopi: Per misurare quanto tempo richiede l'acknowledgement Per innescare un'eventuale ristrasmissione RT T Se l'acknowledgement torna indietro prima della scadenza del timer, TCP misura il tempo trascorso M. viene dunque aggiornato con un ltro a media mobile : RT T = α · RT T + (1 − α) · M con 0 < α ≤ 1, dove α α = 87 . è un fattore che determina il peso dato al vecchio valore rispetto a quello nuovo. Solitamente Ora anche conoscendo un RT T Una volta veniva utilizzato valido, la scelta di un timeout di ritrasmissione adatto è una questione complessa. T imeout = β · RT T con β = 2, poi ci si è accorti che un valore costante non era adatto. Jacobson ha proposto di rendere β proporzionale alla deviazione standard della funzione densità di probabilità del tempo di arrivo di un acknowledgement. In paritcolare Jacobson ha suggerito di utilizzare la media D come stima approssimata della deviazione standard. 52 deviazione Alla ricezione di un acknowledgement è elaborata la dierenza tra il valore previsto e il valore osservato e viene aggiornata la deviazione media in questo modo: D = β · D + (1 − β) · |RT T − M | con 0<β≤1 e solitamente β=α 8 oppure β= 19 4 Questo calcolo può essere eettuato in un calcolatore con poche istruzioni elementari. I valori iniziali sono solitamente M =0 e RT T = 1, 5 Solitamente è impostato anche un valore massimo che 10 . RT T può raggiungere. Nei sistemi GNU/Linux è 120 secondi La maggior parte delle implementazioni di TCP utilizza l'algoritmo di Jacobson e impostano il timeout a: T imeout = RT T + n · D dove solitamente n=4 . Si utilizza per vari motivi 4. Sia perché si implementa con un solo shift nei registri, sia perchè meno dell'1% dei pacchetti giunge in un tempo superariore a 4 volte la deviazione standard. Spesso, ma non obbligatoriamente, in alcune implementazioni di TCP se arriva un pacchetto ICMP source squence , viene trattato dall'algoritmo in modo molto simile ad un Timeout. Algoritmo di Karn Un problema che si verica nella stima dinamica di RTT è la scelta delle azioni da compiere quando un segmento subisce un timeout e viene inviato nuovamente. Quando giunge l'acknowledgement, non è chiaro se fa riferimento alla prima trasmissione o alla successiva. Un errore di valutazione potrebbe seriamente contaminare la stima di RTT. Phil Karn, un radioamatore, ha scoperto questo problema nel modo peggiore. È un radioamatore interessato alla trasmissione di pacchetti TCP/IP su ham radio, un mezzo molto inadabile (metà dei pacchetti vengono persi). La proposta fatta da Karn è molto semplice: Al contrario, il evitare di aggiornare RTT per ogni segmento ritrasmesso. Timeout viene raddoppiato a ogni errore no a quando non arriva l'acknowledgement di un segmento. Questo signica che ogni volta che scatta il timeout si eettua l'operazione: T imeout = T imeout · 2 Timer di persistenza Viene utilizzato per evitare una particolare situazione di deadlock: se il destinatario risponde al mittente avvertendolo che la sua nestra è larga 0, il mittente smette di trasmettere. Quando il destinatario è pronto a ricevere, avverte il mittente che la nestra è cambiata. Se questo pacchetto di avviso viene però perso, il mittente aspetterà all'innito. Per questo motivo il mittente, ogni volta che scade il timer di persistenza, chiede al destinatario qual'è la situazione della nestra. Questo timer viene utilizzato solo nel caso di nestra larga 0 ovviamente. Timer keepalive In alcune implementazioni viene utilizzato un timer di keep-alive che invia dei pacchetti su delle connessioni aperte 11 . Alcuni considerano questa funzionalità è da molto tempo, per controllare che il destinatario sia ancora in ascolto un po' controversa perché potrebbe rischiare di far cadere una connessione stabilita solo per un problema temporaneo sulla rete. Questa funzionalità può essere utile per mantenere attiva una connessione con un host dietro un NAPT. I NAPT infatti solitamente chiudono le connessioni prive di attività dopo un po' di tempo per evitare di occupare porte. 8 Secondo A.Tanenbaum in Reti di calcolatori 9 Secondo altre fonti 10 In un commento scherzoso all'interno dei sorgenti del kernel Linux, qualcuno scrive che questa limitazione sull'RTT massimo non potrà permettere la comunicazione con TCP verso una ipotetica università su Marte, dato che l'RTT minimo verso marte è circa 900 secondi... 11 Nei sistemi GNU/Linux è possibile abilitare questa funzionalità passando uno specico parametro con setsocketopt (SO_KEEPALIVE ) durante l'inizializzazione di un socket TCP. I valori relativi alle tempistiche per questo timer sono regolati tramite i les: /proc/sys/net/ipv4/tcp_keepalive_time /proc/sys/net/ipv4/tcp_keepalive_probes /proc/sys/net/ipv4/tcp_keepalive_intvl Per altre informazioni consultare http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/ 53 Timeout di TIMED_WAIT Anche dopo la chiusura di una connessione TCP con uno scambio completo di FIN/ACK da entrambi i lati, la connessione resta in stato di TIMED_WAIT per un tempo pari dal doppio del tempo di vita del pacchetto (MSL) per garantire che alla chiusura di una connessione tutti i pacchetti correlati siano stati rimossi. Fast retransmit e Fast recovery Se il mittente vede tornare dal destinatario 3 ACK consecutivi con lo stesso acknowledge number, suppone che un pacchetto inviato sia stato perso. In particolare se AN = x SN = x sia stato x per ritrasmettere, si suppone che il pacchetto inviato con perso. Molto spesso è così, quindi questo metodo evita di dover aspettare il timeout del pacchetto Viene ritrasmesso solo il pacchetto mancante, non si rinizia a trasmettere tutto. non è detto che sia così. Ad esempio il pacchetto perso potrebbe aver semplicemente seguito una guadagnando un po' di tempo. Comunque strada diversa dei precedenti, tuttavia questo caso è molto raro. Questa funzionalità evita di dover aspettare un intero intervallo di timeout, che alle volte può essere costoso un ordine di grandezza in più (in termini di tempo). Per utilizzare questo metodo è necessario disabilitare la funzionalità di Delayed ACK per la ricezione di segmenti fuori sequenza. Questa funzionalità non è implementata in TCP Tahoe ma è presente in più recenti implementazioni come ad esempio TCP Reno. Controllo della congestione Agli strati inferiori (IP, datalink) il controllo di congestione non è implementato. Deve occuparsene TCP. Essendo TCP implementato solo negli host nali, sono loro a doversi occupare del controllo di congestione. La vera soluzione alle congestioni è la diminuzione della velocità dei dati. L'idea è impedire l'inserimento di un pacchetto nella rete no a quando uno vecchio non la lascia (cioè viene consegnato). Una sorta di legge di conservazione dei pacchetti. TCP raggiunge questo scopo manipolando in modo dinamico la dimensione della nestra di ricezione che comunica all'altro interlocutore. Oggi la perdita di un pacchetto (a parte le reti wi che sono un caso particolare) è praticamente sempre dovuta a congestioni. Gli errori di trasmissione sono abbastanza rari. Quando si instaura una connessione viene scelta una dimensione della nestra adatta alle due parti e gli host iniziano a comunicare. Il problema è che questa nestra potrebbe non essere adatta per la rete sottostante. I due host devono rendersene conto ascoltando i timeout che scattano. Ogni mittente tiene traccia di due nestre: quella che il ricevente gli ha garantito (RWND - Recive Window ) e una nestra di congestione (CWND - Congestion Window ). 12 : Il numero di byte che è possibile trasmettere corrisponde alla più piccola delle due nestre NB: WS = min (RW N D, CW N D) Nelle prossime formule, per le nestre utilizzeremo come unità la M SS Avvio lento - Slow start Inizialmente il mittente pone la nestra di congestione alla dimensione del segmento massimo usato sulla connessione (MSS ), poi invia un segmento massimo (CW N D si parte con un = 1). (In alcune implementazioni più recenti di TCP CW N D = 4) Se il segmento riceve ACK prima della scadenza del timeout, aggiunge alla nestra di congestione un numero pari alla dimensione del segmento appena riscontrato, di modo che la nestra di congestione raddoppia. Quindi CW N D raddoppia e mando due segmenti di lunghezza MSS. SST HRESH come spieghermo tra breve). Abbiamo quindi che, per (Questo accade solo quando CW N D < ogni segmento riscontrato: CW N D = CW N D + 1 nonostante sia una somma, la CW N D aumenta in modo esponenziale, perchè i pacchetti che la vanno ad incrementare aumentano sempre di più. Il nome slow start trae un po' in inganno, infatti la crescita della 13 CW N D è tutt'altro che lenta, è esponen- ziale 12 Su alcuni testi e programmi la W viene solitamente chiamata SN DW N D S 13 In realtà l'incremento della CW N D potrebbe essere più lento nel caso in cui ACK (vedi i paragra precedenti). 54 il ricevitore decida di adottare la tecnica del Delayed Congestion avoidance Quando l'apertura della congestion window supera la soglia si entra nella regione di congestion CW N D avoidance , SST HRESH (cioè quando CW N D ≥ SST HRESH ), dove la crescita della congestion window diventa lineare: aumenta linearmente di un MSS per ogni intervallo di tempo RTT, indipendentemente dai pacchetti riscontrati. Si eettua cioè ancora CW N D = CW N D + 1 ma solo ogni intervallo di tempo RTT, non per ogni riscontro. Inizialmente SST HRESH = 64KB = 65535 . Questa soglia iniziale viene decisa dal sistema operativo. Può essere maggiore se si fa uso dell'opzione window scale. Per ovvi motivi SST HRESH ≥ 2 Timeout Nel caso in cui invece scatta un timeout oppure 3 ACK duplicati : Se si sta utilizzando l'implementazione classica TCP Tahoe : La nuova soglia diventa WS SST HRESH = max 2, 2 e CW N D = 1 (a meno di trattative iniziali sul numero minimo di CW N D). WS possiamo vederlo come il numero di pacchetti in giro. TCP Tahoe non ha la funzionalità di Fast Retransmit, quindi non gestisce il caso dei 3 ACK duplicati. Se si sta utilizzando l'implementazione avanzata TCP Reno : La nuova soglia diventa CW N D SST HRESH = max 2, 2 se c'è stato eettivamente un timeout allora invece Ovviamente CWND cresce no a raggiungere la dimensione della nestra del ricevente, a quel punto smetterà di crescere. Insieme alla nestra, aumenta anche il rate di trasmissione stimato come R = CW N D = 1, se ci sono stati 3 ACK duplicati CW N D = SST HRESH CW N D · M SS RT T bit s (ricordiamo che CWND è misurato in unità di MSS) Ovviamente se non ho M SS dati da mandare: aspetto di averne, altrimenti mi tocca mandarne meno. Esempio 55 Rivelazione d'errore Ci sono diversi tipi di errore all'interno di una comunicazione TCP: Segmenti corrotti : sono dei segmenti per i quali il checksum risulta errato. Il checksum TCP sono abbastanza deboli, ma si continua ad utilizzarli comunque. Segmenti persi Segmenti duplicati Segmenti fuori sequenza : sono i segmenti che ci accorgiamo di aver perso osservando gli acknowledgment. : sono i segmenti che arrivano doppi : sono segmenti recapitati correttamente ma arrivati prima di altri che mi stavo aspettando di ricevere. Correzione d'errore Ritrasmissione Scarto Riordino dei segmenti corrotti o persi. dei segmenti duplicati. dei segmenti fuori sequenza. TCP e UDP su reti wireless (approfondimento ) In base alla gerarchia ISO/OSI o Internet, UDP e TCP non dovrebbero preoccuparsi del fatto che ip sia in esecuzione su bra ottica oppure su onde radio. Nella realtà però l'informazione è importante perchè TCP sopratutto, nella maggior parte delle sue implementazioni, è stato fortemente ottimizzato sulla base di supposizioni vere per le reti cablate ma non per quelle wireless. Il problema principale è il controllo di congestione: quasi tutte le implementazioni di TCP suppongono che i timeout siano provocati dalla congestione, non da pacchetti realmente persi. Sfortunatamente i collegamenti wireless sono altamente inadabili, perdono pacchetti in continuazione. Quando viene perso un pacchetto su una rete cablata il mittente dovrebbe rallentare, quando invece viene perso un pacchetto su una rete wireless il mittente dovrebbe ritentare con determinazione. Se il mittente non sa su che rete sta lavorando, prendere la decisione è dicile. Spesso il percorso è eterogeneo: una rete cablata seguita da una rete wireless. Una delle soluzioni è modicare il codice dello strato network nella stazione wireless base. Una delle modiche è l'aggiunta di un agente di snooping (agente di indagine) che osserva e archivia nella cache i segmenti TCP in uscita dall'host mobile e gli acknowledgement provenienti da esso. Quando l'agente di snooping vede passare un segmento diretto all'host mobile, ma non vede tornare l'acknowledgment, ritrasmette il pacchetto all'host mobile senza avvertire l'origine. Anche nel caso in cui l'agente di snooping vede acknowledgement duplicati provenienti dall'host mobile, capisce che si è perso qualcosa. L'agente di snooping intercetta eventuali acknowledgement duplicati provenienti dall'host mobile e non li manda alla sorgente, per evitare che essa pensi ad una congestione nella rete. Quando l'agente di snooping osserva una lacuna nei numeri di sequenza genera un richiesta di ripetizione selettiva dei byte mancanti. Algoritmi e protocolli di instradamento Requisiti degli algoritmi di instradamento Semplicità - KISS (Keep It Simple Stupid!) Robustezza Stabilità Ottimalità : più guasti ci sono, più intervento umano è necessario, meno la rete è scalabile. : l'instradamento deve essere il più possibile coerente con la forma originale al passare del tempo. : riuscire a sfruttare meno collegamenti possibili e prediligere collegamenti veloci ad altri lenti. 56 Pacchetti da instradare I pacchetti utente in un circuito virtuale seguono lo stesso percorso, è solo necessario instradare la segnalazione iniziale I pacchetti utente di una rete a datagramma devono essere instradati ciascuno indipendentemente Decisione dell'instradamento Algoritmi centralizzati Un nodo prende le decisioni e le invia a tutti gli altri nodi per farlo sapere. Algoritmi distribuiti Tutti i nodi della rete si scambiano delle informazioni e collaborano per raggiungere la soluzione ottima da qualche punto di vista Algoritmi isolati Ogni nodo prende le decisioni in modo autonomo e indipendente dagli altri Tipi di algoritmi di instradamento14 Algoritmi di instradamento senza tabella (non c'è nessuna tabella sui nodi che eettuano il routing): Random: Detto anche hot potato , invio il pacchetto al primo posto che capita. È utilizzabile per reti molto piccole e semplici. un nodo. Solitamente la scelta è casuale ma non uniforme sui collegamenti uscenti da Un collegamento con capacità maggiore ha più probabilità di essere scelto. selezionare un generico link * Selective random i è data da: pi = La probabilità di Ci H P Cj j=1 : Una piccola variante nella quale si tiene una tabella solo per i nodi adiacenti. Se il pacchetto è diretto ad un nodo adiacente lo inoltro direttamente, altrimenti utilizzo la modalità random. Flooding: Invio il pacchetto su tutte le interfacce eccetto quella su cui l'ho ricevuto. Rischio di generare tempeste e sfrutto male le risorse che ho. Questa tecnica implica una moltiplicazione del traco uscente dal nodo, rispetto a quello entrante. Come vantaggio di sicuro raggiungo la destinazione. È una tecnica ineciente che può essere utile in alcuni contesti particolari: vedi ad esempio reti militari dove un nodo intermedio può saltare per aria da un momento all'altro. * Controllo del traco interno : Al ne di evitare pacchetti che circolano all'interno della rete al- l'innito, solitamente ogni pacchetto che sfrutta questa tecnica di instradamento deve essere dotato di un contatore che indica il numero di hop (salti, nodi intermedi) che può ancora attraversare. Ogni nodo che riceve il pacchetto decrementa questo valore. Al primo invio del pacchetto bisogna quindi assicurarsi che il valore iniziale di questo contatore sia pari al diametro dell'intera rete. * Selective ooding : È possibile migliorare l'ecienza di questo algoritmo, ad esempio tenendo una tabella che permette di capire su quale gruppo di collegamenti ha senso inviare dati. Facendo questo perdiamo però i principali vantaggi di assoluta robustezza del ooding puro. Source routing: La scelta del percorso viene fatta dalla sorgente del pacchetto scrivendola all'interno del pacchetto. I nodi intermedi non devono processare niente. La sorgente deve avere una mappa sempre costantemente aggiornata della rete e deve inviare pacchetti molto grandi. Per scegliere il percorso, il nodo sorgente può utilizzare algoritmi di routing * Path server * Path discovery centralizzati (un path server) o isolati (con path discovery ). : Il nodo sorgente consulta un server esterno per sapere quale percorso seguire. Questo metodo ha bassa adabilità, se ci sono guasti al path server non funziona più nulla. : Il nodo sorgente invia in ooding un pacchetto alla destinazione; ogni nodo su cui transita il pacchetto aggiunge un proprio identicatore. Quando il pacchetto arriva a destinazione, la destinazione risponde alla sorgente (ripercorrendo al contrario il percorso) e comunicando la strada che ha seguito il pacchetto per riuscire ad arrivare. La sorgente riceverà varie risposte e si preoccuperà di * scegliere quella con percorso minore. In ogni caso con un algoritmo source routing dobbiamo decidere se mantenere un instradamento statico o dimanico. Nel caso in cui scegliamo di renderlo dinamico, la frequenza di interrogazione del path server o dell'utilizzo del path discovery diventano un parametro critico del sistema. 14 Nel seguito potrebbe apparire a volte la parola intradamento o la sua traduzione inglese routing 57 Algoritmi di instradamento con tabella: Fisso: quando si seguono procedure di modica lente e spesso manuali. In reti con instradamento sso il servizio a datagramma degenera in quello a circuito virtuale, dato che i pacchetti seguono praticamente sempre lo stesso percorso (a meno di rare modiche manuali sulle tabelle di instradamento). Si tratta di un algoritmo poco essibile e sensibile ai guasti. Dinamico: consentono di ottimizzare continuamente l'utilizzo delle risorse, facendo continue considerazioni sulle condizioni operative. I due principali motivi che causano la variazione delle condizioni operative sono: variazione del traco oerto alla rete e gli eventi di guasto. L'algoritmo di routing dinamico deve evitare un sovraccarico dei nodi della rete (con conseguente riempimento dei buer ed aumento dei ritardi o perdita dei pacchetti) e deve reagire ai guasti modicano la topologia di rete. L'algoritmo deve quindi aggiornare con adeguata periodicità i percorsi e quindi le tabelle di instradamento. I due algoritmi di instradamento dinamico più utilizzati a livello di reti regionali sono: * Distance vector * Link state Algoritmi di instradamento gerarchici: È la strategia che si usa di fronte ad una rete molto grande, suddivissa in regioni con amministrazioni diverse tra loro. Le decisioni di instradamento vengono prese sulle informazioni complete relative ad una singola regione, mentre per quanto riguarda il resto della rete, le informazioni vengono prese su delle informazioni riassunte o semplicate. In Internet si utilizzano instradamenti di tipo gerarchico sso o dinamico. Metriche Per ogni coppia sorgente-destinazione si seleziona solitamente la via a costo minimo per raggiungere la destinazione, cioè quella che impiega il minor numero di risorse. Il costo del percorso può però essere denito a seconda di varie metriche: Il numero di salti, cioè il numero di nodi che bisogna attraversare lungo il percorso. Il traco smaltito lungo la via. Il livello di riempimento dei buer dei nodi attraversati. Il ritardo totale di trasferimento sorgente-destinazione. Nella prima metrica il costo di ciascun ramo è naturalmente unitario, mentre nelle altre metriche il costo di un collegamento varia a seconda della direzione in cui lo si percorre. Algoritmo distance vector Nell'algoritmo di tipo distance vector, ogni nodo dispone di una tabella (la tabella di instradamento ), che mantiene continuamente aggiornata. Questa tabella specica per ogni destinazione la distanza (attualmente) stimata e il next- hop , cioè il prossimo nodo da contattare. In questo caso consideriamo il termine distanza come sinonimo di costo. Si noti che per questo algoritmo è possibile scegliere una metrica qualunque tra quelle prima citate. 15 : La struttura della tabella è quindi fatta in questo modo Destination Distance Next-hop A 1 G B 0 - C 3 F D ∞ ... ... 15 In ... Ogni nodo comunica periodicamente il vettore delle distanze (distance vector ) a tutti i nodi adiacenti ad esso. Il vettore delle distanze è una tabella come quella sopra rappresentata, ma privata del campo next-hop. Ogni nodo conosce la distanza che lo separa da ognuno dei nodi adiacenti e riceve il vettore delle distanze dai nodi adiacenti, che provvede ad aggiornare sommando le distanze per raggiungerli. La tabella viene aggiornata con nuovi dati solo se le nuove distanze per certe destinazioni sono inferiori a quelle precedenti. Se la nuova distanza ricevuta non è minore di quella precedente, ma arriva dal nodo utilizzato come next-hop per quella destinazione, la riga nella tabella viene comunque aggiornata. questo esempio assumiamo il nodo B collegato direttamente al nostro nodo, quindi non c'è next-hop. La distanza non è però detto che sia 0 per tutti i nodi direttamente collegati, dipende dalla metrica scelta. 58 Se si ottiene una nuova stima di distanza verso un'altro next-hop uguale a quella attualmente in tabella, si aggiorna comunque la voce, in quanto si preferiscono sempre stime più recenti nell'instradamento dinamico. I nodi di cui non si conosce la distanza vengono marcati come a distanza innita nella tabella. Algoritmo di Bellman-Ford È l'algoritmo alla base dell'instradamento distance vector, che viene utilizzato da un generico nodo s per calcolare l'albero dei cammini minimi verso tutte le destinazioni come informalmente descritto prima. D d h j : Costo della via a costo minimo dal nodo sorgente ij : Costo del collegamento diretto tra i e j ; 1. h=0 2. Djh = ∞ ∀j 6= s 3. h=h+1 4. Djh = mini Dih−1 + dij , Djh−1 5. if Djh = Djh−1 (a) dij = ∞ s al nodo j con un numero massimo di h salti. se i due nodi non sono connessi direttamente. ∀j 6= s hmax = h − 1 6. else (a) goto 3 7. stop Count to innity In generale l'algoritmo distance vector registra con ecienza l'inserimento di nuovi nodi nella topologia di rete, mente in alcuni casi la rimozione di nodi può dare luogo a problemi. L'esempio classico è quello di una rete lineare: una catena di nodi collegati uno dopo l'altro in successione. Se l'ultimo della catena si spegne la notizia impiega tanti cicli di avviso quanti sono i nodi della rete per propagare il messaggio, questo è legato al fatto che il nodo adiacente a quello spento, pensa di poterlo raggiungere tramite quello successivo, senza sapere che il percorso scelto lo attraversa. Il costo per contattare il nodo spento aumenta sempre di più no a quanto raggiunge il valore massimo rappresentabile. Questa situazione va sotto il nome di count to innity dato che risulta evidente il crescere continuo delle distanze stimate dei nodi della rete verso il nodo non più raggiungibile. Split horizon È la tecnica che permette di fronteggiare l'evento di count to innity. Sostanzialmente l'idea è di impedire che una stima di distanza verso un nodo di destinazione sia inviata sul collegamento utilizzato per realizzare quell'instradamento. C'è anche una ulteriore variante split horizon with poisoned reverse che consiste nel consentire l'aggiornamento senza vincoli a tutti i vicini, ponendo però il costo a innito se il vicino a cui si invia l'informazione è proprio il nodo successivo lungo la via a costo minimo per raggiungere la destinazione in questione. Ha il problema di funzionare solo con reti lineari (reti con nodi in cascata uno dopo l'altro) e non in reti con cicli. Algoritmo distance vector in Arpanet L'algoritmo distance vector è stato utilizzato no al 1979 per la gestione della rete Arpanet (l'antenata di Internet), con un periodo di aggiornamento di circa 100 millisecondi. La metrica di costo utilizzata era il livello di riempimento dei buer, cosa che si rivelò non accurata, poiché trascurava la capacità dei collegamenti (dettaglio abbastanza importante in molti casi). Algoritmo link state Rivelò anche una certa lentezza a convergere in situazioni dinamiche e per questo è stato poi sostituito con l'algoritmo di tipo link state. Ogni nodo misura periodicamente la distanza dai propri vicini e comunica queste misure in modo ooding a tutti gli altri nodi utilizzando una unità informativa chiamata link state packet (LSP). L'algoritmo link state è utilizzato attualmente su Internet, adottando come metrica di costo il ritardo medio rilevato sul percorso, con un periodo di aggiornamento nell'ordine di 10 secondi. Riassumendo, ogni nodo: 59 1. Scopre i propri vicini e relativi indirizzi di rete 2. Misura il costo verso ogni vicino 3. Costruisce un pacchetto (LSP) che contiene tutte le informazioni raccolte 4. Invia questo pacchetto a tutti gli altri router in modalità ooding 5. Elabora il percorso più breve verso tutti gli altri router (utilizzando i dati ricevuti dagli altri) Misurazione del costo della linea L'algoritmo di routing di tipo link state richiede che ogni nodo abbia una stima ragionevole del ritardo verso ciascuno dei suoi vicini. Questo può essere ottenuto inviando uno speciale pacchetto ECHO, al quale dall'altra parte devono rispondere il più velocemente possibile. Quando arriva la risposta si misura il tempo trascorso e si divide per due. Per ottenere risultati ancora più precisi si può mediare il risultato inviando in continuazione. È lecito domandarsi se abbia senso tenere conto del carico dei collegamenti all'interno della metrica di costo. C'è un aspetto neagativo che sconsiglia di fare questa scelta, infatti si considerino due nodi collegati da due collegamenti diretti: iniziamo a trasmettere dati solo sul primo collegamento, a un certo punto diventa sovraccarico e iniziamo a instradare pacchetti sul secondo collegamento, allora il secondo diventa sovraccarico e si torna ad utilizzare il primo. Ci accorgiamo quindi che può venirsi a formare un ciclo che provoca instradamenti irregolari e altri potenziali problemi. Una scelta migliore può essere quella di distribuire il carico su più linee, attribuendone frazioni ben denite per ciascuna. Costruzione dei pacchetti LSP Dopo aver raccolto tutte le informazioni necessarie, ogni nodo deve costruire un pacchetto contenente tutti i dati. Il pacchetto contiene: L'identità del mittente Un numero di sequenza : dato che l'invio viene fatto in ooding si vogliono evitare tempeste di pacchetti e duplicati come già discusso prima. L'età La lista dei vicini del pacchetto : con relativi indirizzi e costo per raggiungerli Distribuzione dei pacchetti LSP Come già detto, viene utilizzato il ooding per distribuire i pacchetti. Per tenere sotto controllo il usso di dati, viene inserito un numero di sequenza in ogni pacchetto che è incrementato per ogni nuovo pacchetto inviato. I nodi tengono tracca di tutti i pacchetti (sorgente, numero di sequenza) ricevuti. Quando arriva un nuovo pacchetto da un nodo, si verica se per quella sorgente è già stato ricevuto un pacchetto con numero di sequenza maggiore. In caso aermativo il pacchetto ricevuto viene scartato, in caso contrario viene letto. Numeri di sequenza ripetitivi potrebbero generare il caos. Per evitare questo problema si utilizzano numeri di sequenza a 32 bit; nell'ipotesi di trasmettere un pacchetto al secondo, i numeri di sequenza impiegano 137 anni ad esaurirsi, quindi è possibile tralasciare questa possibilità. Quando un router si blocca perde traccia dei suoi numeri di sequenza e il conteggio ricomincia da zero. Inoltre se un numero di sequenza dovesse arrivare danneggiato e il ricevitore legge 65535 al posto di 1, tutti i pacchetti 2,3,4 successivi saranno ignorati poiché obsoleti. Per risolvere questi problemi si utilizza un campo età all'interno di ogni pacchetto e se ne decrementa il valore una volta al secondo. In questo modo le informazioni ricevute dopo un po' di tempo scadono inevitabilmente. Algoritmo di Dijkstra È l'algoritmo distributo utilizzato per la ricerca dei cammini minimi all'interno di un grafo. Con questo algoritmo si costruisce l'albero a partire da un generico nodo sorgente s denendo le seguenti quantità: D d N M V (M ) j : Costo della via a costo minimo dal nodo sorgente ij : Costo del collegamento diretto tra i e j ; d=∞ s al nodo j se i due nodi non sono connessi direttamente : insieme dei nodi della rete : insieme dei nodi dell'albero corrente : insieme dei nodi adiacenti all'insieme M , raggiungibili cioè in un solo salto da un nodo qualunque di M 60 L'algoritmo di compone dei seguenti passi: 1. M = {s} 2. Dj = dsj , ∀j ∈ V (s) 3. Scegli altrimenti Dj = ∞ k ∈ V (M ) | Dk = mini∈V (M ) {Di } (a) M = M + {k} (b) Dj = min {Dj , Dk + dkj } , ∀j ∈ V (M ) 4. if M =N stop 5. else goto 3 Intradamento gerarchico Le tabelle di instradamento hanno una dimensione che dipende dal numero di nodi della rete. Quando la rete diventa molto vasta la dimensione eccessiva delle tabelle può creare problemi di allocazione di memoria nei nodi e un carico eccessivo per la distribuzione di tutte le informazioni. Un instradamento gerarchico risolve questo problema raggruppando i nodi in regioni, così che ogni nodo conosce la topologia della propria regione ma ignora quella delle altre. Se i nodi della rete sono N e sono organizzati in M regioni con K nodi ciascuna, senza l'instradamento gerarchico abbiamo N elementi. Se invece sono organizzati con instradamento gerarchico in regioni abbiamo bisogno bisogno di tabelle da solo di K +M −1 voci. La strutturazione gerarchica può essere estesa denendo più livelli di gerarchia, in modo da garantire una gestione ottimale delle tabelle di instradamento. Instradamento sulla rete Internet Struttura generale della rete Internet La connettività alla rete Internet è oerta dagli ISP (Internet Service Provider ), che ortono connettività agli utenti nali. I vari ISP sono interconnessi tra loro e si suddividono in modo gerarchico in: International ISP (Tier-1) National ISP (Tier-1) Regional ISP (Tier-2) Local ISP (Tier-3) Intranet : termine a volte adottato per reti aziendali o campus universitari Un ISP internazionale è naturalmente collegato con altri ISP internazionali mediante vari collegamenti, ISP nazionali e regionali sono di norma collegati a ISP internazionali, ma sono anche collegati tra loro (per scambiarsi il traco interno al paese). Allo stesso modo gli ISP locali. Tassonomia BSP (Backbone Service Provider ) e NAP (Network Access Point ): forniscono solamente servizi di connettività tra ISP. CN POP AS (Customer Network ): rete del cliente. (Point Of Presence ): punto di interconnessione tra le CN. (Autonomous System ) 16 : È una rete indipendente da tutte le altre, solitamente gestita da una organizzazione o uno stato, al cui interno è possibile utilizzare protocolli di routing interni. IG EG (Interior Gateway ): Router interni ad un Autonomous System (Exterior Gateway ): Router esterni ad un Autonomous System, che devono permettere la connessione dell'Autonomous System con tutti gli altri. Sono il punto di transito per tutte le connessioni uscenti dagli Autonomous System. Internet viene gestito da ISOC (Internet SOCiety ) divisa in IETF (Internet Engineering Task Force ) e la IRTF RFC (Request For Com- (Internet Research Task Force ). Tutti gli standard vengono rilasciati mediante documenti ments ), come già visto. 16 Nel seguito, spesso si utilizzerà la forma compatta AS 61 Tipi di protocolli di routing In Internet vengono utilizzati due tipi di protocolli di routing: IGP (Interior Gateway Protocol ): Protocolli di routing utilizzati all'interno degli Autonomous System. I più noti sono EGP RIP e OSPF . (Exterior Gateway Protocol ): Protocolli di routing utilizzati per l'instradamento tra Autonomous System diversi. Il protocollo EGP utilizzato in internet è chiamato BGP (Border Gateway Protocol ) e sarà descritto nel seguito. I protocolli di routing stabiliscono essenzialmente: Un algoritmo per selezionare il percorso La scelta di una metrica per decidere il peso di un collegamento La modalità di trasferimento delle informazioni e la frequenza di aggiornamento Vediamo prima due protocolli di routing di tipo IGP e poi un protocollo EGP. RIP - Routing Information Protocol È stato il primo protocollo di routing IGP (denito in RFC1058), utilizzato in ARPANET e in alcune reti geograche no al 1979, viene tutt'ora utilizzato in alcune reti. La metrica in ARPANET era basata sulla lunghezza delle code (e non sulla velocità dei link), come già discusso precedentemente. Anche con metriche diverse (numero di hop) si è notato che era troppo lento a convergere in un contesto dinamico. I pacchetti RIP vengono incapsulati all'interno di datagrammi UDP (sulla porta 520). La metrica utilizzata è il numero di hop (il cui massimo è 16). La valutazione della rotta migliore viene fatta per ogni destinazione. Un valore di distanza uguale a 16 corrisponde ad una distanza innita, quindi RIP non può essere adottato all'interno di un AS di grandi dimensioni che richiede l'attraversamento di più di 15 router. Ogni router comunica la propria tabella delle distanze ai router direttamente raggiungibili. Il messaggio RIP contiene una coppia <Network address, distance>. I messaggi RIP sono inviati ogni 30 secondi per garantire la dinamicità ai cambiamenti della rete. Il meccasimo per l'aggiornamento della tabella di routing è lo stesso descritto precedentemente per gli algoritmi di routing di tipo distance vector. In assenza di messaggi periodici ricevuti, si considera il router remoto non più raggiungibile e viene quindi dichiarato a distanza innita. I successivi messaggi scambiati permetteranno di aggiornare l'instradamento. Struttura della trama RIP Command (8 bit) (32 bit) Version (8 bit) 0000000000000000 Address family identier net 1 (16 bit) Field A (16 bit) IP address net 1 (32 bit) Field B (32 bit) Field C (32 bit) Distance net 1 (32 bit) ... Il messaggio RIP può trasportare no a 25 coppie <Network address, distance>. Il formato del messaggio sopra rappresentato contiene solo una di queste coppie (riferita ad una generica net 1). I campi del messaggio sono: Command Version Address family identier net 1 IP address net 1 Distance net 1 (8 bit): Identica il tipo di messaggio (di richiesta o di risposta) (8 bit): specica la versione del protocollo RIP utilizzata. (16 bit): Specica qual'è la classe di indirizzi di rete adottata (32 bit): Indica l'indirizzo di rete a cui si riferisce l'informazione di distanza successiva. (32 bit): Specica la distanza (in numero di salti) del router che origina il messaggio alla rete specicata. 62 A,B,C a 0. È stata creata una seconda versione RIPv2 (RFC1723) che resta retrocompatibile con la prima versione pur aggiungendo nuove funzionalità, tra cui: un meccanismo di autenticazione, l'informazione relativa alla subnet mask e il next-hop La prima versione del protcollo (con version=1) pone tutti i campi del protocollo RIP, denominata router utilizzato. Se si utilizza la versione 2 di RIP abbiamo questi altri campi: Field A Assume il valore route tag net 1, cioè identica il sistema autonomo che ha originato (16 bit): l'informazione di distanza verso la rete net 1 Field B (16 bit): Assume il valore netmask net 1, cioè indica la subnet mask da utilizzare insieme all'indirizzo IP della rete. Field C Assume il valore next hop net 1, cioè indica il router successivo relativo alla distanza (16 bit): comunicata. Con la versione 2 di RIP e l'introduzione del Field A e C, si prevengono situazioni di loop intrinseche degli algoritmi di tipo distance vector. OSPF - Open Shortest Path First Protocollo di routing IGP di tipo link state, che fa uso dell'algoritmo di Dijkstra, utilizzato all'interno di molti Autonomous System. È diventato uno standard nel 1990 (RFC2328). Oggi è supportato dalla maggior parte dei produttori di router ed è il principale protocollo di routing per gateway interni. OSPF è stato successivamente esteso in OSPF-TE (Trac Engineering Extensions to OSPF) per tenere conto del traco per il costo di ogni link. I pacchetti OSPF vengono incapsulati direttamente dentro i datagrammi IP (impostando come identicatore di protocollo all'interno del datagramma IP il numero 89). Quando fu ideato venne stilata una lista di requisiti che il protocollo doveva avere: Doveva essere pubblicato senza vincoli di brevetto, motivo della parola Open nel nome, che è l'opposto di proprietario. Doveva supportare diverse metriche di distanza (distanza sica, ritardo, ...) Doveva essere un algoritmo dinamico, in grado di modicarsi rapidamente e automaticamente in base alla topologia. Supportare routing basato sul tipo di servizio. OSPF doveva essere in grado di instradare il traco in tempo reale in modo diverso dal resto. Questo campo fu incluso in OSPF ma alla ne venne rimosso perchè (come nei datagrammi IP) non veniva utilizzato mai da nessuno. Doveva eettuare il bilanciamento del carico, cioè suddividere il carico su più linee. Suddividendo il carico in molti casi si ottengono prestazioni migliori. Supportare Gestire la sistemi gerarchici sicurezza per evitare che utenti possano imbogliare i router, inviando false informazioni. Tipi di connessioni e reti gestite da OSPF Linee punto-punto tra due router Reti multiaccesso con trasmissione broadcast (la maggior parte delle LAN) Reti multiaccesso senza trasmissione broadcast (la maggior parte delle WAN a commutazione di pacchetto) Nel caso di reti multiaccesso dove sono presenti due router OSPF, solo uno di essi denominato designated viene autorizzato ad inviare messaggi agli altri. router La procedura di elezione del designated router avviene mediante scambio di messaggi OSPF di tipo Hello , con cui viene anche scelto un router di backup. Gerarchia in OSPF Molti AS di Internet sono grandi e dicili da gestire, quindi vengono suddivisi in più aree. Ogni area è una rete o un insieme di reti contigue. Alcuni router possono comunque non appartenere a nessuna area. Ogni AS ha un'area dorsale chiamata Area 0 (solitamente identicata dall'indirizzo 0.0.0.0). Tutte le aree sono collegate alla dorsale, perciò è possibile passare da un'area qualunque ad un'altra dello stesso AS passando per la dorsale. Ogni area viene identicata da un indirizzo a 32 bit, mentre i router sono identicati dal proprio indirizzo IP su una delle interfacce. I router all'interno dell'area hanno il compito principale di calcolare il percorso più breve verso ogni altro router nell'area. Un router che collega due aree ha bisogno dei database di antrambe le aree e deve eseguire separatamente un diverso algoritmo di ricerca del percorso più breve per ogni area. I router in OSPF si suddividono in: 63 Interal routers AS boundary routers Area border routers : tutte le loro interfacce appartengono alla stessa area : sono collegati ad almeno un router fuori dall'AS : hanno interfacce che appartengono ad aree dierenti. Almeno una delle loro interfacce deve essere nell'area 0 di backbone. Funzionamento del protocollo All'avvio, un router trasmette un messaggio Hello a tutti i router vicini attraverso tutte le sue linee punto-punto e comunica questi messaggi in modalità multicast sulle LAN. Durante le normali operazioni, ogni router invia periodicamente in selective ooding messaggi di tipo LSU (Link State Update ) a ognuno dei suoi router adiacenti. Questo messaggio comunica lo stato del dispositivo e i costi utilizzati nel database della topologia di rete. I router che ricevono questo messaggio rispondono con un messaggio di acknowledgement Link State Acknowl- edgement, che rende questi messaggi adabili. Ogni messaggio ha un numero di sequenza, quindi un router può scoprire se un LSU appena arrivato è nuovo o vecchio. I router inviano i messaggi LSU anche nel caso in cui un collegamento si attiva, si disattiva o cambia il suo costo. I messaggi di tipo Database Description vengono utilizzati dal router, al momento di cambio della topologia di rete, per concordare una regola di numerazione dei collegamenti. Questi messaggi sono utilizzati quando una linea viene attivata. Tutti i router conservano una sopia di tutti i pacchetti LSU ricevuti e li comparano con i nuovi in arrivo. Se contengono nuove informazioni (diverse dalle precedenti), vengono inviate le nuove informazioni ricevute in modo selective ooding (su tutte le interfacce tranne quella su cui è stato ricevuto il pacchetto). Ognuno dei partner può richiedere all'altro alcune informazioni sullo stato dei collegamenti utilizzando i pacchetti Link State Request. In questo modo si può controllare chi ha i dati più recenti e propagare le informazioni attraverso l'area. Le informazioni raccolte, permettono ad ogni router di calcolare il percorso più breve verso ogni altra destinazione utilizzando l'algoritmo di Dijkstra. Ogni pacchetto LSU contiene un insieme di dati LSA (Link State Advertisement) che possono essere dati di svariato tipo: Router LSA: Distanza tra un router e le destinazioni adiacenti all'interno dell'area Network LSA: La distanza tra il router centrale e le destinazioni su una LAN Summary LSA: La distanza tra un router di tipo border area router e le destinazioni adiacenti fuori dall'area (ma sempre all'interno dell'AS) AS boundary router summary LSA: Distanza tra un border area router e un AS boundary router . AS external LSA: Distanza tra un AS boundary router e una destinazione esterna. Struttura della trama OSPF Come già accennato, OSPF viene incapsulato direttamente all'interno dei datagrammi IP. Version (8 bit) (32 bit) Type (8 bit) Message Lenght (16 bit) Source router IP address (32 bit) Area ID (32 bit) Checksum (16 bit) Authentication type (16 bit) Authentication (Byte 0-3) Authentication (Byte 4-7) Viene indicata, oltre alla versione del protocollo anche il tipo di messaggio, i più importanti sono: Tipo Messaggio 1 Hello 2 Database description 3 Link state request 4 Link state update 5 Link state acknowledgement 64 L'header riporta l'indirizzo IP del router che ha generato il messaggio e l'identicazione dell'area a cui appartiene (assume valore 0 se non ci sono aree o è un router del backbone). C'è un campo di controllo di errore e un meccanismo di autenticazione BGP - Border Gateway Protocol È un protocollo di routing di tipo EGP, attualmente utilizzato in Internet nella sua versione 4 (che ha aggiunto il supporto a CIDR e altre novità importanti). È stato denito in RFC1771-RFC1774. Esso permette a router di AS dierenti di scambiarsi le informazioni necessarie a realizzare l'instradamento, indipemendentemente dal protocollo di routing interno utilizzato. Ci si potrebbe chiedere perché inventare ancora un altro protocollo. Il motivo è dovuto al fatto che nella comunicazione tra AS diversi ci sono obbiettivi dierenti e principalmente ci si preoccupa della politica di instrademento . Per esempio un AS aziendale potrebbe voler inviare e ricevere pacchetti da Internet ma non vorrebbe che pacchetti da un qualunque altro AS e diretti ad un altro AS transitino sui propri router. Oppure l'azienda potrebbe essere pronta ad accettare la cosa solo per chi ha pagato per questo servizio. Allo stesso modo si potrebbe voler evitare il transito dei pacchetti originati dal Pentagono attraverso l'Iraq... Questi criteri sono solitamente congurati manualmente in ogni router BGP. BGP è stato quindi progettato per gestire il rispetto di molti tipi di criteri di routing nel traco tra AS dierenti. A causa dell'interesse di BGP per il traco di passaggio, le reti vengono suddivise in tre categorie: Stub networks (reti terminali): hanno una solo connessione al grafo BGP. Non possono essere utilizzate come reti di passaggio perchè solo collegate al resto della rete con una sola interfaccia. Multiconnected networks (reti multicollegate): possono essere utilizzate per il traco di passaggio, a meno che si riutino di farlo. Tansit networks (reti di transito): Sono le dorsali di Internet, reti predisposte appositamente per gestire pacchetti di terze parti, a volte con alcune restrizioni inserite a pagamento. BGP trasmette i propri pacchetti incapsulati all'interno di pacchetti TCP. In questo modo viene garantia la adabilità nella consegna e vengono nascosti tutti i dettagli della rete attraversata. BGP utilizza una versione di algoritmo di routing di tipo distance vector leggermente modicata, chiamata path vector, implementata in modo da evitare la presenza di cicli (e il problema del count-to-innity). Ogni router BGP, al posto di conservare solo il costo per ogni destinazione, tiene traccia del percorso utilizzato. Al posto di comunicare ai vicini la distanza da ogni destinazione, il router BGP comunica l'esatto percorso in uso. In questo modo gli altri router che ricevono questa informazione possono accorgersi se sono parte di quel percorso ed evitare il problema del count-to-innity. Ogni percorso che viola uno dei criteri di vincolo discussi prima, riceve un costo innito Lo strato applicativo (livello 7 ISO/OSI) Architettura client-server La maggior parte delle applicazioni e protocolli a livello applicativo si basano sull'architettura client-server. Si stabilisce cioè la presenza di un host centrale sempre attivo (il a degli host che vi si collegano (i client ). server ), con indirizzo IP sso, che serve un certo tipo di richieste I client sono macchine che solitamente si collegano ai server in modo discontinuo, non sono sempre attivi e spesso hanno un indirizzo IP dinamico. Architettura peer-to-peer Sono quelle applicazioni e protocolli che realizzano delle connessioni tra di loro senza la necessità di un server centrale. In questo caso i client prendono il nome di peers. Esempi classici di protocolli peer-to-peer sono quelli per il le-sharing. Protocollo HTTP Il protocollo HTTP (HyperText Transfer Protocol) è il protocollo utilizzato su internet per scaricare les e soprattutto pagine web (documenti HTML) da dei server. La prima versione del protocollo, HTTP/1.0 (RFC1945) risale al Maggio 1996. Successivamente ad alcune piccole modiche è stata rilasciata la successiva versione HTTP/1.1 (RFC2068) che è, a distanza di 16 anni, tutt'oggi utilizzata. 65 Il protocollo HTTP si basa sulla architettura classica client-server e funziona tramite pacchetti TCP ed è solitamente in ascolto con LISTEN sulla porta 80. I client richiedono al server HTTP dei les identicati da un URL (Uniform Resouce Locator). Si dice che HTTP è un protocollo di tipo stateless, perché non tiene memoria dello stato della comunicazione o delle richieste di ciascun client. Uniform Resource Locator È un indirizzo alfanumerico (ASCII) strutturato come segue: [Method] :// [Host] : [Port] / [Path] Method : È un identicatore del tipo di protocollo utilizzato. Per le pagine web è sempre http , però la struttura degli URL può essere utilizzata anche in altri protocolli sfruttando nomi diversi ( ftp ,sftp,rtp ). Host Port : È l'indirizzo IP o l'hostname DNS che identica il server da contattare. : Specica la porta TCP destinazione da utilizzare per la connessione. Solitamente HTTP sfrutta la porta 80 e se non viene indicato un valore port viene assunto questo come default. Path : Indica un percorso che identica un le da reperire su quel server. È possibile anche non indicare nessun path. Struttura delle richieste HTTP Quando un client vuole eettuare una richiesta verso un server HTTP deve strutturarla in questo modo: [Method] [Url] [Version] \r\n [Header Field name] :[Value] \r\n ... \r\n [Entity Body] Dunque abbiamo inizialmente una prima riga di richiesta dove viene specicato al server cosa vogliamo fare. Method indica appunto il tipo di operazione HTTP. I vari tipi più noti sono: GET : È utilizzato per richiedere al server un le/documento. Il percorso del documento è specicato subito dopo il method. HEAD : È utilizzato per richiedere al server solo alcune informazioni generali sul documento (ad esempio la data dell'ultima modica), senza scaricarlo. Nella risposta il server inserisce quindi solo le informazioni generali. POST : È utilizzato per inviare al server alcune informazioni da utilizzare su una particolare pagina tramite l'entity body. Viene soprattutto utilizzato per passare parametri ad applicazioni web. PUT : È utilizzato per memorizzare un documento all'interno del server. Il percorso dove memorizzare è l'URL seguente e il contenuto è nel seguito della richiesta Ci sono poi tutta una serie di method poco utilizzati o implementati per scopi particolari come PATCH, COPY, MOVE, DELETE, LINK, UNLINK, OPTIONS. Gli Header eld name sono una serie di parametri che possono essere impostati nella richiesta inviata al server. Esempi noti di valori header sono: Host : Si specica come valore l'hostname (se presente) attraverso cui è stato contattato il server. Alcuni server HTTP ospitano decine di sotto-server diversi sullo stesso indirizzo IP. Il modo per distinguere le richieste è questo campo header. Cache-control: Fornisce alcune informazioni sulla cache Accept : Specica una lista di formati di les che vengono accettati dal client, ad esempio text/html, image/gif, image/jpeg Accept-language : Specica il linguaggio preferito per ricevere le pagine: italiano (it), inglese (en),... Authorization : Invia al server alcune informazioni realtive alle credenziali necessarie per visitare una certa pagina. HTTP implementa infatti un meccanismo elementare di autenticazione per alcune pagine. If-modied-since : Indica una data al server dell'ultima volta che è stato scaricato il documento. Se il documento non è cambiato il server non lo reinvierà nuovamente. 66 User-agent : Indica una stringa che identica il programma browser utilizzato per richiedere il documento. Version è solitamente la stringa HTTP/1.1 per la nuova versione. Ogni riga della richiesta HTTP deve terminare con i due caratteri nuova riga e a capo, qui indicati con \r e \n. Struttura delle risposte HTTP [Version] [Status code] [phrase] \r\n [Header Field name] :[Value] \r\n ... \r\n [Entity Body] Status code e Phase : è un codice numerico a tre cifre che identica il tipo di risposta seguito da una descrizione testuale. I più noti sono: 1xx : Messaggi informativi * 2xx * 3xx * 100 Continue per indicare che la prima parte di una richiesta è stata accettata. : Messaggi di successo 200 OK signica che la richiesta ha avuto successo e l'informazione è inclusa di seguito : Messaggi di redirezione 302 Moved Permanenty o 304 Moved Temporalily , che indicano l'url nella nuova posizione della pagina che si sta cercando. 4xx : Sono messaggi di tipo client error , che si riferiscono cioè a richieste errate. * * * * 5xx * * * 400 Bad Request si riferisce ad un errore generale sulla richiesta (solitamente perché è malformata). 401 Unauthorized indica al client che per visitare questa pagina è necessario l'utilizzo di credenziali. 403 Forbidden indica al client che non gli è permesso visitare quella pagina. 404 Not Found indica al client che il documento che si sta cercando non esiste sul server. : Sono messaggi di errore di tipo server error , relativi cioè a problemi del server. 500 Internal server error indica un errore nel server che impedisce di servire la pagina 501 Not implemented indica una funzione non implementata 503 Service unavailable indica un servizio non disponibile Persistenza della connessione Da HTTP 1.1 le connessioni sono persistenti, cioè restano aperte anche dopo una richiesta e una risposta dal server. Il motivo è che praticamente qualunque pagina continiene al suo interno collegamenti relativi ad altri documenti da caricare (immagini, video, frame che contengono altre pagine, etc ...), si permette quindi di eettuare la richiesta di una pagina e subito dopo proseguire a chiedere tutti gli elementi in essa contenuta nella stessa connessione. Se si utilizza invece una connessione non persistente, sarebbe necessario scaricare la pagina in una connessione e successivamente aprirne altre, una per ogni oggetto da caricare. Solitamente queste connessioni vengono aperte in parallelo per minimizzare il ritardo. I browser moderni utilizzano una combinazione di connessioni persistenti e non persistenti, cioè alcuni oggetti vengono richiesti all'interno della stessa connessione, mentre altri scaricati in parallelo su nuove connessioni. Il numero di connessioni aperte e oggetti per ogni connessione sono dei parametri interni al browser. Quando si utilizza la modalità persistente è inoltre possibile eettuare pipelining, cioè fare più richieste consecutive senza aspettare di ricevere la risposta dal server. Cache mediante l'utilizzo di proxy In alcune reti dove l'utilizzo di banda è un fattore critico, vengono implementati dei proxy applicativi. Un proxy HTTP è un programma su cui transitano tutte le richieste dei client verso le pagine web. Quando il proxy si accorge che ci sono molte richieste continue verso uno stesso sito, ne eettua una copia di Cache. Successivamente quando i client richiedono nuovamente quella pagina, il proxy (che la ha già in memoria) la fornirà direttamente, controllando eventualmente solo se è stata modicata sul server. In questo modo si evita di fare tante connessioni verso lo stesso server per ottenere la stessa pagina. È infatti possibile fare quello che viene chiamato get condizionato , cioè fare una richiesta al server includendo l'header If-modied-since , di modo che il server risponda solo se la pagina è stata modicata in quel lasso temporale. La stessa cosa può anche essere fatta utilizzando il method HEAD e controllando la data restituita dal server (in questo caso è richiesto fare un passaggio in più però). 67 Autenticazione Poiché HTTP è un protocollo stateless, non è possibile riconoscere le richieste successive fatte da uno stesso utente. In HTTP esiste un meccanismo elementare di autenticazione con credenziali (username e password) che serve a identicare gli utenti che vogliono visitare una pagina. Normalmente il browser memorizza le credenziali di modo che non siano richieste per ogni pagina successiva. Il client eettua una normale richiesta con method GET Il server risponde con codice 401 Authorization Required aggiungendo nell'header di risposta il valore WWW- Authenticate: [tipo di autenticazione] Il client eettua nuovamente una richiesta con method GET aggiungendo questa volta negli headers la riga Authorization: [account],[password] Il client prosegue ad eettuare tutte le richieste aggiungendo la riga di autorizzazione per ogni pagina Cookie Esiste un modo per riconoscere richieste successive di uno stesso utente (senza usare credenziali) anche se HTTP è un protocollo stateless. Per farlo si utilizza un codice inviato dal server al client, che il client deve reinserire in ogni risposta: il cookie. Il client eettua una richiesta GET Il server risponde 200 OK e prima della pagina inserisce negli headers il campo Set-cookie: [codice] Il client eettua le successive GET includendo nel'header Cookie: [codice] In questo modo è possibile tenere traccia degli utenti sui siti e mostrare pagine dierenti a seconda delle operazioni che stanno facendo. Un esempio tipico è un sito di e-commerce dove un utente sceglie una serie di prodotti da acquistare e può poi vederli nel proprio carrello. Per tenere traccia di cosa ha comprato ciascun utente e mostrare carrelli diversi si utilizzano solitamente i cookie. I cookie sono utilizzati anche su altri siti che eettuano l'autenticazione in modo diverso per tenere traccia della sessione autenticata. In questo caso il cookie funge da token di autenticazione. FTP - File Transfer Protocol Denito inizialmente in RFC959 nel 1985 è un protocollo utilizzato per il trasferimento di les a livello di lesystem tra due host remoti. Fa uso di TCP per il trasporto dei dati. FTP fa solitamente uso di due connessioni. Una è la connessione di controllo, dove vengono impartiti i comandi delle operazioni da eettuare (scaricare un le, caricare un le, mostrare la lista dei les...) mentre l'altra è una connessione dove eettivamente vengono scambiati i dati. Il server FTP è solitamente in ascolto per le connessioni di controllo sulla porta 21 TCP. La connessione di controllo è di tipo persistente, cioè rimane aperta durante tutta la durata della sessione di trasferimento e può essere usata per più operazioni. Le connessioni dati, invece, sono di tipo non persistente, sono cioè aperte solo per trasferire un le o delle informazioni e sono immediatamente chiuse. Connessione di tipo attivo Nella modalità attiva le operazioni vengono svolte in questo modo: Il client avverte il server, sulla connessione di controllo che desidera iniziare un trasferimento dati e eettua una LISTEN (passive open) su una porta a sua scelta Il client comunica la porta aperta al server sulla connessione di controllo mediante il comanndo PORT Il server eettua una CONNECT (active open) verso la porta del client utilizzando come porta sorgente la 20 (o se è occupata un'altra porta a caso). Connessione di tipo passivo Il client invia il comando PASV al server per annunciare l'intenzione di utilizzare la modalità passiva. Il server sceglie un numero di porta a caso, fa una LISTEN (passive open) e comunica il numero di porta al client mediante il comando PORT. Il client fa una CONNECT (active open) verso la porta comunicata dal server. 68 La modalità attiva ha iniziato ad essere inutilizzata man mano che passano gli anni a causa dell'utilizzo delle NAT (che non permettono di esporre porte aperte verso il pubblico) e dei rewalls sulle macchine utente. Alcuni NAT tuttavia intercettano le connessioni dirette alla porta 21 di altri server e aprono alcune porte in ingresso verso un host dietro NAT quando vedono il comando PORT passare all'interno della connessione per garantire il funzionamento anche della modalità attiva. Diversi anni fa alcuni gruppi di utenti scontenti dietro NAT gestiti da ISP hanno iniziato a aprire connessioni FTP ttizie per aprire porte del NAT ed esporre servizi pubblici. Tipo di trasferimento dati Il trasferimento dati può avvenire in varie modalità. Il le può essere trasferito come tipo: ASCII Binary : le di caratteri : formato generale per tutti i les non testuali La modalità di trasmissione può essere: Stream mode Block mode : il le viene trasferito via TCP senza nessuna struttura : il le viene trasferito in blocchi i cui primi 3 byte rappresentano l'header Comandi FTP Comandi di accesso USER PASS QUIT Gestione les CWD: cambio cartella DELE: cancella un le LIST: mostra la lista dei les RETR: scarica un le STOR: carica un le Modalità di trasferimento TYPE MODE Meccanismo di apertura delle porte PORT PASV Sono poi presenti dei messaggi di risposta con codici numerici in modo molto simile ad HTTP. SMTP - Simple Mail Transfer Protocol È il protocollo ideato per lo scambio di e-mail attraverso Internet. Fu denito inizialmente in RFC821 nel 1982. Il meccanismo su cui si basano è il seguente: Degli user agent si collegano e comunicano ai server SMTP messaggi che desiderano inviare, indicando mittente, destinatario e corpo del messaggio tramite una connessione TCP sulla porta 25 (porta del server SMTP) Eventualmente lo user agent si scollega e intanto il server SMTP si preoccupa di recapitare il messaggio: apre una connessione verso il server SMTP del destinatario e invia il messaggio. Se il server del destinatario ha un problema, si tenta di recapitare il messaggio più tardi. Il protocollo SMTP è totalmente testuale, sia nei comandi che nel corpo dei messaggi, che devono essere sempre ASCII. Come in HTTP e FTP sono presenti dei messaggi di risposta con codici numerici. 69 Meccanismo base Uno user agent si collega al server SMTP e comunica da dove si sta collegando con il comando Lo user agent specica il mittente con HELO MAIL FROM Successivamente indica il destinatario con RCPT TO Indica l'inizio del messaggio con il comando DATA Compone il messaggo Termina il messaggio con un punto Chiude la connessione con QUIT Formato dei messaggi Il formato dei messaggi inviati dopo il comando DATA è stato denito in RFC822. Con questo formato il testo del messaggio viene preceduto dal alcuni header (strutturati allo stesso modo che in HTTP), come ad esempio: From: [indirizzo]\n To: [indirizzo]\n Subject: [oggetto del messaggio]\n \n [testo del messaggio] . Successivamente è stato introdotto l'utilizzo di MIME (Multipurpose Internet Mail Extensions ) con lo scopo principale di consentire il trasferimeto di messaggi non ASCII. Viene aggiunta anche la possibilità di inserire allegati. Uno dei metodi per inserire testo non ASCII in un messaggio è l'utilizzo della codica in base64 Codica base64 Le sequenze di bit da trasferire vengono divise in gruppi di 24 bit. Ogni gruppo viene suddiviso in 4 sottogruppi di 6 bit. Ad ogni gruppo è associato un carattere in un alfabeto ASCII in base 64. Quoted printable Quando sono presenti solo alcuni caratteri di tipo non-ASCII è possibile utilizzare questo metodo. Con questo metodo quando si incontra un carattere non-ASCII, viene sostituito da tre caratteri ascii: = seguito dalla rappresentazione esadecimale del byte. Ad esempio il carattere non-ASCII con valore 10011101 viene convertito in =9D POP3 - Post Oce Protocol 3 Il protocollo SMTP permette di inviare un messaggio ad un server e permette a due server di scambiarsi messaggi. Quando un messaggio arriva nel server di destinazione, viene salvato su di esso su una casella di posta elettronica virtuale. Per permettere agli utenti di leggere la loro casella di messaggi sono stati inventati alcuni procotolli, tra cui POP3. POP3 gestisce quindi l'autenticazione dell'utente al server e il trasferimento dei messaggi. POP3 utilizza TCP ed è in ascolto sulla porta 110. Messaggi del protocollo user e pass autenticano l'utente sul server POP3 Il server risponde con dei messaggi tipo +OK o -ERR Nella fase di transizione: list : Elenca i messaggi in coda e la loro dimensione retr : Permette al client di richiedere al server un messaggio (viene inviato nella stessa connessione) dele : cancella un messaggio quit : chiude la connessione 70 Telnet - Terminal Network È un semplice protocollo utilizzato per accedere a macchine remote ed impartire comandi. È stato uno dei primissimi protocolli implementati. I comandi sono trasferiti su una connessione TCP. I caratteri dati sono caratteri ASCII (primo bit pari a 0), mentre i comandi di controllo sono tutti caratteri non-ASCII (con il primo bit pari a 1). Ad esempio: IAC (255): Interpreta il prossimo carattere come carattere di controllo EC (247): Cancella l'ultimo carattere scritto DNS - Domain Name System È il servizio che permette la traduzione di indirizzi simbolici in indirizzi IP. Gli indirizzi sono strutturati in modo gerarchico e ogni parte è separata da un punto ed è gestita da una autorità diversa. Ad esempio www.polimi.it , osservandolo da destra a dinistra vediamo it che è un dominio di primo livello (TLD - Top Level Domain) che è la parte di indirizzo gestita dall'Italia. Chiunque vuole un indirizzo che termina con .it deve richiederlo al register italiano. polimi è un dominio di secondo livello assegnato dal register italiano al Politecnico di Milano. www è un dominio di terzo livello comunemente utilizzato per identicare che si vuole accedere al server web di polimi.it . Questa terza parte dell'indirizzo viene gestita internamente dal politecnico. DNS fa uso di UDP per le richieste. Struttura dei server DNS Un host che desidera scoprire l'indirizzo IP associato ad un certo indirizzo simbolico deve contattare un nameserver DNS. Ce ne sono di svariati tipi: Local Name Server : sono server DNS direttamente collegati agli host. Ogni ISP ne ha uno. Se il server contattato non conosce la risposta per la richiesta eettuata, si occupa di contattare un Root Name Server, un Top Level Domain. Root Name Server : Sono dei server DNS centrali che contengono una grande quantità di informazioni riguardo a diversi host e gruppi. Ce ne sono circa una decina in tutto il mondo, quasi tutti in USA. Contengono informazioni sui server TLD da contattare. Contattano a loro volta gli Authoritative Name Servers. Top-Level Domain Server (TLD) : Sono dei server che contengono informazioni per l'indirizzamento di domini di primo livello come it,uk,com,jp... Authoritative Name Server : Sono dei server DNS responsabili per un certo gruppo di domini. Tipi di messaggi DNS In ogni risposta DNS sono presenti diverse tuple organizzate in questo modo: Name, Value, Type, TTL Type indica il tipo di record, ce ne sono diversi: A NS CNAME MX : Name è il nome di un host e Value è il suo indirizzo IP. : Name è un dominio e Value è il nome di un altro server DNS da cui ottenre le informazioni relative. : Name è un nome alternativo (alias) per un host, il cui nome canonico è Value. : Name è un dominio e Value è indirizzo IP del server su cui recapitare la posta per quel dominio. Questo campo viene utilizzato dai server SMTP per sapere chi contattare per recapitare la posta. TTL indica il tempo di vita dell'informazione. Se indico un TTL di un giorno, quando una richiesta transita su un server DNS, questo può eettuare chaching della risposta per un tempo massimo pari a TTL, di modo da non dover eettuare la richiesta nuovamente e in continuazione. Meccanismo per reperire le informazioni Le richieste solitamente si propagano in modo gerarchico dal server DNS locale ai root name servers. Se però ad esempio un server DNS locale già conosce chi contattare per uno dei livello superiori, contatta direttamente un server DNS di più basso livello. 71 Scambio di messaggi DNS Ogni host collegato ad internet possiede l'indirizzo di un server DNS da contattare per risolvere i domini. Quando si inserisce un indirizzo simbolico in qualunque applicazione, il sistema operativo invia un messaggio al server DNS per conoscere l'indirizzo IP associato. Argomenti ancora mancanti Livello applicativo RTP DNS HTTP FTP SMTP/POP/IMAP Controllo di usso e parte introduttiva al trac shaping Parametri di TCP moddabili da linux Informazioni aggiuntive sul meccanismo di numerazione per l'opzione timestamp di tcp Struttura della trama ping req/rep in ICMPv6 802.11n e seguente TCP Syncookies Breve storia di Internet cenno su TCP hando IGMP e internet multicasting Completare BGP con altri dettagli (vedi pattavina) Comando host su linux per i DNS Sockets in C controllare SSTRESH con window scale vera formula per il calcolo MSL Controllare i valori iniziali di TTL/alpha etc sistemare le descrizioni nali di ethernet MTU ip senza considerare LLC?! Ecn echo Risistemare BGP/RIP/RIPv2/AS e ISP Immagine tcp tear down disegni go-back-n vs. selective repeat Riferimenti bibliograci [1] A. Pattavina Reti di telecomunicazione - Networking e Internet II edizione [2] Andrew S. Tanenbaum Reti di calcolatori IV edizione [3] Slides del corso 085894 Reti di telecomunicazione ed Internet del Politecnico di Milano, campus Leonardo 72