Cómo optimizar la velocidad de Internet de Ubuntu con la configuración de MTU

Cómo optimizar la velocidad de Internet de Ubuntu con la configuración de MTU

Si bien los textos informáticos difieren en la aplicación del término, Ubuntu usa la Unidad de transmisión máxima TCP (MTU) para referirse al tamaño más grande de un paquete TCP que una máquina puede pasar a través de una conexión de red TCP / IP. Si bien calcular este valor es relativamente simple y los valores predeterminados funcionan en la mayoría de las máquinas, podría ser posible optimizar aún más su sistema si los paquetes se fragmentan debido a configuraciones inusuales. Enviar grandes paquetes salientes individuales es más eficiente que enviar varios paquetes salientes más pequeños.

La forma más sencilla de averiguar el valor MTU correcto para su máquina es abrir una ventana de terminal. Mantenga presionada la tecla CTRL, ATL y T o quizás inicie desde el tablero de Unity. Si está trabajando con Ubuntu Server, entonces usará de forma predeterminada una interfaz CLI sin ningún entorno gráfico. Una vez que esté en la terminal, escriba ping -s 1464 -c1 distrowatch.com y espere la salida. Si no recibe nada, significa que su conexión de red no se ha configurado correctamente. Suponiendo que recibió la salida adecuada, busque una sección que lea 1464 (1492) bytes de datos, lo que indica que está enviando el paquete con 28 bytes de información de encabezado.

Método 1: Examinar la salida de ping en busca de fragmentación de paquetes

El comando ping le permitirá saber si el paquete se envió como más de un fragmento con varios datos de encabezado adjuntos. Examine la salida de cualquier línea que advierte sobre algo relacionado con 'Frag necesaria y DF set (mtu = 1492)' o cualquier texto similar. Dependiendo de qué versión de ping se incluyó con su versión de Ubuntu, la advertencia puede estar redactada de manera diferente. Si este texto no está presente, lo más probable es que ya esté trabajando con alguna medida de MTU que no esté enviando paquetes fragmentados en este momento.



Para encontrar la MTU más optimizada para su sistema, querrá ejecutar este comando ping con un tamaño de paquete pequeño y luego, con el tiempo, aumentarlo hasta que comience a fragmentarse, después de lo cual considera que este es su punto de corte. Tenga en cuenta que MTU = payload + 28, ya que debe haber algo de espacio para los datos del encabezado. Ahora, si puede aumentar el tamaño a algo muy grande sin ningún fragmento, entonces su interfaz de red podría manejar paquetes masivos sin la necesidad de generar fragmentos. Cuando finalmente vea una advertencia de Frag necesario, esto significa que cualquier paquete enviado con una carga útil del tamaño que ejecutó o superior se enviará como paquetes múltiples. Suponga que si intenta hacer ping -s 2464 -c1 distrowatch.com sin ninguna advertencia, pero ping -s 2465 -c1 distrowatch.com envía una advertencia, esto significa que 2,464 + 28 es la configuración de MTU más grande que su configuración de TCP / IP puede manejar. antes de enviar varios paquetes fragmentados. Es posible que se necesiten unos minutos para identificar un valor exacto.

Una vez que tenga un valor en mente para ejecutar el comando ping varias veces, deberá ejecutar sudo ifconfig para encontrar una lista de interfaces de red conocidas. Ubuntu y sus derivados eliminan la cuenta raíz, pero operamos desde un shell creado por sudo bash para nuestros ejemplos. Se recomienda que prefiera comenzar cada comando con sudo individualmente.

Tan pronto como sepa el dispositivo correcto, intente:

sudo ifconfig interfaceName man ####

Reemplaza interfaceName con el nombre del adaptador de red con el que estás trabajando y luego reemplaza #### con el tamaño que encontraste más 28 para la información del encabezado. Puede ejecutar ifconfig para ver cuál era el MTU predeterminado para su NIC y ejecutarlo nuevamente varias veces para ver si este comando anterior lo cambia. Algunos adaptadores de interfaz de red simplemente no le permitirán cambiarlo. Si ese es el caso, la optimización adicional será infructuosa, lamentablemente. Sin embargo, si esto funcionó, entonces puede hacerlo permanente. Intenta correr ifconfig | grep MTU para encontrar todos los valores si tiene varios conectores, y luego puede hacer coincidir los valores con los conectores con los que está trabajando.

Método 2: hacer que las optimizaciones de MTU se mantengan

