Recherche
Posez votre question »

Introduction au MTU

Avril 2015


Introduction au MTU




Qu'est ce que le MTU ?


Le Maximum Transmission Unit (MTU) (taille maximum de l'unité de transfert) est un paramètre qui détermine le plus long datagramme pouvant être transmis par une interface IP sans avoir besoin d'être fragmenté en unités plus petites. Le MTU doit être plus grand que le datagramme le plus grand que vous voulez transmettre sans être fragmenté. (Plus simplement, le MTU définit la taille maximale (en octet) du paquet pouvant être transmis en une seule fois.)

Pour l'ethernet, cette valeur doit être de 1500 octets.
Pour les connexions en PPPoE, 1492
Pour le RTC (bas débit), 576

Calculer le MTU


Chaque transmission de trame est définie par le corps (=MMS=maximum segment size) qui défini le plus grand segment d'informations TCP pouvant être transmis, et l'entête (header en anglais).
Soit MTU=MSS + TCP/IP headers
Considérons:

MSS=MTU-40 <-- 40 pour l'entête (20 byte IP et 20 byte TCP)
les paquets ne sont pas fragmentés
pas de paquets perdus

Taille des paquets / vitesse
Soit un transfert d'informations de 1,500,000 bytes utilisant différentes taille de paquets à travers une ligne T1 (rtc) (T1=1,544,000 bits/sec) suivant la formule:

( MSS + header ) * 8 bits/byte
---------------------------------- = latence
1,544,000 bits/sec.

En utilisant différentes valeurs du MTU, on peut calculer la latence de transmission:

Si MTU = 1500, alors: (1460+40) * 8 / 1,544,000 = 7.772 ms
Si MTU = 576, alors: (536+40) * 8 / 1,544,000 = 2.924 ms
Sur 10 boucles, on obtient 77,72 ms pour le MTU à 1500, et 29,24 ms pour le 576.

Pour résumer, plus de paquets il y a, plus long est le transfert ;-)

Utilisons la même formule pour un transfert d'1mb.

1MByte = 1024 KB = 1,048,576 bytes.

Si MTU = 1500, alors: (1460+40) * 8 / 1,544,000 = 7.772 ms
1 MByte / MSS = 1,048,576 bytes / 1460 = 718.2, donc 719 paquets pour transférer 1 MByte.

Soi, pour transferer 1Mbyte: 719 packets * 7.772 ms (toujours par boucle) = 5588.068 ms, ou 5.588 secondes.

Si l'on transfere nos 1 MByte sur 10 boucles (définies par l'entete), cela nous prendra idéalement:

(1er paquets* 10 boucles * 7.772ms delay) + 718 * 7.772 = 5.658 secondes.

Si MTU = 576, alors: (536+40) * 8 / 1,544,000 = 2.924 ms
1 MByte / MSS = 1,048,576 bytes / 536 = 1956.3, donc 1957 paquets pour transferer 1 MByte.

Pour transferer 1 MByte: 1957 packets * 2.924 ms (toujours par boucle)= 5722.268 ms, ou 5.722 secondes par boucle.
Si l'on transfere ces 1 MByte sur 10 boucles:
(1er paquet *10 boucles * 2.924ms) + 1956 * 2.924 = 5.748 sec.

La différence vient du fait que plus la taille des paquets est grande, moins celle de l'entête est importante (relativement ^^)
Donc pour transferer 1Mbyte, si l'on utilise un MTU à 1500 alors il y a 719*40 = 28,760 bytes pour l'entete, tandis que pour le MTU à 576, on obtient 1957*40=78,280, soit plus de 49,520 bytes d'entete transmis a chaque Mbyte. Pour notre exemple de 10 boucles, ce n'est pas considérable, mais sur les transferts quotidien...

De plus, la plupart des modems utilise une entete plus importante, et que nous ne prenons pas en compte dans et exemple d'autres latences pouvant y être associées.

Trouver la valeur du MTU sous Windows


Pour trouver la valeur Maximale MTU, il faut se rendre dans l'invite de commande (Démarrer > Executer > "cmd"). Une fois dans l'invite de commande (page à fond noir), il est necessaire de faire des test de ping, en précisant la taille des paquets à tester :

ping -f -l (taille du paquet -28) (IP de votre serveur)
l'option -f permet de faire le test en obligeant les routeurs rencontrés à ne pas fragmenter le paquet
l'option -l envoie la taille du paquet
On retire 28 à la taille du paquet à tester correspond à l'en-tête de ce paquet
Il faut faire le test vers une IP. Pour un souci de navigation internet, il vaut mieux prendre une adresse web.

Ce qui donne :
ping -f -l 1372 192.168.0.1
- Si la réponse à la requette est :
Réponse de 192.168.0.1 : octets = 1372....
Réponse de 192.168.0.1 : octets = 1372....
Réponse de 192.168.0.1 : octets = 1372....
Réponse de 192.168.0.1 : octets = 1372....

Ici, la taille du paquet permet un transport sans fragmentation, on peut donc tester une valeur plus importante. Lorsqu'on obtient le message : "Le paquet doit être fragmenté, mais paramétré DF", la taille du paquet est trop importante.

Changer le MTU sous Windows


Une fois que vous avez déterminé le MTU optimal, il y a deux manières de modifier la valeur du MTU. Je vous indique ici la plus facile à mettre en oeuvre, via le logiciel Dr TCP

Une fois installer, vous avez une case "MTU", ou il faut indiquer la valeur trouver lors des test sous DOS en rajoutant 28 pour l'entete.

Trouver la valeur du MTU sous Linux


Il suffit de lancer cette commande en root avec nom_interface à remplacer avec le nom de l'interface réseau visée:
ifconfig nom_interface | grep -Eo "MTU:[0-9]+"

Changer le MTU sous Linux


C'est en root avec la commande ifconfig qu'on change le mtu sous Linux avec la syntaxe suivante:
ifconfig nom_interface mtu valeur_mtu

Exemple: mettre le mtu de l'interface eth0 à 1500
ifconfig eth0 mtu 1500

Liens


La MTU est liée à la RFC 791, plus générale sur le protocole IP
En voici une traduction française
Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :
Introduction-au-mtu.pdf

Réalisé sous la direction de , fondateur de CommentCaMarche.net.

A voir également

Dans la même catégorie

Introdução ao MTU
Par pintuda le 13 janvier 2013
Publié par Ohm-WorK. - Dernière mise à jour par christelle.b
Ce document intitulé «  Introduction au MTU  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.