Esercizio - inoltro diretto e indiretto con router a tre interfacce
In questa pagina 5
Testo.
Esercizio A. Un router è configurato come segue. Spiegare l'inoltro dei pacchetti con destinazione , , .
| interfaccia | indirizzo | maschera |
|---|---|---|
| eth0 | ||
| eth1 | ||
| eth2 |
| rete | maschera | prossimo salto |
|---|---|---|
Esercizio B. Un router ha le interfacce e la tabella seguenti. Riceve gli otto pacchetti elencati (destinazione e interfaccia di arrivo): descrivere il comportamento del router per ciascuno.
| interfaccia | indirizzo | maschera |
|---|---|---|
| eth0 | ||
| eth1 | ||
| eth2 |
| rete | maschera | prossimo salto |
|---|---|---|
Pacchetti: A. da eth2; B. da eth0; C. da eth2; D. da eth1; E. da eth1; F. da eth1; G. da eth0; H. da eth1.
Teoria usata: Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro → (inoltro diretto e indiretto, prefisso più lungo, rotta di default), Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP → (messaggio di redirect).
Procedura (vale per tutti i pacchetti)
- Inoltro diretto. Si calcola la rete di ogni interfaccia (indirizzo AND maschera) e si controlla se la destinazione ci appartiene (destinazione AND maschera rete). Se sì, il pacchetto si consegna direttamente dalla interfaccia in questione.
- Inoltro indiretto. Se nessuna interfaccia combacia, si scorre la tabella partendo dalla maschera più lunga (la tabella non è necessariamente ordinata): vale la prima riga che combacia; la riga con maschera combacia sempre ed è la rotta di default.
- Si individua l'interfaccia di uscita: è quella la cui rete contiene il prossimo salto.
Leggere le maschere dei casi di B. L'AND si fa bit a bitAND vale 1 solo se entrambi i bit valgono 1Algebra di Boole e porte logiche → solo sul byte che non è né né . è un : nel terzo byte l'ultimo bit è di host, quindi un blocco copre due valori consecutivi del terzo byte (per : e ). è un : , due bit di host, blocco di quattro valori del terzo byte ( copre ). è un : l'ultimo byte ha un solo bit di rete, quindi dimezza l'ultimo byte in – e – (Subnetting e supernettingIl subnetting divide un blocco di indirizzi in sottoblocchi più piccoli allungando la maschera ($n_{\text{sub}}=n_{\text{rete}}+s$, con $2^s$ sottoreti); il supernetting (aggregazione CIDR) fa l'opposto, accorciando il prefisso per unire blocchi contigui in uno più grande. Regole di progetto: ogni sottorete ha un numero di indirizzi potenza di 2 ($M=2^k\ge$ host richiesti $+2$), prefisso $n=32-k$, indirizzo iniziale multiplo di $M$; si assegnano prima le sottoreti più grandi. Per aggregare $2^j$ blocchi di prefisso $n$ servono blocchi contigui il cui primo indirizzo sia multiplo della dimensione dell'aggregato, e il nuovo prefisso è $n-j$.Subnetting e supernetting →).
Esercizio A
Le reti delle interfacce sono (eth0), (eth1), (eth2).
- : appartiene a : inoltro diretto da eth0.
- : nessuna interfaccia combacia (secondo byte , ). Tabella, maschere più lunghe prima: i due (, ) no; la riga dà : match. Prossimo salto , che sta in : inoltro indiretto attraverso il gateway , da eth2.
- : nessuna interfaccia combacia e nessuna riga specifica; resta la default: inoltro indiretto attraverso (rete di eth0), da eth0.
Esercizio B
Reti delle interfacce: eth0 : l'ultimo byte con maschera dà : rete (indirizzi –, broadcast ). eth1 : : rete (–, broadcast ). eth2 : rete .
A. da eth2. Con eth0: no. Con eth1: , rete : match. Inoltro diretto da eth1.
B. da eth0. Con eth0: : match. Ma è il broadcast diretto della rete di eth0, e il pacchetto è arrivato proprio da eth0: è già stato ricevuto da tutti i nodi di quella rete. Nessun inoltro (il pacchetto non esce dalla stessa interfaccia da cui è entrato).
C. da eth2. Con eth0: : match. Inoltro diretto da eth0. (Nota: è anche il prossimo salto della seconda riga della tabella; ma l'inoltro diretto ha la precedenza.)
D. da eth1. Nessuna interfaccia: il primo byte è . Tabella: (): no; : no; : no; : : match. Prossimo salto : , rete : è nella rete di eth1. Il pacchetto arriva da eth1 e dovrebbe ripartire da eth1: la soluzione ufficiale dice nessun inoltro ("siamo già su eth1"). Nei router reali il caso si gestisce così: il router può comunque inoltrare il pacchetto al prossimo salto e, siccome il mittente potrebbe raggiungerlo direttamente (il prossimo salto sta nella sua stessa rete), gli invia un messaggio ICMP redirect (tipo ) per dirgli di usare direttamente quel gateway (Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP →).
E. da eth1. Nessuna interfaccia. Tabella: la riga con maschera più lunga è : : il terzo byte con dà ; rete : match. Prossimo salto , nella rete : inoltro indiretto da eth2. (Combacia anche la riga , ma ha la maschera più corta.)
F. da eth1. Nessuna interfaccia. Tabella: : no; : il terzo byte con dà : rete : match. Prossimo salto : inoltro indiretto da eth2. (Combacia anche , con maschera più corta.)
G. da eth0. Tutti e quattro i byte sono diversi da quelli di qualsiasi rete della tabella e delle interfacce: i primi due byte non coincidono con , o , e con maschere che contengono almeno bit i primi due byte devono essere uguali alla rete; solo la default combacia. Prossimo salto , nella rete di eth1 (): inoltro indiretto da eth1.
H. da eth1. è un indirizzo speciale: "" significa "l'host di questa stessa rete", valido solo come destinazione locale e mai instradabile. Il router non lo inoltra: il pacchetto viene scartato (la slide ufficiale lo descrive come indirizzo speciale, unicast interno alla sottorete, che viene scartato).
| pacchetto | tipo | uscita |
|---|---|---|
| A. da eth2 | diretto | eth1 |
| B. da eth0 | broadcast della rete di arrivo | nessun inoltro |
| C. da eth2 | diretto | eth0 |
| D. da eth1 | indiretto, riga , NH | stessa interfaccia di arrivo (eth1): nessun inoltro, redirect |
| E. da eth1 | indiretto, riga , NH | eth2 |
| F. da eth1 | indiretto, riga , NH | eth2 |
| G. da eth0 | indiretto, default, NH | eth1 |
| H. da eth1 | indirizzo speciale | scartato |
Confronto con la soluzione ufficiale
Coincide per tutti i casi: Esercizio A (diretto da eth0, indiretto via , default ); Esercizio B (A diretto eth1, B nessun inoltro, C diretto eth0, D prima riga NH senza inoltro, E quarta riga NH da eth2, F terza riga NH da eth2, G default NH da eth1, H scartato). Ricalcolati con un piccolo simulatore Python di inoltro (modulo ipaddress). Il riferimento al redirect ICMP nel caso D non è nella soluzione ufficiale.
Errori comuni
- Applicare la tabella in ordine di riga invece che dalla maschera più lunga (nel caso E si userebbe la riga , sbagliando il prossimo salto).
- Dimenticare che l'inoltro diretto ha la precedenza (caso C).
- Per l'interfaccia di uscita usare il prossimo salto "a occhio": va cercata la rete che lo contiene.
- Inoltrare un broadcast dalla stessa interfaccia da cui è arrivato (caso B).
Versione ripasso
Procedura (Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →): (1) dest AND maschera di ogni interfaccia rete? diretto; (2) altrimenti tabella dalla maschera più lunga, la default per ultima; (3) uscita interfaccia la cui rete contiene il prossimo salto.
Esercizio A. Interfacce: eth0 , eth1 , eth2 .
- : diretto, eth0.
- : riga , NH , indiretto da eth2.
- : solo default, NH , indiretto da eth0.
Esercizio B. Reti: eth0 (-), eth1 (-), eth2 . Righe: ; ; ; ; default (prefisso omesso).
Il redirect in D non è nella soluzione ufficiale.
Errori: scorrere la tabella in ordine di riga (in E si userebbe la ); dimenticare la precedenza del diretto (C); trovare l'uscita senza la rete del prossimo salto; rinviare un broadcast sull'interfaccia di arrivo (B).