O que significa "redefinição de conexão por pares"?

648

Qual é o significado do erro "conexão redefinida pelo par" em uma conexão TCP? É um erro fatal ou apenas uma notificação ou está relacionado à falha na rede?

Franck Freiburger
fonte

Respostas:

771

Isso é fatal. O servidor remoto enviou a você um pacote RST, que indica uma queda imediata da conexão, em vez do handshake usual. Isso ignora a transição normal de estado semi-fechado. Eu gosto desta descrição :

"Conexão redefinida por ponto" é o equivalente TCP / IP de colocar o telefone de volta no gancho. É mais educado do que simplesmente não responder, deixando um pendurado. Mas não é o FIN-ACK esperado do conversador TCP / IP verdadeiramente educado.

ire_and_curses
fonte
49
Por que é rotulado de "reset de conexão por pares “Parece que ele deve ser 'reset de conexão por parte do anfitrião', ou 'reset de conexão pelo servidor'?
Robert
27
@ Robert Porque é de onde veio a redefinição. O par enviou um pacote RST.
Marquês de Lorne
106
... Robert, sua preocupação não faz sentido para mim. O par é estritamente mais geral do que isso. Em um modelo típico de cliente-servidor, o servidor pode facilmente receber essa notificação do "cliente". A máquina que solicita inicialmente a conexão tem o mesmo poder de enviar esta notificação. No nível TCP, parece idêntico quando a conexão está em andamento. As duas máquinas, quando se comunicam, são apenas pares.
Codetaku
9
Este pacote poderia ter sido enviado por outro dispositivo no meio como um roteador?
Arnold Roa
3
Ele não pode ser chamado de 'redefinição de conexão pelo servidor' porque pode ser enviado pelo cliente ou pelo servidor. Não pode ser 'ignorado'. Se um cliente receber esse erro, isso significa que a conexão TCP não está mais aberta no servidor, por exemplo, desde que o servidor travou e foi reiniciado.
Johannes Overmann 17/07
193

Isso significa que um TCP RST foi recebido e a conexão agora está fechada. Isso ocorre quando um pacote é enviado da sua extremidade da conexão, mas a outra extremidade não reconhece a conexão; ele enviará de volta um pacote com o bit RST configurado para fechar a conexão à força.

Isso pode acontecer se o outro lado travar e voltar a funcionar ou se chamar close()o soquete enquanto houver dados de você em trânsito, e é uma indicação para você de que alguns dos dados que você enviou anteriormente podem não ter sido recebidos.

Depende de você se isso é um erro; se as informações que você estava enviando eram apenas para o benefício do cliente remoto, talvez não importasse a perda de dados finais. No entanto, você deve fechar o soquete e liberar quaisquer outros recursos associados à conexão.

mark4o
fonte
11
Se você definir a opção de soquete SO_LINGER como zero ao abrir um novo soquete, feche-o normalmente, o bit RST será definido. Portanto, TODA a conexão termina com uma redefinição. Não tente fazer isso em casa, é apenas irritante. stackoverflow.com/questions/3757289
Chris Huang-Leaver
1
Como corrigir esse problema, precisamos reiniciar o host remoto e o nosso?
user2225190
3
@ user2225190 Você precisa reconectar o cliente, mas primeiro você precisa examinar seu software para garantir que não seja devido a um erro no protocolo do aplicativo, ou seja, fechar uma conexão na qual a outra extremidade ainda está gravando.
Marquês de Lorne
1
Obrigado por seu comentário. Costumava trabalhar por dois meses. Também estou tentando em uma linha de comando, mas ainda estou recebendo esse erro. Eu tento "sftp user @ machine". Erro inconsistente.
usuário2225190