Partager via


Configurer l’Unité de transmission maximale (MTU) pour les machines virtuelles dans Azure

L’Unité de transmission maximale (MTU) est une mesure représentant la plus grande taille de trame Ethernet (paquet) transmise par un dispositif réseau ou une interface. Si un paquet dépasse la plus grande taille acceptée par le dispositif, le paquet est fragmenté en plusieurs paquets plus petits, puis réassemblé ultérieurement à la destination.

La fragmentation et le réassemblage peuvent introduire des problèmes de performance et de classement, ce qui entraîne une expérience sous-optimale. L’optimisation de MTU pour votre solution peut offrir des avantages en matière de performance de bande passante réseau en réduisant le nombre total de paquets nécessaires pour envoyer un jeu de données. La configuration de tailles MTU supérieures peut potentiellement améliorer le débit réseau, car elle réduit le nombre de paquets et de traitement d’en-tête nécessaires pour envoyer un jeu de données.

La MTU est un paramètre configurable dans le système d’exploitation d’une machine virtuelle. Le paramètre MTU de valeur par défaut dans Azure est de 1 500 octets.

Les machines virtuelles dans Azure peuvent prendre en charge une MTU supérieure à la valeur par défaut de 1 500 octets uniquement pour le trafic qui reste dans le réseau virtuel.

Le tableau suivant présente la plus grande taille de MTU prise en charge sur les interfaces réseau Azure disponibles dans Azure :

Système d’exploitation Interface réseau Plus grande MTU pour le trafic réseau inter virtuel
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3 900
Lorsque vous définissez la valeur MTU avec Set-NetAdapterAdvancedProperty, utilisez la valeur 4088.. Pour conserver les redémarrages, la valeur retournée par Test-Connection doit également être définie avec Set-NetIPInterface.
Windows Server (Préversion) Carte réseau Microsoft Azure MANA 9 000
Lorsque vous définissez la valeur MTU avec Set-NetAdapterAdvancedProperty, utilisez la valeur 9014. Pour conserver les redémarrages, la valeur retournée par Test-Connection doit également être définie avec Set-NetIPInterface.
Linux Mellanox Cx-3, Cx-4, Cx-5 3900
Linux (Préversion) Carte réseau Microsoft Azure 9000

Prérequis

  • Compte Azure avec un abonnement actif. Créez-en un gratuitement.

  • Deux machines virtuelles Linux dans le même réseau virtuel dans Azure. Pour plus d’informations sur la création d’une machine virtuelle Linux, consultez Créer une machine virtuelle Linux dans le Portail Azure. L’accès à distance aux machines virtuelles est nécessaire pour l’achèvement de l’article. Pour plus d’informations sur la connexion à des machines virtuelles Azure en toute sécurité, consultez Qu’est-ce qu’Azure Bastion ?

    • Dans le cadre de cet article, les machines virtuelles sont nommées vm-1 et vm-2. Remplacez ces valeurs par vos valeurs.

Exemples de ressources

Les ressources suivantes sont utilisées comme exemples dans cet article. Remplacez ces valeurs par vos valeurs.

Ressource Nom Adresse IP
Machine virtuelle 1 vm-1 10.0.0.4
Machine virtuelle 2 vm-2 10.0.0.5

Précautions

  • Les machines virtuelles dans Azure peuvent prendre en charge une MTU supérieure à la valeur par défaut de 1 500 octets uniquement pour le trafic qui reste dans le réseau virtuel. Une MTU plus grande n’est pas prise en charge pour les scénarios en dehors du trafic de machine virtuelle de réseau intra-virtuel vers machine virtuelle. Le trafic transitant par des passerelles, des Peering ou vers Internet peut ne pas être pris en charge. La configuration d’une MTU plus grande peut entraîner une fragmentation et une réduction du niveau de performance. Pour le trafic utilisant ces scénarios, utilisez la MTU par défaut de 1 500 octets pour les tests afin de vous assurer qu’une MTU plus grande est prise en charge sur l’ensemble du chemin d’accès réseau.

  • La MTU optimale est un système d’exploitation, un réseau et une application spécifiques. Le nombre maximal de MTU prise en charge peut ne pas être optimal pour votre cas d’utilisation.

  • Testez toujours les changements de paramètres MTU dans un environnement non critique avant d’appliquer des environnements généraux ou critiques.

