menú

ajustes del TCP

todo lo que necesitas saber para ajustar los parámetros de TCP de tus sistema operativo y alcanzar así los mejores rendimientos


¿cómo funciona TCP y qué parámetros influyen en la conexión?

cuando un cliente se conecta a un servidor tras solicitar su dirección en un navegador o en un gestor de transferencia de ficheros, se establece una conexión entre ambos equipos.

para hacer un símil visual, podemos asimilar esta conexión a una tubería que une el ordenador con el servidor. En función del tamaño de esa tubería, podremos hacer pasar por ella una mayor cantidad de información.
Los parámetros que influyen en el tamaño de esa tubería básicamente son dos:

- la velocidad de la conexión del cliente
- la velocidad de conexión del servidor

típicamente el factor limitante del tamaño de esta tubería ha sido el tamaño de la tubería del cliente, sin embargo hay que tener en cuenta que con accesos de 100 Mbps en el extremo del cliente, los límites del servidor pueden llegar a ser un factor limitante, no tanto por la capacidad de los mismo sino incluso por la configuración que tienen establecida, por ejemplo con limitaciones de conexión por usuario (como Youtube).

como vemos, el tamaño de la tubería es importante ya que nos indica la cantidad de paquetes de información que puede haber en tránsito del servidor al cliente. A la capacidad de esta tubería se le llama normalmente BDP (bandwith delay product).

cuando alcanzamos tamaños de tubería considerables, existe un parámetro del TCP que debemos tener muy en cuenta para poder aprovechar semejantes flujos de información.

nos referimos a la ventana de recepción TCP y vamos a ver cómo afecta a la velocidad.

la ventana de recepción TCP es la cantidad de datos que podemos recibir del servidor sin haber sido confirmados (envío de ACK o acuse de recibo) por parte del cliente; es decir, la cantidad de datos que podemos almacenar para ser procesados, una vez que sean procesados se enviará el acuse de recibo correspondiente al servidor y estaremos listos para recibir otra ventana.

el tamaño máximo de la ventana de recepción TCP es de 64 K, y esta suele ser la configuración de los sistemas operativos por defecto.

veamos con un ejemplo que rendimiento puede alcanzar un equipo con esta configuración:
Supongamos una comunicación en la que nosotros somos un cliente con nuestra nueva red de 100 Mbps, y establecemos una conexión a un servidor con interfaz giga, siendo el cuello de botella nosotros mismos, es decir, los 100 Mbps.

suponemos también que el servidor al que nos conectamos está a 50 ms de nosotros (RTT=50, un paquete de información tarda 50 ms en ir y volver desde el servidor hasta nuestro equipo)

- calculamos el BDP (la capacidad de la tubería que se puede establecer):
BDP = RTT * cuelloBotella = 0,05 seg * 100,000,000 bits/ 1 seg * 1 byte/ 8 bits = = 625000 bytes = 625 KB (aprox.)
- con nuestro tamaño de ventana de 64 KB, en cada RTT, es decir, en el tiempo que transcurre desde que nos llega el primer paquete y nosotros le mandamos la confirmación solo podemos recibir 64 KB, si siguen llegando paquetes tendríamos que descartarlos, lo que nos limita a 64 KB cada 50 ms con lo que obtenemos una velocidad máxima de unos 10 Mbps.
- conclusión: estamos aprovechando solo el 10% de nuestra conexión de 100Mbps. De los 625 KB que puede haber en tránsito en la conexión nosotros solo podemos recibir 64 KB!!

¿cómo se mejora el rendimiento de la ventana TCP?

usando un escalado, existe un parámetro adicional en el TCP que nos permite especificar cuántos bits de escalado queremos y así conseguir tamaños mucho mayores.

si ampliamos el tamaño de la ventana, en el tiempo que tarda en llegar nuestra confirmación al servidor podemos seguir recibiendo paquetes ya que tardaría más en llenarse, de éste modo aprovechamos mejor la conexión.

visita la sección de manuales para poder hacer las modificaciones necesarias que te permitan aprovechar al máximo tu acceso a internet de alta velocidad.

¿cómo es la configuración por defecto de la ventana TCP para Windows XP?

