Configuración de la unidad de transmisión máxima (MTU) para máquinas virtuales en Azure
La unidad de transmisión máxima (MTU) es una medida que representa el marco ethernet más grande (paquete) transmitido por un dispositivo de red o interfaz. Si un paquete supera el tamaño más grande aceptado por el dispositivo, el paquete se fragmenta en varios paquetes más pequeños y, después, se vuelve a ensamblar en el destino.
La fragmentación y el reensamblado pueden introducir problemas de rendimiento y ordenación, lo que da lugar a una experiencia poco óptima. La optimización de MTU para su solución puede proporcionar ventajas de rendimiento de ancho de banda de red al reducir el número total de paquetes necesarios para enviar un conjunto de datos. La configuración de tamaños de MTU más grandes puede mejorar el rendimiento de la red, ya que reduce el número de paquetes y sobrecarga de encabezado necesaria para enviar un conjunto de datos.
La MTU es una opción configurable en el sistema operativo de una máquina virtual. El valor predeterminado de MTU en Azure es de 1500 bytes.
Las máquinas virtuales de Azure pueden admitir MTU más grandes que el valor predeterminado de 1500 bytes solo para el tráfico que permanece dentro de la red virtual.
En la tabla siguiente se muestra el tamaño de MTU más grande admitido en las interfaces de red de Azure disponibles en Azure:
Sistema operativo | Interfaz de red | La MTU más grande para el tráfico entre redes virtuales |
---|---|---|
Windows Server | Mellanox Cx-3, Cx-4, Cx-5 | 3900 Al establecer el valor de MTU con Set-NetAdapterAdvancedProperty , use el valor 4088 .. Para conservar los reinicios, el valor devuelto por Test-Connection también debe establecerse con Set-NetIPInterface . |
Windows Server | (Versión preliminar) Adaptador de red de Microsoft Azure (MANA) | 9000 Al establecer el valor de MTU con Set-NetAdapterAdvancedProperty , use el valor 9014 . Para conservar los reinicios, el valor devuelto por Test-Connection también debe establecerse con Set-NetIPInterface . |
Linux | Mellanox Cx-3, Cx-4, Cx-5 | 3900 |
Linux | (Versión preliminar) Adaptador de red de Microsoft Azure | 9000 |
Requisitos previos
Una cuenta de Azure con una suscripción activa. cree una de forma gratuita.
Dos Linux Virtual Machines en la misma red virtual en Azure. Para más información sobre cómo crear una máquina virtual Linux, consulte Creación de una máquina virtual Linux en Azure Portal. Se requiere acceso remoto a las máquinas virtuales para completar el artículo. Para más información sobre cómo conectarse a Azure Virtual Machines de forma segura, vea ¿Qué es Azure Bastion?
- En este artículo, las máquinas virtuales se denominan vm-1 y vm-2. Reemplace estos valores por sus valores.
Ejemplos de recursos
Los siguientes recursos se usan como ejemplos en este artículo. Reemplace estos valores por sus valores.
Resource | Nombre | Dirección IP |
---|---|---|
Máquina virtual 1 | vm-1 | 10.0.0.4 |
Máquina virtual 2 | vm-2 | 10.0.0.5 |
Precauciones
Las máquinas virtuales de Azure pueden admitir una MTU más grande que el valor predeterminado de 1500 bytes solo para el tráfico que permanece dentro de la red virtual. No se admite una MTU mayor para escenarios fuera del tráfico de máquina virtual a máquina virtual dentro de la red virtual. Es posible que no se admita el tráfico que atraviesa las puertas de enlace, los emparejamientos o Internet. La configuración de una MTU más grande puede provocar fragmentación y reducción del rendimiento. Para el tráfico que usa estos escenarios, use la MTU de 1500 bytes predeterminada para realizar pruebas para asegurarse de que se admite una MTU más grande en toda la ruta de acceso de red.
La MTU óptima es específica del sistema operativo, la red y la aplicación. Es posible que la MTU máxima admitida no sea óptima para su caso de uso.
Pruebe siempre los cambios de configuración de MTU en un entorno no crítico antes de aplicarla primero a entornos generales o críticos.
Detección de la MTU de la ruta
Es importante comprender la MTU admitida en la ruta de acceso de red que usa su aplicación o máquinas. La detección de MTU de ruta de acceso es un medio para averiguar la MTU más grande admitida entre una dirección de origen y de destino. El uso de una MTU más grande de lo que se admite entre la dirección de origen y destino da lugar a la fragmentación, lo que podría afectar negativamente al rendimiento.
En este artículo, los ejemplos usados prueban la ruta de acceso de MTU entre dos máquinas virtuales. Las pruebas posteriores se pueden realizar desde una máquina virtual a cualquier destino enrutable.
Siga estos pasos para establecer un tamaño de MTU mayor en una máquina virtual de origen y destino. Compruebe la ruta de acceso de MTU con un script de shell para Linux o PowerShell para Windows. Si no se admite la MTU más grande, los resultados que se muestran en la prueba de detección de MTU de ruta de acceso difieren de las opciones configuradas en la interfaz de máquina virtual de origen o destino.
El script de shell está disponible en la galería de ejemplos de Azure. Descargue el script para Linux desde el vínculo siguiente y guárdelo en vm-1 y vm-2.
Siga estos pasos para cambiar el tamaño de MTU en una máquina virtual Linux:
Inicie sesión en vm-1
Use el comando
ip
para mostrar las interfaces de red actuales y su configuración de MTU, Registre la dirección IP para los pasos posteriores. En este ejemplo, la dirección IP es 10.0.0.4 y la interfaz ethernet es 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
Establezca el valor de MTU en vm-1 en el valor más alto admitido por la interfaz de red. En este ejemplo, el nombre de la interfaz de red es eth0. Reemplace este valor por su valor.
- Para el adaptador de Mellanox, use el ejemplo siguiente para establecer el valor de MTU en 3900:
echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
- Para el adaptador de red de Microsoft Azure, use el ejemplo siguiente para establecer el valor de MTU en 9000:
echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Importante
Los cambios de MTU realizados en los pasos anteriores no se conservan durante un reinicio. Para realizar los cambios permanentes, consulte la documentación adecuada para la distribución de Linux.
Use el comando
ip
para comprobar que la configuración de MTU se aplica a la interfaz de red: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
Inicie sesión en vm-2 para repetir los pasos anteriores para establecer el valor de MTU en el valor más alto admitido por la interfaz de red.
Inicie sesión en vm-1.
Use el ejemplo siguiente para ejecutar el script de shell de Linux para probar el tamaño de MTU más grande que se puede usar para una ruta de acceso de red específica. Reemplace el valor del host de destino por la dirección IP de vm-2.
./GetPathMtu.sh 10.0.0.5
La salida será similar al del ejemplo siguiente: Si la salida del script no muestra la configuración en la interfaz de red, indica que el tamaño de MTU no se ha ajustado correctamente. Como alternativa, podría significar que un dispositivo de red a lo largo de la ruta de acceso solo admite el tamaño de MTU devuelto por el 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
Compruebe el tamaño de MTU en la interfaz de red mediante
PING
. Para Linux, use las marcas -M, -s y -c. La opción -M indica a ping que no fragmente, -s establece el tamaño del paquete y -c establece el número de pings que se van a enviar. Para determinar el tamaño del paquete, resta 28 del valor de MTU de 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
Indicación de que hay un error de coincidencia en la configuración entre el origen y el destino se muestra como un mensaje de error en la salida. En este caso, la MTU no se establece en la interfaz de red de origen.
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
Inicie sesión en vm-2.
Use el ejemplo siguiente para ejecutar el script de shell de Linux para probar el tamaño de MTU más grande que se puede usar para una ruta de acceso de red específica.
./GetPathMtu.sh 10.0.0.4
La salida será similar al del ejemplo siguiente: Si la salida del script no muestra la configuración en la interfaz de red, indica que el tamaño de MTU no se ha ajustado correctamente. Como alternativa, podría significar que un dispositivo de red a lo largo de la ruta de acceso solo admite el tamaño de MTU devuelto por el 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
Compruebe el tamaño de MTU en la interfaz de red mediante
PING
. Para Linux, use las marcas -M, -s y -c. La opción -M indica a ping que no fragmente, -s establece el tamaño del paquete y -c establece el número de pings que se van a enviar. Para determinar el tamaño del paquete, resta 28 del valor de MTU de 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
Indicación de que hay un error de coincidencia en la configuración entre el origen y el destino se muestra como un mensaje de error en la salida. En este caso, la MTU no se establece en la interfaz de red de origen.
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
Reversión de cambios
Para revertir los cambios realizados en este artículo, siga estos pasos:
Inicie sesión en vm-1.
Use el ejemplo siguiente para establecer el valor de MTU en el valor predeterminado de 1500:
echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Importante
Los cambios de MTU realizados en los pasos anteriores no se conservan durante un reinicio. Para realizar los cambios permanentes, consulte la documentación adecuada para la distribución de Linux.
Use el comando
ip
para comprobar que la configuración de MTU se aplica a la interfaz de red: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
Inicie sesión en vm-2 para repetir los pasos anteriores para establecer el valor de MTU en el valor predeterminado de 1500.