Freigeben über


Konfigurieren der maximalen Übertragungseinheit (MTU) für virtuelle VMs in Azure

Die maximale Übertragungseinheit (MTU) ist ein Maß für die größte Größe eines Ethernet-Frames (Pakets), das von einem Netzwerkgerät oder einer Schnittstelle übertragen wird. Wenn ein Paket die größte vom Gerät akzeptierte Größe überschreitet, wird das Paket in mehrere kleinere Pakete fragmentiert und später am Zielort wieder zusammengesetzt.

Die Fragmentierung und Neuzusammensetzung kann zu Leistungs- und Ordnungsproblemen führen, was zu einem suboptimalen Erlebnis führt. Die Optimierung der MTU für Ihre Lösung kann die Leistung der Netzwerkbandbreite verbessern, indem sie die Gesamtzahl der Pakete reduziert, die zum Senden eines Datasets erforderlich sind. Die Konfiguration größerer MTU-Größen kann den Netzwerkdurchsatz potenziell verbessern, da sie die Anzahl der Pakete und den Header-Overhead reduziert, die zum Senden eines Datasets erforderlich sind.

Die MTU ist eine konfigurierbare Einstellung im Betriebssystem einer VM. Der Standardwert für die MTU-Einstellung in Azure ist 1500 Bytes.

VMs in Azure können eine größere MTU als den Standardwert von 1.500 Byte nur für Datenverkehr unterstützen, der innerhalb des virtuellen Netzwerks bleibt.

Die folgende Tabelle zeigt die größte MTU-Größe, die von den in Azure verfügbaren Azure-Netzwerkschnittstellen unterstützt wird:

Betriebssystem Netzwerkschnittstelle Größte MTU für den Datenverkehr zwischen virtuellen Netzwerken
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3900
Wenn Sie den MTU-Wert mit Set-NetAdapterAdvancedProperty festlegen, verwenden Sie den Wert 4088.. Um Neustarts beizubehalten, muss der von Test-Connection zurückgegebene Wert auch mit Set-NetIPInterface festgelegt werden.
Windows Server (Preview) Microsoft Azure Netzwerkadapter MANA 9000
Wenn Sie den MTU-Wert mit Set-NetAdapterAdvancedProperty festlegen, verwenden Sie den Wert 9014.. Um Neustarts beizubehalten, muss der von Test-Connection zurückgegebene Wert auch mit Set-NetIPInterface festgelegt werden.
Linux Mellanox Cx-3, Cx-4, Cx-5 3900
Linux (Preview) Microsoft Azure Netzwerkadapter 9000

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie ein kostenloses Konto.

  • Zwei Linux-VMs im selben virtuellen Netzwerk in Azure. Weitere Informationen zum Erstellen einer Linux-VM finden Sie unter Erstellen einer Linux-VM im Azure-Portal. Der Remotezugriff auf die VMs ist für den Abschluss des Artikels erforderlich. Weitere Informationen zur sicheren Verbindung mit Azure-VMs finden Sie unter Was ist Azure Bastion?

    • Im Rahmen dieses Artikels heißen die VMs vm-1 und vm-2. Ersetzen Sie diese Werte durch Ihre eigenen Werte.

Ressourcenbeispiele

Die folgenden Ressourcen werden in diesem Artikel als Beispiele verwendet. Ersetzen Sie diese Werte durch Ihre eigenen Werte.

Resource Name IP-Adresse
Virtual Machine 1 vm-1 10.0.0.4
Virtual Machine 2 vm-2 10.0.0.5