esta configuración depende del sistema operativo con el que trabajemos, veamos los casos más populares. De todas formas, visita la sección de manuales para poder hacer las modificaciones necesarias que te permitan aprovechar al máximo tu acceso a internet de alta velocidad.

Windows XP por defecto tiene un tamaño de ventana de 64 KB, y configurada sin escalado, de modo que este tamaño de ventana es fijo y estableceremos conexiones siempre con una ventana de 64 KB.

con este tamaño de ventana no tendremos excesivos problemas mientras nos movamos en una red de área local (RTT < 10 ms), pero cuando nos alejamos un poco el rendimiento se degrada exponencialmente.

si accedemos a un servidor muy cercano:
RTT=10 ms: cada 10 ms yo soy capaz de recibir 64 KB.
1000 ms/10 ms * 64 KB = 6400 KB (unos 50 Mbps aprox.)

si la distancia con el servidor es media:
RTT=30 ms: ahora recibimos los 64 KB cada 30 ms.
1000 ms/30 ms * 64 KB = 2133,3 KB (unos 18 Mbps aprox.)

pero en un caso de gran distancia entonces el rendimiento se ve muy penalizado:
RTT=100 ms: ahora recibimos 64 KB cada 30 ms. 1000 ms /100 ms * 64 KB = 640 KB (5 Mbps aprox.)

Windows Xp nos permite modificar los parámetros del TCP con el fin de adecuar la ventana TCP a la velocidad de nuestra conexión.

¿cómo es la configuración por defecto de la ventana TCP para Windows Vista?

esta configuración depende del sistema operativo con el que trabajemos, veamos los casos más populares. De todas formas, visita la sección de manuales para poder hacer las modificaciones necesarias que te permitan aprovechar al máximo tu acceso a internet de alta velocidad:

con Vista tenemos dos situaciones posibles: autotuning OFF o autotuning ON.
Por defecto, el sistema viene configurado con autotuning OFF.

en estas circunstancias, la situación es parecida a la de Windows XP, con la diferencia de que Windows XP nos permite modificar manualmente los tamaños de ventana y búfferes de recepción y Windows Vista no, si elegimos trabajar sin autotuning lo haremos siempre con una ventana fija de 64 KB y en consecuencia estaremos en la situación descrita en el ejemplo anterior, donde la velocidad se degrada al aumentar la distancia del servidor al que queremos acceder.

¿y si activamos el autotuning?

el autotuning de Vista en teoría resuelve automáticamente el problema de las ventanas, la idea es que el propio sistema operativo calcularía para cada caso (en función de la distancia del servidor al que nos conectamos) el tamaño ideal y ajustaría la conexión. En la práctica ésto no es así.

con el autotuning activado, en la práctica es imposible obtener más de 32 Mbps.

¿cómo es la configuración por defecto de la ventana TCP para Windows 7?

esta configuración depende del sistema operativo con el que trabajemos, veamos los casos más populares. De todas formas, visita la sección de manuales para poder hacer las modificaciones necesarias que te permitan aprovechar al máximo tu acceso a internet de alta valocidad.

en las pruebas realizadas con Windows 7, in hacer ningún cambio y con una instalación limpia del sistema operativo, se alcanzaron en las pruebas unas velocidades de 95-97 megas. Si aún así Windows 7 no alcanza el rendimiento esperado, es posible realizar algunos cambios para mejorarlo.

por defecto la instrucción del sistema operativo "Nivel de ajuste automático de ventana de recepción" es normal, en casos de un bajo rendimiento de la conexión podríamos utilizar el comando “netsh interface tcp set global autotuning level=highly restricted”

este cambio en la configuración por defecto del sistema operativo podría afectar negativamente a otros factores de la conexión o del funcionamiento del propio sistema operativo, por lo que sólo debe utilizarse si fuese imprescindible.

¿cómo es la configuración por defecto de la ventana TCP para Mac OSX, Leopard?

esta configuración depende del sistema operativo con el que trabajemos, veamos los casos más populares. De todas formas, visita la sección de manuales para poder hacer las modificaciones necesarias que te permitan aprovechar al máximo tu acceso a internet de alta velocidad.