Détection MTU du chemin d'accès

Il est important de comprendre la MTU prise en charge sur le chemin d’accès réseau que votre application ou vos machines utilisent. La découverte MTU de chemin d’accès est un moyen de déterminer la plus grande MTU prise en charge entre une adresse source et de destination. L’utilisation d’une MTU plus grande que celle prise en charge entre l’adresse source et celle de destination entraîne une fragmentation, ce qui peut affecter négativement le niveau de performance.

Dans cet article, les exemples utilisés testent le chemin d’accès de MTU entre deux machines virtuelles. Les tests suivants peuvent être effectués à partir d’une machine virtuelle vers n’importe quelle destination routable.

Procédez comme suit pour définir une taille de MTU supérieure sur une machine virtuelle source et de destination. Vérifiez le chemin d’accès de MTU avec un script d’interpréteur de commandes pour Linux ou PowerShell pour Windows. Si la plus grande MTU n’est pas prise en charge, les résultats indiqués dans le test de découverte MTU de chemin d’accès diffèrent des paramètres configurés sur l’interface de machine virtuelle source ou de destination.

Le script d’interpréteur de commandes est disponible dans la galerie d’exemples Azure. Téléchargez le script pour Linux à partir du lien suivant et enregistrez-le dans vm-1 et vm-2.

