Salta al contenuto
Note per Studenti Esercizio - inoltro diretto e indiretto con router a tre interfacce

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 131.17.123.88131.17.123.88, 131.56.78.4131.56.78.4, 190.78.90.2190.78.90.2.

interfaccia indirizzo maschera
eth0 131.17.123.1131.17.123.1 255.255.255.0255.255.255.0
eth1 131.17.78.1131.17.78.1 255.255.255.0255.255.255.0
eth2 131.17.15.12131.17.15.12 255.255.255.0255.255.255.0
rete maschera prossimo salto
131.175.21.0131.175.21.0 255.255.255.0255.255.255.0 131.17.123.254131.17.123.254
131.175.16.0131.175.16.0 255.255.255.0255.255.255.0 131.17.78.254131.17.78.254
131.56.0.0131.56.0.0 255.255.0.0255.255.0.0 131.17.15.254131.17.15.254
131.155.0.0131.155.0.0 255.255.0.0255.255.0.0 131.17.15.254131.17.15.254
0.0.0.00.0.0.0 0.0.0.00.0.0.0 131.17.123.254131.17.123.254

Esercizio B. Un router RR 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 131.175.123.235131.175.123.235 255.255.255.128255.255.255.128
eth1 131.175.123.126131.175.123.126 255.255.255.128255.255.255.128
eth2 131.175.122.23131.175.122.23 255.255.255.0255.255.255.0
rete maschera prossimo salto
130.170.0.0130.170.0.0 255.255.0.0255.255.0.0 131.175.123.1131.175.123.1
130.171.0.0130.171.0.0 255.255.0.0255.255.0.0 131.175.123.132131.175.123.132
130.171.4.0130.171.4.0 255.255.252.0255.255.252.0 131.175.122.2131.175.122.2
130.170.10.0130.170.10.0 255.255.254.0255.255.254.0 131.175.122.3131.175.122.3
0.0.0.00.0.0.0 0.0.0.00.0.0.0 131.175.123.3131.175.123.3

Pacchetti: A. 131.175.123.64131.175.123.64 da eth2; B. 131.175.123.255131.175.123.255 da eth0; C. 131.175.123.132131.175.123.132 da eth2; D. 130.170.132.240130.170.132.240 da eth1; E. 130.170.11.64130.170.11.64 da eth1; F. 130.171.5.125130.171.5.125 da eth1; G. 156.198.34.14156.198.34.14 da eth0; H. 0.0.0.1320.0.0.132 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)

  1. 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.
  2. 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 0.0.0.00.0.0.0 combacia sempre ed è la rotta di default.
  3. 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é 255255 né 00. 255.255.254.0255.255.254.0 è un /23/23: nel terzo byte 254=11111110254=11111110 l'ultimo bit è di host, quindi un blocco /23/23 copre due valori consecutivi del terzo byte (per 130.170.10.0/23130.170.10.0/23: 1010 e 1111). 255.255.252.0255.255.252.0 è un /22/22: 252=11111100252=11111100, due bit di host, blocco di quattro valori del terzo byte (130.171.4.0/22130.171.4.0/22 copre 4,5,6,74,5,6,7). 255.255.255.128255.255.255.128 è un /25/25: l'ultimo byte 128=10000000128=10000000 ha un solo bit di rete, quindi dimezza l'ultimo byte in 00–127127 e 128128–255255 (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 131.17.123.0/24131.17.123.0/24 (eth0), 131.17.78.0/24131.17.78.0/24 (eth1), 131.17.15.0/24131.17.15.0/24 (eth2).

  • 131.17.123.88131.17.123.88: appartiene a 131.17.123.0/24131.17.123.0/24: inoltro diretto da eth0.
  • 131.56.78.4131.56.78.4: nessuna interfaccia combacia (secondo byte 5656, 1717). Tabella, maschere più lunghe prima: i due /24/24 (131.175.21.0131.175.21.0, 131.175.16.0131.175.16.0) no; la riga 131.56.0.0/16131.56.0.0/16 dà 131.56.0.0131.56.0.0: match. Prossimo salto 131.17.15.254131.17.15.254, che sta in 131.17.15.0/24131.17.15.0/24: inoltro indiretto attraverso il gateway 131.17.15.254131.17.15.254, da eth2.
  • 190.78.90.2190.78.90.2: nessuna interfaccia combacia e nessuna riga specifica; resta la default: inoltro indiretto attraverso 131.17.123.254131.17.123.254 (rete di eth0), da eth0.

