Uso de TCP FIN e TCP RST

2

Eu tenho lido sobre o protocolo TCP recentemente porque fiquei um pouco curioso sobre como e por que determinados flags foram usados.

Na informação que encontrei fala sobre um fechamento normal O TCP FIN deve ser usado para fechar uma conexão, mas também fala sobre o TCP RST pode ser usado para um fechamento abortivo em uma conexão ativa.

A minha pergunta é, por que alguém usaria um RST para abortar / fechar uma conexão ativa usando o TCP FIN?

(Referindo-se a uma conexão ativa como uma conexão onde ambos os endpoints enviaram e receberam dados após o handshake padrão de 3 vias. Eu sei que um RST pode ser usado pelo servidor quando um cliente envia SYN para uma porta do servidor que não está escutando)

    
por Phillip 02.03.2011 / 17:06

3 respostas

5

Você normalmente não veria um TCP RST. Suponho que um aplicativo na abortagem da camada 7 possa gerar um RST, mas acho que você descobrirá que um RST é geralmente gerado por um firewall entre os dois hosts. Esta é uma lista de possíveis motivos do guia TCP / IP :

Recebimento de qualquer segmento TCP de qualquer dispositivo com o qual o dispositivo que está recebendo o segmento atualmente não possui uma conexão (diferente de um SYN solicitando uma nova conexão).

Recebimento de uma mensagem com um campo de Número de Confirmação ou Número de Seqüência inválido ou incorreto, indicando que a mensagem pode pertencer a uma conexão anterior ou é falsa de alguma outra forma.

Recebimento de uma mensagem SYN em uma porta onde não há processo escutando conexões.

    
por 02.03.2011 / 17:18
4

Alguns servidores Web usam RST em vez de FIN para fechar conexões (persistentes). Isso é visto como uma "otimização", porque evita o estado "meio fechado" e evita alguns dos problemas com pacotes FIN perdidos (qualquer outra transmissão produzirá apenas outro RST), que de outra forma exigiria que o estado fosse lembrado (2xMáximo tempo do segmento IIRC) por mais tempo no lado do servidor.

Veja: este documento e wikipedia no encerramento da conexão . (Vou tentar descobrir algumas referências mais interessantes também).

Você também pode ver o RST se a aplicação com o soquete falhou (segfault?), reinicializou o host ou as entradas da tabela NAT expiraram antes que a própria conexão ocorresse!

    
por 02.03.2011 / 17:44
3

Este é um caso extremo, mas acho interessante:

Alguns softwares de filtragem, como o web sense (ab), usam pacotes RST. O que acontece é que, em vez de websense sentado entre todo o tráfego, ele fareja o tráfego do fio. Se ele vê um site bloqueado, ele falsifica um pacote RST para o cliente (e eu acho que talvez o servidor também).

Este é mais um truque inteligente do que um uso pretendido.

    
por 02.03.2011 / 17:35