Hasta ahora, no ha realizado ningún cambio permanente en su sistema. Si reinicia, eliminará los cambios, lo cual es bueno si cometió algún tipo de error y descubre que ya no puede conectarse a Internet. Por otro lado, si ha encontrado un valor exacto para su MTU, deberá editar el documento. Este es probablemente un buen momento para hacer una copia en caso de que ocurra algo. Tratar o algo similar para que tenga una copia por si acaso. Si desea editarlo gráficamente, escriba e ingrese su contraseña. Si está usando Kubuntu, Xubuntu o Lubuntu, entonces deberá reemplazar gedit con el editor de texto gráfico que usa su respin de Ubuntu. Xubuntu, por ejemplo, usa mousepad en lugar de gedit. Si está utilizando Ubuntu Server o simplemente prefiere trabajar con la línea de comandos, escriba , asumiendo que no estás usando un shell de root.

Independientemente del método que utilizó para editarlo, busque el nombre de la interfaz ifconfig escupir antes. Supongamos que está mirando el primer conector Wifi de su máquina, que probablemente se llamaría wlan0 o algo similar. En este caso, busque un fragmento de código que comience con iface wlan0 inet static o algo similar. Su millaje puede variar, pero la siguiente línea leerá la dirección seguida de una dirección IP en el formato ###. ###. #. ##. Es posible que tenga un formato diferente si tiene una conexión IPv6 nativa. Tendrá una máscara de red y una línea de puerta de enlace, seguidas de algo que incluya un nombre de host o algo similar. En la parte inferior, tendrá otra línea que dice mtu y un número. Reemplace ese número con el valor de optimización de MTU, guarde el documento y luego salga del editor de texto. Querrá reiniciar el sistema para asegurarse de que funcione.

Si todo va bien después de varios reinicios, elimine el archivo interfaces.bak en su directorio ~ / Documents. En su lugar, podría usar sudo mv y entonces

si algo salió mal en el proceso.

Método 3: Edición de la configuración de la ventana de recepción TCP (RWIN)

Ubuntu se refiere a la mayor cantidad de datos que acepta un host antes de reconocer al remitente como el valor RWIN. Si descarga un archivo de 30 MB, el servidor remoto no le enviará inmediatamente un bloque de datos de 30 MB. Su host Ubuntu envía un número RWIN específico cuando solicita el archivo, y luego el servidor comienza a transmitir datos hasta que alcanza la cantidad de bytes antes de esperar un reconocimiento de que su sistema obtuvo los datos. Una vez que el servidor recibe esto, comienza a enviar bloques adicionales antes de esperar otra confirmación.

La latencia es el tiempo que se tarda en transmitir y recibir paquetes desde un servidor remoto. Las tarifas de conexión contribuyen a este valor, pero también lo hacen muchos otros retrasos. El comando ping explicará la latencia en términos de números de tiempo de ida y vuelta (RTT). Mire el resultado de nuestro ping anterior de DistroWatch. Encontrará una línea que dice time = 134 ms, que es el tiempo que tardaron los paquetes en realizar un viaje de ida y vuelta desde nuestra máquina Ubuntu a distrowatch.com y viceversa. Estábamos enviando un paquete de 1492 bytes, por lo que a 134 ms podríamos calcular una fórmula para encontrar la velocidad de transferencia total:

1492 / .134 segundos = 11134,328 bytes / segundo, lo que equivale aproximadamente a 10,88 kilobytes binarios por segundo. Eso es bastante lento en general, por lo que RWIN está implementado para evitar que tenga que reconocer cada paquete enviado individualmente.

La configuración de RWIN en Ubuntu es independiente de la configuración de MTU. Calcule el Producto de retardo de ancho de banda (BDP) para su conexión a Internet con esta fórmula:

(Ancho de banda máximo total que su conexión a Internet debe proporcionar en bytes por segundo) (RTT en segundos) = BDP

El tamaño del paquete TCP no influye en RWIN, pero el tamaño del paquete en sí está influenciado por el valor seleccionado en el Método 1. Utilice este comando para encontrar las variables del kernel relacionadas con RWIN:

Tenga en cuenta que hay un espacio después de _mem, pero en ningún otro lugar del texto citado. Recuperarás varios valores. Los que se necesitan son net.ipv4.tcp_rmem, net.ipv4.tcp_wmem y net.ipv4.tcp_mem . Los números después de estos valores representan los valores mínimo, predeterminado y máximo de cada uno. Representan el vector de memoria de la ventana de recepción, el vector de envío y el vector de pila TCP. Si está ejecutando Ubuntu Kylin, es posible que tenga una larga lista de otros adicionales. Puede ignorar con seguridad cualquiera de estos valores adicionales. Algunos usuarios de Kylin también pueden ver algunos de los valores delineados en otros scripts, pero una vez más, simplemente busque estas líneas.

