Análise PCAP de falha de atualização do WebSocket: 101 protocolos de comutação, cabeçalhos de proxy, TLS e quedas de conexão

Como solucionar falhas de atualização do WebSocket com capturas de pacotes, incluindo HTTP 101, cabeçalhos de atualização, cabeçalhos de conexão, remoção de proxy, TLS, redefinições e tempos limite de inatividade.

atualização do websocket falhou, 101 protocolos de comutação, websocket proxy, atualização de conexão, análise pcap, http troubleshooting

As falhas do WebSocket geralmente se escondem atrás de mensagens genéricas do navegador ou do aplicativo: "Falha na conexão do WebSocket", "Código de resposta inesperado", "conexão fechada antes de receber uma resposta de handshake", "101 protocolos de comutação ausentes" ou "soquete desconectado". Os usuários procuram por "falha de atualização do WebSocket pcap", "101 protocolos de comutação não retornados", "cabeçalhos de proxy nginx websocket" e "redefinição de conexão do WebSocket" quando o HTTP parece funcionar, mas o tráfego em tempo real não." Uma captura de pacote pode mostrar se a solicitação de atualização HTTP foi enviada, se o servidor retornou 101 Protocolos de comutação, se um proxy removeu os cabeçalhos necessários, se o TLS foi bem-sucedido e se a conexão caiu após a atualização.

A cirurgia PCAP é útil porque os rastreamentos do WebSocket geralmente precisam do handshake HTTP e da linha do tempo TCP pós-atualização preservados.

Como é uma atualização saudável do WebSocket

Um cliente envia uma solicitação HTTP com cabeçalhos de atualização:

GET /socket HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ...
Sec-WebSocket-Version: 13

The server replies:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ...

Depois disso, a conexão não será mais um tráfego normal de solicitação/resposta HTTP. Ele carrega quadros WebSocket.

Falhas comuns de atualização

As causas comuns incluem:

  • O proxy tira o cabeçalho Upgrade.
  • O proxy remove ou reescreve Conexão: Atualização.
  • A rota de back-end não oferece suporte a WebSocket.
  • A terminação do TLS envia a solicitação para o upstream errado.
  • O comportamento de atualização de HTTP/2 para HTTP/1.1 está configurado incorretamente.
  • O redirecionamento de autenticação acontece em vez de 101.
  • O back-end retorna 400, 403, 404, 426, 502 ou 504.
  • A conexão é redefinida após a atualização.
  • O tempo limite de inatividade fecha o WebSocket silencioso.

O código de status e os cabeçalhos são importantes.

Problemas de cabeçalho de proxy

Os proxies reversos devem encaminhar os cabeçalhos de atualização do WebSocket corretamente. Se o backend nunca vir Upgrade: websocket, ele poderá tratar a solicitação como HTTP comum.

Evidência de pacote:

  • A solicitação de cliente para proxy inclui cabeçalhos de atualização.
  • A solicitação de proxy para back-end não os possui.
  • O back-end retorna uma resposta HTTP normal em vez de 101.

Esse é um problema de configuração de proxy, não um bug do cliente WebSocket.

TLS e SNI

Para WebSocket seguro (wss://), o TLS acontece antes da atualização HTTP. Se o TLS falhar, o handshake do WebSocket nunca será iniciado. Preserve DNS, TCP, TLS ClientHello, SNI e qualquer alerta ou redefinição de TLS.

Não diagnostique os cabeçalhos de atualização até que o caminho TLS seja comprovado.

A conexão cai após 101

Às vezes, a atualização é bem-sucedida e a conexão é encerrada. Esse é um fracasso diferente.

Procurar:

  • Remetente FIN ou RST.
  • Duração do tempo limite de inatividade.
  • Atividade de ping/pong do WebSocket.
  • Tempo limite de leitura do proxy.
  • Retransmissões TCP.
  • Janela nula.
  • Reinicialização do processo de back-end.

Se a queda ocorrer em um intervalo fixo, é provável que haja uma política de tempo limite.

Checklist

Use este fluxo de trabalho:

  1. Preservar conexão DNS e TCP.
  2. Verifique o handshake TLS para wss://.
  3. Inspecione os cabeçalhos de solicitação de atualização do cliente.
  4. Inspecione o status da resposta do servidor.
  5. Confirme 101 Protocolos de comutação se esperado.
  6. Compare solicitações de cliente para proxy e de proxy para back-end.
  7. Procure redirecionamentos ou respostas de autenticação.
  8. Se a atualização for bem-sucedida, inspecione FIN/RST/timeout pós-atualização.
  9. Preserva o tempo de ping/pong do WebSocket, se visível.
  10. Apare somente depois de manter o aperto de mão completo.

Diagnóstico final

As falhas de atualização do WebSocket geralmente são problemas de handshake HTTP ou encaminhamento de proxy até que 101 Protocolos de comutação sejam comprovados. Após a atualização, as falhas se transformam em problemas de tempo limite de TCP, redefinição ou protocolo de aplicativo de longa duração.

A cirurgia PCAP ajuda a preservar ambas as fases para que um erro vago do WebSocket possa ser rastreado até cabeçalhos, comportamento do proxy, TLS, resposta de back-end ou tempo de vida da conexão.