Salta al contenuto
Note per Studenti Esercizio - Inoltro di tre pacchetti e piano di indirizzamento di un blocco 13.14.0.0-16

Esercizio - Inoltro di tre pacchetti e piano di indirizzamento di un blocco 13.14.0.0-16

Esame
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
13.14.0.013.14.0.0 255.255.0.0255.255.0.0 131.175.18.23131.175.18.23
13.25.16.013.25.16.0 255.255.255.0255.255.255.0 131.180.204.19131.180.204.19
13.15.0.013.15.0.0 255.255.0.0255.255.0.0 131.175.19.1131.175.19.1
13.14.15.013.14.15.0 255.255.255.0255.255.255.0 131.180.204.21131.180.204.21
13.14.16.013.14.16.0 255.255.255.192255.255.255.192 131.175.19.23131.175.19.23
0.0.0.00.0.0.0 0.0.0.00.0.0.0 131.175.18.57131.175.18.57
Interfaccia Indirizzo Maschera MTU
eth0 131.175.18.54131.175.18.54 255.255.255.0255.255.255.0 15001500
eth1 131.175.19.32131.175.19.32 255.255.255.192255.255.255.192 15001500
eth2 131.180.204.2131.180.204.2 255.255.192.0255.255.192.0 500500
  1. Come sono trattati: (a) 131.175.19.48131.175.19.48 da eth1, 180180 B, DF=1=1; (b) 131.175.19.160131.175.19.160 da eth1, 180180 B, DF=1=1; (c) 13.14.15.2413.14.15.24 da eth0, 12001200 B, DF=1=1 (se serve frammentazione, quanti frammenti).
  2. L'amministratore della rete 13.14.0.0/1613.14.0.0/16 la vuole suddividere in: 22 sottoreti da 510510 host; 33 da 12001200 host; 33 da 230230 host; 11 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: 131.175.18.54/24⇒131.175.18.0/24131.175.18.54/24\Rightarrow131.175.18.0/24;
  • eth1: 131.175.19.32/26⇒131.175.19.0/26131.175.19.32/26\Rightarrow131.175.19.0/26 (indirizzi .19.0.19.0–.19.63.19.63; 3232 AND 192=0192=0);
  • eth2: 131.180.204.2/18131.180.204.2/18: 204 AND 192=192204\ \text{AND}\ 192=192, quindi 131.180.192.0/18131.180.192.0/18 (.192.0.192.0–.255.255.255.255).

Interfaccia di uscita di ogni prossimo salto (quella la cui rete lo contiene): 131.175.18.23131.175.18.23 e .18.57→.18.57\to eth0; 131.175.19.1131.175.19.1 e .19.23→.19.23\to eth1; 131.180.204.19131.180.204.19 e .204.21→.204.21\to eth2 (204.x204.x sta in 192192–255255).

Pacchetto Analisi Esito
(a) 131.175.19.48131.175.19.48 da eth1, 180180 B, DF=1=1 19.4819.48 rientra in 131.175.19.0/26131.175.19.0/26, la rete di eth1: sarebbe un inoltro diretto verso eth1, ma il pacchetto arriva da eth1 nessun inoltro
(b) 131.175.19.160131.175.19.160 da eth1, 180180 B, DF=1=1 160160 è fuori da 19.0/2619.0/26 (00–6363); non è una rete delle altre interfacce; le righe sono tutte 13.x.x.x13.x.x.x: resta la default, prossimo salto 131.175.18.57131.175.18.57 inoltro indiretto via eth0; 180≤1500180\le1500
(c) 13.14.15.2413.14.15.24 da eth0, 12001200 B, DF=1=1 righe che lo contengono: 13.14.0.0/1613.14.0.0/16 e 13.14.15.0/2413.14.15.0/24; vince la più specifica, /24/24, prossimo salto 131.180.204.21131.180.204.21 (eth2); MTU eth2 =500<1200=500<1200 e DF=1=1 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 255.255.255.192255.255.255.192, byte 192=11000000192=11000000; 48=00110000→00000000=048=00110000\to00000000=0, rete 131.175.19.0131.175.19.0, uguale a quella di eth1 (32=00100000→032=00100000\to0). Per (b) 160=10100000→10000000=128160=10100000\to10000000=128, rete 131.175.19.128≠131.175.19.0131.175.19.128\ne131.175.19.0: non appartiene a eth1; con eth0 (/24/24) il terzo byte 19≠1819\ne18 e con eth2 il secondo byte 175≠180175\ne180: nessun inoltro diretto. Per eth2 (/18/18, maschera 255.255.192.0255.255.192.0, terzo byte 192=11000000192=11000000) la rete si ricava da 204=11001100→11000000=192204=11001100\to11000000=192.

