Andrea Beggi

Don't get it wrong just when you could've got it right.

MTU: cos’è e come funziona

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

Tutte le comunicazioni basate su TCP/IP implicano il passaggio di pacchetti che vengono confezionati dagli host partendo dai dati creati dai programmi applicativi e aggiungendo strati su strati durante la discesa del pacchetto verso il livello fisico. Il processo viene descritto tramite il modello a strati del TCP/IP, di cui avevo esposto le linee generali qui.

L’ultimo strato che un pacchetto raggiunge prima di uscire da un host è il network layer, gestito direttamente dall’interfaccia di rete. Mentre gli strati più alti sono sostanzialmente indipendenti dall’hardware e dipendono dal sistema operativo e dalle applicazioni, lo strato della rete è per forza di cose legato all’hardware e al mezzo di trasmissione che utilizza l’host per comunicare, sia esso una rete ethernet, una connessione ADSL PPoE, o un piccione.

La voce italiana di Wikipedia è sufficientemente esaustiva per gli scopi di questo post:

Maximum Transmission Unit (MTU) indica le dimensioni massime in byte di un pacchetto dati che può essere inviato attraverso un protocollo di comunicazione. Tale parametro è di solito associato alle interfacce di comunicazione quali schede di rete o porte seriali. Se un router deve trasmettere un pacchetto su una interfaccia che ha un MTU inferiore alla dimensione del pacchetto, il protocollo Internet effettua automaticamente la frammentazione, ovvero divide il pacchetto in due o più pacchetti più piccoli. I frammenti del pacchetto originale sono contrassegnati, così il protocollo IP di destinazione è 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. … La frammentazione consente a IP di lavorare correttamente su una rete composta di collegamenti con MTU eterogenea, ma è una operazione onerosa per i router e per l’host che riceve i pacchetti frammentati, quindi si cerca di evitarla quando possibile.”

In soldoni: nel caso di una rete ethernet, ad esempio, l’MTU è 1500 byte, ed è la dimensione massima di un “pezzo” coerente di dati che l’interfaccia riesce a immettere sul cavo di rete.

Ciascun tipo di inferfaccia ha il proprio MTU, quindi ne consegue che lungo il cammino che separa due host il valore massimo dell’MTU prima di frammentare un pacchetto, sarà quello dell’interfaccia con MTU più basso. Mi spiego meglio con un esempio: se in una strada che separa due città ci sono tre gallerie che permettono rispettivamente il passaggio di mezzi alti 4, 3 e 5 metri, il carico più alto che posso portare su un camion prima di doverlo dividere, misura 3 metri di altezza. Questo valore massimo è detto MTU path, e se tutte le interfacce coinvolte nel trasferimento dei dati contengono la dimensione dei loro pacchetti sotto questa soglia, si evita la frammentazione. La determinazione di questo valore (MTU path discovery) avviene per mezzo di messaggi ICMP; purtroppo, per limitare gli attacchi di tipo DoS, alcuni router bloccano il traffico ICMP.

“L’RFC 1191 descrive l’MTU path discovery, una tecnica per determinare il cammino MTU tra due host, così che quella frammentazione possa essere evitata. Un host invia pacchetti IP di dimensioni che aumentano gradualmente, con il bit DF (Don’t Fragment — Non Frammentare) settato a “1”. Se un router lungo il cammino ha bisogno di frammentare il pacchetto, ma esso ha il bit DF settato a “1”, il router lo abbandona, e manda un pacchetto ICMP di tipo “datagramma troppo grosso” all’indirizzo sorgente per segnalare il problema. L’host sorgente in questo modo “impara” il più grosso MTU che può passare attraverso quel cammino senza frammentarsi.”

L’MTU è un valore chiave nel tuning della velocità della rete, ma va maneggiato con attenzione: pacchetti grandi aumentano l’efficenza poiché l’overhead diminuisce, ma interfacce non particolarmente veloci potrebbero avere problemi con MTU elevati. Wikipedia inglese fa l’esempio di un pacchetto ethernet con un normale MTU a 1500 byte, il quale impiega circa un secondo (!) a passare per una interfaccia modem a 14,4k.

L’MTU è spesso fonte di problemi in reti complesse e host con parecchie interfacce; non è semplicissimo diagnosticare questi problemi e spesso si procede per via empirica, anche perché l’MTU non è la prima cosa a cui si pensa. Connessioni lente, a “strappi”, velocità non omogenee per diversi applicativi, connessioni che si instaurano con difficoltà a ricevere i dati di ritorno, sono tutti sintomi di un valore MTU non adeguato. Per controllare e modificare l’MTU in ambiente Windows si può usare l’utility gratuita DrTCP , semplicissima da usare: basta selezionare un’interfaccia di rete e impostare l’MTU desierato, ricordandosi di riavviare il computer. (Segnatevi il valore che modificate per ripristinare le cose in caso di malfunzionamenti ancora peggiori.) In Linux si usa il solito ifconfig, ed eventulmente il file /etc/networks/interfaces.

In un prossimo post un esercizio pratico: un MTU discovery fatto “a mano”.

20 Commenti

Emanuele | #

Come sempre, chiaro e preciso.
E poi fa sempre bene un ripasso di reti di calcolatori
Ciao,
Emanuele

Francesco | #

Ciao, mi associo ad Emanuele..complimenti per la grande capacità di sintesi….

