Nenhum pacote SYN-ACK do servidor

Nenhum pacote SYN-ACK do servidor

Tenho dois servidores e usei meu próprio sistema embarcado com LwIP para fazer conexão com esses servidores.

Meu sistema embarcado com LwIP é o cliente e tenho server1 e server2. Conectei-me ao servidor1 e finalizei a conexão antes de conectar ao servidor2.

Análise adicional do fluxo:

  1. Cliente cria novo soquete com server1
  2. Cliente enviou pacote DNS para obter o endereço IP do servidor1; recebeu ACK do AP
  3. Cliente envia pacote TCP SYN;
  4. Server1 envia TCP SYN-ACK e realiza alguma transmissão de dados
  5. O cliente encerra a conexão com o servidor1 enviando o pacote TCP RST; e feche o soquete
  6. Cliente cria novo soquete com server2
  7. Cliente enviou pacote DNS para obter o endereço IP do servidor2; recebeu ACK do AP
  8. Cliente envia pacote TCP SYN para server2
  9. Server2 envia TCP SYN-ACK e realiza alguma transmissão de dados
  10. O cliente encerra a conexão com o servidor2 enviando o pacote TCP RST; e feche o soquete

No entanto, às vezes o server2 não responde ao pacote SYN do cliente que está na Etapa 9. Isso só acontece em algum momento. Eu verifiquei vários fóruns como:

[1]Por que um servidor não enviaria um pacote SYN/ACK em resposta a um pacote SYN?

[2]Servidor não envia um pacote SYN/ACK em resposta a um pacote SYN

Meu código não permite o dimensionamento de janelas. Não consigo verificar se o servidor é privado, por isso não tenho certeza se ele foi descartado. Meu ambiente é bastante barulhento e ocupado com muitos roteadores e dispositivos de comunicação. Este problema só acontece em ambientes barulhentos, mas não em ambientes mais limpos.

O que posso fazer como cliente para resolver esse problema?

Responder1

Algumas idéias sobre por que às vezes seu servidor não responde com SYN-ACK:

  • O aplicativo no servidor é interrompido quando o pacote SYN é enviado: Isso pode travar e depois conseguir funcionar novamente com um mecanismo de reinicialização automática do programa. Quando o aplicativo do servidor é interrompido ou travado, o soquete de escuta tcp é fechado, então o sistema operacional não responde.
  • Seu servidor tem alguns problemas para encontrar seu cliente de volta. Pode haver algum problema de roteamento ou roteamento assimétrico (isso quebra o firewall).
  • Se o cliente e o servidor estiverem na mesma rede, isso pode ser algum problema da camada 2, como protocolo Spanning Tree ou ARP.
  • Perda de pacotes na rede: seu pacote SYN ou SYN ACK foi descartado.
  • O servidor está sobrecarregado e às vezes não consegue responder ao pacote SYN.

Pode haver um grande número de coisas que podem fazer com que o servidor não responda ao pacote SYN.

O que eu farei :

  • Fazendo algum tcpdump no servidor para verificar a rede: O servidor recebe o pacote SYN ou há algum problema na rede antecipadamente? O servidor gera e envia um pacote SYN ACK? E trabalhe a partir daí.
  • Se você não tiver acesso ao servidor, faça a mesma coisa no roteador/firewall mais próximo.
  • Entre em contato com alguém que tenha acesso ao servidor.

informação relacionada