Cómo estimar el caudal TCP entre servidores
Acabas de comprar un servidor con un canal dedicado que te garantiza 1 Gbit/s (o más) y te decepciona comprobar que las transferencias de archivos no son tan rápidas como esperabas. Antes de escribir al servicio técnico y buscar problemas en la red, intente evaluar el rendimiento TCP real de un host a otro.
Hay dos factores muy importantes para el éxito de la transferencia de datos a través de TCP:
- Tamaño de la ventana TCP: es el número de bytes que un lado aceptará sin confirmación;
- Retardo circular de transmisión-recepción (latencia) - es el tiempo que se tarda en enviar un paquete y confirmar su entrega.
- Conocer estas dos cosas te permitirá calcular el máximo ancho de banda posible que se puede compartir entre dos hosts, independientemente del ancho de banda.
La fórmula para calcular el ancho de banda TCP
Rendimiento TCP (bits/s) = Tamaño de ventana TCP (bits) / Latencia de ida y vuelta (s)
Veámoslo con un ejemplo sencillo. Tenemos un enlace gigabit Ethernet entre servidores con una latencia circular de 30 ms. Necesitamos enviar un archivo de gran tamaño de un servidor a otro por FTP. ¿Qué ancho de banda real podemos esperar?
Primero hay que convertir el tamaño de la ventana TCP de bytes a bits. En este caso, utilizaremos el tamaño de ventana TCP estándar de máquina Windows de 64 KB = 65 536 B = 65 536 * 8 = 524 288 bits.
A continuación, hay que tomar el tamaño de ventana TCP en bits y dividirlo por la latencia circular del canal, expresada en segundos. A efectos de estos cálculos, 30 ms se convierten en 0,030 s.
Rendimiento máximo de TCP = 524.288 bits / 0,030 s = 17.476.266 bps = 17,4 Mbps
Aunque hay una conexión gigabit Ethernet entre los dos servidores, no puedes esperar más de 17 Mbit/s cuando transfieras archivos.
¿Cómo podemos hacer que la red sea más rápida? La respuesta es obvia: aumentar el tamaño de la ventana TCP y/o reducir el retardo de la señal.
Negociar un tamaño de ventana TCP mayor requiere una configuración manual individual de cada servidor, lo que, a su vez, lleva a la siguiente pregunta: ¿cuál es el tamaño de ventana TCP óptimo? Para averiguarlo, es necesario hacer un cálculo inverso basado en el ancho de banda.
La fórmula para calcular el tamaño óptimo de la ventana TCP
Tamaño de ventana TCP (bytes) = Tamaño de ventana TCP (bits) / 8 = Ancho de banda (bits/s) * Latencia de ida y vuelta (s) / 8
En el ejemplo anterior para una ruta gigabit Ethernet entre servidores con una latencia circular de 30 ms, se obtiene el siguiente valor:
1.000.000.000 bits/s * 0,030 s = 30.000.000 bits / 8 = 3.750.000 bytes.
En otras palabras, si configuras ambos servidores para una ventana TCP de 3.750 KB, la conexión FTP llenará completamente el ancho de banda y alcanzará un ancho de banda de 1 Gbit/s.
Debes tener en cuenta que aumentar el tamaño de la ventana TCP tiene sus desventajas.
En primer lugar, requerirá más memoria para el buffer de los servidores, necesaria para almacenar datos no confirmados en caso de que los haya.
En segundo lugar, un mayor tamaño de la ventana TCP puede dar lugar a un mayor número de paquetes perdidos, que a su vez requieren que se reenvíe una ventana entera. Esto puede repercutir negativamente en el rendimiento. Para resolver este problema, la pila TCP/IP del servidor puede activar la opción de "acuse de recibo selectivo", que está desactivada por defecto.
Para resolver el problema, se pueden colocar aceleradores WAN -pedales de gas de red globales- en ambos extremos de la línea. Pueden hacer lo siguiente
- Abrir una ventana TCP ampliada;
- proporcionar la capacidad de optimizar finamente el protocolo TCP (por ejemplo, acuse de recibo selectivo sólo entre aceleradores);
- no requieren una configuración especial del servidor ni memoria intermedia adicional;
- pueden utilizar funciones especiales de la capa de aplicación del modelo OSI (Capa 7 - acceso a servicios de red) para reducir el retardo circular.
Latencia
¿Quiere reducir el retardo de la señal? ¿Puede hacerse en principio? Como no podemos superar la velocidad de la luz, no podemos influir en el tiempo que tarda una señal en recorrer una determinada distancia. La mejor manera de optimizar todo un sistema es instalar un acelerador WAN en cada extremo de la línea, que transmita los paquetes TCP recibidos al servidor local, "engañándole" así sobre la velocidad real de transferencia de datos.En lugar de esperar una respuesta estancada del servidor remoto, el servidor local recibe acuses de recibo instantáneos del acelerador. Así nos ahorramos tener que ajustar el tamaño de la ventana TCP en los propios servidores. Un par de dispositivos WAAS utiliza un tamaño de ventana TCP aumentado y acuses de recibo selectivos en todo el segmento de línea.
Además, WAAS purga eficazmente un flujo TCP de datos redundantes, proporcionando un nivel extremadamente alto de compresión (compresión). Cada acelerador recuerda los datos vistos anteriormente. Si vuelve a aparecer un fragmento duplicado, se elimina y se sustituye por una diminuta etiqueta de 2 bytes. Esta diminuta marca es reconocida por el pedal de gas remoto, que inserta en su lugar el fragmento de datos original antes de enviar el tráfico al servidor local.
El resultado probado de la optimización es un mayor rendimiento entre servidores sin ningún ajuste TCP especial de los servidores locales.
Fórmula para calcular el retardo máximo admisible para un rendimiento determinado
Ejemplo. En un sitio entre dos servidores remotos, debe garantizar un caudal FTP de 10 Gbps utilizando un tamaño de ventana TCP estándar (64 KB). ¿Cuál es el retardo de señal máximo permitido?
Retardo de ida y vuelta (ms) = tamaño de ventana TCP (bits) / ancho de banda necesario (bps)
524.288 bits / 10.000.000 bps = 52,4 microsegundos
¿Qué hay que hacer?
Básicamente, no necesitas aumentar la ventana TCP ni instalar amplificadores WAN. Basta con utilizar el multithreading para utilizar el canal al 100% de su ancho de banda.