Riassunto Reti di Calcolatori
Transcript
Riassunto Reti di Calcolatori
Reti di Calcolatori Appunti a cura di Eugenio Rustico Introduzione alle Reti di Calcolatori Il sistema a livelli PAN 1m, LAN 101000m, MAN 10km, WAN 1001000km, Internet 10.000 Km Broadcasting = invio a tutti, multicasting = invio a molti, unicasting = invio a uno soltanto, anycasting = invio a un insieme, mi risponderà uno solo (es. server web su più macchine) Architettura OSI, livelli TCP/IP e confronto (OSI meglio organizzato, ma inefficiente e 2 livelli quasi inutili; TCP/IP era già diffuso) Comunicazioni affidabili (controllo degli errori, del flusso, ricevuta di ricezione) e non affidabili, orientate alla connessione (all'inizio si negozia sulla discussione e ci si scambiano meta informazioni, si riservano delle risorse; i messaggi arrivano sicuramente in ordine) o no (posta, datagram). I mezzi fisici devono sempre essere considerati non affidabili. Rete a commutazione: può essere a commutazione di circuito (viene fisicamente creato un circuito quando un host chiede di comunicare con un altro host, es. rete telefonica) e a commutazione di pacchetto (più resistente ai guasti, ogni pacchetto segue un percorso indipendente, non si riservano risorse, i pacchetti possono arrivare in un ordine differente); un circuito virtuale è un circuito di una rete a commutazione di pacchetto riservato per una determinata connessione e con un proprio identificativo. Il livello fisico Analisi di Fourier di un segnale: un'onda di periodo finito può essere rappresentata come una sommatoria (al più) inifita di onde sinusoidali di frequenza e ampiezza opportune (armoniche della frequenza base) Canali trasmissivi perfetti: non causano né distorsioni né ritardi ideali: causano solo ritardo nella propagazione reali: attenuazioni e ritardi in funzione della frequenza; per ogni mezzo fisico definiamo due diagrammi di distorsione, uno dell'attenuazione e uno della fase. La larghezza di banda di un canale è data dalla differenza tra le frequenze di taglio inferiore e superiore A seconda dell'uso, un canale è: Simplex = unidirezionale (es. radio, tv, fibra ottica) Half duplex = bidirezionale a tempo (es. walkie talkie, Ethernet con hubs) Full duplex = bidirezionale (es. telefono, Ethernet con switches) Il teorema di Nyquist afferma che se si trasmette un qualsiasi segnale attraverso un canale ideale con ampiezza di banda pari ad H, a destinazione per ricostruire il segnale completamente sono sufficienti 2H campionamenti al secondo. Inoltre se il numero di livelli discreti è pari a V avremo che: Max data rate = 2 H⋅log2 V Il teorema di Shannon limita il data rate di un mezzo fisico in base al rumore presente nello stesso. In particolare: Max data rate = 2 H⋅log2 1S / N con H = larghezza di banda, S ed N rispettivamente potenza del segnale e potenza del rumore [S=signal, N=noise]. E' un mezzo trasmissivo qualunque cosa permetta l'invio di informazioni Il doppino telefonico è costituito da due fili di rame intrecciati a elica (se non fossero intrecciati costituirebbero un'antenna). I cavi si dividono in STP: Shielded Twisted Pair UTP: Unshielded Twisted Pair, dei quali ricordiamo gli UTP CAT. 3 (quelli più comuni) e gli UTP CAT. 5 (con un intreccio più fitto dei CAT. 3) Il cavo coassiale è costituito da un filo di rame avvolto da un isolante a sua volta circondato da un intreccio di fili conduttori. E' schermato dal rumore più del doppino quindi ha un data rate maggiore, ma è caduto in disuso. La fibra ottica sfrutta l proprietà della luce di non rifrangersi se l'angolo di incidenza è inferiore ad un certo limite (dipendente dal mezzo fisico). E' fatta come il cavo coassiale ma non ha il secondo strato conduttivo e al centro il filo è costituito da una specie di vetro molto trasparente. Si può arrivare ai 100 Gbit/s. E' unidirezionale, principalmente per la difficoltà di mettere da una stessa estremità ricevitore e trasmettitore. Le reti in fibre possono essere strutturate ad anello (con interfaccia attiva o passiva) o a stella passiva (con le fibre fuse in un cilindro di silicio), ma il collegamento più usato è quello puntopunto unidirezionale. Ci sono due tipi di fibre ottiche: multimodali: il raggio è di circa 50 micron e sono presenti più raggi luminosi contemporaneamente monomodali: il core ha un raggio di circa 8 micron e la luce viaggia in linea retta, senza riflessioni; è più costosa ma migliore Tabella cavi Nome Tipo Lunghezza max Altro 10Base5 Coassiale spesso 500 m Ora obsoleto 10Base2 Coassiale sottile 185 m Non occorre hub 10BaseT4 Doppino UTP 3 100 m Economico 10BaseTX Doppino UTP 5 100 m Full duplex a 100 Mbps 10BaseF Fibra ottica 2.000 m Data rate + alto Le reti wireless sono utili in edifici e zone che non è possibile o facile cablare e nel mobile computing. Possono arrivare distorte a causa del multipath fading (le onde che seguono percorsi alternativi arrivano rispetto a quelle che arrivano direttamente). Tabella delle onde: Onde (frequenza) Radio 4 Pro ● 8 (10 ~10 Hz) Facili da generare e rilevare ● ● ● Microonde 8 11 (10 ~10 Hz) Seguono la superficie terrestre o si riflettono nella ionosfera 11 Concentrabili in fasci 14 Luce visibile Sono assorbite dalla pioggia ● ● Bit rate alto Costo delle apparecchiature modestissimo ● 14 Direzionabili ● (10 ~10 Hz) ● Bit rate basso Attraversano gli edifici ● Infrarossi ● Omnidirezionali ● ● Contro Non attraversano bene gli ostacoli ● Usabili sono indoor ● Non attraversano ostacoli ● Non attraversano ostacoli Non interferiscono tra loro Concentrabili (laser) 15 (10 < fq < 10 Hz) Modem sta per MOdulatore DEModulatore; i modem inviano dati digitali tramite connessioni analogiche, solitamente modulando un'onda portante (funzione A⋅sin t ). Può essere modulata l'ampiezza di tale onda (AM, st ⋅sin t ), la frequenza (FM, A⋅sins t ⋅t ) o la fase ( A⋅sin ts t ). Si possono usare diverse modulazioni contemporaneamente. Si solito si modula la portante in ampiezza e in fase; tutte le combinazioni valide si riassumono nei diagrammi costellazione (dei diagrammi in coordinate polari dove le coppie di valori lecite sono evidenziate da un punto). Tali diagrammi spesso sono ruotati di 45° per motivi di progettazione (x)DSL è la denominazione delle offerte delle aziende per una connessione a banda larga; in pratica, vengono rimossi i filtri superiore e inferiore della linea telefonica di un abbonato per permettergli di usare le frequenze più elevate di 3.000 Hz per l'invio e la ricezione di dati. Secondo la tecnica DMT (Discrete MultiTone) lo spettro disponibile (1,1 Mhz) viene suddiviso in 256 canali dei quali alcuni sono utilizzati per la linea telefonica tradizionali, alcuni per l'upload di dati e tutti gli altri per il download. Una tale divisione asimmetrica degli slot prende il nome di ADSL (Asymmetric Digital Subscriber Line) Talvolta si può usare un canale di comunicazione con più comunicazioni separate tramite il multiplexing. Esistono fondamentalmente quattro tipi di multiplexing: Frequency Division Multiplexing (FDM): le comunicazioni vengono “shiftate” (spostate ad una frequenza superiore, ognuna con un determinato gap) e inviate contemporaneamente. A destinazione si provvederà a ripristinare la frequenza originale di ogni comunicazione. Wavelength Division Multiplexing (WDM): nelle fibre ottiche si modula l'ampiezza dell'onda del raggio luminoso così da inviare diversi raggi contemporaneamente. A destinazione uno splitter e dei filtri li separeranno nuovamente. Il principio è molto simile al FDM. Time Division Multiplexing (TDM): l'utilizzo del canale di comunicazione viene suddiviso nel tempo in intervalli brevissi, in ognuno dei quali viene inviata una parte dei campionamenti vocali effettuati. Ciò è possibile se gli intervalli sono così brevi da essere trascurabili rispetto alla comunicazione in atto. E' usato nella portante T1, con la quale si inviano 24 canali audio contemporaneamente (ogni frame di 193 bit è scandito dal byte 10101010, che corrisponde ad un segnale di 4.000 Hz non generabile dai singoli canali audio); ognuno dei 24 canali è PCM (Pulse Code Modulation, 8.000 campionamenti al secondo). Code Division Multiplexing (CDM) [sarebbe al livello datalink sottolivello MAC, ma nel programma sta qui...]: ad ogni stazione è assegnato un codice di bit m univoco e tale che tutti i codici siano a due a due ortogonali (cioè il prodotto normalizzato è uguale a zero; tali codici possono essere generati col metodo dei codici Walsh); le stazioni inviano m per indicare 1 e il suo inverso per lo 0; trasmettono quando vogliono, e i frame di stazioni diverse si sovrappongono sommandosi linearmente. La destinazione moltiplicherà la somma ricevuta per il codice m della stazione mittente e, grazie all'ortogonalità prima descritta, otterrà 1 o 0 a seconda di quello che era stato inviato. Il CDM comincia a essere usato nei sistemi mobili di terza generazione. Il livello Data Link Comunicazione puntopunto, non endtoend. Il livello Data Link riceve dati dal livello superiore, li “spezzetta” in frame e provvede a spedirli alla destinazione. Come li divide in frame? Ci sono diversi metodi di framing: Conteggio caratteri: si specifica nell'intestazione del frame da quanti caratteri esso è composto. Problema: se c'è un errore proprio lì, è molto difficile risincronizzarsi Flag byte con byte stuffing: si usa un byte speciale per indicare inizio e fine di una frame. Se devo inviare quel byte proprio come dato, lo faccio precedere da un altro byte speciale (ESCape); se devo inviare il byte ESC, lo duplico. Flag di inzio e fine con bit stuffing: si usa una determinata sequenza di bit per indicare inizio e fine di una frame (es. 0111110). Se devo inviare proprio quella sequenza tra i dati, la “spezzo” con uno 0. Il destinatario automaticamente rimuoverà lo 0. Violazione della codifica dello strato fisico: spesso le LAN utilizzano le coppie altobasso e bassoalto per indicare 0 o 1 (es. codifica Manchester, normale se altobasso=1 e basso alto=0, differenziale se transizione = 0, 1 altrimenti). Si possono usare invece le coppie bassobasso o altoalto per marcare la fine di una frame. Ci sono diversi metodi per rilevare o addirittura correggere eventuali e probabilissimi errori di trasmissione. Tutti i metodi inviano bit supplementari al messaggio vero e proprio per aumentare la ridondanza dei dati. I principali sono: Bit di parità: si inviano uno o più bit contenenti il numero di cifre 1 presenti nel messaggio. Si possono anche sistemare le stringhe che compongono il messaggio in una matrice quadrata e indicare la parità per ogni riga e per ogni colonna; questo metodo rileva al massimo n bit errati (n = larguezza matrice) ma può correggere un solo errore. Codici di Hamming: la distanza di Hamming è il numero di bit differenti tra due codeword. La distanza di un insieme di codeword legali è la distanza di Hamming più bassa fra esse. Per rilevare n errori occore una distanza di Hamming pari a n+1; per correggerne n ne occore una pari a 2n+1. ● supponiamo di voler progettare una codifica con n bit di cui m di messaggio ed r di controllo che permetta di correggere m errori singoli. Per ognuna delle 2 parole valide ci saranno n parole ottenute da questa invertendo un bit (introducendo un m errore); quindi ognuno dei 2 messaggi dovrà avere n+1 combinazioni dedicate (le n ottenute invertendo i singoli bit m n più la combinazione originaria): n1 2 ≤2 ; sapendo che n=mr , otteniamo mr12 m ≤2 mr , da cui m1≤2r −r . Una codifica che non violi questa disuguaglianza sarà in grado di correggere errori singoli. Un metodo dovuto allo stesso Hamming permette di raggiungere questo limite: i bit della codeword vengono numerati a partire da 1, e quelli che corrispondono a una potenza di due sono bit di controllo. Ogni altro bit del messaggio interviene sulla parità dei bit di controllo che si trovano nelle posizioni espresse scrivendo la posizione del bit come somma di potenze del due; per esempio, il bit n. 6 interverrà sui bit di controllo 2 e 4. Controllo Ciclico di Ridondanza (CRC, Cyclic Redundancy Check): il messaggio binario viene trattato come un polinomio a coefficienti binari. Viene concordato un polinomio generatore G(x) di grado r (quindi con r+1 bit); al messaggio M(x) che si vuole inviare si aggiungono r bit 0 e si calcola il resto della divisione M(x)/G(x); tale resto sarà composto da r bit, che verranno scritti alla fine di M(x) (dove avevamo aggiunto i bit 0), rendendo così il messaggio finale divisibile per G(x); in pratica viene inviato x r⋅M xR x . Il destinatario dividerà per G(x), verificando così la correttezza o meno del messaggio. I polinomi generatori CRC oggi hanno anche 32 bit (grado 31), e sono in grado di rilevare moltissimi tipi di errori (singoli e doppi, errori sui dispari, raffiche di errori di oltre 16 bit). Nota: somma e sottrazione nell'aritmetica modulo 2 equivalgono entrambe allo XOR logico tra i due operandi. MAC (Medium Access Control) è il sottostrato del livello data link a cui appartengono i protocolli per l'assegnazione dell'uso di un canale multiaccesso. I sistemi in cui gli utenti condividono un canale comune in modo che può causare conflitto si dicono a contesa. Un primo sistema per assegnare il canale prevede la sua divisione in canale tramite multiplexing: FDMA se si usa FDM, TDMA per il TDM, WDMA per il WDM, CDMA per il CDM. Esaminiamo ora altri protocolli: Aloha puro: fu implementato nell isole Hawaii, dove per ovvi motivi le reti tra isole sono in gran parte wireless. Ogni stazione trasmette quando vuole e rimane in ascolto; se i messaggi di due stazioni si sovrappongono e collidono, le due stazioni percepiscono la collisione e dopo un tempo casuale riprovano a trasmettere (il tempo deve essere casuale o si avrebbe una serie infinita di collisioni). Pregio: semplice, il ripetitore centrale non elabora nulla; difetto: all'aumentare degli utenti aumentano lo collisioni. Slotted Aloha: come Aloha, ma l'invio delle frame è permesso solo ad intervalli regolari (una stazione emette una specie di clock). Il throughput massimo raddoppia, ma è ancora basso: massimo utilizzo del canale < 40% Carrier Sense Multiple Access (CSMA): sono così chiamati i protocolli in cui gli utenti rimangono in ascolto della precedente trasmissione e attendono la fine dell'onda portante prima di provare a trasmettere. Il CSMA si dice persistent se ogni stazione prima di provare a trasmettere controlla che il canale sia libero, nonpersistent se la stazione aspetta un tempo random prima di controllare. Il CSMA è ppersistent se, dopo aver verificato che il canale sia libero, trasmette con probabilità p. Al diminuire di p aumenta il throughput del canale ma diminuisce drasticamente l'uso che ciascuna stazione ne fa (es. 0.01persistent vuol dire che se trovo libero trasmetto una volta su 100!). Il CSMA/CD (Collision Detect), usato nelle LAN Ethernet, consiste nell'interrompere immediatamente la propria trasmissione non appena si rileva una collisione. Per essere certi che una frame trasmessa arrivi a destinazione senza collisioni è necessario attendere un tempo pari al doppio del tempo di trasmissione totale (per dare il tempo a eventuali collisioni avvenute all'altra estremità del mezzo di propagarsi all'indietro) Protocolli senza collisioni: ● Mappa di bit: il periodo di contesa è diviso tra le stazioni. Ogni stazione può trasmettere 1 o 0 solo nel proprio slot del periodo di contesa contesa. In questo modo alla fine del periodo di contesa tutte le stazioni sanno chi ha frame da trasmettere, e le stazioni così prenotate trasmettono in ordine numerico; dopodiché inizia di nuovo il periodo di contesa. ● Conteggio binario: ogni stazione ha un codice univoco; nel periodo di contesa le stazioni interessate trasmettono il proprio codice e rimangono in ascolto. Appena rilevano un 1 dove hanno trasmesso uno zero capiscono che c'è almeno un'altra stazione con codice + alto che vuole trasmettere, e desistono. Per non privilegiare le stazioni con codici alti, i codici sono permutati circolarmente in modo che le stazioni che non parlano da più tempo abbiano maggiore priorità. ● Gestione del token: c'è un token (gettone) che circola tra tutte le stazioni, e può parlare solo la stazione che lo possiede. In particolare ricordiamo il token bus usato da General Motors e il token ring brevettato da IBM. Non sono protocolli semplici: per gestire tutti possibili errori possono essere necessari anche decine di timer per ogni stazione. IEEE 802 la 802.1 definisce gli aspetti generali delle LAN e loro architetture 802.2 il Logical Link Control 802.3 Ethernet CSMA/CD: nelle reti Ethernet si possono usare i cavi coassiali, i doppini o le fibre ottiche. I coassiali sottili non richiedono hubs ma hanno connettori a T. Per evitare ambiguità nella ricezione delle sequenze di bit (come distinguere 001000 da 010000 se 0 è codificato con l'assenza di segnale?) Ethernet usa la codifica Manchester, che indica l'1 con una coppia di tensione altobasso e lo 0 con bassoalto; una variante è la codifica Manchester differenziale, che indica lo 0 con una transizione da bassoalto ad altobasso o viceversa e l'1 con una assenza di transizione. La frame Ethernet inzia con un byte 10101010 che, nella condfica Manchester, produce un'onda quadra di 10 Mhz per 6,4 msec, così da permettere la sincronizzazione col ricevente. Le frame sono lunghe almeno 64 bytes per distinguerle dai pezzi di frame corrotte e per attendere almeno 2t (vedi CSMA/CD). Ethernet e i suoi successori utilizzano, in caso di collisioni, il backoff esponenziale binario: se la comunicazione non va a buon fine, si attendono 0 o 1 intervalli di 512 bit prima di ritentare. In genere, dopo i collisioni consecutive si attende un tempo i random tra 0 e 2 1, fino al massimo di i=10; a quel punto si getta la spugna e viene mandato un errore al livello sovrastante. 802.3u è meglio conosciuto come Fast Ethernet, il nuovo standard per Ethernet che non stravolge nulla del predecessore. Con Fast Ethernet non si utilizzano più i cavi coassiali e si impongono solo collegamenti p2p (quindi niente più connettori a vampiro); la velocità viene incrementata del 25% (25 Mhz) e si utilizza la 5bit encoding. Si possono usare i doppini UTP CAT. 3. 802.3z (Gigabit Ethernet) è half duplex se si usa un hub, full duplex se si usa uno switch, proprio come Fast Ethernet; non si possono usare gli UTP CAT. 3 ma almeno gli UTP CAT. 5; inoltre: ● E' stata rimossa la parità (100 * 5/4 = 125 Mbps) ● Si usano le 4 coppie simultaneamente (125x4 = 500 Mbps) ● Si usano 5 livelli invece di 3 (uno per le frame e 4 per inviare 2 bit: 500x2 = 1.000 Mbps in fullduplex) ● I livelli in più aumentano il rapporto col rumore; allora raddoppio la banda (invio 2Gbps!) e uso il gigabit in più per la correzione degli errori con FEC (Forward Error Correction [Schemi di Trellis e decodifica di Viterbi??]): definisco quattro stati (00,01,10,11) che rappresentano il bit corrente e il precedente. Definisco una macchina a stati finiti tale che in ogni transizione da uno stato all'altro ci sia sempre distanza di Hamming pari a 2 e invio i due bit della transizione invece che quelli del dato. Se ci sono stati errori nella trasmissione invio un percorso non valido; a destinazione posso correggere gli errori usando il percorso più probabile (quello valido con distanza di hamming minore da quello ricevuto) Il controllo di flusso è necessario per assicurarsi che il mittente non sommerga di messaggi un host destinazione più lento. Inoltre è bene usare il meccanismo degli ACK per essere certi che il destinatario abbia ricevuto i nostri messaggi. Ma per evitare confusione è bene associare gli ACK ai messaggi ai quali si riferiscono. I fattori da prendere in considerazione sono: Buffer del destinatario limitato Tempo di elaborazione non trascurabile Ritardi dovuti alla trasmissione Pacchetti (dati o ACK) persi o danneggiati Protocolli del livello Data Link: Si dicono protocolli Stop and Wait quelli nei quali il mittente, dopo aver inviato una frame, attende un segnale del destinatario prima di continuare a inviare. I protocolli Sliding Window prevedono che il mittente tenga traccia di quali frame possono essere inviate e quali no. In pratica si tengono in memoria due indici che indicano il numero di frame inviate e già confermate (ACK) e il numero di frame inviate e in attesa di conferma (finestra di invio). Il destinatario terrà in memoria quali frame sono state ricevute, mantenendo la finestra di ricezione costante. Una finestra larga al massimo 1 equivale a forzare l'invio delle frame in sequenza. In caso di timeout prematuri o invio contemporaneo della prima frame si possono avere duplicazioni di tutte le frame. Il piggy backing è la pratica di mandare l'ACK di una frame ricevuta insieme alla prossima frame da inviare, e non in una frame a sé stante; si risparmia banda ma è utile solo per i canali fullduplex e solo se il nuovo pacchetto da inviare non si fa attendere troppo (altrimenti il mittente, non ricevendo l'ACK, ripeterà l'invio del messaggio). Nel caso in cui il tempo di invio di una frame sommato al tempo di ricezione dell'ACK non sia trascurabile (es. comunicazioni satellitari) è bene usare un protocollo che usi una tecnica di pipelining, che consiste sostanzialmente nel continuare a inviare altre frame mentre si aspettano gli ACK di quelle ricevute. Per rilevare e reinviare le frame perdute si usano due approcci: ● go back n: se si perde una frame (o quella ricevuta è ● danneggiata) il destinatario si limita a buttare tutte le frame successive e il mittente, non ricevendo pià ACK, ricomincia dall'invio della prima frame di cui non ha ricevuto l'ACK. ripetizione selettiva: se si perde una frame il destinatario continua a memorizzare in un buffer le frame successive, invia un NACK legato alla frame danneggiata o perduta e attende che il mittente la rimandi; a quel punto può completare il buffer e inviare tutto al livello network. Ovviamente questo approccio è fattibile solo se la finestra di ricezione è maggiore di uno. Le reti wireless sono definite dagli standard 802.11b, a, g, ma solo b e g sono molto diffusi; si tratta di protocolli CSMA/CA (Collision Avoidance), che lavorano in due modalità, una delle quali è MACAW. Problema del terminale nascosto: un host non vede quello che sta trasmettendo e prova a trasmettere, generando una collisione. Problema del terminale esposto: un host trasmette ad un altro e involontariamente non permette ad un altro host nel suo raggio d'azione di trasmettere. Il CSMA standard, dunque, non va. Nasce il MACA (Multiple Access with Collision Avoidance): un host, prima di trasmettere, invia a tutti i vicini una frame RTS (Request To Send) indicando che ha intenzione di trasmettere una frame di una determinata dimensione; tutti i vicini inviano ai loro vicini una frame CTS (Clear To Send), chiedendo di star zitti perchè attendono una frame. Così anche chi non può sentire direttamente il primo host sta zitto e permette una comunicazione senza collisioni. In caso di collisioni, comunque, si usa il backoff binario esponenziale. Componenti della rete Ripetitore: amplifica il segnale. Sono analogici. Hub: ricevuto un pacchetto, lo rimanda a tutti. Lavorano a livello fisico, come i ripetitori. Bridge: collega tra loro due o più reti, anche di natura differente. Lavora a livello data link. Switch: instrada i pacchetti solo in direzione del destinatario. Si dicono trasparenti quando non hanno bisogno di configurazione [e ad instradamento da sorgente quando??]. Lavora a livello data link. Uno switch che operi a livello di rete è un router. Lo switch al suo interno ha una tabella con gli indirizzi fisici raggiungibili e l'interfaccia associata ad ognuno; tale tabella viene periodicamente rigenerata (quando arriva un pacchetto e non si conosce il destinatario lo si inoltra in flooding; quando il destinatario risponde si prende nota dell'interfaccia) Gateway: come uno switch ma opera tra reti differenti e non tra singoli host. Come usare più switch in una rete? Collegandone semplicemente più di uno: il traffico viene ripartito, ma si creano pericolosi anelli. Per evitarlo occorre una struttura gerarchica. Una struttura gerarchica si può ottenere usando i numeri di fabbrica univoci degli switch: quello con l'id più basso sarà più in alto nella gerarchia. Problema: in caso di abbondante traffico, alcuni switch saranno sovraccaricati. Si vedrà a livello di rete come trovare uno spanning tree adatto. Sulle LAN Virtual LAN: configuro gli switch per considerare delle partizioni della rete come reti a sé stanti. Indirizzi fisici: quelli che iniziano per 0 sono assegnati dal produttore in fase di costruzione dell'hardware e sono univoci; si possono cambiare con indirizzi che iniziano per 1 assegnati dall'amministratore. Sono composti da 6 byte. Schemi di indirizzamento flat: è la tabella di indirizzamento MAC nella memoria dei bridge Network Layer Il livello di rete si occupa del trasporto dei pacchetti lungo tutto il cammino dal mittente al destinatario. Il routing è il processo di riempire e aggiornare le tabelle di inoltro; l'inoltro è l'invio vero e proprio di un pacchetto attraverso la linea più adatta della tabella di routing. Gli algoritmi di routing si dicono statici se i percorsi da seguire sono precacolati e caricati all'avvio della rete; dinamici se l'algoritmo è in grado di cambiare le proprie decisioni a seguito di cambi della topologia e del traffico della rete. Il principio di ottimalità afferma che se un host J si trova sul percorso migliore per andare da H a K, allora anche il percorso ottimale da J a K segue la stessa strada. Il flooding (“inondazione”) è uno degli algoritmi di routing statici più semplici (e meno efficienti): un host manda un pacchetto a tutti i vicini tranne il mittente, e i vicini fanno altrettanto. Senza un controllo sul massimo numero di salti, i pacchetti circolerebbero all'infinito e la rete collasserebbe. Un efficiente algoritmo per trovare il percorso minimo di un grafo è l'algoritmo di Dijkstra, secondo il quale a partire da un nodo A visitiamo tutto il grafo una volta sola aggiornando di volta in volta una tabella in cui teniamo nota dei percorsi più brevi per raggiungere tutti gli altri nodi. Questo algoritmo, tuttavia, presuppone a priori la conoscenza di tutto il grafo e deve essere ripetuto da capo in caso di cambi nella topologia della rete. Il link state routing prevede l'invio in flooding a tutti gli altri host dello stato dei collegamenti con i vicini e dunque il calcolo dei percorsi migliori con l'algoritmo di Dijkstra. Non è particolarmente flessibile. Il routing gerarchico è utile nelle reti molto vaste: in queste reti le tabelle di routing sarebbero troppo grandi e difficili da gestire. Le reti allora vengono trattate come delle “regioni” delle quali ogni router conosce solo la regione di appartenenza. L'algoritmo denominato distance vectors prevede l'utilizzo di una tabella per ogni router. Ogni router conosce la distanza che lo separa da tutti i vicini (basta un ping) e invia queste informazioni a tutti i vicini. Ognuno aggiorna la propria tabella memorizzando, per ogni host destinazione, l'host al quale inoltrare il pacchetto e non tutto il percorso; ognuno provvederà a inviare il pacchetto verso la giusta destinazione e il pacchetto seguirà così la strada più breve. L'algoritmo produce delle tabelle corrette in un numero di passi pari al diametro del grafo; in caso di miglioramenti della rete le tabelle si autoaggiornano velocemente, viceversa in caso di peggioramenti potrebbe essere necessario molto tempo. Routing nelle reti wireless [fatto?] La trasmissione di un messaggio a tutti gli host di una rete è detta routing broadcast; multicast se si è interessati solo a una parte di essi. Ci sono molti modi per effettuare il routing multicast: linearmente, gerarchicamente, con collegamenti tutti dedicati, ecc. Un algoritmo efficiente è il Reverse Path Forwarding (RPF), che si basa sul presupposto che il percorso miglioreda un host J ad un host K è anche il migliore da K a J (i percorsi sono bidirezionali: il grafo non è orientato). Si comincia come per il flooding: ognuno manda il pacchetto a tutti i suoi vicini; poiché però ogni host conosce il percorso migliore da sé alla sorgente dei pacchetti, ognuno accetta i pacchetti che vengono dal percorso migliore e scarta gli altri. In questo modo i pacchetti seguono sempre il percorso migliore (alla rovescia). Ogni interfaccia ha un suo indirizzo IP. Le classi di indirizzi IP sono state definite male; per sopperire a questa carenza si usano NAT e DHCP. Classe Inizio Formato Altro A 0 1 byte rete, 3 byte host 16 mln host, 256 reti B 10 2 byte rete, 2 byte host 65.000 host massimo C 110 3 byte rete, 1 byte host pochi host D 1110 multicast poco usati E 1111 riservato per usi futuri poco usati Io 0.0.0.0 this host bcast tutti 1 broadcast (fermato dai router) qsiasi cosa rimane nello stesso host loopback 127 Se l'IP di destinazione di un pacchetto è della mia LAN utilizzo ARP, se no lo mando al router. Come lo stabilisco? Tramite la subnet mask: essa va in AND logico con l'indirizzo IP di un pacchetto da inoltrare; dal risultato si evince se il pacchetto è destinato alla propria rete o ad una esterna (quindi se va inviato al router o no). Si può “accorciare” la subnet mask per rendere due subnet differenti ma fisicamente connesse un'unica sottorete. In pratica, a cause del fatto che gli indirizzi IP sono assegnati male, si divide l'host in due pezzi: subnet e host. Può servire anche per dividere una serie di IP di classe B in più sottoreti. Formato dei pacchetti IPv4: VERSIONE DIM. DEL PREAMBOLO TOS (non usato) LUNGHEZZA TOTALE ID DON'T FRAGMENT FLAG MORE FRAGMENT FLAG FRAGMENT OFFSET TTL PROTOCOL (protocollo sopra IP) HEADER CHECKSUM SOURCE DESTINATION OPTIONS Formato dei pacchetti IPv6: VERSIONE CLASSE DI TRAFFICO (sperimentale) ETICHETTA DI FLUSSO (sperimentale per usare una specie di circuito virtuale) PAYLOAD LENGTH (dimensione pacchetto oltre l'header) NEXT HEADER (indica gli header opzionali [finora i possibili sono sei]; se è l'ultimo indica se è destinato al gestore UDP o TCP) HOP LIMIT (come TTL) Procolli su IP: ICMP (Internet Control Message Protocol), insieme di messaggi standard per il monitoraggio delle reti ARP (Address Resolution Protocol) è il protocollo mediante il quale viene eseguita la “traduzione” da indirizzo IP a indirizzo fisico. Si manda un messaggio in broadcast ad una rete; il destinatario risponde e così il router e il mittente vengono a conoscenza dell'associazione. RARP (Reverse ARP): una macchina appena avviata manda in broadcast il messaggio: “qualcuno conosce il mio IP”? Il pregio è che il pc non necessita di memoria o configurazione. Il difetto è che i pacchetti broadcast vengono fermati dai router. BOOTP: evoluzione di RARP, ma implementato su UDP per non essere bloccato dai router. Difetto: richiede la configurazione manuale delle tabelle di traduzione IP/indirizzo fisico. DHCP (Dynamic Host Configuration Protocol): come BOOTP ma non ha bisogno di preconfigurazioni. Richiede un server DHCP e un agente di inoltro DHCP per ogni rete. NAT (Network Address Translation): per sopperire alla scarsità di indirizzi IPv4 è possibile che una rete utilizzi solo uno o più IP pubblici per collegarsi a internet; una macchina collegata ad internet farà il NAT, cioè sostituirà gli indirizzi IP privati della LAN con quello pubblico della connessione. La connessione può essere iniziata solo da fuori, quindi non si possono avere server dietro un NAT. Quando arriva una risposta come si sa a chi inoltrarla? Il NAT utilizza il campo source port dei pacchetti TCP e UDP, assegna a questo un valore arbitrario e memorizza l'associazione in una tabella. Quando arriverà la risposta, basterà controllare e sostituire la destination port per recapitare il pacchetto a destinazione. L'ultima voce della tabella di solito è l'IP 0.0.0.0, che serve per reindirizzare tutti i paccheti che non hanno trovato corrispondenze. Migrare da IPv4 a IPv6 può voler dire cambiare radicalmente tutto l'hw e il sw o voler fare un passaggio graduale. Ovviamente si preferisce la seconda soluzione, ma come fare convivere i due sistemi fino alla conversione completa? Il primo metodo consiste nel “tradurre” i pacchetti IPv6 in pacchetti Ipv4; è il metodo più veloce ma c'è l'ovvio difetto che si perdono tutti i campi peculiari di IPv6. La seconda soluzione si appoggia alla tecnica del tunneling, che consiste nel mandare i pacchetti IPv6 come dati all'interno dei pacchetti IPv4; il difetto è che aumenta l'overhead della comunicazione. Un firewall può essere hw o sw. E' composto da due router che filtrano tutti i pacchetti in uscita e in entrata e da un gateway applicativo. Se il gateway opera a livello di trasporto guarda alle porte indicate nei pacchetti. Se è a livello applicativo guarda anche all'interno dei pacchetti per verificarne il contenuto. Tutto il traffico è convogliato al firewall. Altro: la frammentazione di pacchetti grossi dipende dall'MTU di una rete Transport Layer Il livello di trasporto si occupa principalmente di rendere affidabile il livello di rete, e di fornire un servizio di “recapito” dei dati indipendente dalle reti (anche di diversa natura) utilizzate al livello sottostante Gli indirizzi dello strato network erano gli IP (NSAP, Network Service Access Point), quelli dello strato di trasporto sono le porte: numeri di 2 byte che identificano il processo di destinazione Le porte fino alla 1024 sono le well known ports: sono registrate dallo IANA, sono standard e sono utilizzabili solo da processi di sistema (per prevenire lo sniffing) Modello ClientServer Si contrappone il modello P2P (Peer to Peer) Server “centrale” a cui si collegano i client. Primitive tipiche: ● Server: listen() bloccante, send(), receive(), disconnect() ● Client: connect() bloccante, send(), receive(), disconnect() I socket di Berkeley ● Seguono all'incirca lo stesso modello, ma sono più flessibili; ono costituite da un diverso insieme di primitive ● La chiamata socket() ritorna un descrittore di file a cui associare un indirizzo di rete con bind() Di solito il server quando accetta una chiamata la passa ad un processo che la gestisce, e il processo principale torna in ascolto per altre chiamate Sul protocollo IP UDP (User Datagram Protocol) ● Non orientato alla connessione ● Non garantisce il recapito (non gestisce il flusso) ● Header: composto solo da SOURCE PORT, DESTINATION PORT, UDP LENGTH, UDP CHECKSUM TCP (Transmission Control Protocol) ● Orientato alla connessione, affidabile ● Handshake a tre vie: l'autore della proposta deve inviare l'ACK della risposta (citare il problema dei due eserciti: quante conferme sono necessarie? Infinite...) ● Permette dati URG (urgenti), prioritari (per es. per interrompere subito una connessione) ● Bufferizzato, per mandare meno intestazioni e ridurre l'overhead ● E' un protocollo sliding window, perchè il destinatario segnala al mittente la dimensione della propria finestra di ricezione ● Pacchetto TCP: SOURCE PORT, DESTINATION PORT, SEQUENCE NUMBER, ACK NUMBER, HEADER LENGTH, FLAGS (urg [è urgente?], ack [contiene un ack?], push [invia ora senza buffer], rst [reset connessione], syn [stabilire una connessione], fyn [terminare una connessione]), WINDOW SIZE, CHECKSUM, URGENT POINTER, OPTIONS 0+, DATA ● Per il controllo di flusso, numera i pacchetti in maniera univoca; sono numerati anche gli ACK, mandati con piggy backing ● Per avere una numerazione univoca anche in caso di riavvio 32 della macchina, si usa un clock che assume tutti e soli i 2 valori possibili dei numeri di sequenza. Diciamo T il tempo dopo il quale un pacchetto è da considerarsi definitivamente perduto, e imponiamo che se il tempo corrente è X si possono generare solo numeri di sequenza a partire da(l modulo di) X. Si definisce zona proibita la fascia contenente tutte le combinazioni di tempo e numero di sequenza non valide. Rispettando questo limite sappiamo che, anche se la macchina viene riavviata e perde la memoria, può ricominciare a generare numeri di sequenza a partire da(l modulo di) X senza temere conflitti con pacchetti passati, perchè nel tempo T appena trascorso era vietato generare questo stesso numero; pacchetti con questo numero più vecchi di T ormai saranno gettati. La velocità massima non può superare un pacchetto per ogni battito del clock o “toccheremo” la zona proibita. Il controllo della congestione viene effettuato tenendo d'occhio la finestra di ricezione del ricevente, la finestra di congestione della rete (il throughput al quale la rete si congestiona) e un terzo parametro detto soglia, inizialmente settato a 64 Kb. La quantità dei dati inviati è pari al valore più piccolo tra le due finestre. L'algoritmo si chiama avvio lento ma non è affatto lento: ad ogni ACK ricevuto il mittentte raddoppia la finestra di congestione della rete fino al raggiungimento della finestra del ricevente o ad un timeout (pacchetto perso). Al primo timeout la soglia viene impostata alla metà del valore della finestra di congestione della rete; si ricomincia da 1 a raddoppiare il throughput fino alla soglia; arrivati alla soglia, si procede linearmente. Con raffinamenti successivi si tende a stabilizzare il throughput su un valore molto vicino al massimo possibile. Si è visto che il sistema, una volta avviato, tende a ripartire equamente il throughput delle connessioni attive (fairness, equità nell'utilizzo del mezzo) Chiusura della connessione Citare il problema dei due eserciti. Quante conferme occorrono? In TCP la chiusura è a tre vie: invio DR, invio DR, ACK. Ad ogni invio parte un timer; l'invio del primo DR prevede diversi timeout prima di abbandonare; il secondo DR e l'ACK attendono solo il primo timeout. Application Layer Comunicazione tra processi (?) L'indirizzamento dei processi avviene attraverso le porte o i socket Il protocollo HTTP (Hyper Text Transfer Protocol) usa TCP. Il client si connette al server, fa richiesta di una pagina (la richiesta è in ASCII, quindi eseguibile col telnet) e il server la invia (eventualmente dopo averla elaborata, per es. php). Con HTTP 1.0 veniva aperta e chiusa una sessione per ogni pagina. Con 1.1 viene aperta un'unica sessione. Ci sono diversi metodi HTTP: GET, HEAD, PUT, POST, DELETE, TRACE, CONNECT, OPTIONS. La richiesta è così formata: METODO URL VERSIONE NOMECAMPO: VALORE ... (linea vuota) CORPO La risposta: VERSIONE CODICE_STATO FRASE NOMECAMPO: VALORE ... (linea vuota) CORPO I codici di errore HTTP sono divisi in classi Il protocollo FTP (FileTransfer Protocol): avviene una connessione dati alla porta 20 e una di controllo alla porta 21. C'è quasi sempre autenticazione e tiene aperta la sessione fino a richiesta di disconnessione esplicita Il protocollo SMTP (Simple Mail Transfer Protocol) Molto bucato perchè non c'è una vera autenticazione (i processi in ascolto hanno permessi elevati) Infatti le fake mail sono facili da generare... Serve per inviare email. Le email sono ricevute col protocollo POP3 (POP3S se usa SSL), che ha una autenticazione migliore IMAP (Internet Message Access Protocol) è più complesso di POP3 (Post Office Protocol v. 3) ed ha funzionalità aggiuntive: ● I messaggi rimangono sul server ● Si possono leggere anche solo parti di messaggi ● Meccanismi di gestione cartelle ● Consegna la posta, oltre a riceverla Il protocollo DNS (Domain Name Sysyem) Ai tempi di ARPANET, c'era un unico file di testo con i nomi di tutti gli host esistenti! Oggi è un database gerarchico distribuito nel mondo Si appoggia su UDP Serve per associare nomi agli indirizzi IP, soprattutto per motivi di mnemonicità e semplicità Un nome di host è formato da più parole separate da punti, per un massimo di 255 caratteri punti compresi Il server DNS può essere locale per le LAN, per internet si fa riferimento al proprio ISP Si risolve una parola per volta partendo da quella più a destra (es. “it”) Ci sono 5 server al mondo a cui chiedere dove reperire informazioni su un particolare dominio. Si è reindirizzati verso un altro server DNS nazionale (per it, per esempio, si viene reindirizzati al CINECA di Bologna) A questo punto si domanda circa il nome host; il server nazionale dà l'indirizzo IP dell'host richiesto, e ci connettiamo a questo, che ci dirà l'indirizzo IP della macchina che cerchiamo o della sottorete dove cercare...