Ubuntu no tiene una variable RWIN, pero net.ipv4.tcp_rmem está cerca. Estas variables controlan el uso de la memoria y no solo el tamaño de TCP. Incluyen memoria consumida por estructuras de socket de datos y paquetes cortos en búferes masivos. Si desea optimizar estos valores, envíe los paquetes de tamaño máximo que estableció en el Método 1 a otro servidor remoto. Usemos el valor predeterminado de 1492 bytes nuevamente, restando 28 bytes para la información del encabezado, pero recuerde que puede tener un valor diferente. Utilice el comando ping -s 1464 -c5 distrowatch.com para obtener datos RTT adicionales.

Querrá ejecutar esta prueba más de una vez en diferentes momentos del día y de la noche. Intente hacer ping a otros servidores remotos también para ver cuánto varía el RTT. Como teníamos un promedio de poco más de 130 ms cada vez que lo probamos, podemos usar la fórmula para calcular nuestro BDP. Supongamos que tiene una conexión muy genérica de 6 Mbits / segundo. El BDP sería:

(6.000.000 bits / seg) (. 133 seg) * (1 byte / 8 bits) = 99.750 bytes

Esto significa que el valor predeterminado de net.ipv4.tcp_rmem debería estar alrededor de 100.000. Podrías establecerlo aún más alto si temes que obtendrás un RTT tan malo como medio segundo. Todos los valores que se encuentran en net.ipv4.tcp_rmem y net.ipv4.tcp_wmem deben configurarse de manera idéntica, ya que la transmisión y la recepción de paquetes se realizan a través de la misma conexión a Internet. Por lo general, querrá establecer net.ipv4.tcp_mem en el mismo valor utilizado por net.ipv4.tcp_wmem y net.ipv4.tcp_rmem, ya que esta primera variable es el tamaño total de memoria de búfer más grande establecido para transacciones TCP.

Emita el comando y vea si ambas configuraciones están configuradas en 0 o 1, lo que indica un estado de apagado o encendido.

Establecer net.ipv4.tcp_no_metrics_save en 1 forzará al kernel de Linux a optimizar la ventana de recepción entre los valores net.ipv4.tcp_rmem y net.ipv4.tcp_wmem de forma dinámica. Cuando net.ipv4.tcp_moderate_rcvbuf está habilitado, evita que la congestión influya en la conectividad posterior. Antes de realizar cambios permanentes, realice una verificación de velocidad a través de http://www.speedtest.net o http://www.bing.com/search?q=speed+test para asegurarse de tener un control de sus medidas.

Cambie temporalmente las variables con sus valores calculados. Asegúrese de reemplazar los # con sus sumas calculadas.

sudo sysctl -w net.ipv4.tcp_rmem = ”#### ##### ######” net.ipv4.tcp_wmem = ”#### ##### ######” net.ipv4.tcp_mem = ”#### ##### ######” net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_moderate_rcvbuf = 1

Vuelva a probar su conexión para ver si la velocidad ha mejorado y, si no, modifique su comando nuevamente y vuelva a ejecutarlo. Recuerde que puede presionar la tecla hacia arriba en su terminal para repetir el último comando utilizado. Una vez que haya encontrado los valores adecuados, abra con el gksu o sudo comando del editor de texto del Método 1, y edite las líneas para que se lean como sigue, una vez más reemplazando los # con sus valores calculados. Por supuesto, también querrá hacer una copia de seguridad del archivo de la misma manera que lo hizo en la parte uno en caso de que cometa un error. Si ha creado uno, también puede restaurarlo de la misma manera.

net.ipv4.tcp_rmem = #### ##### ######

net.ipv4.tcp_wmem = #### ##### ######

net.ipv4.tcp_mem = #### ##### ######

net.ipv4.tcp_no_metrics_save = 1

net.ipv4.tcp_moderate_rcvbuf = 1

Guárdelo una vez que esté seguro de que todo está bien. Emita el siguiente comando:

sudo sysctl -p

Esto obligará al kernel de Linux a volver a cargar la configuración en , y si todo ha ido bien, debería proporcionarle al menos una conexión de red algo más rápida. Dependiendo de sus valores predeterminados originales, la diferencia puede ser realmente dramática o potencialmente no perceptible en absoluto.

8 minutos de lectura