E se in (c) il bit DF fosse 0. Il router frammenterebbe: payload 1200−20=11801200-20=1180 B, payload massimo per frammento sulla MTU di eth2 500500: 500−20=480500-20=480 B, già multiplo di 88 (480=8⋅60480=8\cdot60); ⌈1180/480⌉=3\lceil1180/480\rceil=3 frammenti, da 480480, 480480 e 1180−960=2201180-960=220 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=1=1 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 /16/16 avrebbe portato il pacchetto su eth0 (MTU 15001500) e il pacchetto sarebbe passato: è la selezione della rotta più specifica a cambiare l'esito. La riga 13.14.16.0/2613.14.16.0/26 non c'entra: copre solo da 16.016.0 a 16.6316.63.

Domanda 2: piano di indirizzamento

Passo 1: dimensione di ogni sottorete (2b≥host+22^b\ge\text{host}+2):

Tipo Host bb Maschera Host max
3×12003\times1200 12001200 1111 (1202≤20481202\le2048) /21/21 20462046
2×5102\times510 510510 99 (512≤512512\le512) /23/23 510510
3×2303\times230 230230 88 (232≤256232\le256) /24/24 254254
11 collegamento 22 22 /30/30 22

Per 510510 host servono esattamente 512512 indirizzi (510+2510+2): /23/23 va bene. Le potenze di 2 vengono dal rapporto b=⌈log⁡2(host+2)⌉b=\lceil\log_2(\text{host}+2)\rceil (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 log⁡21202=10,23→11\log_2 1202=10{,}23\to11 e log⁡2232=7,86→8\log_2 232=7{,}86\to8; la maschera è 32−b32-b.

Passo 2: allocazione dal più grande, ogni blocco inizia a un multiplo della sua dimensione. Nel /16/16 il terzo byte conta in unità di 256256: un /21/21 occupa 88 valori (passo 88), un /23/23 ne occupa 22, un /24/24 uno.

Sottorete Rete Broadcast Host max
12001200 (1) 13.14.0.0/2113.14.0.0/21 13.14.7.25513.14.7.255 20462046
12001200 (2) 13.14.8.0/2113.14.8.0/21 13.14.15.25513.14.15.255 20462046
12001200 (3) 13.14.16.0/2113.14.16.0/21 13.14.23.25513.14.23.255 20462046
510510 (1) 13.14.24.0/2313.14.24.0/23 13.14.25.25513.14.25.255 510510
510510 (2) 13.14.26.0/2313.14.26.0/23 13.14.27.25513.14.27.255 510510
230230 (1) 13.14.28.0/2413.14.28.0/24 13.14.28.25513.14.28.255 254254
230230 (2) 13.14.29.0/2413.14.29.0/24 13.14.29.25513.14.29.255 254254
230230 (3) 13.14.30.0/2413.14.30.0/24 13.14.30.25513.14.30.255 254254
punto-punto 13.14.31.0/3013.14.31.0/30 13.14.31.313.14.31.3 22

La soluzione ufficiale usa gli stessi blocchi per i /21/21 e i /23/23 (13.14.0.013.14.0.0, 8.08.0, 16.016.0, 24.024.0, 26.026.0), ma colloca i /24/24 in 13.14.32.013.14.32.0, 33.033.0, 34.034.0 e il collegamento in 13.14.35.0/3013.14.35.0/30 (con broadcast 13.14.35.313.14.35.3): è un piano altrettanto valido, perché i blocchi non si sovrappongono e stanno nel /16/16. 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 /21×3/21\times3, /23×2/23\times2 uguali; /24/24 e /30/30 in posizioni diverse ma valide /24/24 in 32.032.0–34.034.0, /30/30 in 35.035.0

Errori comuni

  • Non scegliere la rotta più specifica in (c): la riga 13.14.0.0/1613.14.0.0/16 è la prima, ma vale la /24/24 che segue.
  • In (a), inoltrare con inoltro diretto un pacchetto che rientra dall'interfaccia da cui è arrivato.
  • Per 12001200 host usare /22/22 (10221022 host): servono 12021202 indirizzi, quindi /21/21.
  • Allocare i /24/24 prima dei /21/21: gli allineamenti dei blocchi grandi non sarebbero più rispettati.
  • Dimenticare che per 510510 host il /23/23 è giusto al limite (512512 indirizzi): 511511 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

Dati. Reti delle interfacce: eth0 131.175.18.0/24131.175.18.0/24, eth1 131.175.19.0/26131.175.19.0/26, eth2 131.180.192.0/18131.180.192.0/18 (MTU 15001500, 15001500, 500500). (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 →)

Lezioni in cui compare

Teoria collegata