In telecomunicazioni con Maximum Transmission Unit (MTU, lett. "unità massima di trasmissione") si indica la dimensione massima in byte di un pacchetto dati che può essere inviato attraverso un protocollo di comunicazione in una rete di telecomunicazioni. Tale parametro è di solito associato alle interfacce di comunicazione quali schede di rete o porte seriali.
Il concetto di MTU si ripresenta a diversi livelli e assumendo diversi nomi, ma il termine MTU indica propriamente la dimensione massima del pacchetto in IP. IP viene molto spesso trasportato su Ethernet, che ha normalmente uno spazio massimo di 1500 byte per il campo dati, a cui si aggiunge l'intestazione composta da 6 byte per l'indirizzo MAC di destinazione, 6 byte per l'indirizzo MAC sorgente e 2 byte per il campo Ethertype, più 4 byte di cyclic redundancy check in coda al frame, portando la dimensione massima del frame Ethernet a 1518 byte. La MTU tipica su Internet è quindi di 1500 byte. Di questi, 20 sono normalmente occupati dallo header IP. Se viene utilizzato il protocollo TCP, questo occupa normalmente altri 20 byte per i propri header. Il payload (o carico utile) di un pacchetto TCP è quindi tipicamente di 1460 byte. TCP possiede un meccanismo per negoziare il "Maximum Segment Size" (dimensione massima del segmento, o MSS). Normalmente, MSS = MTU - 40.
MTU in IP e frammentazione
[modifica | modifica wikitesto]Quando un host deve trasmettere un pacchetto IP, terrà conto della MTU dell'interfaccia su cui trasmette il pacchetto. Lungo il suo percorso, il pacchetto potrà però incontrare collegamenti con una MTU inferiore, su cui non potrà essere trasmesso come tale. In questi casi, il router IP che deve trasmettere un pacchetto su un'interfaccia che ha un MTU inferiore alla dimensione del pacchetto, effettua automaticamente la frammentazione, ovvero divide il pacchetto in due o più pacchetti più piccoli. I frammenti del pacchetto originale sono contrassegnati in modo che il protocollo IP di destinazione sia in grado di riassemblare i pacchetti nell'originale.
Un qualsiasi router lungo il cammino potrebbe dover frammentare un pacchetto, e l'host di destinazione dovrà ricostruire il pacchetto originale dai frammenti.
Evitare la frammentazione
[modifica | modifica wikitesto]La frammentazione consente a IP di lavorare correttamente su una rete composta di collegamenti con MTU eterogenea, ma è un'operazione onerosa per i router e per l'host che riceve i pacchetti frammentati, quindi si cerca di evitarla quando possibile.
Viene detto "MTU del percorso" il più piccolo MTU di uno qualsiasi dei collegamenti che compongono il "percorso" dall'indirizzo della fonte a quello di destinazione. Visto in un altro modo, l'MTU del percorso è il più grosso valore dell'MTU che può attraversare il percorso senza essere ulteriormente frammentato.
L'RFC 1191 descrive "La scoperta dell'MTU del percorso" (in inglese "Path MTU Discovery", o più brevemente "PMTUD"), una tecnica per determinare l'MTU del percorso tra due host IP, così che quella frammentazione possa essere evitata. Un host invia inizialmente un pacchetto IP della dimensione corrispondente alla MTU locale con il bit DF (Don't Fragment --- Non Frammentare) settato a uno. Se un router lungo il percorso ha bisogno di frammentare il pacchetto, ma questo ha il bit DF a uno, il router lo abbandona, e manda un pacchetto ICMP di tipo "datagramma troppo grosso" all'indirizzo sorgente per segnalare il problema. Nel pacchetto ICMP è indicato anche l'MTU del link che ha causato l'abbandono. Questa operazione viene ripetuta finché il pacchetto non giunge a destinazione. L'host sorgente in questo modo "impara" il più grosso MTU che può passare attraverso quel percorso senza frammentarsi. L'operazione può essere eventualmente ripetuta se il percorso stesso viene modificato.
Sfortunatamente un numero crescente di reti bloccano tutto il traffico ICMP (per esempio come misura preventiva per gli attacchi Denial-Of-Service e per evitare il network discovery) e questo impedisce la scoperta dei passaggi senza frammentazione dell'MTU. Il sintomo di questa situazione è che una connessione funziona fino a quando deve trasmettere pacchetti di piccole dimensioni, ma si blocca quando viene inviato un grosso blocco di dati, che viene diviso in pacchetti di dimensione massima (per esempio con IRC un client potrebbe vedere fino al "nospoof ping" ma non ottenere risposta dopo di esso, poiché il grosso numero di messaggi di benvenuto blocca la connessione).
Ad esempio, sulle moderne reti ethernet LAN, l'MTU è di 1500 byte. Sistemi come il PPPoE lo riducono, rendendo necessaria la scoperta dell'MTU ideale per il percorso, con la possibilità di rendere inaccessibili i siti che si trovino dietro ad un firewall mal configurato.
In questi casi una soluzione spesso adottata è la modifica in transito dell'MSS dei pacchetti TCP. Questa funzionalità è presente in molti router, e andrebbe idealmente configurata sui router a cui è connesso il collegamento di MTU inferiore. Si tratta di un'operazione che modifica il contenuto di un pacchetto in transito (TCP fa parte del payload di IP, e quindi non dovrebbe essere modificato da un router IP), e quindi viola il principio di semplicità e di comunicazione end-to-end di Internet. Inoltre, risolve il problema solo per TCP, non per UDP (che non ha un analogo della MSS) o altri protocolli di trasporto.
Un'altra soluzione meno elegante e subottimale è abbassare la MTU sulle interfacce degli host o dei router per portarle a pari con la "MTU del percorso".
Bibliografia
[modifica | modifica wikitesto]- (EN) RFC 1191 — Path MTU Discovery, su datatracker.ietf.org, Internet Engineering Task Force.
- (EN) RFC 879 — The TCP Maximum Segment Size and Related Topics, su datatracker.ietf.org, Internet Engineering Task Force.
Voci correlate
[modifica | modifica wikitesto]Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Denis Howe, Maximum Transmission Unit, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- (EN) Scoprire l'MTU di cammino e filtraggio ICMP, su alive.znep.com. URL consultato l'8 dicembre 2005 (archiviato dall'url originale il 26 agosto 2011).
- (EN) Dimensioni MTU di default, su tech-faq.com.
- (EN) Come impostare il valore MSS nel TCP con iptables, su iptables-tutorial.frozentux.net. URL consultato l'8 dicembre 2005 (archiviato dall'url originale il 1º dicembre 2005).
- (EN) Come scoprire il valore di MTU tramite il ping e come settarlo in Windows