Vorsichtsmaßnahmen

  • VMs in Azure können eine größere MTU als den Standardwert von 1.500 Byte nur für Datenverkehr unterstützen, der innerhalb des virtuellen Netzwerks bleibt. Eine größere MTU wird für Szenarien außerhalb des VM-zu-VM-Datenverkehrs im virtuellen Netzwerk nicht unterstützt. Datenverkehr, der über Gateways, Peerings oder ins Internet geleitet wird, wird möglicherweise nicht unterstützt. Die Konfiguration einer größeren MTU kann zu Fragmentierung und Leistungseinbußen führen. Verwenden Sie für den Datenverkehr in diesen Szenarien die Standard-MTU von 1.500 Byte, um sicherzustellen, dass eine größere MTU über den gesamten Netzwerkpfad unterstützt wird.

  • Die optimale MTU ist betriebssystem-, netzwerk- und anwendungsspezifisch. Die maximal unterstützte MTU ist möglicherweise nicht optimal für Ihren Anwendungsfall.

  • Testen Sie Änderungen der MTU-Einstellungen immer zuerst in einer unkritischen Umgebung, bevor Sie sie umfassend oder in kritischen Umgebungen anwenden.

Path MTU Discovery

Es ist wichtig, die MTU zu kennen, die über den Netzwerkpfad unterstützt wird, den Ihre Anwendung oder Ihr Rechner nutzt. Die Ermittlung der Pfad-MTU ist ein Mittel, um die größte unterstützte MTU zwischen einer Quell- und einer Zieladresse herauszufinden. Wenn Sie eine größere MTU verwenden, als zwischen Quell- und Zieladresse unterstützt wird, führt dies zu einer Fragmentierung, die die Leistung beeinträchtigen kann.

Die in diesem Artikel verwendeten Beispiele testen den MTU-Pfad zwischen zwei VMs. Nachfolgende Tests können von einer VM aus zu jedem routingfähigen Ziel durchgeführt werden.

Führen Sie die folgenden Schritte aus, um eine größere MTU-Größe auf einer VM als Quelle und Ziel festzulegen. Überprüfen Sie die Pfad-MTU mit einem Shell-Skript für Linux oder mit der PowerShell für Windows. Wenn die größere MTU nicht unterstützt wird, weichen die im Pfad-MTU-Erkennungstest angezeigten Ergebnisse von den Einstellungen ab, die auf der Schnittstelle der VM als Quelle oder Ziel konfiguriert sind.

Das Shell-Skript ist in der Galerie der Azure-Beispiele verfügbar. Laden Sie das Skript für Linux über den folgenden Link herunter, und speichern Sie es auf vm-1 und vm-2.

