Cómo calcular el ancho de banda teórico máximo

Para conseguir un ancho de banda muy alto con sesiones TCP no es necesario con disponer de líneas de muy alta capacidad, por poner un ejemplo, si tenemos una línea simétrica de 100Mbps no significa necesariamente que vayamos a conseguir ese ancho de banda, el ancho de banda máximo depende de la latencia y del tamaño de ventana.

Realmente la capacidad de la línea ni siquiera es un factor determinante. La fórmula para calcular el ancho de banda efectivo es la siguiente:

Tamaño-de-ventana-TCP-en-bits / Latencia-en-segundos = Bits-por-segundo-de-transferencia

Vamos a verlo con un ejemplo real. Supongamos un ADSL con una latencia a Google.com de 36ms, como por ejemplo, el ADSL de mi casa

[edu@orion ~]$ ping google.com
PING google.com (173.194.34.228) 56(84) bytes of data.
64 bytes from mad01s09-in-f4.1e100.net (173.194.34.228): icmp_seq=1 ttl=56 time=35.0 ms
64 bytes from mad01s09-in-f4.1e100.net (173.194.34.228): icmp_seq=2 ttl=56 time=37.1 ms
64 bytes from mad01s09-in-f4.1e100.net (173.194.34.228): icmp_seq=3 ttl=56 time=37.7 ms

Y supongamos un tamaño de ventana de 64kB:

64KB = 65536 Bytes. 65536 * 8 = 524288 bits

Ahora ya tenemos los datos para hacer el cálculo, así que mi tasa de transferencia máxima con Google sería de:

524288 bits / 0.036 segundos = 14563555 bps

Esto nos da un resultado de 13,88Mbps, que no está mal, pero claro, si tuviera una línea de 100Mbps con estos datos nunca podría superar los 13,88Mbps, en ningún caso.

Esto es debido al funcionamiento de TCP y a sus ACKs. TCP antes de poder enviar más datos tiene que aceptar la transferencia del primer trozo, es decir, de la ventana (Cantidad de datos que se pueden mandar sin aceptación del otro extremo). En definitiva, no vamos a tener el circuito lleno, sino vacío porque no podemos enviar más hasta que no se hayan aceptado los primeros segmentos.

Así que para medir anchos de banda efectivos no valen aplicaciones que utilicen como protocolo de transporte TCP, como por ejemplo el FTP, así que si para medir capacidades de líneas haces un FTP lo estás haciendo mal.

Estos cálculos sirven para una única sesión TCP, así que si queremos utilizar más de los 13 megas que nos dió el calculo podemos levantar más sesiones, en el caso de FTP otra sesión paralela e irlas apilando.

Obviamente esto no aplica en el caso de transferencias con UDP puesto que UDP no necesita aceptación por el otro extremo.

Otro día os comento como calcular el tamaño de la ventana para optimizar los anchos de banda.