Condividi tramite


Configurare l'unità massima di trasmissione per le macchine virtuali in Azure

L'unità massima di trasmissione è una misura che rappresenta il frame Ethernet di dimensioni maggiori (pacchetto) trasmesso da un dispositivo o un'interfaccia di rete. Se un pacchetto supera le dimensioni accettate dal dispositivo, il pacchetto viene frammentato in più pacchetti più piccoli, quindi riassemblato nella destinazione.

La frammentazione e il riassemblaggio possono introdurre problemi a livello di prestazioni e ordinamento e pertanto causare un'esperienza non ottimale. L'ottimizzazione dell'unità massima di trasmissione per la soluzione in uso può offrire vantaggi in termini di prestazioni della larghezza di banda di rete riducendo il numero totale di pacchetti necessari per inviare un set di dati. La configurazione di dimensioni maggiori dell'unità massima di trasmissione può potenzialmente migliorare la velocità effettiva di rete, riducendo il numero di pacchetti e il sovraccarico dell'intestazione necessari per inviare un set di dati.

L'unità massima di trasmissione è un'impostazione configurabile nel sistema operativo di una macchina virtuale. Il valore predefinito dell'impostazione dell'unità massima di trasmissione in Azure è pari a 1500 byte.

Le macchine virtuali in Azure possono supportare MTU di dimensioni maggiori rispetto all'impostazione predefinita di 1.500 byte solo per il traffico che rimane all'interno della rete virtuale.

La tabella seguente illustra le dimensioni dell'unità massima di trasmissione più grandi supportate nelle interfacce di rete di Azure disponibili in Azure:

Sistema operativo Interfaccia di rete Unità massima di trasmissione più grande per il traffico tra reti virtuali
Server Windows Mellanox Cx-3, Cx-4, Cx-5 3900
Quando si imposta il valore dell'unità massima di trasmissione con Set-NetAdapterAdvancedProperty, usare il valore 4088.. Per rendere persistenti i riavvii, è necessario impostare anche il valore restituito da Test-Connection con Set-NetIPInterface.
Server Windows (Anteprima) Scheda di rete di Microsoft Azure (MANA) 9000
Quando si imposta il valore dell'unità massima di trasmissione con Set-NetAdapterAdvancedProperty, usare il valore 9014.. Per rendere persistenti i riavvii, è necessario impostare anche il valore restituito da Test-Connection con Set-NetIPInterface.
Linux Mellanox Cx-3, Cx-4, Cx-5 3900
Linux (Anteprima) Scheda di rete di Microsoft Azure 9000

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Crearne una gratuitamente.

  • Due macchine virtuali Linux nella stessa rete virtuale in Azure. Per altre informazioni sulla creazione di una macchina virtuale Linux, vedere Creare una macchina virtuale Linux nel portale di Azure. Per il completamento dell'articolo è necessario disporre dell'accesso remoto alle macchine virtuali. Per altre informazioni sulla connessione sicura alle macchine virtuali di Azure, vedere Cos'è Azure Bastion?

    • Ai fini di questo articolo, le macchine virtuali sono denominate vm-1 e vm-2. Sostituire questi valori con quelli personalizzati.

Esempi di risorse

Le risorse seguenti vengono usate come esempi in questo articolo. Sostituire questi valori con quelli personalizzati.

Conto risorse Nome Indirizzo IP
Macchina virtuale 1 vm-1 10.0.0.4
Macchina virtuale 2 vm-2 10.0.0.5

Precauzioni

  • Le macchine virtuali in Azure possono supportare una MTU di dimensioni maggiori rispetto all'impostazione predefinita di 1.500 byte solo per il traffico che rimane all'interno della rete virtuale. Un'unità massima di trasmissione di dimensioni maggiori non è supportata in scenari esterni al traffico da macchina virtuale a macchina virtuale all'interno della rete virtuale. Il traffico che attraversa i gateway, i peering o Internet potrebbe non essere supportato. La configurazione di un'unità massima di trasmissione più grande può comportare la frammentazione e la riduzione delle prestazioni. Per il traffico che usa questi scenari, usare l'unità massima di trasmissione predefinita di 1500 byte per verificare se un'unità massima di trasmissione più grande è supportata nell'intero percorso di rete.

  • L'unità massima di trasmissione ottimale è specifica del sistema operativo, della rete e dell'applicazione. Il valore massimo supportato dell'unità massima di trasmissione potrebbe non essere ottimale per il caso d'uso.

  • Testare sempre le modifiche delle impostazioni dell'unità massima di trasmissione in un ambiente non critico prima di applicarle su larga scala o ad ambienti critici.

Individuazione dell'unità massima di trasmissione del percorso

È importante conoscere l'unità massima di trasmissione supportato nel percorso di rete usato dall'applicazione o dai computer. L'individuazione dell'unità massima di trasmissione del percorso è un mezzo per scoprire il valore massimo dell'unità massima di trasmissione supportato tra un indirizzo di origine e un indirizzo di destinazione. L'uso di un'unità massima di trasmissione di dimensioni maggiori rispetto a quelle supportate tra l'indirizzo di origine e quello di destinazione comporta la frammentazione, che potrebbe influire negativamente sulle prestazioni.

In questo articolo gli esempi usati testano il percorso dell'unità massima di trasmissione tra due macchine virtuali. I test successivi possono essere eseguiti da una macchina virtuale a qualsiasi destinazione instradabile.

