Konfigurera maximal överföringsenhet (MTU) för virtuella datorer i Azure
MTU (Maximum Transmission Unit) är ett mått som representerar den största storleken på Ethernet-ramen (paket) som överförs av en nätverksenhet eller ett gränssnitt. Om ett paket överskrider den största storleken som accepteras av enheten fragmenteras paketet i flera mindre paket och monteras senare på målplatsen igen.
Fragmentering och återmontering kan medföra prestanda- och beställningsproblem, vilket resulterar i en suboptimal upplevelse. Att optimera MTU för din lösning kan ge prestandafördelar för nätverksbandbredden genom att minska det totala antalet paket som krävs för att skicka en datamängd. Konfiguration av större MTU-storlekar kan potentiellt förbättra nätverkets dataflöde eftersom det minskar antalet paket och huvudomkostnader som krävs för att skicka en datauppsättning.
MTU är en konfigurerbar inställning i en virtuell dators operativsystem. Standardvärdet för MTU-inställningen i Azure är 1 500 byte.
Virtuella datorer i Azure har stöd för större MTU än standardvärdet på 1 500 byte endast för trafik som stannar i det virtuella nätverket.
I följande tabell visas den största MTU-storleken som stöds i azure-nätverksgränssnitten som är tillgängliga i Azure:
Operativsystem | Nätverksgränssnitt | Största MTU för trafik mellan virtuella nätverk |
---|---|---|
Windows Server | Mellanox Cx-3, Cx-4, Cx-5 | 3900 När du anger MTU-värdet med Set-NetAdapterAdvancedProperty använder du värdet 4088 .. Om du vill spara omstarter måste värdet som returneras av Test-Connection också anges med Set-NetIPInterface . |
Windows Server | (Förhandsversion) Microsoft Azure Network Adapter MANA | 9000 När du anger MTU-värdet med Set-NetAdapterAdvancedProperty använder du värdet .9014 Om du vill spara omstarter måste värdet som returneras av Test-Connection också anges med Set-NetIPInterface . |
Linux | Mellanox Cx-3, Cx-4, Cx-5 | 3900 |
Linux | (Förhandsversion) Microsoft Azure-nätverkskort | 9 000 |
Förutsättningar
Ett Azure-konto med en aktiv prenumeration. Skapa en kostnadsfritt.
Två virtuella Linux-datorer i samma virtuella nätverk i Azure. Mer information om hur du skapar en virtuell Linux-dator finns i Skapa en virtuell Linux-dator i Azure Portal. Fjärråtkomst till de virtuella datorerna krävs för att slutföra artikeln. Mer information om hur du ansluter till virtuella Azure-datorer på ett säkert sätt finns i Vad är Azure Bastion?
- I den här artikeln får de virtuella datorerna namnet vm-1 och vm-2. Ersätt dessa värden med dina värden.
Resursexempel
Följande resurser används som exempel i den här artikeln. Ersätt dessa värden med dina värden.
Resurs | Name | IP-adress |
---|---|---|
Virtuell dator 1 | vm-1 | 10.0.0.4 |
Virtuell dator 2 | vm-2 | 10.0.0.5 |
Försiktighetsåtgärder
Virtuella datorer i Azure har stöd för en större MTU än standardvärdet på 1 500 byte endast för trafik som stannar i det virtuella nätverket. En större MTU stöds inte för scenarier utanför intra-virtual network VM-to-VM-trafik. Trafik som passerar via gatewayer, peering-enheter eller till Internet kanske inte stöds. Konfiguration av en större MTU kan leda till fragmentering och sämre prestanda. För trafik som använder dessa scenarier använder du standardvärdet 1 500 byte MTU för testning för att säkerställa att en större MTU stöds över hela nätverkssökvägen.
Optimal MTU är specifikt för operativsystem, nätverk och program. Den maximala MTU som stöds kanske inte är optimal för ditt användningsfall.
Testa alltid ändringar av MTU-inställningar i en icke-kritisk miljö först innan du tillämpar brett eller på kritiska miljöer.
Sökväg till MTU-identifiering
Det är viktigt att förstå den MTU som stöds på nätverksvägen som programmet eller datorerna använder. MTU-identifiering av sökväg är ett sätt att ta reda på den största MTU som stöds mellan en källa och måladress. Att använda en större MTU än vad som stöds mellan käll- och måladressen resulterar i fragmentering, vilket kan påverka prestanda negativt.
I den här artikeln testar exemplen MTU-sökvägen mellan två virtuella datorer. Efterföljande tester kan utföras från en virtuell dator till valfritt routningsbart mål.
Använd följande steg för att ange en större MTU-storlek på en virtuell käll- och måldator. Verifiera sökvägen till MTU med ett gränssnittsskript för Linux eller PowerShell för Windows. Om den större MTU:n inte stöds skiljer sig resultaten som visas i MTU-identifieringstestet från de inställningar som konfigurerats i gränssnittet för den virtuella käll- eller måldatorn.
Shell-skriptet är tillgängligt i Azure-exempelgalleriet. Ladda ned skriptet för Linux från följande länk och spara till vm-1 och vm-2.
Använd följande steg för att ändra MTU-storleken på en virtuell Linux-dator:
Logga in på vm-1
ip
Använd kommandot för att visa de aktuella nätverksgränssnitten och deras MTU-inställningar, Registrera IP-adressen för efterföljande steg. I det här exemplet är IP-adressen 10.0.0.4 och Ethernet-gränssnittet är 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
Ange MTU-värdet på vm-1 till det högsta värde som stöds av nätverksgränssnittet. I det här exemplet är namnet på nätverksgränssnittet eth0. Ersätt det här värdet med ditt värde.
- För Mellanox-adaptern använder du följande exempel för att ange MTU-värdet till 3900:
echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
- För Microsoft Azure-nätverkskortet använder du följande exempel för att ange MTU-värdet till 9000:
echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Viktigt!
MTU-ändringarna som gjordes i föregående steg bevaras inte under en omstart. Om du vill göra ändringarna permanenta läser du lämplig dokumentation för din Linux-distribution.
ip
Använd kommandot för att kontrollera att MTU-inställningarna tillämpas på nätverksgränssnittet: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
Logga in på vm-2 för att upprepa föregående steg för att ange MTU-värdet till det högsta värde som stöds av nätverksgränssnittet.
Logga in på vm-1.
Använd följande exempel för att köra Linux Shell-skriptet för att testa den största MTU-storleken som kan användas för en specifik nätverkssökväg. Ersätt värdet för målvärden med IP-adressen för vm-2.
./GetPathMtu.sh 10.0.0.5
De utdata som genereras påminner om de i följande exempel. Om skriptets utdata inte visar inställningen i nätverksgränssnittet anger det att MTU-storleken inte är korrekt inställd. Alternativt kan det innebära att en nätverksenhet längs sökvägen endast stöder MTU-storleken som returneras av GetPathMTU-skriptet.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5 destination: 10.0.0.5 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
Kontrollera MTU-storleken i nätverksgränssnittet med hjälp av
PING
. För Linux använder du flaggorna -M, -s och -c. Alternativet -M instruerar ping till NOT fragment, -s anger paketstorleken och -c anger antalet pingar som ska skickas. För att fastställa paketstorleken subtraherar du 28 från MTU-inställningen 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
En indikation på att det finns ett matchningsfel i inställningarna mellan källan och målet visas som ett felmeddelande i utdata. I det här fallet har MTU inte angetts i källnätverksgränssnittet.
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
Logga in på vm-2.
Använd följande exempel för att köra Linux Shell-skriptet för att testa den största MTU-storleken som kan användas för en specifik nätverkssökväg:
./GetPathMtu.sh 10.0.0.4
De utdata som genereras påminner om de i följande exempel. Om skriptets utdata inte visar inställningen i nätverksgränssnittet anger det att MTU-storleken inte är korrekt inställd. Alternativt kan det innebära att en nätverksenhet längs sökvägen endast stöder MTU-storleken som returneras av GetPathMTU-skriptet.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4 destination: 10.0.0.4 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
Kontrollera MTU-storleken i nätverksgränssnittet med hjälp av
PING
. För Linux använder du flaggorna -M, -s och -c. Alternativet -M instruerar ping till NOT fragment, -s anger paketstorleken och -c anger antalet pingar som ska skickas. För att fastställa paketstorleken subtraherar du 28 från MTU-inställningen 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
En indikation på att det finns ett matchningsfel i inställningarna mellan källan och målet visas som ett felmeddelande i utdata. I det här fallet har MTU inte angetts i källnätverksgränssnittet.
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
Återställ ändringar
Använd följande steg för att återställa de ändringar som gjorts i den här artikeln:
Logga in på vm-1.
Använd följande exempel för att ange MTU-värdet till standardvärdet 1500:
echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Viktigt!
MTU-ändringarna som gjordes i föregående steg bevaras inte under en omstart. Om du vill göra ändringarna permanenta läser du lämplig dokumentation för din Linux-distribution.
ip
Använd kommandot för att kontrollera att MTU-inställningarna tillämpas på nätverksgränssnittet: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
Logga in på vm-2 för att upprepa föregående steg för att ange MTU-värdet till standardvärdet 1500.
Relaterat innehåll
- Översikt över Microsoft Azure Network Adapter (MANA).