8. IP: Instradamento dei datagrammi 8.1. Introduzione L'instradamento è la terza funzione fondamentale di un servizio di comunicazione di livello rete 8.2. L'instradamento in una internet Instradamento (routing) = il processo di scelta di un cammino attraverso le varie sottoreti che costituiscono l'internet; router = qualunque macchina che prende questa scelta (non confondere con multihomed) Alcune sottoreti (per esempio quelle geografiche) possono svolgere una funzione analoga al loro interno: questa livello di instradamento interno non è visibile a (e non disturba) IP Difficoltà: macchine con più di una interfaccia carico della rete diversità della lunghezza dei datagrammi tipo di servizio richiesto dai datagrammi In genere il software è molto semplice e si basa (al meglio) sul cammino più corto Pagina 8.1
Anche le macchine che non sono router partecipano, in modo semplificato, al processo di instradamento Verso alcune destinazioni Verso altre destinazioni G 1 G 2 Host Figura 8.1 L'IP che esegue su Host deve decidere se inviare un pacchetto non locale a G 1 o a G 2. Ancora di più deve farlo un host multihomed I router sono macchine la cui finalità è quella di fare instradamento. In molti siti si usano macchine "normali" multihomed general purpose come router. Il software di IP tradizionalmente è sempre in grado di eseguire instradamento Definizione più ristretta: instradamento è il processo di scelta di un cammino, facendo passare un pacchetto da una rete ad un'altra 8.3. Consegna diretta e indiretta Instradamento diretto = consegna di un pacchetto da una macchina direttamente ad un'altra (quindi sono connesse ad una stessa sottorete) Instradamento indiretto = consegna di un pacchetto da una macchina ad un'altra che non è connessa da una sottorete comune alle due. Quindi occorre passare attraverso almeno un router Pagina 8.2
8.3.1. Consegna attraverso una singola sottorete Non coinvolge router. Il mittente incapsula il datagramma in una trama fisica, lega l'indirizzo IP all'indirizzo fisico hardware del destinatario, invia la trama direttamente alla macchina destinazione Come si scopre che è sulla stessa rete fisica? Dal netid della destinazione, che è uguale al netid di una delle sottoreti a cui il mittente è connesso. Notare: Tutte le macchine su una sottorete fisica hanno lo stesso netid, e due sottoreti fisiche distinte hanno netid diversi 8.3.2. Instradamento indiretto (instradamento vero e proprio) Il mittente deve scegliere un router a cui affidare il resto dell'instradamento. Dopo aver fatto questa scelta, incapsula il datagramma nella trama fisica per la sottorete su cui si trova il router, e invia la trama al router. Notare: il pacchetto IP inviato al router contiene l'indirizzo IP del destinatario, non quello del router!!! Domande importanti: Come fa il mittente a sapere quale router scegliere? Come fa un router a scegliere un altro router per inoltrare il pacchetto? Come fa un router a "imparare" nuove strade? Pagina 8.3
8.4. Table-driven IP routing Ogni implementazione di IP è guidata da una tabella di instradamento IP che memorizza informazioni sulle possibile destinazioni e sul modo di raggiungerle. Cosa ci deve essere in questa tabella? Se dovesse contenere tutte le possibili destinazioni, non si potrebbe tenerla aggiornata non si avrebbe sufficiente memoria Vorremmo che le macchine prendessero decisioni sulla base di informazione minimale usare solo la parte netid degli indirizzi IP Contiene coppie (N, G) dove N = network id di una rete destinazione G = indirizzo IP del prossimo router nel cammino verso tale destinazione. Notare: non è descritto l'intero cammino, ma solo il prossimo passo! Contiene solo indirizzi di router direttamente raggiungibili Rete 10.0.0.0 10.0.0.5 F 20.0.0.5 Rete 20.0.0.0 Per raggiungere macchine su questa rete 20.0.0.6 30.0.0.6 G Figura 8.2(a) Rete 30.0.0.0 40.0.0.7 H 30.0.0.7 Rete 40.0.0.0 Instradare a questo indirizzo 20.0.0.0 Consegna diretta 30.0.0.0 Consegna diretta 10.0.0.0 20.0.0.5 40.0.0.0 30.0.0.7 Figura 8.2(b): Tabella di routing per G Pagina 8.4
Le tabelle di routing dipendono dal numero delle reti e non degli host Crescono solo quando si aggiunge una rete all'internet Solo il router finale può scoprire se la macchina destinazione esiste oppure no (occorre definire metodi di segnalazione degli errori!) Il traffico verso una rete destinazione segue sempre la stessa strada, indipendentemente dalle condizioni della internet Se esistono più cammini verso una destinazione, ne viene usato uno solo. Se vi è un guasto su questo cammino, cade la connettività anche se ci sarebbero cammini alternativi I cammini nelle due direzione fra due reti possono essere diversi (i router devono cooperare perché la comunicazione bidirezionale sia sempre possibile) 8.5. Strade di default Per tenere basso il numero di righe delle tabelle è comodo il concetto di default router: se non si trova nessun cammino nella tabella di routing, il pacchetto viene inviato ad un particolare router. Particolarmente utile per gli host 8.6. Strade specifiche per host L'instradamento per un particolare host destinazione, invece che per la rete destinazione, è utile per trattare in modo particolare certi host Pagina 8.5
8.7. L'algoritmo di routing Route_IP_Datagram (datagram, routing_table) Extract destination IP address, I D, from datagram Compute IP destination network, I N if I N matches any directly connected network send datagram to destination over that network else if I D appears as host-specific route route datagram as specified in table else if I N appears in routing table route datagram as specified in table else if a default route has been specified route datagram to default router else declare routing error 8.8. Instradamento con IP address L'instradamento IP non modifica il datagramma originale, e in particolare non cambia gli indirizzi IP destinazione e sorgente Ogni volta che è stato calcolato il next hop address, cioè l'indirizzo del prossimo router, il software dell'interfaccia prescelta lega l'indirizzo IP all'indirizzo fisico. Non è inefficiente? Occorrerebbe memorizzare nelle routing table indirizzi fisici. Non si fa per le seguenti ragioni: Pagina 8.6
ESAME O AGGIORNAMENTO DELLE ROUTE DATAGRAMMA DA INSTRADARE ROUTING TABLE ROUTING ALGORITMO IN IP SOFTWARE IP address used Physical address used Confine degli indirizzi DATAGRAMMA DA INVIARE + NEXT HOP ADDRESS 1. La routing table fornisce un confine pulito fra il software IP che instrada e il software di livello superiore che manipola/scopre le strade 2. Il software IP deve creare una astrazione al di sopra delle reti fisiche 3. L'indirizzo fisico di un router può cambiare 4. Tutto il software delle parti alte deve solo lavorare su indirizzi IP Pagina 8.7
8.9. Gestione dei datagrammi entranti Instradamento non riguarda solo i pacchetti uscenti Host 1. Controllare se il datagramma arrivato è destinato a questo host: inoltrare al livello superiore giusto (Quale è? Come fa a scoprirlo?) 2. Se non è destinato a questo host, scartare il datagramma (gli host non devono instradare!) Router 1. Controllare se il datagramma arrivato è destinato a questo router: inoltrare al livello superiore giusto. In genere sono pacchetti di test o di gestione del router 2. Se non è destinato a questo router, decrementare time-to-live (se non positivo scartare!), calcolare il nuovo checksum, e instradare con l'algoritmo di instradamento Determinare se il pacchetto è indirizzato a questa macchina non è così semplice: La macchina può avere più interfacce e quindi più indirizzi Deve accettare i broadcast con limited broadcast o directed broadcast Come vedremo, subnetting e multicast rendono il riconoscimento ancora più pesante Pagina 8.8
Perché scartare i pacchetti non destinati alla macchina se non si è router? 1. Se la macchina ha ricevuto un pacchetto non destinato a lei, c'è un errore da qualche parte meglio segnalarlo perché venga corretto 2. L'instradamento provoca traffico addizionale e ruba CPU alla macchina (che non è destinata a questa funzione) 3. Errori semplici possono causare un caos: ad es. se ogni host instradasse un pacchetto ricevuto via broadcast (cosa succederebbe?) 4. I router oltre a instradare segnalano errori: se ogni host mandasse errori il mittente sarebbe bombardato! Inoltre, come vedremo, propagano messaggi che verificano la correttezza delle tabelle di routing (vedremo): se gli host non lo facessero si potrebbero creare anomalie 8.10. Impostare le tabelle di routing Chiaramente, tutto dipende dalla correttezza delle tabelle di routing: mettere le route "a mano" è possibile ma produce facilmente errori Vedremo come si può fare a mantenerle corrette usando un protocollo di routing Pagina 8.9
8.11. Conclusioni Abbiamo così visto le tre funzioni importanti che un servizio di comunicazione di rete deve fornire: 1. un indirizzamento uniforme e globale 2. una funzione consegna di pacchetti che includa frammentazione e riassemblaggio de pacchetti per rendersi indipendenti dalle caratteristiche fisiche delle sottoreti attraversate 3. instradamento fra le sottoreti che costituiscono l'internet, dalla rete sorgente alla rete destinazione: i datagrammi viaggiano attraverso l'internet, da un router ad un altro, fino a che possono essere consegnati direttamente attraverso un sottorete fisica Pagina 8.10