Esercizio - Inoltro di quattro pacchetti, rete da 1014 host e sottoreti da 34 nodi
In questa pagina 5
Testo (tema d'esame, sessione di settembre, 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 eth0, B, DF; (c) da eth0, B, DF; (d) da eth1, B, DF (se serve frammentazione, quanti frammenti).
- L'amministratore della rete con maschera vuole una sottorete per una rete precedente di host: indirizzo e maschera, broadcast diretto, massimo numero di host.
- (Facoltativo) Quante sottoreti da nodi stanno nella sottorete del punto precedente, e con quale maschera?
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 quattro pacchetti
Reti delle interfacce (ultimo byte AND ):
- eth0: (–);
- eth1: (–);
- eth2: .
Interfaccia di ogni prossimo salto: eth1 (); e eth0; eth2.
Cosa copre ogni riga: : –; : –; : ; : –; : ; : ; (maschera ): da a .
| Pacchetto | Analisi | Esito | |
|---|---|---|---|
| (a) | da eth1, B, DF | è nella rete di eth0 (–) | inoltro diretto via eth0; |
| (b) | da eth0, B, DF | non è nella rete di eth0 (); la riga (–) lo contiene, prossimo salto eth1 | inoltro indiretto via eth1; |
| (c) | da eth0, B, DF | è fuori da (–); nessun'altra riga; vale la default, prossimo salto eth2 | inoltro indiretto via eth2; |
| (d) | da eth1, B, DF | non è in né in (–): default, eth2; , DF | inoltro indiretto via eth2, frammenti |
Verifica riga per riga (algoritmo di 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 →: prima le interfacce, poi la tabella dalla maschera più lunga; l'AND si fa bit a bitAND vale 1 solo se entrambi i bit valgono 1Algebra di Boole e porte logiche → solo sul byte di confine, gli altri byte con maschera restano e con si azzerano).
- (c) . Interfacce: eth0 ha rete (il terzo byte ), eth1 (), eth2 : nessun inoltro diretto. Tabella, righe (maschera , byte di confine l'ultimo, ): , che non è né , né , né (l'unica con il terzo byte giusto, ma ). Righe (terzo byte da confrontare): , , . Riga (maschera , ): . Nessuna riga specifica corrisponde, quindi vale la default.
- (d) . Stesso schema: nessuna interfaccia; righe : i terzi byte non sono ; righe : ; riga : (il blocco copre i terzi byte da a ). Default eth2.
- (b) . Interfacce: l'AND con dà (perché ), diverso dalla rete di eth0 (): nessun inoltro diretto. La prima riga con maschera più lunga che corrisponde è ( ✓): prossimo salto .
Frammenti di (d). Intestazione B, payload B. La MTU di eth2 è B (l'MTU che conta è quella dell'interfaccia di uscita, eth2), quindi il payload massimo per frammento è B, ma deve essere multiplo di (l'offset conta blocchi da 8 byte: 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 →): , per difetto blocchi, cioè . frammenti (per eccesso: anche un frammento parziale conta): venti da B (payload ) e uno con payload B, cioè B. (Con non multiplo di il conto darebbe , comunque .)
Domanda 2: rete da host
Servono indirizzi più rete e broadcast: (), quindi bit di host (: 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 →) e maschera , cioè (due byte pieni, , più uni nel terzo byte: ). La rete con maschera ha bit di host: ne bastano .
- Indirizzo di rete: (il primo blocco da indirizzi);
- Broadcast diretto: (il passo è nel terzo byte: );
- Massimo numero di host: .
Domanda 3: sottoreti da nodi
(): bit di host, maschera (), host ciascuna. Nel (host a bit) restano bit di sottorete, che numerano sottoreti (controllo sugli indirizzi: ), cioè , , , .
Confronto con la soluzione ufficiale
| Domanda | Mio | Ufficiale |
|---|---|---|
| (a) | diretto via eth0 | diretto via eth0 |
| (b) | indiretto via eth1 | indiretto via eth1 |
| (c) | indiretto via eth2 | indiretto via eth2 |
| (d) | indiretto via eth2, frammenti | indiretto via eth2, frammenti |
| 2 | , bc , host | uguale |
| 3 | sottoreti | sottoreti |
Tutto coincide.
Errori comuni
- In (a) cercare nella tabella prima di controllare le reti delle interfacce: l'ordine corretto è prima l'inoltro diretto, poi la tabella.
- In (b), rispondere "diretto": sembra vicino a eth0 ma è nella metà bassa (–), mentre eth0 copre la metà alta.
- Scegliere per (d) la riga confondendo con –: la maschera copre solo da a nel terzo byte.
- Per host usare ( host): troppi indirizzi; il più piccolo blocco che basta è .
- Dividere i frammenti con senza controllare il multiplo di .
(Verificato con Python: modulo ipaddress per reti, appartenenza e broadcast; funzione di inoltro con rotta più specifica, MTU e DF.)
Versione ripasso
- (a) : rete di eth0, diretto. (b) : riga , next hop eth1, indiretto. (c) : default, eth2. (d) , B, DF: default, eth2, frammenti.
- host: : , broadcast , host.
- Sottoreti da nodi: ; . (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: prima le interfacce, poi la tabella; payload dei frammenti multiplo di .