Zero Window y Wireshark

Si te pareció útil. Comparte

Hola chicos, hoy traigo un tema que a más de alguno le puede dar un dolor de cabeza. Últimamente para resolver fallas he estado utilizando Wireshark para analizar el tráfico de la red, sobre todo cuando trabajamos con aplicaciones cliente-servidor.

Hace unos días me encontré con una aplicación que parecía quedar “pegada” pero al medir realmente estaba haciendo su trabajo, pero lo hacía muy lento.

Por lo que realice una captura con Wireshark en la máquina que presentaba el problema. Como nota aparte siempre es recomendable realizar una captura en el cliente y en servidor y revisar que la información es congruente.

Encontramos lo siguiente:

Los números 0.000 es la diferencia de tiempo desde el último paquete capturado y el paquete que estoy viendo en este stream. Y en la columna de información nos dice que la maquina cliente informa que tiene “Zero Window”. Aquí viene una explicación técnica del asunto:

TCP maneja una ventana (o balde donde almacena la información) hasta que se la entregue a la aplicación o salte al siguiente proceso. Zero Window significa que este balde está lleno y no puede recibir más información hasta que se vacié. Esta situación está creando un delay en el proceso de 6 microsegundos. Esto puede crear un vacío entre procesos y si esto se repite millones de veces durante el proceso crea retardos significativos.

Es importante destacar que en la comunicación de red suele haber problemas (retardos, retransmisiones, duplicados, etc.) pero TCP está preparado para manejar todos estos inconvenientes. Por lo que tener un Zero Window de 6 microsegundos no es gran cosa. Si usas Wireshark te recomiendo fijarte en cosas que tarden tiempo más humano (500 ms o más) probablemente estos sean culpables del problema que otros detalles en la comunicación.

Al final resulto que este no era el problema con la aplicación, pero los síntomas eran muy similares y me pareció compartirlo con ustedes.

Como nota adicional. Si te topas con este error, para solucionarlo debes configurar la tarjeta de red con un “balde” más grande cosa que no se llene tan rápido. Además, puedes configurar la tarjeta de red para que maneje varias colas (o varios baldes a la vez) así si se llena uno puede continuar con el otro hasta que el primero este vacío nuevamente. Usualmente las tarjetas de red Intel dan más libertad con este tipo de optimizaciones de rendimiento.

Que tengas una gran semana!

Written By José Miguel Concha Parra

Deja un comentario