Ajuste manual del valor de MTU en macOS

MTU (maximum transfer unit): ajuste manual en sistemas macOS

El parámetro MTU (maximum transfer unit) es el tamaño máximo de los paquetes que enviamos a Internet. Es diferente dependiendo del tipo de conexión. Su valor óptimo es cuando los paquetes son:

  • suficientemente pequeños para no tener que ser fragmentados y reensamblados en algún nodo de la red
  • suficientemente grandes para ocupar lo más eficientemente posible el ancho de banda.

Por defecto tanto los routers como Snow Leopard tienen configurado este valor en automático, lo que significa que el valor MTU (que suele ser inicialmente de 1500 bytes) puede variar sobre la marcha si se detecta un tamaño excesivo que obliga a fragmentar paquetes. Si se ajusta el valor de forma manual se puede conseguir una pequeña mejora en el rendimiento de nuestra conexión a Internet. Hay que hacer notar que la mejora será pequeña y no será visible por igual para todos los usuarios.

Para realizar el cálculo manual del valor óptimo de MTU, tanto el router como macOS han de tener la MTU configurada en el modo automático. Se abre Terminal y se realizan pings a una página determinada especificando diferentes tamaños de paquete hasta conseguir el tamaño máximo sin fragmentación con el comando

ping -D -s tam_en_bytes www.sitio.com


Ejemplo 1

Paquete de 1490 bytes que es demasiado grande y causa pérdida completa de paquetes:

EMI:~ pol$ ping -D -s 1490 www.google.com
  PING www.l.google.com (74.125.230.83): 1490 data bytes
  ping: sendto: Message too long
  ping: sendto: Message too long
  Request timeout for icmp_seq 0
  ping: sendto: Message too long
  Request timeout for icmp_seq 1
  ping: sendto: Message too long
  Request timeout for icmp_seq 2
  ping: sendto: Message too long
  Request timeout for icmp_seq 3
  ...
  --- www.l.google.com ping statistics ---
  7 packets transmitted, 0 packets received, 100.0% packet loss


Ejemplo 2

Paquete de 1470 bytes que es demasiado grande y requiere fragmentación y causa pérdida de paquetes que puede ser completa:

EMI:~ pol$ ping -D -s 1470 www.google.com
  PING www.l.google.com (74.125.230.82): 1470 data bytes
  556 bytes from 2 79.154.5.23: frag needed and DF set (MTU 1492)
  Request timeout for icmp_seq 0
  556 bytes from 2 79.154.5.23: frag needed and DF set (MTU 1492)
  Request timeout for icmp_seq 1
  556 bytes from 2 79.154.5.23: frag needed and DF set (MTU 1492)
  Request timeout for icmp_seq 2
  556 bytes from 2 79.154.5.23: frag needed and DF set (MTU 1492)
  ...
  --- www.l.google.com ping statistics ---
  7 packets transmitted, 0 packets received, 100.0% packet loss


Ejemplo 3

Ejemplo con paquete de 1400 bytes que no requiere fragmentación y no causa pérdida de paquetes:

EMI:~ pol$ ping -D -s 1450 www.google.com
  PING www.l.google.com (74.125.230.83): 1450 data bytes
  1458 bytes from 74.125.230.83: icmp_seq=0 ttl=52 time=92.082 ms
  1458 bytes from 74.125.230.83: icmp_seq=1 ttl=52 time=92.118 ms
  1458 bytes from 74.125.230.83: icmp_seq=2 ttl=52 time=95.059 ms
  1458 bytes from 74.125.230.83: icmp_seq=3 ttl=52 time=92.151 ms
  1458 bytes from 74.125.230.83: icmp_seq=4 ttl=52 time=95.006 ms
  ...
  --- www.l.google.com ping statistics ---
  7 packets transmitted, 7 packets received, 0.0% packet loss

El truco está en comenzar por una cifra baja que no cause fragmentación (ej: 1400) e ir haciendo pruebas subiendo el tamaño de 10 en 10 bytes hasta obtener el máximo anterior al que requiere fragmentación. A la cifra así obtenida hay que restarle 28 bytes que son añadidos por la propia herramienta ping.
Si el valor óptimo es 1460, la MTU ha de valer 1460 – 28 = 1432.

El valor de MTU ha de ser modificado en el router y en el panel Red de Preferencias del Sistema:

Cada vez que se modifique el parámetro MTU es conveniente limpiar la caché de DNS ejecutando desde Terminal el comando

dscacheutil -flushcache.