2008-11-03 16 views
11

¿Es posible lograr una mejor tasa de transferencia de datos con múltiples conexiones TCP paralelas en un entorno de alta latencia (Internet público con gran distancia geográfica suponiendo que no hay configuración de tráfico por conexión o cosas por el estilo) o TCP puede utilizar todo el ancho de banda con una sola conexión ?TCP ¿es posible lograr una tasa de transferencia más alta con conexiones múltiples?


es TCP envío de datos tan rápido como latas si el receptor no informa congestiones del buffer con el tamaño de las ventanas 0? Entonces, si RTT es, por ejemplo, de 60 segundos, ¿no afecta la velocidad en absoluto? ¿Hay algún tamaño de ventana máximo o algo más que limite la tasa?

Respuesta

15

Una ventaja de las conexiones simultáneas puede darle (sujeto a las mismas advertencias mencionadas por paloma y Brian) es que podrá superar mejor el problema de tener una ventana de recepción de TCP demasiado pequeña.

El principio al que se refiere esto es bandwidth delay product. (Hay una explicación más detallada here).

Breve resumen: en entornos de alta latencia y gran ancho de banda, las comunicaciones confiables como TCP suelen estar limitadas por la cantidad de datos en vuelo en un momento dado. Las conexiones múltiples son una forma de evitar esto, ya que el producto de demora de ancho de banda se aplica a cada conexión individualmente.

En más detalle, considere lo siguiente: tiene un ancho de banda extremo a extremo de 10^8 bits por segundo (10 megabits/segundo) y un retraso de ida y vuelta de 100 ms (0,1 segundos). Por lo tanto, puede haber hasta 10^7 bits (10 megabits = ~ 1.25 megabytes) de datos enviados antes de que el acuse de recibo del primer bit de datos haya vuelto al remitente.

Esto variará según la pila TCP de su sistema operativo, pero un valor no muy común para el tamaño de ventana de recepción TCP es de 64Kbytes. Obviamente, esto es demasiado pequeño para permitirle hacer un uso completo del ancho de banda de extremo a extremo; una vez que se han enviado 64kbytes (512kbits) de datos, su proceso de envío esperará una actualización de ventana del receptor que indique que se han consumido algunos datos antes de poner más datos en el cable.

Al tener múltiples sesiones TCP abiertas se soluciona esto en virtud del hecho de que cada sesión TCP tendrá sus propios buffers de envío/recepción.

Por supuesto, en Internet es difícil determinar el verdadero ancho de banda disponible de extremo a extremo, debido al tamaño de la ventana TCP, contención, etc. Si puede proporcionar algunas cifras de muestra, podemos ser capaces de ayuda más

La otra opción que debe tener en cuenta es establecer una ventana de recepción más grande al crear su socket, ya sea globalmente utilizando una configuración de sistema operativo o en base a un socket utilizando las opciones de socket.

1

Sí, pero no necesariamente es fácil de implementar. Los CDN como akamai reclaman parte de su desempeño al comprimir paquetes más grandes que los que se enviarían normalmente debido a su tubería fiable dedicada. Es difícil dar más detalles sin saber más de su aplicación.

+0

Mi aplicación está transfiriendo datos unidireccionalmente sin necesidad de tener conversaciones a nivel de aplicación. Simplemente presionando datos en el socket remoto. – JtR

+0

Estoy probablemente fuera de ken aquí, pero si no es tan difícil, la manera más segura es establecer una prueba, ¿eh? ciertamente parece que hay potencial allí, dado que es de una manera. – dove

+0

¿Está buscando un socket confiable (basado en conexión)? De lo contrario, posiblemente usar UDP en lugar de TCP podría ayudar? – AshtonKJ

7

Si eres el único en el enlace, aumentará la sobrecarga y disminuirá la velocidad. Sin embargo, cuando se comparte un enlace totalmente saturado con otros, es una forma de jugar con el sistema y aumentar su velocidad general (cada conexión será más lenta que una sola, pero el agregado será más rápido ya que ahora tiene un mayor porcentaje de "espacios de tiempo" (¿cuál es el término técnico? Se me escapa ahora) asignado a usted).

+0

¿Qué hay de la latencia? ¿Cómo afecta la tasa? ¿La latencia no está afectando la tasa si se utilizan buffers lo suficientemente grandes? – JtR

+0

Depende del tamaño de la ventana TCP, cualquier almacenamiento intermedio es mucho menos importante. –

1

Muz's description of the issue es perfecto.

Tenga en cuenta que aprovecharla puede depender de la implementación de TCP en su sistema operativo. En particular, para obtener los mejores resultados, desea una pila TCP que admita la opción Escala de ventana desde RFC 1323.

Además, es posible que deba modificar algunos ajustes del sistema operativo para que esto funcione. En Windows hay una configuración de Registro llamada que quizás necesite ajustar. Existe un artículo de Microsoft KB 224829: Description of Windows 2000 and Windows Server 2003 TCP Features que describe cómo hacerlo.

Cuestiones relacionadas