Procédez comme suit pour modifier la taille de MTU sur une machine virtuelle Linux :

  1. Connectez-vous à vm-1

  2. Utilisez la commande ip pour afficher les interfaces réseau actuelles et leurs paramètres MTU. Enregistrez l’adresse IP pour les étapes suivantes. Dans cet exemple, l’adresse IP est 10.0.0.4 et l’interface Ethernet est eth0.

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  3. Définissez la valeur MTU de vm-1 sur la valeur la plus élevée prise en charge par l’interface réseau. Dans cet exemple, le nom de l’interface réseau est eth0. Remplacez cette valeur par votre valeur.

    • Pour l’adaptateur Mellanox, utilisez l’exemple suivant pour définir la valeur MTU sur 3 900 :
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Pour la carte réseau Microsoft Azure, utilisez l’exemple suivant pour définir la valeur MTU sur 9 000 :
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Important

    Les modifications MTU apportées lors des étapes précédentes ne sont pas conservées lors d’un redémarrage. Pour rendre les modifications permanentes, consultez la documentation appropriée pour votre distribution Linux.

  4. Utilisez la commande ip pour vérifier que les paramètres MTU sont appliqués à l’interface réseau :

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  5. Connectez-vous à vm-2 pour répéter les étapes précédentes afin de définir la valeur MTU sur la valeur la plus élevée prise en charge par l’interface réseau.

  6. Connectez-vous à vm-1.

  7. Utilisez l’exemple suivant pour exécuter le script d’interpréteur de commandes Linux pour tester la plus grande taille de MTU qui peut être utilisée pour un chemin d’accès réseau spécifique. Remplacez la valeur de l’hôte de destination par l’adresse IP de vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. Le résultat ressemble à l’exemple qui suit. Si la sortie du script n’affiche pas le paramètre sur l’interface réseau, cela indique que la taille de MTU n’est pas définie correctement. Sinon, cela peut signifier qu’un dispositif réseau sur le chemin d’accès prend uniquement en charge la taille de MTU retournée par le script GetPathMTU.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5
    destination: 10.0.0.5
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  9. Vérifiez la taille de MTU sur l’interface réseau à l’aide de PING. Pour Linux, utilisez les indicateurs -M, -s et -c. L’option -M indique au test Ping de ne PAS fragmenter, -s définit la taille du paquet et -c définit le nombre de tests Ping à envoyer. Pour déterminer la taille du paquet, soustrayez 28 au paramètre MTU de 3 900.

    ping 10.0.0.5 -c 10 -M do -s 3872
    
    azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872
    PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data.
    3880 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=3.70 ms
    3880 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=1.08 ms
    3880 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=1.51 ms
    3880 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=1.25 ms
    3880 bytes from 10.0.0.5: icmp_seq=5 ttl=64 time=1.29 ms
    3880 bytes from 10.0.0.5: icmp_seq=6 ttl=64 time=1.05 ms
    3880 bytes from 10.0.0.5: icmp_seq=7 ttl=64 time=5.67 ms
    3880 bytes from 10.0.0.5: icmp_seq=8 ttl=64 time=1.92 ms
    3880 bytes from 10.0.0.5: icmp_seq=9 ttl=64 time=2.72 ms
    3880 bytes from 10.0.0.5: icmp_seq=10 ttl=64 time=1.20 ms
    
    --- 10.0.0.5 ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 9014ms
    rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
    

    Une indication indiquant qu’il existe une incompatibilité dans les paramètres entre la source et la destination s’affiche sous la forme d’un message d’erreur dans la sortie. Dans ce cas, la MTU n’est pas définie sur l’interface réseau source.

    azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872
    PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data.
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    
    --- 10.0.0.5 ping statistics ---
    10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
    
  10. Connectez-vous à vm-2.

  11. Utilisez l’exemple suivant pour exécuter le script d’interpréteur de commandes Linux pour tester la plus grande taille de MTU qui peut être utilisée pour un chemin d’accès réseau spécifique :

    ./GetPathMtu.sh 10.0.0.4
    
  12. Le résultat ressemble à l’exemple qui suit. Si la sortie du script n’affiche pas le paramètre sur l’interface réseau, cela indique que la taille de MTU n’est pas définie correctement. Sinon, cela peut signifier qu’un dispositif réseau sur le chemin d’accès prend uniquement en charge la taille de MTU retournée par le script GetPathMTU.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4
    destination: 10.0.0.4
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  13. Vérifiez la taille de MTU sur l’interface réseau à l’aide de PING. Pour Linux, utilisez les indicateurs -M, -s et -c. L’option -M indique au test Ping de ne PAS fragmenter, -s définit la taille du paquet et -c définit le nombre de tests Ping à envoyer. Pour déterminer la taille du paquet, soustrayez 28 au paramètre MTU de 3 900.

    ping 10.0.0.4 -c 10 -M do -s 3872
    
    azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872
    PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data.
    3880 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=3.70 ms
    3880 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=1.08 ms
    3880 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=1.51 ms
    3880 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=1.25 ms
    3880 bytes from 10.0.0.4: icmp_seq=5 ttl=64 time=1.29 ms
    3880 bytes from 10.0.0.4: icmp_seq=6 ttl=64 time=1.05 ms
    3880 bytes from 10.0.0.4: icmp_seq=7 ttl=64 time=5.67 ms
    3880 bytes from 10.0.0.4: icmp_seq=8 ttl=64 time=1.92 ms
    3880 bytes from 10.0.0.4: icmp_seq=9 ttl=64 time=2.72 ms
    3880 bytes from 10.0.0.4: icmp_seq=10 ttl=64 time=1.20 ms
    
    --- 10.0.0.4 ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 9014ms
    rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
    

    Une indication indiquant qu’il existe une incompatibilité dans les paramètres entre la source et la destination s’affiche sous la forme d’un message d’erreur dans la sortie. Dans ce cas, la MTU n’est pas définie sur l’interface réseau source.

    azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872
    PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data.
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    
    --- 10.0.0.4 ping statistics ---
    10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
    

Annuler les changements

Pour rétablir les modifications apportées avec cet article, procédez comme suit :

  1. Connectez-vous à vm-1.

  2. Utilisez l’exemple suivant pour définir la valeur MTU sur la valeur par défaut de 1 500 :

    echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Important

    Les modifications MTU apportées lors des étapes précédentes ne sont pas conservées lors d’un redémarrage. Pour rendre les modifications permanentes, consultez la documentation appropriée pour votre distribution Linux.

  3. Utilisez la commande ip pour vérifier que les paramètres MTU sont appliqués à l’interface réseau :

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  4. Connectez-vous à vm-2 pour répéter les étapes précédentes afin de définir la valeur MTU sur la valeur par défaut de 1 500.