C'est quoi ?
TrĂšs bonne question ! Maximum Transmission Unit, en français, l'UnitĂ© de Transmission Maximale est la taille maximale d'un paquet IP pouvant ĂȘtre routĂ© et transmis en une seule fois. Par dĂ©faut, elle est Ă©gale Ă 1500 octets. Il y a donc 1480 octets possible dans le champ payload (donnĂ©es) dans un paquet IP (car entĂȘte IP = 20 octets).
Il existe un autre terme : MSS qui lui correspond Ă la taille maximale du champ donnĂ©es dans TCP (MTU - entĂȘte IP - entĂȘte TCP = 1500 - 20 - 20 = 1460 dans la plupart des cas).
Ok mais encore ?
Prenons exemple d'une communication entre 2 terminaux, PC1 et PC2 sont dans le mĂȘme subnet : 192.168.1.0/24. Lançons un ping avec 1500 octets de donnĂ©es et observons la trame dans wireshark.
Router#ping 192.168.1.1 size 1500
Type escape sequence to abort.
Sending 5, 1500-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 3/5/11 ms

Pas de fragmentation car la MTU est 1500 octets et on a fabriqué un paquet avec une taille de 1500.
Si on lance un ping avec une taille de 9000 :

Le ping a Ă©tĂ© fragmentĂ© en plusieurs paquets avec 1480 d'octets de donnĂ©es ICMP (1480 car 1500 - entĂȘte IP = 1480). C'est d'ailleurs pour cela que le dernier paquet a une taille de 120 octets dans l'entĂȘte IP. (les 100 derniers octets + entĂȘte IPv4).
Essayons de lancer un ping avec une MTU plus grande que 1500 octets tout en précisant qu'il ne faut pas fragmenter :
Router#ping 192.168.1.1 df-bit size 1501
Type escape sequence to abort.
Sending 5, 1501-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
Packet sent with the DF bit set
.....
Success rate is 0 percent (0/5)
Le ping échoue ! Et pourquoi cela enfaite ?
La MTU est par dĂ©faut Ă 1500. Cela veut dire qui si on forge un paquet supĂ©rieur Ă 1500 octets et sans la possibilitĂ© d'ĂȘtre fragmentĂ© alors il est jetĂ© ! Il n'y a mĂȘme pas de trame sur wireshark car elle est jetĂ©e avant mĂȘme de traverser l'interface.
Un petit schéma sous paint ? (avouez qu'il est beau)

Toutefois, on peut augmenter manuellement la MTU sur une interface et c'est ça qui va nous intéresser ! Pourquoi ?
Si on rajoute des entĂȘtes d'autres protocoles, comme VXLAN, forcĂ©ment ca va impacter sur cette MTU.
Par exemple, pour le PPPoE, il a une entĂȘte de 8 octets, donc la MTU va ĂȘtre Ă©gale Ă 1500 - 8 = 1492. On peut traduire ce terme technique en : le PPPoE va "prendre" 8 octets de la MTU pour venir se greffer dans la trame. La MSS va ĂȘtre aussi diminuĂ©e de 8.

Pour le VXLAN, c'est un peu diffĂ©rent car l'entĂȘte se situe aprĂšs le paquet IP. Avec ce protocole, l'entĂȘte va "prendre" 70 octets sur les 1500. (40 octets car on encapsule avec l'IPv6, 8 pour l'UDP, 8 pour VXLAN et pour finir 14 pour l'Ethernet). Si on avait encapsulĂ© VXLAN dans de l'IPv4, l'entĂȘte aurait pris 20 octets de moins donc 50 octets.

