¿Por qué veo un paquete RST, ACK en lugar de un paquete RST?

42

Al mirar en Wireshark, a menudo veo que las transmisiones TCP terminan con un paquete RST, ACK en lugar de un paquete RST. Alguien sabe por qué es esto?

Un ejemplo de lo que veo:

SYN SYN, ACK ... datos ... RST, ACK

Wireshark no está recogiendo un paquete RST antes del paquete RST, ACK.

packetwrassler
fuente
2
¿Por qué crees que debería haber un segmento RST antes de RST / ACK? ¿Tal vez podría proporcionar un ejemplo de tal rastreo de paquetes?
Gerben
¿El ACK superpuso el RST en el mismo paquete?
generalnetworkerror
¿Alguna respuesta te ayudó? Si es así, debe aceptar la respuesta para que la pregunta no siga apareciendo para siempre, buscando una respuesta. Alternativamente, puede proporcionar y aceptar su propia respuesta.
Ron Maupin
ACK u envió solicitud \ conexión final de datos Conexión final = RST
motoko

Respuestas:

55

Un RST / ACK no es un reconocimiento de un RST, al igual que un SYN / ACK no es exactamente un reconocimiento de un SYN. El establecimiento de TCP en realidad es un proceso de cuatro vías: el host iniciador envía un SYN al host receptor, que envía un ACK para ese SYN. El host receptor envía un SYN al host iniciador, que devuelve un ACK. Esto establece una comunicación con estado.

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

Para hacer esto más eficiente, el host receptor puede ACK el SYN y enviar su propio SYN en el mismo paquete, creando el proceso de tres vías que estamos acostumbrados a ver.

SYN -->
    <-- SYN/ACK
ACK -->

En el caso de un RST / ACK, el dispositivo reconoce los datos que se enviaron en los paquetes anteriores en la secuencia con un ACK y luego notifica al remitente que la conexión se ha cerrado con el RST. El dispositivo simplemente combina los dos paquetes en uno, como un SYN / ACK. Un RST / ACK generalmente no es una respuesta normal al cerrar una sesión TCP, pero tampoco es necesariamente indicativo de un problema.

Santino
fuente
44
Un escenario de ejemplo de envío de RST / ACK es cuando el host receptor no está escuchando en el puerto TCP de destino.
Indika K
Si de hecho. Una vez intenté simular un ataque DDoS (con fines educativos;)) de la máquina A a una máquina B en el puerto 80. Pero el puerto 80 de B no está abierto. Entonces puedo ver que la máquina B envía muchas RST ACKrespuestas a la dirección de origen falsa.
smwikipedia
¿Puede la respuesta RST / ACK depender del contenido del paquete? Es decir, el servidor recibe el paquete y debido a que el contenido del paquete coincide con alguna condición, la sesión se cerró.
skooog
1

Una vez que se establece la conexión, todos los paquetes deben tener configurado ACK y coincidir con el número de secuencia de los paquetes recibidos para un transporte / seguridad confiable. RST sin ACK no será aceptado. Cuando un lado envía RST, el socket se cierra inmediatamente y el lado receptor también cierra el socket inmediatamente después de recibir un RST válido. No necesita ser y no puede ser reconocido.

después del protocolo de enlace TCP

A ---> B Syn = x, Ack = y, len = z, indicador ACK

B ---> A Syn = y, Ack = x + z, len = o, indicador ACK

A ---> B Syn = x + z, Ack = y + o, len = p, indicador ACK

B ---> A Syn = y + o, ACK = x + z + p, len = q, RST, ACK Flag

B cierra el socket después de que envía el último paquete y A cierra el socket después de que lo recibe.

(sin tener en cuenta la ventana TCP aquí, o podría haber más paquetes de un extremo antes del reconocimiento)

La marca ACK, el número de reconocimiento y el procedimiento de reconocimiento están relacionados pero no son lo mismo.

Por RFC793

RFC793

Número de acuse de recibo: 32 bits

If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive.  Once a connection is established this is always sent.

Restablecer procesamiento

En todos los estados, excepto SYN-SENT, todos los segmentos de restablecimiento (RST) se validan verificando sus campos SEQ. Un reinicio es válido si su número de secuencia está en la ventana. En el estado SYN-SENT (un RST recibido en respuesta a un SYN inicial), el RST es aceptable si el campo ACK reconoce el SYN.

El receptor de un RST primero lo valida y luego cambia de estado. Si el receptor estaba en el estado ESCUCHAR, lo ignora. Si el receptor estaba en estado SINCRONIZADO y había estado previamente en el estado ESCUCHAR, entonces el receptor vuelve al estado ESCUCHAR; de lo contrario, el receptor cancela la conexión y pasa al estado CERRADO. Si el receptor estaba en cualquier otro estado, aborta la conexión y avisa al usuario y pasa al estado CERRADO.

sdaffa23fdsf
fuente