Udostępnij za pośrednictwem


Konfigurowanie maksymalnej jednostki transmisji (MTU) dla maszyn wirtualnych na platformie Azure

Maksymalna jednostka transmisji (MTU) to pomiar reprezentujący największą ramkę ethernet (pakiet) przesyłaną przez urządzenie sieciowe lub interfejs. Jeśli pakiet przekroczy największy rozmiar zaakceptowany przez urządzenie, pakiet zostanie podzielony na wiele mniejszych pakietów, a następnie ponownie zmontowany w miejscu docelowym.

Fragmentacja i ponowne zbieranie mogą powodować problemy z wydajnością i kolejnością, co skutkuje nieoptymalnym doświadczeniem. Optymalizacja MTU dla Twojego rozwiązania może zapewnić korzyści dla wydajności przepustowości sieci, zmniejszając całkowitą liczbę pakietów potrzebnych do wysłania zestawu danych. Konfiguracja większych rozmiarów jednostek MTU może potencjalnie zwiększyć przepływność sieci, ponieważ zmniejsza liczbę pakietów i obciążenie nagłówka wymagane do wysłania zestawu danych.

MtU to konfigurowalne ustawienie w systemie operacyjnym maszyny wirtualnej. Domyślne ustawienie jednostki MTU na platformie Azure to 1500 bajtów.

Maszyny wirtualne na platformie Azure mogą obsługiwać większą jednostkę MTU niż 1500 bajtów tylko dla ruchu, który pozostaje w sieci wirtualnej.

W poniższej tabeli przedstawiono największy rozmiar jednostki MTU obsługiwany w interfejsach sieciowych platformy Azure dostępnych na platformie Azure:

System operacyjny Interfejs sieciowy Maksymalna wartość MTU dla ruchu między sieciami wirtualnymi
Serwer z systemem Windows Mellanox Cx-3, Cx-4, Cx-5 3900
Podczas ustawiania wartości MTU za pomocą Set-NetAdapterAdvancedProperty, użyj wartości 4088. Aby ponowne rozruchy mogły przetrwać, wartość zwracana przez Test-Connection musi być również ustawiona za pomocą Set-NetIPInterface.
Serwer z systemem Windows (Wersja zapoznawcza) Microsoft Azure Network Adapter MANA 9000
Podczas ustawiania wartości MTU z Set-NetAdapterAdvancedProperty, użyj wartości 9014.Aby utrwalać ponowne rozruchy, wartość zwracana przez Test-Connection musi być również ustawiona za pomocą Set-NetIPInterface.
Linuxa Mellanox Cx-3, Cx-4, Cx-5 3900
Linuxa (Wersja zapoznawcza) Adapter sieciowy platformy Microsoft Azure 9000

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Utwórz je bezpłatnie.

  • Dwie maszyny wirtualne z systemem Linux w tej samej sieci wirtualnej na platformie Azure. Aby uzyskać więcej informacji na temat tworzenia maszyny wirtualnej z systemem Linux, zobacz Tworzenie maszyny wirtualnej z systemem Linux w witrynie Azure Portal. Do ukończenia artykułu wymagany jest zdalny dostęp do maszyn wirtualnych. Aby uzyskać więcej informacji na temat bezpiecznego nawiązywania połączenia z usługą Azure Virtual Machines, zobacz Co to jest usługa Azure Bastion?

    • Na potrzeby tego artykułu maszyny wirtualne mają nazwy vm-1 i vm-2. Zastąp te wartości swoimi wartościami.

Przykłady zasobów

Poniższe zasoby są używane jako przykłady w tym artykule. Zastąp te wartości swoimi wartościami.

Zasób Nazwisko Adres IP
Maszyna wirtualna 1 vm-1 10.0.0.4
Maszyna wirtualna 2 vm-2 10.0.0.5

Środki ostrożności

  • Maszyny wirtualne na platformie Azure mogą obsługiwać MTU większe niż domyślne 1500 bajtów tylko dla ruchu, który pozostaje w sieci wirtualnej i bezpośrednio połączonych sieci wirtualnych w tym samym regionie. Ruch przechodzący przez bramy, globalne peeringi lub do internetu nie jest obsługiwany. Konfiguracja większej jednostki MTU może spowodować fragmentację i zmniejszenie wydajności. W przypadku ruchu korzystającego z tych scenariuszy użyj domyślnej 1500 bajtowej jednostki MTU do testowania, aby zapewnić obsługę większej jednostki MTU w całej ścieżce sieciowej.

  • Optymalna wartość MTU zależy od systemu operacyjnego, sieci oraz aplikacji. Maksymalna obsługiwana funkcja MTU może nie być optymalna dla twojego przypadku użycia.

  • Zawsze najpierw przetestuj zmiany ustawień jednostki MTU w środowisku niekrytycznym, zanim zastosujesz je na szeroką skalę lub w środowiskach krytycznych.

Odkrywanie MTU na ścieżce

Ważne jest, aby zrozumieć MTU obsługiwane na ścieżce sieciowej używanej przez Twoją aplikację lub maszyny. Odkrywanie MTU ścieżki to metoda, która umożliwia znalezienie największego MTU obsługiwanego pomiędzy adresem źródłowym a docelowym. Użycie większej jednostki MTU niż jest obsługiwane między adresem źródłowym i docelowym powoduje fragmentację, co może negatywnie wpłynąć na wydajność.

W tym artykule przedstawiono przykłady używane do testowania ścieżki MTU między dwiema maszynami wirtualnymi. Kolejne testy można wykonać z maszyny wirtualnej do dowolnego routowalnego miejsca docelowego.

