Análisis PCAP de error de actualización de WebSocket: 101 protocolos de conmutación, encabezados de proxy, TLS y caídas de conexión
Cómo solucionar errores de actualización de WebSocket con capturas de paquetes, incluidos HTTP 101, encabezados de actualización, encabezados de conexión, eliminación de proxy, TLS, restablecimientos y tiempos de espera de inactividad.
Las fallas de WebSocket a menudo se esconden detrás de mensajes genéricos del navegador o de la aplicación: "Error en la conexión de WebSocket", "Código de respuesta inesperado", "conexión cerrada antes de recibir una respuesta de protocolo de enlace", "Faltan protocolos de conmutación 101" o "enchufe desconectado". Los usuarios buscan "pcap de error de actualización de WebSocket", "Protocolos de conmutación 101 no devueltos", "encabezados de proxy de websocket de nginx" y "restablecimiento de conexión de WebSocket" cuando HTTP parece funcionar pero el tráfico en tiempo real no."
Una captura de paquetes puede mostrar si se envió la solicitud de actualización HTTP, si el servidor devolvió "101 protocolos de conmutación", si un proxy eliminó los encabezados requeridos, si TLS tuvo éxito y si la conexión se interrumpió después de la actualización.
La cirugía PCAP es útil porque los seguimientos de WebSocket a menudo necesitan conservar tanto el protocolo de enlace HTTP como la línea de tiempo TCP posterior a la actualización.
Cómo se ve una actualización saludable de WebSocket
Un cliente envía una solicitud HTTP con encabezados de actualización:
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: ...
Después de eso, la conexión ya no es tráfico de solicitud/respuesta HTTP normal. Lleva marcos WebSocket.
Fallos comunes de actualización
Las causas comunes incluyen:
- El proxy elimina el encabezado "Actualizar".
- El proxy elimina o reescribe "Conexión: Actualización".
- La ruta de backend no es compatible con WebSocket.
- La terminación TLS envía una solicitud a un canal ascendente incorrecto.
- El comportamiento de actualización de HTTP/2 a HTTP/1.1 está mal configurado.
- La redirección de autenticación ocurre en lugar de 101.
- El backend devuelve 400, 403, 404, 426, 502 o 504.
- La conexión se restablece después de la actualización.
- El tiempo de espera de inactividad cierra el WebSocket silencioso.
El código de estado y los encabezados son importantes.
Problemas con el encabezado del proxy
Los servidores proxy inversos deben reenviar correctamente los encabezados de actualización de WebSocket. Si el backend nunca ve "Actualización: websocket", puede tratar la solicitud como HTTP normal.
Paquete de evidencia:
- La solicitud de cliente a proxy incluye encabezados de actualización.
- La solicitud de proxy a backend carece de ellos.
- El backend devuelve una respuesta HTTP normal en lugar de 101.
Se trata de un problema de configuración del proxy, no de un error del cliente WebSocket.
TLS y SNI
Para WebSocket seguro (wss://), TLS ocurre antes de la actualización HTTP. Si TLS falla, el protocolo de enlace WebSocket nunca comienza. Conserve DNS, TCP, TLS ClientHello, SNI y cualquier alerta o reinicio de TLS.
No diagnostique los encabezados de actualización hasta que se pruebe la ruta TLS.
La conexión se cae después del 101
A veces, la actualización se realiza correctamente y luego se cierra la conexión. Ese es un fracaso diferente.
Buscar:
- Remitente FIN o RST.
- Duración del tiempo de inactividad.
- Actividad de ping/pong de WebSocket.
- Tiempo de espera de lectura del proxy.
- Retransmisiones TCP.
- Ventana cero.
- Reinicio del proceso backend.
Si la caída ocurre en un intervalo fijo, es probable que se agote la política de tiempo de espera.
Checklist
Utilice este flujo de trabajo:
- Preservar la conexión DNS y TCP.
- Verifique el protocolo de enlace TLS para
wss://. - Inspeccione los encabezados de solicitud de actualización del cliente.
- Inspeccionar el estado de respuesta del servidor.
- Confirme los "Protocolos de conmutación 101" si se espera.
- Compare solicitudes de cliente a proxy y de proxy a backend.
- Busque redireccionamientos o respuestas de autenticación.
- Si la actualización se realiza correctamente, inspeccione FIN/RST/tiempo de espera posterior a la actualización.
- Conserve el tiempo de ping/pong de WebSocket si está visible.
- Recorte sólo después de mantener el apretón de manos completo.
Diagnóstico final
Los errores de actualización de WebSocket suelen ser problemas de protocolo de enlace HTTP o de reenvío de proxy hasta que se demuestre "101 protocolos de conmutación". Después de la actualización, las fallas se convierten en problemas de tiempo de espera de TCP, restablecimiento o protocolo de aplicación de larga duración.
PCAP Surgery ayuda a preservar ambas fases para que un vago error de WebSocket pueda rastrearse hasta los encabezados, el comportamiento del proxy, TLS, la respuesta del backend o la vida útil de la conexión.