O que faz com que um sinalizador de redefinição de TCP / IP (RST) seja enviado?

122

Estou tentando descobrir por que a conexão TCP / IP do meu aplicativo continua soluçando a cada 10 minutos (exatamente, em um ou dois segundos). Executei o Wireshark e descobri que, após 10 minutos de inatividade, a outra extremidade está enviando um pacote com o sinalizador reset (RST) definido. Uma pesquisa no google me diz "a bandeira RESET significa que o receptor ficou confuso e quer interromper a conexão", mas isso é um pouco aquém dos detalhes que eu preciso. O que poderia estar causando isso? E é possível que algum roteador ao longo do caminho seja responsável por isso ou isso sempre vem do outro ponto de extremidade?

Edit: Existe um roteador (especificamente um Linksys WRT-54G) sentado entre o meu computador e o outro terminal - há algo que eu deva procurar nas configurações do roteador?

Lucas
fonte
12
Aqui está outra: Comcast
Tom Ritter
1
Felizmente, eu não tenho dependência da Comcast, pois isso está ocorrendo em uma LAN. Eu gostaria de poder mudar a culpa facilmente;) #
3030 Luke
Alguma vez percebeste isto? Não posso comentar porque não tenho pontos suficientes, mas tenho o mesmo problema exato que você estava tendo e estou procurando uma solução.
A que serviço esse caso específico se refere? Pode ser possível definir a manutenção da atividade no soquete (no nível do aplicativo), para que períodos longos de inatividade não resultem em alguém (no meio ou não) tentando forçar uma redefinição de conexão por falta de recursos.
Arielf
"Comcast" você diz? : D Confira este repositório
joonas.fi

Respostas:

88

Um 'roteador' pode estar fazendo qualquer coisa - particularmente o NAT, que pode envolver qualquer quantidade de bagunça no tráfego ...

Uma das razões pelas quais um dispositivo envia um RST é a resposta ao receber um pacote para um soquete fechado.

É difícil dar uma resposta firme, mas geral, porque todas as perversões possíveis foram visitadas no TCP desde o início, e todo tipo de pessoas pode estar inserindo RSTs na tentativa de bloquear o tráfego. (Alguns 'firewalls nacionais' funcionam assim, por exemplo.)

Will Dean
fonte
6
O roteador tem um tempo limite de 10 minutos para conexões TCP ou o roteador tem "detecção de pacote inteligente de gateway" ativada.
David Schwartz
2
É um pouco rico sugerir que um roteador pode estar cheio de bugs.
Marquês de Lorne
22

Execute um farejador de pacotes (por exemplo, Wireshark) também no ponto para ver se é o ponto que está enviando o RST ou alguém no meio.

Alexander
fonte
14

Acabei de passar algum tempo solucionando esse problema. Nenhuma das soluções propostas funcionou. Aconteceu que nosso administrador de sistemas atribuiu por engano o mesmo IP estático a dois servidores não relacionados, pertencentes a grupos diferentes, mas que estavam na mesma rede. Os resultados finais foram eliminados intermitentemente de conexões vnc, navegador que precisou ser atualizado várias vezes para buscar a página da web e outras coisas estranhas.

OutputLogic
fonte
7

O RST é enviado pelo lado que efetua o fechamento ativo porque é o lado que envia o último ACK. Portanto, se ele recebe o FIN do lado que faz o fechamento passivo em um estado errado, envia um pacote RST que indica o outro lado que ocorreu um erro.

Vishal gupta
fonte
6
Ambos os lados enviam e recebem uma FIN em um fechamento normal. Não há nada de errado com essa situação e, portanto, não há razão para um lado emitir uma redefinição. A primeira frase nem faz sentido.
Marquês de Lorne
2
[RST, ACK] também pode ser enviado pelo lado que recebe um SYN em uma porta que não está sendo ouvida. Em um caso que eu encontrei, o RST / ACK veio cerca de 60 segundos após o primeiro SYN. FWIW
Les
6

Alguns firewalls fazem isso se uma conexão estiver ociosa por x número de minutos. Alguns ISPs configuram seus roteadores para fazer isso por várias razões também.

Neste dia e idade, você precisará lidar com graciosamente (restabelecer conforme necessário) essa condição.

Brian Knoblauch
fonte
2
A conexão é restabelecida muito bem, o problema é que o breve período de desconexão causa um alerta desnecessariamente.
30308 Luke
1
Eu tive problemas especificamente com o equipamento Cisco PIX / ASA. Eles têm tempos de espera especialmente curtos como padrão. O equipamento mais barato é geralmente "melhor" a este respeito (como em não fazer tempo limite rápido real) ...
Brian Knoblauch
6

Se houver um roteador executando o NAT, especialmente um roteador básico com poucos recursos, ele envelhecerá primeiro as sessões TCP mais antigas. Para fazer isso, ele define o RSTsinalizador no pacote que efetivamente instrui a estação receptora a fechar (muito sem graça) a conexão. isso é feito para economizar recursos.

MKII
fonte
3

Uma coisa a ter em atenção é que muitos firewalls do Linux netfilter estão configurados incorretamente.

Se você tem algo como:

-A FORWARD -m state --state RELACIONADO, ESTABELECIDO -j ACEITA

-A FORWARD -p tcp -j REJECT --reject-with tcp-reset

a reordenação de pacotes pode resultar no firewall, considerando os pacotes inválidos e, assim, gerando redefinições que, em seguida, interrompem as conexões saudáveis.

A reordenação é particularmente provável com uma rede sem fio.

Em vez disso, deve ser:

-A FORWARD -m state --state RELACIONADO, ESTABELECIDO -j ACEITA

-A FORWARD -m state --state INVALID -j DROP

-A FORWARD -p tcp -j REJECT --reject-with tcp-reset

Basicamente, sempre que você tiver:

... -m state --state RELACIONADO, ESTABELECIDO -j ACEITA

deve ser seguido imediatamente por:

... -m state --state INVALID -j DROP

É melhor descartar um pacote do que gerar um protocolo que interrompa a redefinição do TCP. As redefinições são melhores quando comprovadamente são a coisa correta a ser enviada ... pois isso elimina o tempo limite. Mas, se houver alguma chance de serem inválidos, podem causar esse tipo de dor.

Labirinto
fonte
0

Isso ocorre porque há outro processo na rede enviando RST para sua conexão TCP.

Normalmente, o RST seria enviado no seguinte caso

  • Um processo fecha o soquete quando o soquete usando a opção SO_LINGER está ativado
  • O SO está fazendo a limpeza de recursos quando o processo é encerrado sem fechar o soquete.

No seu caso, parece que um processo está conectando sua conexão (porta IP +) e continua enviando RST após estabelecer a conexão.

Ben
fonte