Usare la procedura seguente per impostare una dimensione maggiore per l'unità massima di trasmissione in una macchina virtuale di origine e in una di destinazione. Verificare il percorso dell'unità massima di trasmissione con uno script della shell per Linux o PowerShell per Windows. Se il valore più alto dell'unità massima di trasmissione non è supportato, i risultati visualizzati nel test di individuazione dell'unità massima di trasmissione del percorso differiscono dalle impostazioni configurate nell'interfaccia delle macchine virtuali di origine o di destinazione.

Lo script della shell è disponibile nella raccolta di esempi di Azure. Scaricare lo script per Linux dal collegamento seguente e salvarlo in vm-1 e vm-2.

Usare la procedura seguente per modificare le dimensioni dell'unità massima di trasmissione in una macchina virtuale Linux:

  1. Accedere a vm-1

  2. Usare il comando ip per visualizzare le interfacce di rete correnti e le relative impostazioni dell'unità massima di trasmissione; registrare l'indirizzo IP per i passaggi successivi. In questo esempio l'indirizzo IP è 10.0.0.4 e l'interfaccia Ethernet è 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. Impostare il valore dell'unità massima di trasmissione in vm-1 sul valore più alto supportato dall'interfaccia di rete. In questo esempio il nome dell'interfaccia di rete è eth0. Sostituire questo valore con il valore desiderato.

    • Per la scheda Mellanox, usare l'esempio seguente per impostare il valore dell'unità massima di trasmissione su 3900:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Per la scheda di rete di Microsoft Azure, usare l'esempio seguente per impostare il valore dell'unità massima di trasmissione su 9000:
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Importante

    Le modifiche dell'unità massima di trasmissione apportate nei passaggi precedenti non vengono conservate durante un riavvio. Per rendere permanenti le modifiche, consultare la documentazione appropriata per la distribuzione di Linux.

  4. Usare il comando ip per verificare che le impostazioni dell'unità massima di trasmissione vengano applicate all'interfaccia di rete:

    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. Accedere a vm-2 per ripetere i passaggi precedenti per impostare il valore dell'unità massima di trasmissione sul valore più alto supportato dall'interfaccia di rete.

  6. Accedere a vm-1.

  7. Usare l'esempio seguente per eseguire lo script della shell Linux per testare le dimensioni massime dell'unità massima di trasmissione che possono essere usate per un percorso di rete specifico. Sostituire il valore dell'host di destinazione con l'indirizzo IP di vm-2.

    ./GetPathMtu.sh 10.0.0.5
    
  8. L'output è simile all'esempio seguente: Se l'output dello script non visualizza l'impostazione nell'interfaccia di rete, significa che le dimensioni dell'unità massima di trasmissione non sono impostate correttamente. In alternativa, potrebbe indicare che un dispositivo di rete lungo il percorso supporta solo le dimensioni dell'unità massima di trasmissione restituite dallo script 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. Verificare le dimensioni dell'unità massima di trasmissione nell'interfaccia di rete usando PING. Per Linux, usare i flag -M, -s e -c. L'opzione -M indica il ping al frammento NOT, -s imposta le dimensioni del pacchetto e -c imposta il numero di ping da inviare. Per determinare le dimensioni del pacchetto, sottrarre 28 dall'impostazione dell'unità massima di trasmissione, ovvero da 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
    

    Un'indicazione della mancata corrispondenza delle impostazioni tra l'origine e la destinazione viene visualizzata come messaggio di errore nell'output. In questo caso, l'unità massima di trasmissione non è impostata nell'interfaccia di rete di origine.

    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. Accedere a vm-2.

  11. Usare l'esempio seguente per eseguire lo script della shell Linux per testare le dimensioni massime dell'unità massima di trasmissione che possono essere usate per un percorso di rete specifico:

    ./GetPathMtu.sh 10.0.0.4
    
  12. L'output è simile all'esempio seguente: Se l'output dello script non visualizza l'impostazione nell'interfaccia di rete, significa che le dimensioni dell'unità massima di trasmissione non sono impostate correttamente. In alternativa, potrebbe indicare che un dispositivo di rete lungo il percorso supporta solo le dimensioni dell'unità massima di trasmissione restituite dallo script 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. Verificare le dimensioni dell'unità massima di trasmissione nell'interfaccia di rete usando PING. Per Linux, usare i flag -M, -s e -c. L'opzione -M indica il ping al frammento NOT, -s imposta le dimensioni del pacchetto e -c imposta il numero di ping da inviare. Per determinare le dimensioni del pacchetto, sottrarre 28 dall'impostazione dell'unità massima di trasmissione, ovvero da 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
    

    Un'indicazione della mancata corrispondenza delle impostazioni tra l'origine e la destinazione viene visualizzata come messaggio di errore nell'output. In questo caso, l'unità massima di trasmissione non è impostata nell'interfaccia di rete di origine.

    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
    

Annulla modifiche

Per ripristinare le modifiche apportate in questo articolo, seguire questa procedura:

  1. Accedere a vm-1.

  2. Usare l'esempio seguente per impostare il valore dell'unità massima di trasmissione sul valore predefinito 1500:

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

    Importante

    Le modifiche dell'unità massima di trasmissione apportate nei passaggi precedenti non vengono conservate durante un riavvio. Per rendere permanenti le modifiche, consultare la documentazione appropriata per la distribuzione di Linux.

  3. Usare il comando ip per verificare che le impostazioni dell'unità massima di trasmissione vengano applicate all'interfaccia di rete:

    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. Accedere a vm-2 per ripetere i passaggi precedenti per impostare il valore dell'unità massima di trasmissione sul valore predefinito 1500.