Esercizio - piano di indirizzamento e inoltro con MTU (tema d'esame)
In questa pagina 5
Testo (simulazione d'esame 2, esercizio 2). Un router ha la seguente configurazione.
| interfaccia | indirizzo IP | maschera | MTU [B] |
|---|---|---|---|
| eth0 | |||
| eth1 | |||
| WiFi0 |
| rete | maschera | prossimo salto |
|---|---|---|
(Nel testo l'ultima maschera della terza riga è scritta , refuso per .)
- Indicare come vengono trattati i pacchetti con le seguenti destinazioni: se si usa inoltro diretto o indiretto (nel caso indiretto, prossimo salto e interfaccia di uscita), se e perché il pacchetto viene scartato, e in caso di frammentazione quanti frammenti vanno inviati.
- da WiFi0; dimensione B, bit Don't Fragment , TTL .
- da eth1; B, DF , TTL .
- da eth0; B, DF , TTL .
- da eth1; B, DF , TTL .
- da eth0; B, DF , TTL .
- da eth0; B, DF , TTL .
- L'amministratore della rete vuole partizionarla per: sottorete da host; da ; da ; da ; collegamento punto-punto. Definire un piano di indirizzamento con indirizzi, maschere, broadcast diretto e massimo numero di host.
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), 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 → (MTU, bit DF, TTL), 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 →, 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 →.
Punto 1: preparazione
Reti delle interfacce (indirizzo AND maschera, sul byte di confine):
| interfaccia | calcolo | rete |
|---|---|---|
| eth0 | : terzo byte resta | (–) |
| eth1 | : terzo byte | (–) |
| WiFi0 |
La tabella di instradamento contiene già indirizzi di rete. I prossimi salti sono su interfacce note: WiFi0; ha terzo byte : eth0; ha terzo byte , tra e : eth1.
Come si leggono le maschere (AND bit a bitAND vale 1 solo se entrambi i bit valgono 1Algebra di Boole e porte logiche → sul byte di confine, cioè il terzo): è un (, due bit di rete nel terzo byte, quindi blocchi di valori: –, –, –, –); è un (, blocchi di valori); è un (, blocchi di valori); è un . Esempio con il terzo byte del pacchetto 2: con la maschera () il risultato è , e la rete della riga è : diverso, no; con la () il risultato è ancora contro della riga: diverso, no; con la () il risultato è , uguale al della riga: combacia. Per questo il pacchetto 2 va sulla riga .
Procedura per ogni pacchetto. (1) Si controlla l'inoltro diretto: la destinazione appartiene alla rete di una delle interfacce? (2) Altrimenti si scorre la tabella dalla maschera più lunga (, poi , , , ): vale il primo match. (3) Si trova l'interfaccia che contiene il prossimo salto. (4) Si verifica TTL (decrementato di ; se arriva a si scarta) e MTU (se il pacchetto è più grande: con DF si scarta, con DF si frammenta).
I sei pacchetti
1. da WiFi0 (500 B, DF, TTL). Nessuna interfaccia ha rete con primo byte : inoltro indiretto. Nella tabella solo la rotta di default () contiene l'indirizzo. Prossimo salto , interfaccia eth1. MTU di eth1 : nessuna frammentazione; TTL diventa . Il pacchetto viene inoltrato.
2. da eth1 (18 000 B, DF, TTL). Diretto: , diverso da , e : no. Indiretto, tabella: la riga () dà no; la riga () dà no; la riga () dà : match. Prossimo salto eth0. TTL : ancora valido. MTU di eth0 e DF: si frammenta. Payload byte; ogni frammento porta al massimo byte (multiplo di : ✓). Numero di frammenti : frammenti da byte () più uno da byte (lunghezza totale B, offset ; MF). Gli offset dei primi sono (multipli di ), MF.
3. da eth0 (180 B, DF, TTL). Diretto no (le tre reti non lo contengono: ad eth0 corrisponde ). Tabella: riga no (), riga no, riga sì (). Prossimo salto su eth0. Non viene inoltrato, per due motivi indipendenti: (a) con TTL il router lo decrementa a e lo scarta, rispondendo alla sorgente con un messaggio ICMP Time Exceeded (tipo , codice , 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 →); (b) l'interfaccia di uscita (eth0) coincide con quella di arrivo: il pacchetto tornerebbe nella rete da cui è venuto. La soluzione ufficiale scrive solo "no forwarding".
4. da eth1 (200 B, DF, TTL). È esattamente l'indirizzo dell'interfaccia eth0 del router: consegnato ai livelli superiori del router stesso, nessun inoltro.
5. da eth0 (400 B, DF, TTL). Diretto: con eth0 (): , no; con eth1 (): , match. L'indirizzo è l'ultimo della rete (): è il broadcast diretto di quella rete. Soluzione ufficiale: inoltro diretto attraverso eth1 (MTU , nessuna frammentazione, TTL ); un router moderno di norma blocca i broadcast diretti.
6. da eth0 (1200 B, DF, TTL). Diretto no. Tabella: riga () dà no; riga (): match. Prossimo salto WiFi0, MTU . Con DF non si può frammentare: il pacchetto viene scartato e alla sorgente torna un ICMP Destination Unreachable codice ("fragmentation needed and DF set") con l'MTU del salto successivo (): 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 →.
| # | destinazione | arrivo | tipo di inoltro | uscita | esito |
|---|---|---|---|---|---|
| 1 | WiFi0 | indiretto (default), NH | eth1 | inoltrato, TTL | |
| 2 | eth1 | indiretto (), NH | eth0 | frammentato in | |
| 3 | eth0 | indiretto (), NH | eth0 | scartato (TTL) | |
| 4 | eth1 | indirizzo del router | — | consegnato localmente | |
| 5 | eth0 | diretto (broadcast di eth1) | eth1 | inoltrato | |
| 6 | eth0 | indiretto (), NH | WiFi0 | scartato (DF, MTU ) |
Punto 2: piano di indirizzamento di
Il blocco ha bit di host, quindi indirizzi, da a (il terzo byte va da a ). Regola 3: dal blocco più grande al più piccolo. Per ogni gruppo , con (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 →): (), (), (), ().
| richiesta | prefisso | rete | broadcast | host | ||
|---|---|---|---|---|---|---|
| (1ª) | ||||||
| (2ª) | ||||||
| (1ª) | ||||||
| (2ª) | ||||||
| (3ª) | ||||||
| (1ª) | ||||||
| (2ª) | ||||||
| (3ª) | ||||||
| punto-punto |
Le maschere sono (), (), (), (), (). Totale usato indirizzi su ; l'ultimo indirizzo assegnato è e restano liberi – ( indirizzi).
Il grafico mostra come il terzo byte (–) viene riempito; le larghezze sono proporzionali agli indirizzi occupati (il è appena visibile).
Grafico interattivo: Blocco 131.175.32.0/19: terzo byte da 32 a 63 e sottoreti assegnate
Controllo allineamento: è multiplo di (terzo byte, per un ); multipli di (); e multipli di e . Un solo perché per un collegamento punto-punto servono host: con bit di host si avrebbero host.
Confronto con la soluzione ufficiale
- Punto 1: tutti gli esiti coincidono (inoltri su eth1, eth0, eth0 senza forwarding, consegna locale, diretto su eth1, scarto per DF). Sul pacchetto la soluzione calcola frammenti dividendo la lunghezza totale per ; il conto esatto è : stesso risultato.
- Punto 2: coincide in tutti i blocchi (, , , , , , , , , ). Il simulatore Python (modulo
ipaddress) ha riprodotto i sei percorsi di inoltro.
Errori comuni
- Dimenticare di sottrarre i byte di intestazione prima di dividere per (o di sottrarli due volte).
- Frammentare con DF (va scartato).
- Fermarsi alla prima riga della tabella che corrisponde invece di cercare la maschera più lunga.
- Considerare solo TTL o solo interfaccia nel pacchetto .
- Assegnare gli indirizzi senza ordinare per dimensione (violazione dell'allineamento).
Versione ripasso
Dati. Router: eth0 (, MTU ), eth1 (, ), WiFi0 (MTU ). Tabella: e e (WiFi0); (eth0, terzo byte ); default (eth1, terzo byte ).
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 →, 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 →): diretto? tabella dalla maschera più lunga interfaccia del prossimo salto TTL (: scarto) e MTU (DF scarto, DF frammenta).
Punto 1.
| # | pacchetto | ragionamento | esito |
|---|---|---|---|
| 1 | , WiFi0, B, DF | solo default, NH , eth1, | inoltrato, TTL |
| 2 | , eth1, B, DF, TTL | riga , NH , eth0; | frammenti |
| 3 | , eth0, TTL | riga , uscita eth0 | scartato |
| 4 | , eth1 | indirizzo di eth0 | consegna locale |
| 5 | , eth0, TTL | broadcast diretto di , eth1 | inoltrato, TTL |
| 6 | , eth0, B, DF | riga , NH , WiFi0, MTU | scartato |
Pacchetto 2: payload B, frammento massimo B (), : più uno da B (offset , MF). Pacchetto 3: TTL (ICMP tipo ) e uscita uguale all'ingresso. Pacchetto 6: ICMP codice con MTU (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 →).
| richiesta | reti | host | |
|---|---|---|---|
| , | |||
| , | , | ||
| , | , , | ||
| , | , , | ||
| punto-punto | , | (bcast ) |
Usati indirizzi su .
Errori: dividere per senza togliere l'header; frammentare con DF; prima riga che combacia invece del prefisso più lungo; nel pacchetto 3 considerare solo TTL o solo interfaccia.