mi sbaglio o questo parametro si usa quando ad esempio si ha un firewall/router con due interfaccie connesse ad esempio a due ISP per permettere lo switch tra una e l’altra in caso di bassa velocità?

Antonio | #

Ottima spiegazione: complimenti per la chiarezza! Non è da tutti rendere semplice argomenti come questo.

claudio | #

Ottimo come sempre. Ma la storia del piccione…. non dirmi che qualche pazzo ha studiato davvero la cosa….

mitico comunque

claudio | #

NOOO ci sono caduto
ho letto la data solo adesso….

mamma mia che figuraccia

davidonzo | #

Mi associo ai complimenti di tutti e colgo solo per dire che in caso di provider tipo tele2, con banda per 100 utenti rivenduta a 1000, un abbassamento del parametro permette una migliore navigazione.

A casa base a Modica, dove infaustamente qualcuno ha firmato un contratto proprio con Tele2, abbassando il MTU da 1500 a 1432 riesco finalmente ad usare client ftp senza bestemmiare 🙂

Ivan | #

Complimenti per l’articolo.Molto Chiaro.

Un mio amico aveva problemi,con adsl Infostrada, ad accedere a molti siti(8 su 10!).Mi chiama per aiutarlo.
Contattiamo l’assistenza Infostrata, risponde un sig.ra del call center, gli espongo il problema, mi dice di attendere, confabula con un “esperto” e mi dice: “signore il problema è il modem (mia nota: non è quello infostrada), deve cambiarlo”. Come devo cambiarlo, è possibile che siete sicuri che è il modem? Guardi che altre persone hanno lo stesso problema con altri tipi di modem. “Mi dispiace signore il problema è il modem”.
Ok, allora mi intestardisco, cerco su internet ed ecco la parola chiave MTU….abbassandone il valore risolve molti problemi….INFATTI lo abbasso a 1450 adesso e voilà tutto funziona perfettamente. Grazie Infostrada.

vincenzo tafaro | #

Ciao Andrea, è un piacere essere arrivato nel tuo blog, e ancora di più è un piacere leggerlo..complimenti…per quanto mi rigurda.. se scrivi un libro fammelo sapere…

grazie per il contributo tecnico…

saluti

Valerio | #

Ciao Andrea, grazie prima di tutto per il tempo che dedichi al tuo sito e alle informazioni che rendi disponibili!
il mio EEEPC con Xandros mi fa un po’ impazzire con la connessione wi-fi, anzi rettifico, è TELE 2 che mi fa impazzire: per lavorare “bene” devo impostare il valore MTU a 1432 (diverso dallo Standard TCP/IP che è di 1500), già sperimentato con windows, altrimenti le connessioni a URL del tipo https://….. si bloccano, questo xè da quanto ho capito TELE 2 ha poca banda da dividere tra molti utenti, in sostanza…
ieri sera ho modificato l’ MTU con questa procedura (trovata on-line):
da /bin ho lanciato il programma BASH, mi sono spostato nella directory /sbin e ho dato il comando
sudo ifconfig ath0 mtu 1432 ;
tutto bene navigavo e tutto funzionava, solo che al riavvio l’ eeePC si re-imposta in automatico su 1500…
come posso fare per rendere la modifica dell’ MTU a 1432 permamente…
tieni conto che per la prima volta in vita mia ieri sera (alle 23.45 circa, con le palpebre già in fase calante…) ho utilizzato Linux / l’ eeepc me l’hanno consegnato alle 19.00 ieri)… pertanto se qualcuno avesse una soluzione al mio problema gli sarei infinitamente grato se riuscisse a spiegarmi come risolverlo in modo semplice…
Grazie mille!
Ciao.
valerio

Emidio | #

x Valerio:

devi mettere il comando per il settaggio nei file da esguire all’avvio (il nome della cartella potrebbe variare in base alla versione che hai) del tipo /etc/rc….. un po’ come l’autoexec.bat del vecchio DOS.

———————

x Andrea e tutti gli altri:
COMPLIMENTI.

Emidio.

robuschi laila | #

grazie per l’aiuto avevo problemi di connessione con vista facendo 1492 mtu ho risolto grz !!!!!!!!!!!!!!!!!!!!!!

Victor | #

Ciao Andrea. Ho un problema si mi può dare una mano a risoglverlo.Ho infostrada adsl 8 mb è un modem d-link dsl-g624t che va molto lento quabdo navigo può mettere anche 30-50 secondi a aprire la pagina, scarico con bittorent va a velocita circa 7-8 kb al sec mi può dare una mano risoglvere questa cosa tè ne sarei molto grato.

alex | #

sono in difficoltà con mtu di tiscali che ho scpoerto che mi blocca pacchetti da 1300 a1492 bloccandomi così i pacchetti voce del mio gestore come potri fare secondo voi ad aggirare il preblema ?

Pippo | #

Ottimo! Anche nel 2011 il tuo articolo è sempre attuale.
Ciao

Andrea | #

Son loro che hanno copiato da me.

Fabio | #

Il pesce d’Aprile del piccione è spettacolare!

Salvatore | #

Ho cambiato router wireless su una connessione Tiscali ed ho notato che non fanno alcun riferimento alla configurazione di questo parametro… per quanto variandolo si ottengano velocità di connessione molto, molto differenti. Difficile, in effetti, non procedere per via empirica…