Delen via


Maximumtransmissie-eenheid (MTU) configureren voor virtuele machines in Azure

De Maximum Transmission Unit (MTU) is een meting die het grootste ethernetframe (pakket) vertegenwoordigt dat wordt verzonden door een netwerkapparaat of interface. Als een pakket de grootste grootte overschrijdt die door het apparaat wordt geaccepteerd, wordt het pakket gefragmenteerd in meerdere kleinere pakketten en later opnieuw verzameld op de bestemming.

Fragmentatie en opnieuwassembly kunnen prestatie- en bestelproblemen veroorzaken, wat resulteert in een suboptimale ervaring. Het optimaliseren van MTU voor uw oplossing kan prestatievoordelen voor netwerkbandbreedte bieden door het totale aantal pakketten te verminderen dat nodig is om een gegevensset te verzenden. Configuratie van grotere MTU-grootten kan de netwerkdoorvoer mogelijk verbeteren, omdat het aantal pakketten en header-overhead dat nodig is voor het verzenden van een gegevensset vermindert.

De MTU is een configureerbare instelling in het besturingssysteem van een virtuele machine. De standaardwaarde MTU-instelling in Azure is 1500 bytes.

VM's in Azure kunnen alleen ondersteuning bieden voor grotere MTU's dan de standaardwaarde van 1500 byte voor verkeer dat binnen het virtuele netwerk blijft.

In de volgende tabel ziet u de grootste MTU-grootte die wordt ondersteund op de Azure-netwerkinterfaces die beschikbaar zijn in Azure:

Besturingssysteem Netwerkinterface Grootste MTU voor verkeer tussen virtuele netwerken
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3900
Wanneer u de MTU-waarde instelt Set-NetAdapterAdvancedProperty, gebruikt u de waarde 4088.. Als u opnieuw opstarten wilt behouden, moet de waarde die wordt Test-Connection geretourneerd door ook worden ingesteld met Set-NetIPInterface.
Windows Server (Preview) Microsoft Azure Network Adapter MANA 9000
Wanneer u de MTU-waarde instelt metSet-NetAdapterAdvancedProperty, gebruikt u de waarde. 9014Als u opnieuw opstarten wilt behouden, moet de waarde die wordt Test-Connection geretourneerd door ook worden ingesteld met Set-NetIPInterface.
Linux Mellanox Cx-3, Cx-4, Cx-5 3900
Linux (Preview) Microsoft Azure-netwerkadapter 9000

Vereisten

  • Een Azure-account met een actief abonnement. Maak gratis een account.

  • Twee virtuele Linux-machines in hetzelfde virtuele netwerk in Azure. Zie Een virtuele Linux-machine maken in Azure Portal voor meer informatie over het maken van een virtuele Linux-machine. Externe toegang tot de virtuele machines is vereist voor voltooiing van het artikel. Zie Wat is Azure Bastion?

    • Voor de doeleinden van dit artikel hebben de virtuele machines de naam vm-1 en vm-2. Vervang deze waarden door uw waarden.

Resourcevoorbeelden

De volgende resources worden gebruikt als voorbeelden in dit artikel. Vervang deze waarden door uw waarden.

Bron Naam IP-adres
Virtuele machine 1 vm-1 10.0.0.4
Virtuele machine 2 vm-2 10.0.0.5

Voorzorgsmaatregelen

  • Virtuele machines in Azure kunnen alleen ondersteuning bieden voor een grotere MTU dan de standaardwaarde van 1500 byte voor verkeer dat binnen het virtuele netwerk blijft. Een grotere MTU wordt niet ondersteund voor scenario's buiten vm-naar-VM-verkeer binnen het virtuele netwerk. Verkeer dat via gateways, peerings of internet loopt, wordt mogelijk niet ondersteund. Configuratie van een grotere MTU kan leiden tot fragmentatie en vermindering van de prestaties. Voor verkeer dat gebruikmaakt van deze scenario's, gebruikt u de standaard 1500 byte MTU voor testen om ervoor te zorgen dat een grotere MTU wordt ondersteund in het hele netwerkpad.

  • Optimale MTU is besturingssysteem, netwerk en toepassingsspecifiek. De maximaal ondersteunde MTU is mogelijk niet optimaal voor uw use-case.

  • Test altijd eerst wijzigingen in MTU-instellingen in een niet-kritieke omgeving voordat u breed of op kritieke omgevingen toepast.

Pad MTU-detectie

Het is belangrijk om inzicht te krijgen in de MTU die wordt ondersteund in het netwerkpad dat door uw toepassing of machines wordt gebruikt. Pad MTU-detectie is een middel om de grootste MTU te achterhalen die wordt ondersteund tussen een bron- en doeladres. Het gebruik van een grotere MTU dan wordt ondersteund tussen het bron- en doeladres resulteert in fragmentatie, wat de prestaties negatief kan beïnvloeden.

In dit artikel worden de voorbeelden gebruikt om het MTU-pad tussen twee virtuele machines te testen. Volgende tests kunnen vanaf een virtuele machine worden uitgevoerd naar een routeerbaar doel.

Gebruik de volgende stappen om een grotere MTU-grootte in te stellen op een virtuele bron- en doelmachine. Controleer het pad MTU met een shellscript voor Linux of PowerShell voor Windows. Als de grotere MTU niet wordt ondersteund, verschillen de resultaten in het pad MTU-detectietest van de instellingen die zijn geconfigureerd op de interface van de virtuele bron- of doelmachine.

