- Cuando la ventana tiene un tamaño de cero, el emisor no
puede mandar segmentos, con dos excepciones. Se pueden mandar los
datos urgentes y se pueden mandar un segmento de 1 byte para causar
que el recibidor genere un acuse nuevo con la ventana. Este último
es para evitar el bloqueo indefinido.
- Los emisores no tienen que mandar datos inmediatamente y los recibidores
no tienen que mandar acuses inmediatamente. Se puede usar esta flexibilidad
para mejorar el rendimiento.
- Por ejemplo, considera una conexión de TELNET. Cada carácter
tipiado genera un paquete de IP de 41 bytes, seguido por un acuse
de 40 bytes, seguido por una actualización de la ventana de
40 bytes cuando la aplicación lee el carácter, seguido
por 41 bytes cuando la aplicación hace un eco del carácter,
y finalmente 40 y 40 más.
- Una optimización es demorar los acuses y las actualizaciones
de ventana por 500 msegs para usar piggybacking.
- Una segunda optimización para minimizar los segmentos con
solamente un byte de información es el algoritmo de Nagle.
En esto se almacena los datos hasta que llegue el último acuse
o haya suficiente datos para llenar la mitad de la ventana o un segmento
máximo.
- Otro problema es el síndrome tonto de ventana. En esto la
ventana del recibidor está llena. La aplicación en el
recibidor lee un byte, que causa que el recibidor manda una actualización
del tamaño de ventana al emisor. El emisor manda un byte
y la ventana está llena otra vez. La solución de Clarke
es no mandar una actualización de ventana hasta que el recibidor
pueda manejar el segmento máximo de la conexión o el
buffer esté medio vació, cualquier es menor. También
el emisor no manda segmentos pequeños (si posible). Debiera
esperar hasta que haya suficiente espacio en la ventana para un segmento
completo o el buffer del recibidor esté medio vacío
(según su estimación de su tamaño).
|
|
|