Esercizio - Inoltro di tre pacchetti e piano di indirizzamento di un blocco 13.14.0.0-16
In questa pagina 4
Testo (tema d'esame, sessione di giugno, esercizio 2). Un router ha la tabella e le interfacce seguenti.
| Rete | Maschera | Prossimo salto |
|---|---|---|
| Interfaccia | Indirizzo | Maschera | MTU |
|---|---|---|---|
| eth0 | |||
| eth1 | |||
| eth2 |
- Come sono trattati: (a) da eth1, B, DF; (b) da eth1, B, DF; (c) da eth0, B, DF (se serve frammentazione, quanti frammenti).
- L'amministratore della rete la vuole suddividere in: sottoreti da host; da host; da host; collegamento punto-punto. Piano di indirizzamento con indirizzo, maschera, broadcast diretto e massimo numero di host di ciascuna.
Teoria usata: 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 →, 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 →, Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →.
Domanda 1: inoltro dei tre pacchetti
Reti delle interfacce.
- eth0: ;
- eth1: (indirizzi –; AND );
- eth2: : , quindi (–).
Interfaccia di uscita di ogni prossimo salto (quella la cui rete lo contiene): e eth0; e eth1; e eth2 ( sta in –).
| Pacchetto | Analisi | Esito | |
|---|---|---|---|
| (a) | da eth1, B, DF | rientra in , la rete di eth1: sarebbe un inoltro diretto verso eth1, ma il pacchetto arriva da eth1 | nessun inoltro |
| (b) | da eth1, B, DF | è fuori da (–); non è una rete delle altre interfacce; le righe sono tutte : resta la default, prossimo salto | inoltro indiretto via eth0; |
| (c) | da eth0, B, DF | righe che lo contengono: e ; vince la più specifica, , prossimo salto (eth2); MTU eth2 e DF | scartato (non si può frammentare); il router manda ICMP "frammentazione necessaria" |
Passaggi di calcolo (AND bit a bitAND vale 1 solo se entrambi i bit valgono 1Algebra di Boole e porte logiche → sul byte di confine): per (a) eth1 ha maschera , byte ; , rete , uguale a quella di eth1 (). Per (b) , rete : non appartiene a eth1; con eth0 () il terzo byte e con eth2 il secondo byte : nessun inoltro diretto. Per eth2 (, maschera , terzo byte ) la rete si ricava da .
E se in (c) il bit DF fosse 0. Il router frammenterebbe: payload B, payload massimo per frammento sulla MTU di eth2 : B, già multiplo di (); frammenti, da , e B (Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →). Con DF invece il pacchetto viene scartato e alla sorgente torna ICMP destination unreachable codice 4 (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 →).
Osservazioni: in (c) la riga avrebbe portato il pacchetto su eth0 (MTU ) e il pacchetto sarebbe passato: è la selezione della rotta più specifica a cambiare l'esito. La riga non c'entra: copre solo da a .
Domanda 2: piano di indirizzamento
Passo 1: dimensione di ogni sottorete ():
| Tipo | Host | Maschera | Host max | |
|---|---|---|---|---|
| () | ||||
| () | ||||
| () | ||||
| collegamento |
Per host servono esattamente indirizzi (): va bene. Le potenze di 2 vengono dal rapporto (Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →): per esempio e ; la maschera è .
Passo 2: allocazione dal più grande, ogni blocco inizia a un multiplo della sua dimensione. Nel il terzo byte conta in unità di : un occupa valori (passo ), un ne occupa , un uno.
| Sottorete | Rete | Broadcast | Host max |
|---|---|---|---|
| (1) | |||
| (2) | |||
| (3) | |||
| (1) | |||
| (2) | |||
| (1) | |||
| (2) | |||
| (3) | |||
| punto-punto |
La soluzione ufficiale usa gli stessi blocchi per i e i (, , , , ), ma colloca i in , , e il collegamento in (con broadcast ): è un piano altrettanto valido, perché i blocchi non si sovrappongono e stanno nel . Quello compatto qui sopra non lascia buchi.
Confronto con la soluzione ufficiale
| Domanda | Mio | Ufficiale |
|---|---|---|
| 1 (a) | nessun inoltro | nessun inoltro |
| 1 (b) | indiretto via eth0 | indiretto via eth0 |
| 1 (c) | scartato | scartato |
| 2 | , uguali; e in posizioni diverse ma valide | in –, in |
Errori comuni
- Non scegliere la rotta più specifica in (c): la riga è la prima, ma vale la che segue.
- In (a), inoltrare con inoltro diretto un pacchetto che rientra dall'interfaccia da cui è arrivato.
- Per host usare ( host): servono indirizzi, quindi .
- Allocare i prima dei : gli allineamenti dei blocchi grandi non sarebbero più rispettati.
- Dimenticare che per host il è giusto al limite ( indirizzi): host non sarebbero entrati.
(Verificato con Python: modulo ipaddress per reti e appartenenza; funzione di inoltro con rotta più specifica, MTU e DF; allocazione dei blocchi senza sovrapposizioni.)
Versione ripasso
- (a) da eth1: rete di eth1, ma ingresso = uscita: nessun inoltro.
- (b) da eth1: solo default, next hop eth0: indiretto.
- (c) , B, DF: riga (più specifica del ), next hop eth2, MTU : scartato.
- Piano ( con host): (, , ), (, ), (, , ), (). (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 →)
- Errore tipico: host in un ; rotta meno specifica.