Qué es el Síndrome de la Ventana Tonta - Explicación y Prevención

Los datos(Data) se transfieren a través de la red e Internet mediante el TCP/IP Protocol . El TCP/IP no es perfecto pero es más fácil de implementar en comparación con otros protocolos teorizados para la comunicación de datos… como el modelo ISO OSI(ISO OSI) . Al igual que con cualquier cosa técnica, TCP/IP también tiene algunos defectos y el Síndrome de la ventana tonta(Silly Window Syndrome) es una creación de uno de esos defectos. Para comprender qué es el síndrome de la ventana tonta(Silly Window Syndrome) o SWS , primero deberá comprender el mecanismo subyacente de la comunicación de datos en TCP/IP .

Síndrome de la ventana tonta

síndrome de la ventana tonta

Entendiendo la ventana y su tamaño

Cuando dos puntos se comunican bajo TCP/IP , implica un mecanismo de reconocimiento. Este mecanismo de reconocimiento es lo que causa el síndrome de la ventana tonta(Silly Window Syndrome) como se explica más adelante. Los puntos pueden referirse a dos computadoras, cliente y servidor, etc.

SWS is caused by the receiver advancing the right window edge whenever it has any new buffer space available to receive data and by the sender using any incremental window, no matter how small, to send more data. The result can be a stable pattern of sending tiny data segments, even though both sender and receiver have a large total buffer space for the connection, says MSDN.

Cuando una computadora, digamos A, envía un paquete de datos a otra computadora B, esta última debe reconocer y responder que recibió el paquete de datos. Junto con el acuse de recibo, también debe enviar el tamaño del búfer establecido para ese hilo de comunicación. Este es generalmente el número de bytes liberados para la comunicación.

Entonces, cuando B dice que 100B está disponible para el siguiente mensaje, el 100B es la ventana en el síndrome de la ventana tonta(Silly Window Syndrome) . Es decir, es el tamaño del búfer. Con su propio defecto, el mecanismo TCP/IP puede reducir el tamaño del búfer para cada comunicación/datos provenientes de A. Es decir, cada vez que A envía un mensaje, B asume que el tamaño del búfer se reduce y envía un número menor. Por lo tanto, el tamaño de la ventana sigue reduciéndose y, en un punto, la comunicación simplemente se detiene cuando B envía 0B como el tamaño de la ventana.

¿Cómo funciona el síndrome de la ventana tonta?

De acuerdo con el ejemplo anterior de A y B, si B envía 1000B como tamaño de ventana, A lo dividirá en dos 500B y enviará dos paquetes de 500B. Al recibir el primer paquete, B enviará un acuse de recibo diciendo que 500B está disponible para la ventana ya que aún no se ha recibido el segundo paquete. A asume que 500B es el tamaño de la ventana y envía dos paquetes de 250B en consecuencia. Mientras que en B, se usa 500B y se acaba de recibir 500, enviará 0B como disponible. En este punto, A supondrá que no hay ninguna ventana disponible, aunque podría suceder que el búfer esté vacío ya que el procesador agotó los datos allí. A seguirá enviando un paquete más pequeño para ver si hay alguna ventana disponible. Si el contenido del búfer en B aún no se elimina, aún recibirá 0 como respuesta/acuse de recibo.

Por lo tanto, el tamaño de la ventana continúa reduciéndose a medida que B envía un reconocimiento cada vez que recibe un paquete de A. Este tamaño suele ser más pequeño que el reconocimiento anterior, ya que B recibe paquetes de datos en partes. No habría ningún problema si A pudiera enviar un paquete lo suficientemente grande como para cubrir el tamaño del búfer en B a la vez. Pero eso requeriría mecanismos adicionales y por lo tanto el Síndrome de la Ventana Tonta(Silly Window Syndrome) . La comunicación se detiene después de que A recibe 0 dos o tres veces.

Cómo prevenir el síndrome de la ventana tonta(Silly Window Syndrome) ( SWS )

Hay un algoritmo simple que se implementará para deshacerse de SWS . Al recibir el paquete inicial, B envía la mitad del espacio realmente disponible como ventana. Eso hará que A envíe paquetes más pequeños. En consecuencia, cuando los paquetes se vuelven demasiado pequeños, B envía el tamaño total del búfer para que A pueda comenzar a enviar bytes de datos más grandes nuevamente.

En otras palabras, si 1000B está disponible, B envía 500B como reconocimiento. En consecuencia, A envía 250B x ​​2 paquetes. Por esto, A recibe 100B como reconocimiento. Cuando recibe un paquete de 50B, B envía 1000B – 50B a A. Eso hace que toda la conversación vuelva a estar operativa. Esto podría provocar un pequeño retraso en el procesamiento, pero evitará que se produzca el síndrome de la ventana tonta(Silly Window Syndrome) y se detenga toda la conversación.

En resumen, SWS se basa en el tamaño del búfer disponible para el destinatario y el tamaño supuesto calculado por el remitente. Para evitar SWS , se introduce un retraso y se reciproca un tamaño de ventana más pequeño deliberadamente hasta que el tamaño del paquete se vuelve demasiado pequeño. Luego, el destinatario revela el tamaño de ventana realmente disponible. Todo el proceso sigue repitiéndose hasta que se completa la comunicación.

Aunque es posible que haya usado las palabras ventana y búfer indistintamente. No me refiero a ninguna diferencia entre ellos. En los estudios de SWS , el búfer es la ventana.(SWS)



About the author

Soy un desarrollador de iOS con más de 10 años de experiencia. Me especializo en el desarrollo de aplicaciones para iPhone y iPad. Tengo experiencia en la creación de flujos de usuarios, la creación de kits de desarrollo personalizados (CDK) y el trabajo con varios marcos de desarrollo de aplicaciones. En mi trabajo anterior, también desarrollé herramientas para ayudar a administrar la App Store de Apple, que incluyen una herramienta de administración de productos y una herramienta de envío de aplicaciones.



Related posts