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?
fonte
Respostas:
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.)
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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
RST
sinalizador no pacote que efetivamente instrui a estação receptora a fechar (muito sem graça) a conexão. isso é feito para economizar recursos.fonte
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.
fonte
Isso ocorre porque há outro processo na rede enviando RST para sua conexão TCP.
Normalmente, o RST seria enviado no seguinte caso
No seu caso, parece que um processo está conectando sua conexão (porta IP +) e continua enviando RST após estabelecer a conexão.
fonte