Sdílet prostřednictvím


Konfigurace maximální jednotky přenosu (MTU) pro virtuální počítače v Azure

Maximální přenosová jednotka (MTU) je měření představující největší velikost ethernetového rámce (paketu) přenášeného síťovým zařízením nebo rozhraním. Pokud paket překročí největší velikost přijatou zařízením, paket se fragmentuje do několika menších paketů a později se znovu sestaví v cíli.

Fragmentace a opětovné sestavení mohou zavádět problémy s výkonem a řazením, což vede k neoptimálnímu prostředí. Optimalizace MTU pro vaše řešení může poskytnout výhody výkonu šířky pásma sítě snížením celkového počtu paketů potřebných k odeslání datové sady. Konfigurace větších velikostí MTU může potenciálně zlepšit propustnost sítě, protože snižuje počet paketů a režijní náklady na hlavičky potřebné k odeslání datové sady.

MTU je konfigurovatelné nastavení v operačním systému virtuálního počítače. Výchozí hodnota nastavení MTU v Azure je 1500 bajtů.

Virtuální počítače v Azure můžou podporovat větší MTU než 1 500 bajtů ve výchozím nastavení jenom pro provoz, který zůstává ve virtuální síti.

Následující tabulka uvádí největší podporovanou velikost MTU v síťových rozhraních Azure dostupných v Azure:

Operační systém Síťové rozhraní Největší MTU pro provoz mezi virtuálními sítěmi
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3900
Při nastavování hodnoty MTU s Set-NetAdapterAdvancedProperty, použijte hodnotu 4088.. Chcete-li zachovat restartování, musí být hodnota vrácená Test-Connection také nastavena na Set-NetIPInterfacehodnotu .
Windows Server (Preview) Microsoft Azure Network Adapter MANA 9000
Při nastavování hodnoty MTU s Set-NetAdapterAdvancedProperty, použijte hodnotu . 9014Chcete-li zachovat restartování, musí být hodnota vrácená Test-Connection také nastavena na Set-NetIPInterfacehodnotu .
Linux Mellanox Cx-3, Cx-4, Cx-5 3900
Linux (Preview) Síťový adaptér Microsoft Azure 9000

Požadavky

  • Účet Azure s aktivním předplatným. Vytvořte si ho zdarma.

  • Dva virtuální počítače s Linuxem ve stejné virtuální síti v Azure. Další informace o vytvoření virtuálního počítače s Linuxem najdete v tématu Vytvoření virtuálního počítače s Linuxem na webu Azure Portal. K dokončení článku se vyžaduje vzdálený přístup k virtuálním počítačům. Další informace o bezpečném připojení k virtuálním počítačům Azure najdete v tématu Co je Azure Bastion?

    • Pro účely tohoto článku se virtuální počítače nazývají vm-1 a vm-2. Nahraďte tyto hodnoty hodnotami.

Příklady prostředků

Následující zdroje informací se používají jako příklady v tomto článku. Nahraďte tyto hodnoty hodnotami.

Prostředek Název IP adresa
Virtuální počítač 1 vm-1 10.0.0.4
Virtuální počítač 2 vm-2 10.0.0.5

Opatření

  • Virtuální počítače v Azure můžou podporovat větší MTU než 1 500 bajtů ve výchozím nastavení jenom pro provoz, který zůstává ve virtuální síti. Větší MTU se nepodporuje ve scénářích mimo provoz virtuálních počítačů virtuálních počítačů v rámci virtuální sítě. Přenosy procházející přes brány, partnerské vztahy nebo internet nemusí být podporované. Konfigurace většího MTU může vést k fragmentaci a snížení výkonu. Pro provoz využívající tyto scénáře využijte výchozí 1 500 bajtů MTU k testování, abyste zajistili, že větší MTU je podporováno v celé síťové cestě.

  • Optimální MTU je konkrétní operační systém, síť a aplikace. Maximální podporovaná MTU nemusí být pro váš případ použití optimální.

  • Před použitím široce nebo u kritických prostředí vždy testujte změny nastavení MTU v nekritickém prostředí.

Zjišťování MTU cesty

Je důležité pochopit MTU podporované v síťové cestě, kterou vaše aplikace nebo počítače používají. Zjišťování MTU cesty je způsob, jak zjistit největší MTU podporovanou mezi zdrojovou a cílovou adresou. Použití větší mtU, než je podporováno mezi zdrojovou a cílovou adresou, vede k fragmentaci, což by mohlo negativně ovlivnit výkon.

V tomto článku příklady použily test cesty MTU mezi dvěma virtuálními počítači. Následné testy je možné provést z virtuálního počítače do libovolného směrovatelného cíle.

Pomocí následujících kroků nastavte větší velikost MTU na zdrojovém a cílovém virtuálním počítači. Ověřte MTU cesty pomocí skriptu prostředí pro Linux nebo PowerShell pro Windows. Pokud větší MTU není podporované, výsledky zobrazené v testu zjišťování MTU cesty se liší od nastavení nakonfigurovaného ve zdrojovém nebo cílovém rozhraní virtuálního počítače.