Wykonaj poniższe kroki, aby ustawić większy rozmiar jednostki MTU na źródłowej i docelowej maszynie wirtualnej. Zweryfikuj trasę MTU za pomocą skryptu powłoki dla systemu Linux lub PowerShell dla systemu Windows. Jeśli większe jednostki MTU nie są obsługiwane, wyniki wyświetlane w teście odnajdywania ścieżki jednostki MTU różnią się od ustawień skonfigurowanych w źródłowym lub docelowym interfejsie maszyny wirtualnej.

Skrypt powłoki jest dostępny w galerii przykładów platformy Azure. Pobierz skrypt dla systemu Linux z następującego linku i zapisz go na vm-1 i vm-2.

Aby zmienić rozmiar jednostki MTU na maszynie wirtualnej z systemem Linux, wykonaj następujące kroki:

  1. Logowanie do vm-1

  2. Użyj polecenia ip, aby wyświetlić bieżące interfejsy sieciowe i ich ustawienia MTU, i zapisz adres IP dla kolejnych kroków. W tym przykładzie adres IP to 10.0.0.4 , a interfejs Ethernet to 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. Ustaw wartość MTU na vm-1 na najwyższą wartość obsługiwaną przez interfejs sieciowy. W tym przykładzie nazwa interfejsu sieciowego to eth0. Zamień tę wartość na swoją.

    • W przypadku adaptera Mellanox użyj następującego przykładu, aby ustawić wartość jednostki MTU na 3900:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • W przypadku karty sieciowej Microsoft Azure użyj następującego przykładu, aby ustawić jednostkę MTU na 9000:
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Ważne

    Zmiany wartości MTU wprowadzone w poprzednich krokach nie są zachowywane podczas ponownego uruchamiania. Aby wprowadzić zmiany na stałe, zapoznaj się z odpowiednią dokumentacją dystrybucji systemu Linux.

  4. Użyj polecenia ip, aby sprawdzić, czy ustawienia jednostki MTU są stosowane do interfejsu sieciowego.

    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. Zaloguj się do maszyny wirtualnej vm-2, aby powtórzyć poprzednie kroki i ustawić wartość MTU na najwyższą obsługiwaną przez interfejs sieciowy.

  6. Zaloguj się do vm-1.

  7. Użyj poniższego przykładu, aby wykonać skrypt powłoki systemu Linux w celu przetestowania największego rozmiaru jednostki MTU, który może być używany dla określonej ścieżki sieciowej. Zastąp wartość hosta docelowego adresem IP maszyny wirtualnej vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. Dane wyjściowe będą podobne do poniższego przykładu. Jeśli dane wyjściowe skryptu nie wyświetlają ustawienia w interfejsie sieciowym, oznacza to, że rozmiar jednostki MTU nie jest poprawnie ustawiony. Alternatywnie może to oznaczać, że urządzenie sieciowe znajdujące się na trasie obsługuje tylko rozmiar MTU zwrócony przez skrypt 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. Sprawdź rozmiar jednostki MTU w interfejsie sieciowym przy użyciu polecenia PING. W przypadku systemu Linux użyj flag -M, -s i -c. Opcja -M powoduje, że polecenie ping nie fragmentuje, -s ustawia rozmiar pakietu, a -c ustawia liczbę poleceń ping do wysłania. Aby określić rozmiar pakietu, odejmij 28 z ustawienia jednostki 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
    

    Wskazanie niezgodności ustawień między źródłem a miejscem docelowym jest wyświetlane jako komunikat o błędzie w danych wyjściowych. W takim przypadku funkcja MTU nie jest ustawiona w źródłowym interfejsie sieciowym.

    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. Zaloguj się do vm-2.

  11. Użyj poniższego przykładu, aby uruchomić skrypt powłoki Linuksa i przetestować maksymalny rozmiar MTU, który może być używany dla określonej ścieżki sieciowej.

    ./GetPathMtu.sh 10.0.0.4
    
  12. Dane wyjściowe będą podobne do poniższego przykładu. Jeśli dane wyjściowe skryptu nie wyświetlają ustawienia w interfejsie sieciowym, oznacza to, że rozmiar jednostki MTU nie jest poprawnie ustawiony. Alternatywnie może to oznaczać, że urządzenie sieciowe znajdujące się na trasie obsługuje tylko rozmiar MTU zwrócony przez skrypt 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. Sprawdź rozmiar jednostki MTU w interfejsie sieciowym przy użyciu polecenia PING. W przypadku systemu Linux użyj flag -M, -s i -c. Opcja -M powoduje, że polecenie ping nie fragmentuje, -s ustawia rozmiar pakietu, a -c ustawia liczbę poleceń ping do wysłania. Aby określić rozmiar pakietu, odejmij 28 z ustawienia jednostki 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
    

    Wskazanie niezgodności ustawień między źródłem a miejscem docelowym jest wyświetlane jako komunikat o błędzie w danych wyjściowych. W takim przypadku funkcja MTU nie jest ustawiona w źródłowym interfejsie sieciowym.

    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
    

Cofnij zmiany

Aby przywrócić zmiany wprowadzone w tym artykule, wykonaj następujące czynności:

  1. Zaloguj się do vm-1.

  2. Użyj następującego przykładu, aby ustawić wartość jednostki MTU na wartość domyślną 1500:

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

    Ważne

    Zmiany wartości MTU wprowadzone w poprzednich krokach nie są zachowywane podczas ponownego uruchamiania. Aby wprowadzić zmiany na stałe, zapoznaj się z odpowiednią dokumentacją dystrybucji systemu Linux.

  3. Użyj polecenia ip, aby sprawdzić, czy ustawienia jednostki MTU są stosowane do interfejsu sieciowego.

    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. Zaloguj się na vm-2, aby powtórzyć poprzednie kroki i ustawić wartość MTU na domyślną 1500.

  • Przegląd karty sieciowej Microsoft Azure (MANA).