Máximo througput sobre conexiones TCP

Supongamos que tengo una conexión a Internet por fibra de esas a 1 Gbps, me la he pedido así y no de menos porque quiero bajarme o subir archivos a toda velocidad como si estuviera en la red local de mi casa. ¿Voy a poder rentabilizar mi inversión y usar el 100% de mi flamante línea?. Sobre eso quiero tratar en esta entrada.

Vamos primero a establecer un entorno de referencia para resolver la pregunta. Para ello suponemos un sistena Windows donde descargagaremos un archivo a través de una conexión TCP (con tamaño de ventana de 65535 Bytes para un sistema de Microsoft™) usando una fibra de 1Gbps de ancho de banda y 14ms de latencia al servidor de descargas. Supondremos que el resto de variables no afectan negativamente al test.

Para calcular la tasa de transferencia de una conexión TCP (IP origen, puerto origen \Leftrightarrow IP destino puerto destino), existe la siguiente ecuación y que es independiente del ancho de banda físico del que dispongamos:

Throughput\: \left[bps\right] = \frac{TCP\: Windindow\: size\: \left[bits\right]}{Latency\: \left[s\right]}= \frac{65535 \left[bytes\right] \times 8 \left[\frac{bit}{byte}\right]}{14*10^{-3} \left[s\right]} \approx 37\ \left[\frac{Mb}{s}\right]

Vaya, nos damos con un palmo de narices ya que la tasa de transferencia máxima es de 37Mbps para una conexión TCP, ¡y eso que hemos pagado por una conexión de 1Gbps!.

Llegados a este punto, muchos de vosotros me toméis por un listillo, ya que gracias a la opción TCP de window scale notificada en los paquetes de SYN (cliente) y de SYN+ACK (servidor), la ventana de transmisión TCP puede llegar hasta los 1.1GB y por tanto, la tasa de transferencia máxima puede alcanzar los 613Gbps con una sola conexión TCP.

Bien, ya tenemos resuelto el problema de poder usar todo el enlace para nuestra transmisión aunque como se puede entender, a día de hoy no es factible la reserva de 1GB de memoria por sesión TCP y lo que hacen los sistemas operativos «modernos» como Windows 10 o Linux 2.6 y posteriores es emplear un escalado adaptativo en función de la latencia (RTT) o la memoria. Concretando, la ventana no escala a más de 16MB (Windows) u 8MB (Linux) lo que nos permite alcanzar velocidades ceracanas a los 10Gbps por conexión TCP.

igazmi

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicar un comentario