Resumen

  • TIME-WAIT es una frontera temporal: después de un cierre activo, el RFC 9293 exige conservar el estado durante dos vidas máximas de segmento para impedir que los paquetes de la conexión anterior se confundan con los de la siguiente.
  • En la cadena descrita por el RFC 1337, un segmento antiguo no aceptable provoca un ACK; el par que ya cerró responde con un RST, y aceptar ese RST elimina TIME-WAIT antes de que termine la cuarentena.

El memorando demostró tres consecuencias posibles tras una reapertura rápida, pero lo hizo en una simulación deliberadamente extrema. Es una prueba de existencia, no una medición de frecuencia actual.

El cierre de una aplicación no vacía la red. Un segmento de datos puede seguir retrasado detrás de un enlace congestionado; un ACK duplicado puede reaparecer después de tomar una ruta más larga. Esos paquetes no saben que los sockets han desaparecido ni que la misma combinación de direcciones y puertos puede identificar pronto otra conexión.

TIME-WAIT mantiene separadas esas dos historias. El extremo que cierra activamente conserva un bloque de control después del intercambio final en lugar de olvidar la conexión de inmediato. El RFC 9293 fija el coste: el extremo debe permanecer en TIME-WAIT durante 2xMSL, dos veces la vida máxima de un segmento. La espera no es limpieza aplazada. Es el intervalo que permite morir a los duplicados antiguos antes de que el mismo cuádruple vuelva a tener significado.

El RFC 1337 parte de una observación incómoda: las respuestas normales de TCP frente a tráfico obsoleto podían destruir esa cuarentena.

Una respuesta correcta que fabrica el reset equivocado

La secuencia empieza cuando un segmento antiguo de datos o de acuse llega al extremo A, que sigue en TIME-WAIT. El segmento no es aceptable, quizá porque su número de secuencia o su marca temporal pertenece a otra encarnación. A responde con un ACK que lleva sus valores actuales SND.NXT y RCV.NXT.

El extremo B ya no conserva ningún estado para esa conexión. Cuando recibe un ACK que no reconoce, contesta con un RST. Si A trata ese reset como una razón para abandonar TIME-WAIT, borra precisamente el estado que debía sobrevivir a los paquetes antiguos. El segmento obsoleto no ordenó directamente el cierre: hizo hablar a A, la respuesta exacta de A indujo a un par sin estado a emitir el control destructivo y ese control terminó la espera. El RFC 1337 llamó a esta cadena «TIME-WAIT Assassination».

El asesinato no equivale todavía a que una aplicación nueva reciba datos viejos. Suprime la barrera que impedía que ocurriera. Para materializar el daño, la misma identidad de conexión debe reabrirse antes de que expiren los duplicados y los espacios de secuencia de ambas encarnaciones deben solaparse lo suficiente. Además, un paquete antiguo debe caer dentro de un rango que el nuevo estado considere válido.

El memorando enumera tres resultados. H1 acepta por error datos de la encarnación anterior. H2 deja a los extremos desincronizados; con el comportamiento especificado entonces, podían reconocer información que nunca se envió y entrar en un bucle permanente de ACK. H3 mata la conexión nueva cuando un segmento antiguo interviene durante la apertura, incluso después de que esta pareciera haber tenido éxito.

Estas condiciones hacen que H1, H2 y H3 sean menos probables que el asesinato por sí solo. No basta con eliminar TIME-WAIT: también hace falta reutilizar pronto la identidad, solapar los espacios y recibir el duplicado preciso en el intervalo preciso. El RFC 1337 reprodujo los cuatro fenómenos sobre una pila SunOS 4.1.1 dentro de un entorno simulado que duplicaba segmentos masivamente y había sido ajustado para producir las coincidencias. El resultado prueba que el mecanismo puede existir. No establece su incidencia contemporánea ni describe el comportamiento de un sistema actual concreto.

Tres remedios que no prometen lo mismo

La primera propuesta del RFC 1337 es ignorar los RST mientras TIME-WAIT cumple su función. Si se aplica la MSL de dos minutos asumida por el memorando, el texto afirma que esta medida evita H1, H2 y H3. La lógica sigue la finalidad del estado: si la espera existe para dejar morir tráfico antiguo no autenticado, ese mismo tráfico no debería poder acortarla.

La recomendación conserva un límite importante. El RFC 1337 es Informativo y solicita una prueba prolongada en producción para descubrir efectos inesperados. No demuestra que todas las pilas hayan adoptado la regla ni que ignorar un reset en ese estado carezca de costes en cualquier entorno.

La segunda propuesta recurre a PAWS y a las marcas temporales de TCP. Si TIME-WAIT resiste hasta que avancen los relojes, los SYN de la nueva conexión pueden llevar valores posteriores a los de los segmentos viejos, y PAWS puede impedir H1. Pero no elimina necesariamente H2 y H3. Un ACK antiguo que llega durante TIME-WAIT puede provocar un ACK nuevo con una marca temporal actual; ese «duplicado antiguo renovado» puede superar la comprobación en la encarnación siguiente.

La tercera propuesta amplía los números de secuencia a 64 bits. Un espacio mayor haría mucho más lenta su reutilización, pero no impediría que un RST terminara TIME-WAIT. El memorando lo trata como una modificación sustancial que solo podría neutralizar los peligros posteriores junto con cambios adicionales de parámetros, no como un arreglo aislado.

La especificación actual mantiene la tensión

El RFC 9293, la norma base actual de TCP, conserva el principio de 2xMSL. Permite aceptar directamente un nuevo SYN del mismo extremo desde TIME-WAIT solo si el nuevo ISN supera el mayor número usado por la conexión anterior y si el endpoint vuelve a TIME-WAIT cuando el SYN resulta ser un duplicado viejo. También remite a un algoritmo basado en marcas temporales para servidores con tasas altas de establecimiento.

El autómata base mantiene, sin embargo, la salida que da sentido al problema. Después de las comprobaciones de aceptabilidad, un RST procesado en TIME-WAIT lleva a CLOSED y elimina el bloque de control. En cambio, una retransmisión del FIN remoto se reconoce y reinicia el temporizador de 2xMSL. Dos controles recibidos dentro del mismo estado pueden, por ramas distintas, prolongar o terminar la frontera.

Por eso «reducir TIME-WAIT» es una descripción incompleta. No dice qué prueba sustituye al tiempo para separar encarnaciones. «Conservar más estado» tampoco dice si ese estado puede resistir las señales que lo eliminan. La pregunta de arquitectura es quién obtiene autoridad para levantar una cuarentena diseñada precisamente para durar más que tráfico antiguo sin autenticar.

Las únicas fuentes de este paquete son el RFC 1337, publicado como Informativo en mayo de 1992, y el RFC 9293, estándar de Internet publicado en agosto de 2022. Describen el mecanismo y sus condiciones; no documentan su frecuencia actual ni la conducta de un producto identificado.