Skript prostředí je k dispozici v galerii ukázek Azure. Stáhněte si skript pro Linux z následujícího odkazu a uložte ho na vm-1 a vm-2.

Pomocí následujících kroků změňte velikost MTU na virtuálním počítači s Linuxem:

  1. Přihlášení k virtuálnímu počítači 1

  2. ip Pomocí příkazu zobrazíte aktuální síťová rozhraní a jejich nastavení MTU, poznamenejte si IP adresu pro následující kroky. V tomto příkladu je IP adresa 10.0.0.4 a ethernetové rozhraní je 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. Nastavte hodnotu MTU na virtuálním počítači vm-1 na nejvyšší hodnotu podporovanou síťovým rozhraním. V tomto příkladu je název síťového rozhraní eth0. Tuto hodnotu nahraďte hodnotou.

    • Pro adaptér Mellanox použijte následující příklad k nastavení hodnoty MTU na 3900:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • V případě síťového adaptéru Microsoft Azure nastavte hodnotu MTU na 9000 pomocí následujícího příkladu:
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Důležité

    Změny MTU provedené v předchozích krocích se během restartování nezachovají. Pokud chcete provést trvalé změny, projděte si příslušnou dokumentaci pro vaši linuxovou distribuci.

  4. ip Pomocí příkazu ověřte, že se nastavení MTU použije na síťové rozhraní:

    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. Přihlaste se k virtuálnímu počítači vm-2 a zopakujte předchozí kroky a nastavte hodnotu MTU na nejvyšší hodnotu podporovanou síťovým rozhraním.

  6. Přihlaste se k virtuálnímu počítači vm-1.

  7. Pomocí následujícího příkladu spusťte skript prostředí Linuxu, který otestuje největší velikost MTU, kterou lze použít pro konkrétní síťovou cestu. Nahraďte hodnotu cílového hostitele IP adresou virtuálního počítače vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. Výstup se podobá následujícímu příkladu. Pokud výstup skriptu nezobrazuje nastavení v síťovém rozhraní, znamená to, že velikost MTU není správně nastavená. Případně může to znamenat, že síťové zařízení podél cesty podporuje pouze velikost MTU vrácenou skriptem 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. Ověřte velikost MTU v síťovém rozhraní pomocí PING. Pro Linux použijte příznaky -M, -s a -c. Možnost -M dává příkaz ping pokyn, aby NE fragmentoval, -s nastaví velikost paketu a -c nastaví počet příkazů ping, které se mají odeslat. Chcete-li určit velikost paketu, odečtěte 28 od nastavení MTU 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
    

    Indikuje, že nastavení mezi zdrojem a cílem se neshoduje, zobrazí se ve výstupu jako chybová zpráva. V takovém případě není MTU nastavená na zdrojovém síťovém rozhraní.

    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. Přihlaste se k virtuálnímu počítači vm-2.

  11. Pomocí následujícího příkladu spusťte skript prostředí Linuxu, který otestuje největší velikost MTU, kterou lze použít pro konkrétní síťovou cestu:

    ./GetPathMtu.sh 10.0.0.4
    
  12. Výstup se podobá následujícímu příkladu. Pokud výstup skriptu nezobrazuje nastavení v síťovém rozhraní, znamená to, že velikost MTU není správně nastavená. Případně může to znamenat, že síťové zařízení podél cesty podporuje pouze velikost MTU vrácenou skriptem 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. Ověřte velikost MTU v síťovém rozhraní pomocí PING. Pro Linux použijte příznaky -M, -s a -c. Možnost -M dává příkaz ping pokyn, aby NE fragmentoval, -s nastaví velikost paketu a -c nastaví počet příkazů ping, které se mají odeslat. Chcete-li určit velikost paketu, odečtěte 28 od nastavení MTU 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
    

    Indikuje, že nastavení mezi zdrojem a cílem se neshoduje, zobrazí se ve výstupu jako chybová zpráva. V takovém případě není MTU nastavená na zdrojovém síťovém rozhraní.

    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
    

Vrátit změny

Pokud chcete vrátit změny provedené v tomto článku, postupujte následovně:

  1. Přihlaste se k virtuálnímu počítači vm-1.

  2. Pomocí následujícího příkladu nastavte hodnotu MTU na výchozí hodnotu 1500:

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

    Důležité

    Změny MTU provedené v předchozích krocích se během restartování nezachovají. Pokud chcete provést trvalé změny, projděte si příslušnou dokumentaci pro vaši linuxovou distribuci.

  3. ip Pomocí příkazu ověřte, že se nastavení MTU použije na síťové rozhraní:

    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. Přihlaste se k virtuálnímu počítači vm-2 a zopakujte předchozí kroky a nastavte hodnotu MTU na výchozí hodnotu 1500.

  • Přehled síťového adaptéru Microsoft Azure (MANA).