TCP

3. TCP Transmission Control Protocol

3.7. Silly window avoidance y Nagle

Silly window

Problema (1982)
Si el receptor publica pequeños incrementos en la ventana el transmisor pierde tiempo enviando segmentos pequeños.


Solución
El receptor no debe publicar pequeños incrementos de la ventana
Incrementar la ventana en min(MSS,RecvBuffer/2)

En LAN:


En WAN:


El síndrome de ventana tonta (SWS) es un problema en las redes informáticas causado por un control de flujo TCP mal implementado.

Puede surgir un problema grave en la operación de ventana deslizante cuando el programa de aplicación de envío crea datos lentamente, el programa de aplicación de recepción consume datos lentamente, o ambos.

Si un servidor con este problema no puede procesar todos los datos entrantes, solicita que sus clientes reduzcan la cantidad de datos que envían a la vez (la configuración de la ventana en un paquete TCP).

Si el servidor sigue sin poder procesar todos los datos entrantes, la ventana se vuelve cada vez más pequeña, a veces hasta el punto de que los datos transmitidos son más pequeños que el encabezado del paquete, lo que hace que la transmisión de datos sea extremadamente ineficiente. El nombre de este problema se debe a que el tamaño de la ventana se reduce a un valor "tonto".

Dado que hay una cierta cantidad de sobrecarga asociada con el procesamiento de cada paquete, el aumento en el número de paquetes significa una mayor sobrecarga para procesar una cantidad de datos decreciente. El resultado final es una  caida de la conexión.

Un método heurístico en el que el TCP debe permitir que la aplicación de envío realice llamadas de "escritura" y recopile los datos transferidos en cada llamada antes de transmitirlos a un segmento grande. El TCP de envío retrasa el envío de segmentos pequeños hasta que pueda acumular cantidades razonables de datos, lo que se conoce como agrupamiento.

Algoritmo de Nagle

Problema de segmentos pequeños, existen Aplicaciones que generan un byte por segmento.
Quienes pueden causar esto?
Respuesta:
  • Aplicaciones Window
  • Movimientos del mouse.
  • Teclas de función: F1...
Que hago? ¿Esperar por más datos?
Solución 1:
Dejar solamente un segmento pequeño pendiente de confirmación, este es el Algoritmo de Nagle.

Solución 2:
Acknowledges por lotes, validar varios lotes de segmentos, para ello retardo  el timer del ack. Esto de validar varios Segmentos al mandar una respuesta se conoce como Piggyback el ack con el tráfico en sentido inverso, si no alcanza el tiempo,  disparar el ack en 200ms.