Het shell-script is beschikbaar in de galerie met Azure-voorbeelden. Download het script voor Linux via de volgende koppeling en sla het op in vm-1 en vm-2.

Gebruik de volgende stappen om de MTU-grootte op een virtuele Linux-machine te wijzigen:

  1. Aanmelden bij vm-1

  2. Gebruik de ip opdracht om de huidige netwerkinterfaces en hun MTU-instellingen weer te geven. Noteer het IP-adres voor de volgende stappen. In dit voorbeeld is het IP-adres 10.0.0.4 en de ethernetinterface 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. Stel de MTU-waarde op vm-1 in op de hoogste waarde die wordt ondersteund door de netwerkinterface. In dit voorbeeld is de naam van de netwerkinterface eth0. Vervang deze waarde door uw waarde.

    • Gebruik voor de Mellanox-adapter het volgende voorbeeld om de MTU-waarde in te stellen op 3900:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Gebruik voor de Microsoft Azure-netwerkadapter het volgende voorbeeld om de MTU-waarde in te stellen op 9000:
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Belangrijk

    De MTU-wijzigingen die in de vorige stappen zijn aangebracht, blijven niet behouden tijdens het opnieuw opstarten. Raadpleeg de juiste documentatie voor uw Linux-distributie om de wijzigingen permanent aan te brengen.

  4. Gebruik de ip opdracht om te controleren of de MTU-instellingen zijn toegepast op de netwerkinterface:

    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. Meld u aan bij vm-2 om de vorige stappen te herhalen om de MTU-waarde in te stellen op de hoogste waarde die wordt ondersteund door de netwerkinterface.

  6. Meld u aan bij vm-1.

  7. Gebruik het volgende voorbeeld om het Linux Shell-script uit te voeren om de grootste MTU-grootte te testen die kan worden gebruikt voor een specifiek netwerkpad. Vervang de waarde van de doelhost door het IP-adres van vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. De uitvoer lijkt op die in het volgende voorbeeld. Als de uitvoer van het script de instelling niet op de netwerkinterface weergeeft, geeft dit aan dat de MTU-grootte niet juist is ingesteld. Het kan ook betekenen dat een netwerkapparaat langs het pad alleen ondersteuning biedt voor de MTU-grootte die wordt geretourneerd door het GetPathMTU-script.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5
    destination: 10.0.0.5
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  9. Controleer de MTU-grootte op de netwerkinterface met behulp van PING. Gebruik voor Linux de vlaggen -M, -s en -c. Met de optie -M wordt ping geïnstrueerd voor NOT-fragment, -s stelt de pakketgrootte in en -c stelt het aantal pings in dat moet worden verzonden. Als u de pakketgrootte wilt bepalen, trekt u 28 af van de MTU-instelling van 3900.

    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
    

    Een indicatie dat de instellingen tussen de bron en het doel niet overeenkomen, worden weergegeven als een foutbericht in de uitvoer. In dit geval is de MTU niet ingesteld op de bronnetwerkinterface.

    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. Meld u aan bij vm-2.

  11. Gebruik het volgende voorbeeld om het Linux Shell-script uit te voeren om de grootste MTU-grootte te testen die kan worden gebruikt voor een specifiek netwerkpad:

    ./GetPathMtu.sh 10.0.0.4
    
  12. De uitvoer lijkt op die in het volgende voorbeeld. Als de uitvoer van het script de instelling niet op de netwerkinterface weergeeft, geeft dit aan dat de MTU-grootte niet juist is ingesteld. Het kan ook betekenen dat een netwerkapparaat langs het pad alleen ondersteuning biedt voor de MTU-grootte die wordt geretourneerd door het GetPathMTU-script.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4
    destination: 10.0.0.4
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  13. Controleer de MTU-grootte op de netwerkinterface met behulp van PING. Gebruik voor Linux de vlaggen -M, -s en -c. Met de optie -M wordt ping geïnstrueerd voor NOT-fragment, -s stelt de pakketgrootte in en -c stelt het aantal pings in dat moet worden verzonden. Als u de pakketgrootte wilt bepalen, trekt u 28 af van de MTU-instelling van 3900.

    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
    

    Een indicatie dat de instellingen tussen de bron en het doel niet overeenkomen, worden weergegeven als een foutbericht in de uitvoer. In dit geval is de MTU niet ingesteld op de bronnetwerkinterface.

    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
    

Wijzigingen ongedaan maken

Als u de wijzigingen die in dit artikel zijn aangebracht, wilt terugzetten, gebruikt u de volgende stappen:

  1. Meld u aan bij vm-1.

  2. Gebruik het volgende voorbeeld om de MTU-waarde in te stellen op de standaardwaarde van 1500:

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

    Belangrijk

    De MTU-wijzigingen die in de vorige stappen zijn aangebracht, blijven niet behouden tijdens het opnieuw opstarten. Raadpleeg de juiste documentatie voor uw Linux-distributie om de wijzigingen permanent aan te brengen.

  3. Gebruik de ip opdracht om te controleren of de MTU-instellingen zijn toegepast op de netwerkinterface:

    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. Meld u aan bij vm-2 om de vorige stappen te herhalen om de MTU-waarde in te stellen op de standaardwaarde van 1500.