Timeouts de TCP


En TCP(1) existen 4 tipos de timeouts (tiempos de espera) y cada uno de ellos se aplica en diferentes momentos y con diferente duración. Algunos, incluso, podemos evitarlos si es lo que deseamos…

Conocer estos tiempos es importante tanto para administradores de sistemas como para programadores de aplicaciones distribuidas (¡¡¡pocas no lo son ya!!!)

De usuario (keepalive)

Su objetivo es evitar mantener conexiones indefinidamente. Marca, por tanto, el tiempo que una conexión puede estar en silencio transcurrido el cual, se envían sondas de comprobación (el máximo de sondas es tcp_keepalive_probes y el tiempo entre sondas es tcp_keepalive_intvl) y si no se recibe ningún ACK, se cierra la conexión.
En cualquier estado del puerto, si expira este tiempo, se inicializan todas las colas, se informa al usuario con el mensaje «error: connection aborted due to user timeout» y se pasa al estado Closed.

De retransmisión

Una característica importante que se debe conocer de este timeout esque su valor cambia dinámicamente (ver 1, la RFC 793, para saber cómo se calcula) y está basado en los retardos observados en la red.  Para cualquier estado, si expira este tiempo, se reenvía de nuevo el segmento que está al inicio de la cola de retransmisión, se reinicia el contador de tiempo de retransmisión, y se retorna.

De persistencia

TCP controla el flujo de transmisión mediante las llamadas ventanas de retransmisión con las cuales el destinatario, a la vez que confirma la recepción de cierta cantidad de paquetes, informa de la cantidad de paquetes que puede seguir recibiendo (tamaño de la ventana). ¿Qué ocurre cuando indica que es 0? Pues que el emisor esperará a que el destinatario le informe que puede seguir recibiendo más información (es decir, el tamaño de su ventana es mayor que 0) ¿Y si se pierde este último aviso? ¿Cuánto tiempo debe el emisor esperar? Pues el marcado por este timeout, transcurrido el cual, el emisor envía una solicitud (windows probes) para conocer el tamaño de la ventana. Esta solicitud contiene 1 byte de datos.

En el estado time-wait (o 2MSL)

Este tiempo de espera es el que le indica al sistema operativo el tiempo que ha de transcurrir antes de poner, de nuevo, disponible un puerto tras su cierre y el objetivo es dejar tiempo suficiente para que los segmentos de esta conexión saliente desaparezcan del sistema.Está en función de MSL (Maximum Segment Lifetime) que, por convención, se define en 2 minutos.Si queremos que nuestro puerto esté disponible inmediatamente, debemos usar el flag SO_REUSEADDR, pero esto lo dejo para otro momento…

Referencias:

  1. http://www.rfc-es.org/rfc/rfc0793-es.txt

2 comentarios en “Timeouts de TCP

  1. Pingback: Timeouts de TCP en GNU/Linux y opciones para “afinar” un servidor | Mundo errante

  2. Pingback: Timeouts de TCP

Deja un comentario