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.
Respuestas:
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.
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.
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.
fuente
RST ACK
respuestas a la dirección de origen falsa.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
Número de acuse de recibo: 32 bits
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.
fuente