Red de conocimientos sobre prescripción popular - Colección de remedios caseros - ¿Qué es el síndrome de la ventana del tonto? Explicando formas de evitar el síndrome de la ventana del tonto en el lado receptor

¿Qué es el síndrome de la ventana del tonto? Explicando formas de evitar el síndrome de la ventana del tonto en el lado receptor

Cuando el proceso de la aplicación de envío es lento para generar datos, o el proceso de la aplicación de recepción es lento para procesar los datos en el búfer de recepción, o ambos, puede hacer que los segmentos de mensajes transferidos entre procesos de aplicación sean muy pequeños, especialmente si la carga útil es muy pequeña; Pequeño. En casos extremos, solo se envían segmentos de mensajes con una carga útil de un byte a la vez, y el receptor solo acusa recibo de segmentos de mensajes con una carga útil de un byte a la vez. La carga útil es de solo 1 byte; la sobrecarga de transmisión es de 40 bytes (encabezado IP de 20 bytes y encabezado TCP de 20 bytes), lo que se denomina síndrome de la ventana del tonto.

Síndrome de la ventana idiota causado por el remitente: si el remitente sirve una aplicación que genera datos lentamente, como un byte a la vez. Esta aplicación escribe datos en el búfer TCP un byte a la vez. Si el TCP del remitente no tiene instrucciones específicas, generará un segmento de mensaje que contiene solo un byte de datos. Por lo tanto, muchos campos de datos contienen muy pocos bytes de datagramas IP que se transmiten a través de Internet.

Una estrategia mejorada del síndrome de la ventana del tonto inducido por el remitente:

Algoritmo de Nagle: la idea principal es obligar al remitente a esperar y dejar que recopile los datos enviados para enviar un bloque grande. datos, es decir, aumentar la cantidad de datos enviados cada vez reduciendo el número de veces de envío.

Síndrome de la ventana del tonto causado por el receptor;

Por ejemplo, si la aplicación en el extremo receptor tarda en procesar datos, solo consume un byte a la vez.

1) Supongamos que la aplicación emisora ​​genera un bloque de datos de 1000 bytes, pero la aplicación receptora solo absorbe 1 byte de datos a la vez.

2) Supongamos que el búfer de entrada del TCP del extremo receptor es de 4000 bytes. El remitente envía primero los primeros 4000 bytes de datos. El receptor lo almacena en su caché. El caché ahora está lleno. Notifica que el tamaño de la ventana es cero, lo que significa que el remitente debe dejar de enviar datos.

3) La aplicación receptora lee el primer byte de datos del búfer de entrada TCP en el extremo receptor. Ahora hay 1 byte en el búfer de entrada. El TCP en el extremo receptor anuncia que el tamaño de su ventana es de 1 byte, lo que significa que se espera que el TCP en el extremo emisor trate este anuncio como una buena noticia y haga que el remitente envíe un segmento de mensaje que contenga solo un byte de datos.

4) Este proceso continúa. Consume un byte de datos y luego envía un segmento de mensaje que contiene solo un byte de datos.

Para el síndrome de la ventana del tonto causado por el extremo receptor, es decir, la aplicación del extremo receptor consume datos más lentamente de lo que llegan, se recomiendan dos estrategias de mejora: el algoritmo de Clark y el algoritmo de confirmación retrasada.

Algoritmo de Clark: Siempre que el buffer de recepción del receptor esté lleno, cada vez que se reciba un mensaje TCP, se devolverá un mensaje de confirmación con un valor de ventana de 0, deteniendo así la transmisión de datos del remitente. Hasta que el área libre del búfer de recepción pueda acomodar el segmento de mensaje de la longitud máxima o más de la mitad del espacio del búfer de recepción esté libre, se enviará una ventana de confirmación con un valor de ventana distinto de 0, actualizando así el tamaño de la ventana deslizante del remitente para que el remitente pueda continuar enviando segmentos de mensajes.

Algoritmo de confirmación retrasada: cuando el receptor recibe un segmento de mensaje, no responde inmediatamente con un mensaje de confirmación, sino que envía un segmento de mensaje de confirmación después de que hay una cierta cantidad de espacio libre en el búfer de recepción. Esto puede reducir la velocidad de deslizamiento de la ventana deslizante del remitente, reduciendo así la velocidad de envío de datos.