Outch, beaucoup d'entĂȘte lĂ ? Imaginons si en plus du VXLAN, on rajoute PPPoE, MPLS, etc, on n'est pas sorti de l'auberge !
Par conséquent, il faut toujours bien dimensionner la MTU au besoin. Si pas assez grande, problÚme de débit, accessibilité à certains site web par exemple, etc.
Mais alors comment faire ? Ca serait beaucoup mais beaucoup trop chiant de calculer pour chaque interface la MTU nan ?
On est des fainéants (et surtout intelligent) ! Maintenant, la plupart des équipements (du moins prévu dans une utilisation datacenter) supportent la jumbo frame (trame géante, pourquoi ça fait toujours moins classe de le dire en français ?). Jumbo Frame = +9000 octets MTU.
Nickel ! Peut importe les entĂȘtes ajoutĂ©es, le paquet ne dĂ©passera JAMAIS 9000 octets. Et en plus le temps de traitement sera moindre vu qu'il y aura moins de paquets.
Bon, réglons notre problÚme de MTU dans notre fabric !
ProblÚme et résolution
Il faut savoir que par défaut, sur une interface L2, Arista met la MTU à 9214 ! Donc on aura pas de problÚme sur ces interfaces ! Déjà ça de moins.
Leaf1-B1#sh int eth10 | i MTU
Ethernet MTU 9214 bytes, BW 1000000 kbit
Bon allez, lançons un ping entre les 2 LNS et voyons voir la MTU est de combien :
LNS2#ping 100.64.0.1 df-bit size 1430
Type escape sequence to abort.
Sending 5, 1430-byte ICMP Echos to 100.64.0.1, timeout is 2 seconds:
Packet sent with the DF bit set
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/11/17 ms
LNS2#ping 100.64.0.1 df-bit size 1431
Type escape sequence to abort.
Sending 5, 1431-byte ICMP Echos to 100.64.0.1, timeout is 2 seconds:
Packet sent with the DF bit set
.....
Success rate is 0 percent (0/5)
La MTU est donc de 1430 octets dans la fabric ! 1500 - entĂȘte VXLAN = 1500 - 70 = 1430. Il doit avoir encore des interfaces avec une MTU de 1500. Voyons voir lesquelles :
Leaf1-B1#sh int eth1 | i MTU
IP MTU 1500 bytes (default), BW 1000000 kbit
Donc la MTU sur les interfaces L3 (Arista et Cisco) est par défaut 1500 ! Allez changeons donc ça sur ces interfaces :
- Interco Leaf/Spine
- Interco vlan iBGP Leaf
- Interfaces L3 Cisco
Enfaite, sur toutes les interfaces L3 sauf le vlan peer-link (qui sert juste à établir le peer-link mais les informations passent par le port-channel qui est L2). Bon allez, appliquons la MTU :
Leaf1-B1#sh run int eth1
interface Ethernet1
mtu 9214
no switchport
ipv6 enable
LNS2#sh run int po10
interface Port-channel10
mtu 9214
no ip address
no negotiation auto
no mop enabled
no mop sysid
end
Maintenant, ça devrait fonctionner nan ? Testons !
LNS2#ping 100.64.0.1 df-bit size 9000
Type escape sequence to abort.
Sending 5, 9000-byte ICMP Echos to 100.64.0.1, timeout is 2 seconds:
Packet sent with the DF bit set
.....
Success rate is 0 percent (0/5)
LNS2#ping 100.64.0.1 df-bit size 2030
Type escape sequence to abort.
Sending 5, 2030-byte ICMP Echos to 100.64.0.1, timeout is 2 seconds:
Packet sent with the DF bit set
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 7/8/10 ms
LNS2#ping 100.64.0.1 df-bit size 2031
Type escape sequence to abort.
Sending 5, 2031-byte ICMP Echos to 100.64.0.1, timeout is 2 seconds:
Packet sent with the DF bit set
.....
Success rate is 0 percent (0/5)
ENCORE ????? Mais c'est quoi le problĂšme maintenant ? .............................. AprĂšs recherche, il semblerait que la NIC (vmxnet3) du CSR 1000V ne peut pas dĂ©passer 2100 de MTU (donc 2100 - entĂȘte VXLAN IPv6 = 2100 - 70 = 2030)
Mettons à 2000 la MTU comme ça, il n'y aura pas de problÚmes :
LNS2#ping 100.64.0.1 df-bit size 2000
Type escape sequence to abort.
Sending 5, 2000-byte ICMP Echos to 100.64.0.1, timeout is 2 seconds:
Packet sent with the DF bit set
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 7/10/17 ms
LNS2#ping 100.64.0.1 df-bit size 2001
Type escape sequence to abort.
Sending 5, 2001-byte ICMP Echos to 100.64.0.1, timeout is 2 seconds:
Packet sent with the DF bit set
.....
Success rate is 0 percent (0/5)
Pourquoi avoir mis 2000 et pas 2030 ?
J'aime bien les nombres ronds đ
Nan plus sĂ©rieusement, on va rajouter le MPLS qui possĂšde une entĂȘte minimale de 4 octets ! Mais elle peut ĂȘtre augmentĂ©e si utilisation de plusieurs labels (on voit ça dans notre un Ă©pisode). On est prĂ©voyant, au cas oĂč s'il y a encore des protocoles qui rajoutent des entĂȘtes !
Si on avait mis 2030 de MTU, il y aurait eu encore des problÚmes et on aurait été obligé de diminuer la MTU de quelques octets encore.
Conclusion
Episode plus court aujourd'hui mais je voulais aborder le principe de MTU dans un épisode spécifique !
Un admin rĂ©seau qui travaille dans un LAN n'aura jamais de problĂšme avec la MTU car il n'y a pas de rajout d'entĂȘte.
PPPoE, VXLAN, MPLS sont des protocoles qui vont se rajouter dans une trame et donc des entĂȘtes supplĂ©mentaires. Une personne travaillant dans un WAN ne va pas, Ă chaque fois, calculer et jouer sur la MTU sur chaque segment. Au lieu de ça, il va utiliser la jumbo frame (quand c'est compatible avec l'hardware).
Au prochain Ă©pisode, configuration de l'IGP ISIS (qui est d'ailleurs sensible au missmatch MTU) ! Il va falloir peut-ĂȘtre commencer Ă produire des liaisons clientes pour que notre business fonctionne.
Je termine sur un petit mot de fin : Hiruzen Sarutobi est le pire Hokage de l'histoire đ„·đ„·