Routing E necessario stabilire un percorso quando host sorgente e destinazione non appartengono alla stessa rete Router di default si occupa di instradare il traffico all esterno della rete Router sorgente: router di default dell host sorgente Router destinazione: router di default dell host destinazione Forwarding e routing Algoritmo di routing Tabella locale di inoltro Valore intest output link 000 00 0 00 Valore nell intestazione del pacchetto in arrivo 0
Routing I nodi memorizzano una tabella di inoltro Ogni riga della tabella corrisponde ad una destinazione nota e contiene: rete destinazione next hop verso la destinazione interfaccia per raggiungere il next hop Tramite l indirizzo dell host destinazione contenuto nel datagramma, si stabilisce la rete destinazione (regola del prefisso più lungo) Routing (cont.) Se la riga individuata contiene un next hop vuoto, si passa al livello collegamento il datagramma, specificando indirizzo destinazione uguale a quello dell end-system destinatario (consegna diretta) Se la riga individuata contiene un valore non vuoto, questo indica l indirizzo IP del prossimo router lungo il cammino verso destinazione. Si passa a livello collegamento il datagramma, specificando come indirizzo destinazione quello del router
Inoltro di un pacchetto pacchetto Estrazione indirizzo destinazione Ricerca nella tabella di routing Indirizzo prossimo hop e interfaccia di uscita Dest/masch Next hop Interf Algoritmi di routing Problema: trovare un buon percorso tra router sorgente e router destinazione Gli algoritmi di routing creano le opportune tabelle di routing su ogni nodo Rappresentazione della rete tramite grafo: i nodi rappresentano i router, gli archi i link che li connettono Routing gerarchico: un nodo può rappresentare una intera rete Il link ha un valore che rappresenta il costo del passaggio attraverso il link
Rappresentazione tramite grafo u v x w y z Grafo: G = (N,E) N = insieme dei router = { u, v, w, x, y, z } E = insieme dei link ={ (u,v), (u,x), (v,x), (v,w), (x,w), (x,y), (w,y), (w,z), (y,z) } Costo di un cammino u v x w y z c(x,x ) = costo del link (x,x ) costo potrebbe essere, o, per esempio, inversamente proporzionale alla banda, o proporzionale al livello di congestione Costo del cammino (x, x, x,, x p ) = c(x,x ) + c(x,x ) + + c(x p-,x p ) Qual è il cammino di costo minimo tra u and z? Gli algoritmi di routing trovano il cammino di costo minimo 4
Algoritmi di routing: classificazione Globali: Tutti i router hanno informazioni complete sulla topologia e sui costi dei link link state Decentralizzati: I router conoscono i vicini fisicamente connessi e i costi dei link verso i vicini Processo iterativo di calcolo e scambio di informazioni con i vicini distance vector Statici: I cammini cambiano molto lentamente Dinamici: I cammini cambiano più rapidamente, in seguito a aggiornamenti periodici o in risposta a cambiamenti nei costi dei link Sensibili e insensibili al carico: i costi tengono conto del carico del link Algoritmi di routing di Internet Due tipi di algoritmi di routing: un algoritmo dinamico globale un algoritmo dinamico decentralizzato a vettore delle distanze Algoritmi principali: RIP, OSPF, BGP
Algoritmo Dijkstra Globale Iterativo: dopo la k-sima iterazione sono noti i cammini minimi verso k destinazioni La topologia della rete e i costi di tutti i link sono noti Calcola il percorso di minor costo dal nodo sorgente a tutti gli altri nodi della rete NOTAZIONI c(i,j): costo del link da i a j. Se i e j non sono vicini, c(i,j)= D(v): costo del cammino verso la destinazione v che ha attualmente il minor costo p(v): nodo vicino a v (predecessore) lungo il percorso attualmente di minor costo verso v N: insieme di nodi per cui è noto il percorso di minor costo Algoritmo Dijkstra A nodo sorgente Inizializzazione: N={A} per tutti i nodi v se v è vicino ad A allora D(v) = c(a,v) altrimenti D(v) = Loop: trova w non in N tale che D(w) sia minimo aggiungi w a N aggiorna D(v) per tutti i v adiacenti a w e non in N: D(v) = min (D(v), D(w) + c(w,v)) fino a che tutti i nodi appartengono a N 6
Algoritmo Distance Vector Equazione di Bellman-Ford Sia d x (y) il costo del percorso di costo minimo da x a y allora d x (y) = min v { c(x,v) + d v (y) } costo dal vicino v a destinazione y costo per il vicino v minimo tra tutti i vicini v di x Il nodo per cui si ottiene il minimo è il next hop nella tabella di routing Algoritmo Distance Vector D x (y) = stima del costo minimo da x a y Vettore distanza: D x = [D x (y): y є N ] Il nodo x conosce: il costo c(x,v) verso ogni vicino v il proprio vettore distanza D x = [D x (y): y є N ] il vettore distanza D v = [D v (y): y є N ] di ogni vicino v 7
Algoritmo Distance Vector Ogni nodo invia periodicamente ai vicini il proprio vettore distanza Quando un nodo x riceve una nuova stima da un vicino v, aggiorna il proprio vettore distanza utilizzando l equazione Bellman-Ford D x (y) = min v { c(x,v) + D v (y) } per ogni destinazione y Se D x è cambiato, x lo invia ai propri vicini, i quali aggiornano il proprio vettore distanza D x (y) converge a d x (y) Algoritmo Distance Vector Decentralizzato: ogni nodo esegue l algoritmo usando le informazioni inviate dai vicini Iterativo: l algoritmo converge e termina automaticamente nel momento in cui i nodi non inviano più aggiornamenti Asincrono: le esecuzioni non devono sincronizzarsi, ma sono concorrenti 8
ogni nodo: Algoritmo Distance Vector wait for (change in local link cost or msg from neighbor) recompute estimates if DV to any dest has changed, notify neighbors In ogni nodo X Inizializzazione: D x (x) = 0 per ogni destinazione y per ogni vicino v D x (y) = c(x,y) D v (y) = per ogni destinazione y invia D x per ogni vicino v Loop: wait (finché cambia il costo di un link verso un vicino o finché si riceve un aggiornamento da un vicino) per ogni destinazione y D x (y) = min v {c(x,v) + D v (y)} se D x (y) è cambiato invia D x a tutti i vicini continua 9