Esercizio B

Reti delle interfacce: eth0 131.175.123.235/25131.175.123.235/25: l'ultimo byte 235=11101011235=11101011 con maschera 1000000010000000 dà 128128: rete 131.175.123.128/25131.175.123.128/25 (indirizzi 128128–255255, broadcast .255.255). eth1 131.175.123.126/25131.175.123.126/25: 126<128126<128: rete 131.175.123.0/25131.175.123.0/25 (00–127127, broadcast .127.127). eth2 131.175.122.23/24131.175.122.23/24: rete 131.175.122.0/24131.175.122.0/24.

A. 131.175.123.64131.175.123.64 da eth2. Con eth0: 64 AND 128=0≠12864\ \text{AND}\ 128=0\ne128 no. Con eth1: 64 AND 128=064\ \text{AND}\ 128=0, rete 131.175.123.0131.175.123.0: match. Inoltro diretto da eth1.

B. 131.175.123.255131.175.123.255 da eth0. Con eth0: 255 AND 128=128255\ \text{AND}\ 128=128: match. Ma 131.175.123.255131.175.123.255 è 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. 131.175.123.132131.175.123.132 da eth2. Con eth0: 132 AND 128=128132\ \text{AND}\ 128=128: match. Inoltro diretto da eth0. (Nota: 131.175.123.132131.175.123.132 è anche il prossimo salto della seconda riga della tabella; ma l'inoltro diretto ha la precedenza.)

D. 130.170.132.240130.170.132.240 da eth1. Nessuna interfaccia: il primo byte è 130≠131130\ne131. Tabella: 130.170.10.0/23130.170.10.0/23 (/23/23): 130.170.132.240 AND /23=130.170.132.0≠130.170.10.0130.170.132.240\ \text{AND}\ /23=130.170.132.0\ne130.170.10.0 no; 130.171.4.0/22130.171.4.0/22: 130.170.132.0130.170.132.0 no; 130.171.0.0/16130.171.0.0/16: 130.170.0.0≠130.171.0.0130.170.0.0\ne130.171.0.0 no; 130.170.0.0/16130.170.0.0/16: 130.170.0.0130.170.0.0: match. Prossimo salto 131.175.123.1131.175.123.1: 1 AND 128=01\ \text{AND}\ 128=0, rete 131.175.123.0/25131.175.123.0/25: è 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 55) 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. 130.170.11.64130.170.11.64 da eth1. Nessuna interfaccia. Tabella: la riga con maschera più lunga è 130.170.10.0/23130.170.10.0/23: 130.170.11.64 AND /23130.170.11.64\ \text{AND}\ /23: il terzo byte 11=0000101111=00001011 con 1111111011111110 dà 00001010=1000001010=10; rete 130.170.10.0130.170.10.0: match. Prossimo salto 131.175.122.3131.175.122.3, nella rete 131.175.122.0/24131.175.122.0/24: inoltro indiretto da eth2. (Combacia anche la riga 130.170.0.0/16130.170.0.0/16, ma ha la maschera più corta.)

F. 130.171.5.125130.171.5.125 da eth1. Nessuna interfaccia. Tabella: 130.170.10.0/23130.170.10.0/23: 130.171.4.0≠130.170.10.0130.171.4.0\ne130.170.10.0 no; 130.171.4.0/22130.171.4.0/22: il terzo byte 5=000001015=00000101 con 1111110011111100 dà 44: rete 130.171.4.0130.171.4.0: match. Prossimo salto 131.175.122.2131.175.122.2: inoltro indiretto da eth2. (Combacia anche 130.171.0.0/16130.171.0.0/16, con maschera più corta.)

G. 156.198.34.14156.198.34.14 da eth0. Tutti e quattro i byte sono diversi da quelli di qualsiasi rete della tabella e delle interfacce: i primi due byte 156.198156.198 non coincidono con 131.175131.175, 130.170130.170 o 130.171130.171, e con maschere che contengono almeno 1616 bit i primi due byte devono essere uguali alla rete; solo la default combacia. Prossimo salto 131.175.123.3131.175.123.3, nella rete di eth1 (3 AND 128=03\ \text{AND}\ 128=0): inoltro indiretto da eth1.

