Seminario di Reti e Sicurezza algoritmi di instradamento Prof. Stefano bistarelli Star: Davide Ferrone Premessa(1) Lo strato di rete ha lo scopo di trasportare un pacchetto da un host che spedisce ad uno che riceve – in particolare, il livello di trasporto fornisce allo strato di rete un segmento, indicando il mittente ed il destinatario – il livello di rete deve decidere come fare a far giungere tale pacchetto a destinazione, sapendo che il livello di collegamento garantisce che ogni singolo passo (hop) possa essere compiuto Premessa(2) Obiettivi dello strato di rete Determinazione del percorso: lo strato di rete deve determinare il tragitto seguito dai pacchetti che fluiscono da un sender ad un receiver algoritmi di instradamento: algoritmi per il calcolo del percorso Commutazione: quando un pacchetto arriva all’ingresso di un router, questo deve trasferirlo all’appropriato link di uscita Impostazione della chiamata (call setup): impostazione dello stato dei nodi di rete prima dell’inizio della trasmissione dei dati non viene effettuata in Internet Instradamento •Nelle reti datagram, come Internet, ogni pacchetto è contrassegnato dall’indirizzo del mittente e del destinatario –incidentalmente, un protocollo di livello rete deve fornire un modo di rappresentare questi indirizzi in modo da identificare univocamente ogni host della rete •I commutatori di pacchetto (router) basano la propria azione su una tabella di instradamento (routing table) che, in base alla destinazione di un datagram, permette di scegliere il link di uscita –la tabella di routing può variare nel tempo, in risposta alle politiche di instradamento della rete –per questo motivo, i datagram possono seguire percorsi differenti nella rete e, eventualmente, arrivare fuori sequenza Instradamento • L’idea di fondo è fare in modo che ogni datagram fluisca da – sorgente a destinazione, se sulla medesima rete – da sorgente a router, e da router a destinazione altrimenti... – … in mezzo, i router indirizzano il pacchetto ad un router più prossimo alla destinazione network 2 network 3 network 1 W1 W2 G1 G3 G2 W1 G1 data G1 G3 data G3 W2 data Instradamento •E’ necessario stabilire un percorso quando l’host sorgente e l’host destinazione non appartengono alla stessa rete –in tal caso, il livello di collegamento non permette lo scambio diretto di informazione •Un terminale è solitamente connesso ad un router che si occupa di gestire il traffico destinato all’esterno della rete –questo router è detto router di default –indicheremo d’ora in poi, come router sorgente il default router dell’host sorgente e come router destinazione il default router dell’host destinazione •queste definizioni hanno senso in quanto il router sorgente non ha bisogno di un percorso per ricevere datagram dalla sorgente e, parimenti, il router destinazione non ha bisogno di percorsi per fornire datagram alla destinazione Instradamento •Un algoritmo di instradamento ha lo scopo di disegnare un percorso tra un router sorgente ed un router destinazione, dato un insieme di router collegati da link –un buon algoritmo di instradamento non si limita a trovare un percorso, ma trova un buon percorso, secondo una qualche metrica –la descrizione data del problema lo porta nel dominio della teoria dei grafi: la rete di router è un grafo e si tratta di trovare al suo interno, se esiste, un percorso tra due nodi dati –spesso gli archi del grafo sono pesati, ovvero ai vari link della rete viene associata una qualche misura della loro desiderabilità –quello che si richiede di trovare è solitamente il percorso che minimizza la somma dei costi dei vari link che ne fanno parte •se assumiamo che ogni link abbia costo 1, allora stiamo chiedendo di trovare il cammino più breve tra router sorgente e router destinazione Instradamento nelle reti di dati Effetti • L’algoritmo di instradamento influenza: – Direttamente: il ritardo medio per pacchetto (average packet delay) – Indirettamente: il throughput della rete, definito come: Throughput=Traffico offerto – Traffico rifiutato • I due parametri sono regolati dall’algoritmo di controllo di flusso: se il ritardo medio per pacchetto cresce eccessivamente (cioè il routing è inefficace) il controllo di flusso interviene riducendo il traffico ammesso nella rete e quindi il throughput complessivo della rete. Instradamento nelle reti di dati Effetti • Un buon algoritmo di routing riesce ad aumentare il throughput a parità di delay (per alti valori di traffico offerto) ed a diminuire il delay a parità di throughput (per bassi valori di traffico offerto): Tipologie di instradamento (1) •Esistono vari criteri per classificare gli algoritmi di routing Calcolo percorso – Centralizzato: • Un nodo si occupa di raccogliere l’informazione da tutti gli altri nodi • Calcola i percorsi • Ridistribuisce il risultato del calcolo a tutti gli altri nodi Vantaggi: • Possibile usare di calcolo percorsi algoritmi e metriche complesse • Tutti i nodi usano piano di instradamento coerente Svantaggi: • Sensibile al guasto nodo centrale • Scambio informazione da/verso nodo centralizzato genera congestione – Distribuito: • Tutti i nodi si scambiano informazione tra loro (utilizzando protocolli di instradamento) • Calcolano i percorsi (indipendentemente o in base a quanto fatto dai nodi adiacenti) Vantaggi: Robusto ai guasti Scambio informazione uniforme su tutta la rete Svantaggi: • Richiede intelligenza nei nodi • Scambio informazione parziale/errata porta a incongruenze nell’instradamento Tipologie di Instradamento (2) –globale: calcola il percorso di costo minimo supponendo di conoscere completamente la struttura della rete •esempio: algoritmi basati sullo stato dei link –decentralizzato (locale): il calcolo del miglior percorso viene eseguito localmente e parzialmente su ogni router; solitamente, ogni router ha una conoscenza solo dei link e dei router cui è direttamente connesso •esempio: algoritmi di tipo distance vector –statico: i percorsi migliori sono calcolati o calcolabili a priori –dinamico: i percorsi mutano nel corso del tempo in funzione della variazione di topologia della rete o del costo dei link –sensibile al carico: viene assunto che i costi dei link variano anche a seconda del traffico che viene immesso su di essi –insensibile al carico: non viene considerato il traffico sui link come un parametro per stabilire i percorsi Instradamento in Internet •Il protocollo di rete usato su Internet è IP (Internet Protocol) –in un certo senso, IP utilizza un instradamento locale statico insensibile al carico •Esistono numerosi protocolli di instradamento, che rendono dinamico l’instradamento di IP: –RIP, OSPF e BGP sono i principali •Su Internet vengono impiegati essenzialmente due tipi di algoritmi di instradamento: –un algoritmo dinamico basato sullo stato globale dei link –un algoritmo dinamico decentralizzato a vettore delle distanze • I pesi attribuiti ai links possono essere: – Unitari: si giunge al min-hop path – Legati alla capacità del link ed al traffico previsto; – Variabili nel tempo in seguito al traffico misurato sui links stessi. Shortest Path Algorithm •L’algoritmo di instradamento globale maggiormente impiegato è basato sull’algoritmo di Dijkstra noto come Shortest Path –lo scopo dell’algoritmo di Dijkstra è trovare il cammino minimo tra due nodi di un grafo pesato dato •L’idea è quella che ogni router propaghi a tutti i suoi vicini le informazioni relative ai link cui è direttamente connesso –dopo un tempo opportuno, tutti i router di tutta la rete avranno una mappa della rete, contenente tutte le informazioni –a questo punto ogni router può calcolare il percorso ottimo tra se stesso e la destinazione –se la rete è stabile, allora tutti i router calcoleranno sempre lo stesso percorso ottimo, ed è quindi garantito che un datagram percorra la strada migliore per giungere a destinazione Shortest Path Algorithm •L’algoritmo di Dijkstra usa le seguenti notazioni: –c(i, j): costo del link dal nodo i al nodo j, se i nodi non sono collegati, allora si assume che c(i, j) = ; –D(v): costo del percorso dal nodo sorgente al nodo di destinazione v con costo minimo, a fine esecuzione; –N: l’insieme dei nodi di cui è noto il percorso ottimo •L’algoritmo calcola i percorsi di costo minimo dalla sorgente (data) a tutti gli altri nodi della rete: -in ingresso, l’algoritmo prende la matrice c, che descrive completamente la struttura della rete -in ingresso, l’algoritmo prende il nodo A, corrispondente al nodo sorgente •assumiamo che V sia l’insieme di tutti i nodi (desumibile da c) Shortest Path Algorithm N = { A }; // Inizializzazione for ( x in V ) D(x) = c(A,x); do // ciclo principale m = ; // cerca il percorso a costo minimo noto for ( x in V \ N ) if (D(x) < m) { w = x; m = D(w); } N = N {w}; // aggiorna l’insieme dei nodi di cui è noto il percorso ottimo for ( x in V \ N ) // aggiorna gli altri percorsi D(x) = min{ D(x), D(w) + c(w,x) }; until ( N == V ); Ovvero………. 1 Inizializzazione (nodo A): 2 N = {A} 3 per tutti i nodi x . N 4 if n adiacente ad A 5 then D(n) = c(A,x), p(x) = A 6 else D(n) = infinito 8 repeat 9 trova nodo w . N tale per cui D(w) è minimo 10 aggiungi w ad N 11 aggiorna D(x) per tutti gli n adiacenti a w, n . N: 12 if ( D(x) > D(w) + c(w,x)) 13 then D(x) = D(w) + c(w,x), p(x) = w 13 /* il nuovo costo verso x è o il vecchio costo verso x o il 14 cammino a minimo costo verso w più costo da w a x*/ 15 until tutti i nodi in N Esempio N W 2 A 1 3 C 3 B D 4 6 E 7 2 F 7 6 A B: 2 A C: 1 A D: A E: A F: C 1 A,C scegli C L’insieme W rappresenta i nodi immediatamente raggiungibile da un nodo in N Esempio N 2 A 1 3 B 3 C 4 6 scegli B D W E 7 A B: 2 A D: 4 A E: 7 A F: 8 2 F 7 6 C 1 B 2 A,C A,B Esempio N 2 A 1 3 B 3 C 4 6 scegli D D E 7 7 2 W F 6 A D da C: 4 A D da B: 5 A E da B: 6 A E da C: 7 A F da C: 8 A F da B: 9 C 1 B 2 D 4 A,C A,B A,C, D Esempio N 2 A 1 3 B 3 C 4 6 scegli E D E 7W 7 2 F 6 C 1 B 2 D 4 E 6 A,C A,B A,C, D A,B, E Esempio N 2 A 1 3 B 3 C 4 6 scegli F D E 7 7 2 F W 6 C B D E 1 2 4 6 F 6 A,C A,B A,C, D A,B, E A,C, D,F Algoritmo di Dijkstra: proprietà • Complessità con M nodi • Ogni iterazione: – Controllo tutti i nodi w.N – Aggiungo w a distanza minima • M*(M+1)/2 confronti: O(M**2) • L’implementazione più efficiente possibile: O(nlogn) Pro e Contro dell’algoritmo Link State • Vantaggi dell’algoritmo Link-State: – Elevata accuratezza nell’individuazione del percorso migliore – Assenza di loops di lunga durata • Svantaggi: – Informazione di segnalazione elevata e proporzionale alla frequenza di variazioni topologiche OVERHEAD INACCETTABILE IN CONDIZIONI DI ELEVATA MOBILITA’ DEI NODI Algoritmi Distance Vector • Il router tiene in una tabella tutti i percorsi di instradamento noti • All’avvio, il router inizializza la sua tabella di routing per contenere una voce per ciascuna rete con cui è connesso direttamente. • Ogni voce identifica una rete di destinazione e la relativa distanza, di solito misurata in salti o hop.Ogni hop si riferisce al numero di router che un datagram attraversa dalla propria sorgente alla destinazione Algoritmi Distance Vector (2) • Periodicamente ogni router invia una copia della propria tabella di routing agli altri router che può raggiungere direttamente • Quando dal router J arriva un resoconto al router K, questo esamina l’insieme di destinazioni riportate e le relative distanze • Se J conosce un percorso più breve per raggiungere una destinazione, o se elenca una destinazione che K non ha nella sua tabella, o se K al momento sta inviando ad una destinazione tramite J e la distanza di J a quella destinazione è cambiata, K sostituisce la voce nella sua tabella Algoritmi Distance Vector(3) • Notare che se J riporta la distanza N, una voce aggiornata in K avrà la distanza N+1 (la distanza per raggiungere la destinazione da J più la distanza per raggiungere J) • La tabella di routing contiene una terza colonna che specifica il salto successivo • Quando il router K aggiunge o modifica una voce in risposta ad un messaggio proveniente da J,assegna il router J come il salto successivo per quella voce Algoritmi Distance Vector Ogni nodo scambia periodicamente con i vicini diretti un vettore contenente: – le destinazioni che può raggiungere – la distanza dalle destinazioni misurata in costo (ad esempio: numero nodi da attraversare compreso se stesso) • Il nodo che riceve il vettore lo confronta con le proprie RT ed effettua modifiche: – aggiunge nuove destinazioni – cambia instradamenti se nuovi sono più brevi – modifica costi se usa nodo adiacente come miglior scelta Distance Vector Implementazione • Struttura dati: tabella distanze • Ogni nodo possiede la propria – Una riga per ogni possibile destinazione – Una colonna per ogni nodo adiacente • Esempio: nel nodo X, per la destinazione Y attraverso nodo adiacente Z: Sorgente X D (Y,Z) = c(X,Z) + min {D z(Y,w)} Destinazione Next hop Instradamento Distance Vector • Iterativo, asincrono: una iterazione (locale al nodo) causata da: – modifica costo canale a cui nodo collegato – messaggio ricevuto da nodo adiacente, che causa modifica del cammino ottimo • Distribuito: – ogni nodo avvisa i vicini solo quando il suo cammino migliore verso una certa destinazione è cambiato – i vicini avviseranno a loro volta nodi vicini se necessario Algoritmo Distance Vector Ad ogni nodo X: 1 Inizializzazione: 2 per tutti i nodi adiacenti v: 3D X(*,v) = infinito /* l’operatore * significa ”per ogni riga" */ 4D X(v,v) = c(X,v) 5 per tutte le destinazioni, y 6 invia min D w 7 7 X(y,w) verso ogni nodo adiacente /* w sono tutti i vicini di X*/ Algoritmo Distance Vector 8 loop 9 wait (until I see a link cost change to neighbor V 10 or until I receive update from neighbor V) 11 12 if (c(X,V) changes by d) 13 /* change cost to all dest's via neighbor V by d */ 14 /* note: d could be positive or negative */ 15 for all destinations y: DX (y,V) = DX (y,V) + d 16 17 else if (update received from V wrt destination Y) 18 /* shortest path from V to some Y has changed */ 19 /* V has sent a new value for its minW DV(Y,w) */ 20 /* call this received new value is "newval" */ 21 for the single destination y: DX (Y,V) = c(X,V) + newval 22 23 if we have a new minW DX(Y,w) for any destination Y 24 send new value of minW DX (Y,w) to all neighbors 25 26 forever Algoritmo Distance Vector • Algoritmo di Bellman-Ford Ogni nodo invia ai nodi adiacenti un distance vector insieme di coppie [indirizzo - distanza], dove la distanza è espressa tramite metriche classiche, quali numero di hop e costo. Memorizza per ogni linea l’ultimo distance vector ricevuto. Calcola le proprie tabelle di instradamento. Se le tabelle risultano diverse da quelle precedenti, invia ai nodi adiacenti un nuovo distance vector. Distance Vector • Vantaggi – facile da implementare • Problemi: – lento a convergere – propaga errori di routing – non molto scalabile (le dimensioni dei messaggi scambiati dai nodo crescono al crescere della rete) Confronto tra algoritmi LS e DV • Complessità messaggi: con M nodi, E canali per nodo – LS: ogni nodo invia O(M) messaggi, ciascuno lungo O(E) – DV: ogni messaggio contiene tutte le destinazioni O(M), ed èmandato a O(E) vicini O(E M) • Velocità di convergenza – LS: ogni volta che un link state è propagato, ho nuova topologia: convergenza immediata – DV: scelte nodo dipendono da scelte nodi vicini; si richiedono più scambi di messaggi: tempo di convergenza variabile Confronto tra algoritmi LS e DV • Affidabilità: cosa succede se un nodo funziona non correttamente? • LS: i nodi possono annunciare costi dei canali scorretti – Ogni nodo calcola la propria tabella: tutti sbagliano • Non si possono creare anelli – Al prossimo annuncio tutto si corregge • DV: i nodi possono annunciare costi dei cammini scorretti – Ogni annuncio è usata da tutti i nodi (indirettamente) – Gli errori si propagano nella rete • Errori di routing creano anelli