Introduction au MTU

Novembre 2017


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

en ligne de commande:

pour le protocole ipv4
netsh interface ipv4 show interfaces
pour le protocole ipv6
netsh interface ipv6 show interfaces

Changer le MTU sous Windows

En ligne de commande mode administrateur:
pour passer à 1400:
1/ relever l'index de l'interface concernée dans la commande ci dessus (netsh interface ipvx show interfaces)
2/ si 10 est l'index par exemple
netsh interface ipv4 set interface 10 mtu=1400
le système doit répondre OK
remplacer ipv4 par ipv6 pour ipv6
vérifier la prise en compte.

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

A voir également


Publié par Ohm-WorK.
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.