H. 0.0.0.1320.0.0.132 da eth1. 0.0.0.0/80.0.0.0/8 è un indirizzo speciale: "0.0.0.host0.0.0.\text{host}" significa "l'host 132132 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. 131.175.123.64131.175.123.64 da eth2 diretto eth1
B. 131.175.123.255131.175.123.255 da eth0 broadcast della rete di arrivo nessun inoltro
C. 131.175.123.132131.175.123.132 da eth2 diretto eth0
D. 130.170.132.240130.170.132.240 da eth1 indiretto, riga 130.170.0.0/16130.170.0.0/16, NH 131.175.123.1131.175.123.1 stessa interfaccia di arrivo (eth1): nessun inoltro, redirect
E. 130.170.11.64130.170.11.64 da eth1 indiretto, riga /23/23, NH 131.175.122.3131.175.122.3 eth2
F. 130.171.5.125130.171.5.125 da eth1 indiretto, riga /22/22, NH 131.175.122.2131.175.122.2 eth2
G. 156.198.34.14156.198.34.14 da eth0 indiretto, default, NH 131.175.123.3131.175.123.3 eth1
H. 0.0.0.1320.0.0.132 da eth1 indirizzo speciale scartato

Confronto con la soluzione ufficiale

Coincide per tutti i casi: Esercizio A (diretto da eth0, indiretto via 131.17.15.254131.17.15.254, default 131.17.123.254131.17.123.254); Esercizio B (A diretto eth1, B nessun inoltro, C diretto eth0, D prima riga NH 131.175.123.1131.175.123.1 senza inoltro, E quarta riga NH 131.175.122.3131.175.122.3 da eth2, F terza riga NH 131.175.122.2131.175.122.2 da eth2, G default NH 131.175.123.3131.175.123.3 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 /16/16, 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 131.17.123.0/24131.17.123.0/24, eth1 131.17.78.0/24131.17.78.0/24, eth2 131.17.15.0/24131.17.15.0/24.

  • 131.17.123.88131.17.123.88: diretto, eth0.
  • 131.56.78.4131.56.78.4: riga 131.56.0.0/16131.56.0.0/16, NH 131.17.15.254131.17.15.254, indiretto da eth2.
  • 190.78.90.2190.78.90.2: solo default, NH 131.17.123.254131.17.123.254, indiretto da eth0.

Esercizio B. Reti: eth0 131.175.123.128/25131.175.123.128/25 (128128-255255), eth1 131.175.123.0/25131.175.123.0/25 (00-127127), eth2 131.175.122.0/24131.175.122.0/24. Righe: 130.170.0.0/16→123.1130.170.0.0/16\to123.1; 130.171.0.0/16→123.132130.171.0.0/16\to123.132; 130.171.4.0/22→122.2130.171.4.0/22\to122.2; 130.170.10.0/23→122.3130.170.10.0/23\to122.3; default →123.3\to123.3 (prefisso 131.175131.175 omesso).

pacchetto ragionamento esito
A. 131.175.123.64131.175.123.64 da eth2 64 AND 128=064\ \text{AND}\ 128=0: rete di eth1 diretto, eth1
B. 131.175.123.255131.175.123.255 da eth0 broadcast di eth0, arrivato da eth0 nessun inoltro
C. 131.175.123.132131.175.123.132 da eth2 132 AND 128=128132\ \text{AND}\ 128=128: rete di eth0 (il diretto prevale) diretto, eth0
D. 130.170.132.240130.170.132.240 da eth1 solo la /16/16, NH 123.1123.1 nella rete di eth1 nessun inoltro (redirect ICMP, 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. 130.170.11.64130.170.11.64 da eth1 /23/23: 11 AND 254=1011\ \text{AND}\ 254=10, NH 122.3122.3 indiretto, eth2
F. 130.171.5.125130.171.5.125 da eth1 /22/22: 5 AND 252=45\ \text{AND}\ 252=4, NH 122.2122.2 indiretto, eth2
G. 156.198.34.14156.198.34.14 da eth0 solo default, NH 123.3123.3 (3 AND 128=03\ \text{AND}\ 128=0) indiretto, eth1
H. 0.0.0.1320.0.0.132 da eth1 indirizzo speciale, non instradabile scartato

Il redirect in D non è nella soluzione ufficiale.

Errori: scorrere la tabella in ordine di riga (in E si userebbe la /16/16); dimenticare la precedenza del diretto (C); trovare l'uscita senza la rete del prossimo salto; rinviare un broadcast sull'interfaccia di arrivo (B).

Lezioni in cui compare

Teoria collegata