Führen Sie die folgenden Schritte aus, um die MTU-Größe auf einer Linux-VM zu ändern:

  1. Anmelden bei vm-1

  2. Verwenden Sie den Befehl ip, um die aktuellen Netzwerkschnittstellen und ihre MTU-Einstellungen anzuzeigen, und zeichnen Sie die IP-Adresse für die folgenden Schritte auf. In diesem Beispiel lautet die IP-Adresse 10.0.0.4 und die Ethernet-Schnittstelle ist 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. Legen Sie den MTU-Wert auf vm-1 auf den höchsten Wert fest, der von der Netzwerkschnittstelle unterstützt wird. In diesem Beispiel trägt die Netzwerkschnittstelle den Namen eth0. Ersetzen Sie die Wert durch Ihren Wert.

    • Verwenden Sie für den Mellanox-Adapter das folgende Beispiel, um den MTU-Wert auf 3900 festzulegen:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Verwenden Sie für den Microsoft Azure Netzwerkadapter das folgende Beispiel, um den MTU-Wert auf 9000 festzulegen:
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Wichtig

    Die MTU-Änderungen, die Sie in den vorherigen Schritten vorgenommen haben, bleiben bei einem Neustart nicht erhalten. Um die Änderungen dauerhaft zu machen, konsultieren Sie die entsprechende Dokumentation für Ihre Linux-Distribution.

  4. Verwenden Sie den Befehl ip, um zu überprüfen, ob die MTU-Einstellungen auf die Netzwerkschnittstelle angewendet werden:

    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. Melden Sie sich bei vm-2- an und wiederholen Sie die vorherigen Schritte, um den MTU-Wert auf den höchsten von der Netzwerkschnittstelle unterstützten Wert einzustellen.

  6. Melden Sie sich bei vm-1 an.

  7. Verwenden Sie das folgende Beispiel, um das Linux-Shell-Skript auszuführen, um die größte MTU-Größe zu testen, die für einen bestimmten Netzwerkpfad verwendet werden kann. Ersetzen Sie den Wert des Zielhosts durch die IP-Adresse von vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. Die Ausgabe sieht in etwa wie das folgende Beispiel aus: Wenn die Ausgabe des Skripts die Einstellung auf der Netzwerkschnittstelle nicht anzeigt, bedeutet dies, dass die MTU-Größe nicht korrekt eingestellt ist. Es könnte aber auch bedeuten, dass ein Netzwerkgerät entlang des Pfades nur die vom Skript GetPathMTU zurückgegebene MTU-Größe unterstützt.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5
    destination: 10.0.0.5
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  9. Überprüfen Sie die MTU-Größe auf der Netzwerkschnittstelle mit PING. Für Linux verwenden Sie die Flags -M, -s und -c. Die Option -M weist ping an, NICHT zu fragmentieren, -s legt die Paketgröße fest, und -c bestimmt die Anzahl der zu sendenden Pings. Um die Paketgröße zu ermitteln, subtrahieren Sie 28 von der MTU-Einstellung 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
    

    Ein Hinweis darauf, dass die Einstellungen von Quelle und Ziel nicht übereinstimmen, wird in der Ausgabe als Fehlermeldung angezeigt. In diesem Fall ist die MTU auf der Quell-Netzwerkschnittstelle nicht eingestellt.

    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. Melden Sie sich bei vm-2 an.

  11. Verwenden Sie das folgende Beispiel, um das Linux-Shell-Skript auszuführen, um die größte MTU-Größe zu testen, die für einen bestimmten Netzwerkpfad verwendet werden kann:

    ./GetPathMtu.sh 10.0.0.4
    
  12. Die Ausgabe sieht in etwa wie das folgende Beispiel aus: Wenn die Ausgabe des Skripts die Einstellung auf der Netzwerkschnittstelle nicht anzeigt, bedeutet dies, dass die MTU-Größe nicht korrekt eingestellt ist. Es könnte aber auch bedeuten, dass ein Netzwerkgerät entlang des Pfades nur die vom Skript GetPathMTU zurückgegebene MTU-Größe unterstützt.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4
    destination: 10.0.0.4
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  13. Überprüfen Sie die MTU-Größe auf der Netzwerkschnittstelle mit PING. Für Linux verwenden Sie die Flags -M, -s und -c. Die Option -M weist ping an, NICHT zu fragmentieren, -s legt die Paketgröße fest, und -c bestimmt die Anzahl der zu sendenden Pings. Um die Paketgröße zu ermitteln, subtrahieren Sie 28 von der MTU-Einstellung 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
    

    Ein Hinweis darauf, dass die Einstellungen von Quelle und Ziel nicht übereinstimmen, wird in der Ausgabe als Fehlermeldung angezeigt. In diesem Fall ist die MTU auf der Quell-Netzwerkschnittstelle nicht eingestellt.

    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
    

Wiederherstellen von Änderungen

Führen Sie die folgenden Schritte aus, um die in diesem Artikel vorgenommenen Änderungen rückgängig zu machen:

  1. Melden Sie sich bei vm-1 an.

  2. Verwenden Sie das folgende Beispiel, um den MTU-Wert auf den Standardwert von 1500 festzulegen:

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

    Wichtig

    Die MTU-Änderungen, die Sie in den vorherigen Schritten vorgenommen haben, bleiben bei einem Neustart nicht erhalten. Um die Änderungen dauerhaft zu machen, konsultieren Sie die entsprechende Dokumentation für Ihre Linux-Distribution.

  3. Verwenden Sie den Befehl ip, um zu überprüfen, ob die MTU-Einstellungen auf die Netzwerkschnittstelle angewendet werden:

    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. Melden Sie sich bei vm-2- an und wiederholen Sie die vorherigen Schritte, um den MTU-Wert auf den Standardwert 1500 festzulegen.