Leopard por defecto tiene también una ventana de 64 KB, con un factor de escala de 3 (2^3), que nos proporciona un tamaño máximo de ventana de 0,5 MB.

para los escenarios de distancias del ejemplo de Xp, Leopard en su configuración por defecto se comportaría de la siguiente manera:

para un servidor cercano:
RTT=10 ms.
1000 ms/10 ms * 500 KB = 50.000 KB (unos 50 MB aprox.)

si la distancia es media:
RTT=30 ms.
1000 ms/30 ms * 500 KB = 16.666 KB (16 MB aprox.)

con distancias mayores:
RTT=100 ms.
1000 ms/100 ms * 500 KB = 5000 KB (unos 40 Mbps aprox.)

en este caso, el sistema operativo nos permite modificar manualmente la ventana TCP y podemos mejorar el rendimiento.

¿por qué cuando hago las modificaciones propuestas en el sistema operativo a veces en las descargas la velocidad oscila?

porque ampliar el escalado de la ventana no quiere decir que siempre trabajamos con el tamaño máximo de ventana alcanzable, sino que siempre empezamos la conexión con un tamaño de ventana pequeño, y poco a poco se va ampliando si todo va bien hasta alcanzar su valor máximo.

ahora bien, si encontramos algún router con congestión por el camino, o algún elemento de red saturado que nos haga perder muchos paquetes, puede ser que se resetee el tamaño de nuestra ventana, ya que es lo que hace tcp, si se detecta congestión inicia otra vez el algoritmo con la ventana más pequeña para intentar que se solucione la congestión y la ventana se irá agrandando poco a poco (igual que cuando empezamos la conexión). De modo que si en un momento la velocidad baja bruscamente y luego sube otra vez poco a poco estamos ante un caso de este tipo.

¿cómo influye en la velocidad la distancia a la que se encuentra el servidor al que estoy conectado?

la distancia es un aspecto fundamental a la hora de establecer una conexión. Obviamente en cuanto a aspectos de velocidad no será lo mismo conectarse a un servidor que está cerca de nosotros (y por tanto los paquetes tendrán que recorrer un camino pequeño) que conectarse a un servidor que se encuentra lejos (los paquetes tienen que recorrer un largo camino hasta su destino). Si trabajamos siempre con la misma ventana, obviamente veremos cómo el rendimiento es mucho peor si nos conectamos a un servidor alejado que a un servidor cercano. Además, aparte de que el camino sea más largo, el hecho de que sea más largo aumenta las posibilidades de toparnos en la ruta con algún elemento de red saturado que nos haga perder eficacia en la conexión. A modo de ejemplo, si hacemos el test de velocidad contra los servidores de R obtendremos un resultado próximo a la velocidad de nuestra conexión; si lo hacemos contra un servidor que se encuentra en Japón, no obtendremos más de un 30% de la velocidad, y esto no quiere decir que nuestra conexión no está bien, simplemente quiere decir que no estamos sabiendo aprovecharla cuando hacemos conexiones a sitios lejanos; ya que los sistemas operativos por defecto vienen configurados para trabajar en redes de área local.

en los manuales de configuración de la ventana TCP se explica cómo mejorar este aspecto.

visita la sección de manuales para poder hacer las modificaciones necesarias para aprovechar al máximo tu acceso a internet.

¿por qué no obtengo siempre velocidades próximas a los 100 Mbps?

hay que tener en cuenta que no todas las páginas o sitios de descarga/streaming de Internet están preparados para servirnos a las velocidades que queramos. Fundamentalmente hay dos aspectos a considerar:

  • que los servidores de Internet a veces están sobrecargados, con millones de visitas al día, de modo que no pueden servir sus contenidos a grandes velocidades porque el sitio sería inmanejable.
  • hay muchos sitios que aún pudiendo servirnos a estas velocidades simplemente no lo hacen, por política deciden no servir a más de una cierta velocidad que puedan considerar adecuada. Los motivos por los cual les interese hacer esto son varios: por ahorro económico o para garantizar un funcionamiento adecuado a todos los usuarios.