Por que vejo um pacote RST, ACK em vez de um pacote RST?


42

Olhando no Wireshark, muitas vezes vejo o TCP Streams terminar com um pacote RST, ACK em vez de um pacote RST. Alguém sabe por que isso é?

Um exemplo do que vejo:

SYN SYN, ACK ... dados ... RST, ACK

O Wireshark não está pegando um pacote RST antes do pacote RST, ACK.


2
Por que você acha que deveria haver um segmento de RST antes de RST / ACK? Talvez você possa fornecer um exemplo desse rastreamento de pacotes?
Gerben

O ACK pegou o RST no mesmo pacote?
generalnetworkerror

Alguma resposta o ajudou? Nesse caso, você deve aceitar a resposta para que a pergunta não apareça para sempre, procurando uma resposta. Como alternativa, você pode fornecer e aceitar sua própria resposta.
Ron Maupin

ACK u enviou solicitação \ conexão final de dados Conexão final = RST
motoko

Respostas:


55

Um RST / ACK não é um reconhecimento de um RST, o mesmo que um SYN / ACK não é exatamente um reconhecimento de um SYN. O estabelecimento do TCP, na verdade, é um processo de quatro vias: o host inicial envia um SYN para o host receptor, que envia um ACK para esse SYN. O host de recebimento envia um SYN para o host inicial, que envia um ACK de volta. Isso estabelece uma comunicação estável.

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

Para tornar isso mais eficiente, o host receptor pode ACK o SYN e enviar seu próprio SYN no mesmo pacote, criando o processo de três vias que estamos acostumados a ver.

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

No caso de um RST / ACK, o dispositivo está confirmando todos os dados enviados nos pacotes anteriores na sequência com um ACK e notificando o remetente de que a conexão foi fechada com o RST. O dispositivo está simplesmente combinando os dois pacotes em um, assim como um SYN / ACK. Um RST / ACK geralmente não é uma resposta normal ao fechar uma sessão TCP, mas também não é necessariamente indicativo de um problema.


4
Um exemplo de cenário de envio de RST / ACK é quando o host de recebimento não está atendendo na porta TCP de destino.
Indika K

Sim, de fato. Uma vez tentei simular um ataque DDoS (para fins educativos;)) da máquina A para uma máquina B na porta 80. Mas a porta 80 de B não está aberta. Para que eu possa ver a máquina B enviar muitas RST ACKrespostas ao endereço de origem falsificado.
smwikipedia

A resposta RST / ACK pode depender do conteúdo do pacote? Ou seja, o servidor recebe o pacote e, como o conteúdo do pacote corresponde a alguma condição, a sessão foi fechada.
Skooog #

1

Depois que a conexão é estabelecida, todos os pacotes precisam ter o ACK configurado e corresponder ao número de sequência dos pacotes recebidos para transporte / segurança confiáveis. RST sem ACK não serão aceitos. Quando um lado envia RST, o soquete é fechado imediatamente e o lado receptor também fecha o soquete imediatamente após receber RST válido. Não precisa ser e não pode ser reconhecido.

após o aperto de mão TCP

A ---> B Syn = x, Confirmar = y, len = z, Sinalizar ACK

B ---> A Syn = y, Confirmar = x + z, len = o, Sinalizar ACK

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

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

B fecha o soquete depois de enviar o último pacote e A fecha o soquete depois de recebê-lo.

(sem considerar a janela TCP aqui, ou pode haver mais pacotes de uma extremidade antes do acordo)

ACK Flag, número de reconhecimento e o procedimento de reconhecimento estão relacionados, mas não são a mesma coisa.

Por RFC793

RFC793

Número de agradecimento: 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.

Redefinir processamento

Em todos os estados, exceto SYN-SENT, todos os segmentos de redefinição (RST) são validados verificando seus campos SEQ. Uma redefinição é válida se seu número de sequência estiver na janela. No estado SYN-SENT (um RST recebido em resposta a um SYN inicial), o RST é aceitável se o campo ACK confirmar o SYN.

O receptor de um RST primeiro o valida e depois muda de estado. Se o receptor estiver no estado LISTEN, ele o ignora. Se o receptor estava no estado SYN-RECEIVED e já havia estado no estado LISTEN, o receptor retorna ao estado LISTEN, caso contrário, o receptor interrompe a conexão e passa ao estado CLOSED. Se o receptor estiver em qualquer outro estado, ele interrompe a conexão e avisa o usuário e passa para o estado FECHADO.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.