Como depurar checksums / bits invertidos falhos em pacotes TCP?

5

Um aplicativo da web que mantemos recentemente encontrou um problema muito estranho: três de quatro máquinas virtuais em dois hosts físicos tiveram problemas para se conectar ao servidor do nosso provedor de pagamento via HTTPS. Depurar esse problema me levou a uma interessante turnê pela pilha OSI:

  1. no nível do aplicativo, parecia que a solicitação HTTPS expirou.
  2. usando openssl s_client , descobri que o handshake SSL falhou
  3. descarregando tráfego com o tcpdump e inspecionando-o com o Wireshark, notei que, para os handshakes com falha, todos os pacotes do servidor após o SYN / ACK inicial tinham checksums TCP inválidos. Comparando o conteúdo do pacote com apertos de mão bem-sucedidos, descobri que pelo menos um bit havia sido invertido. O servidor então tenta retransmitir os pacotes (novamente com somas de verificação inválidas) e fecha a conexão após 60 segundos.

Nem nosso provedor de pagamento nem nossa empresa de hospedagem foram muito úteis para diagnosticar esse problema. Felizmente, o problema desapareceu depois de algumas horas.

No entanto, essa "solução" me deixa muito infeliz. Eu gostaria de saber:

  1. quais são as possíveis causas para esse comportamento?
  2. como esse problema pode ser diagnosticado ainda mais se ocorrer novamente no futuro?

As máquinas virtuais estão executando o Debian 7 no KVM.

    
por Daniel Hepper 03.03.2017 / 09:04

0 respostas