HTTP/2 GOAWAY 및 RST_STREAM PCAP 분석: 재설정 스트림, 프록시 제한 및 gRPC 오류 디버깅
HTTP/2 GOAWAY, RST_STREAM, gRPC 사용 불가 오류, 프록시 스트림 제한, TLS ALPN 협상, 연결 재사용 및 패킷 캡처 증거를 진단하는 방법입니다.
하나의 TCP 연결이 많은 스트림을 전달할 수 있으므로 HTTP/2 오류를 진단하기 어려울 수 있습니다. 'RST_STREAM'으로 인해 단일 요청이 실패하거나, 전체 연결이 'GOAWAY'를 수신하거나, gRPC 클라이언트가 'UNAVAILABLE', 'INTERNAL', 'CANCELLED' 또는 '스트림 재설정'을 보고할 수 있습니다. 로그에 클라이언트, 프록시, 로드 밸런서 또는 서버가 스트림을 종료했는지 여부가 설명되지 않으면 사용자는 "HTTP2 GOAWAY pcap", "RST_STREAM 분석", "gRPC 스트림 재설정 패킷 캡처", "HTTP/2 프록시 재설정" 및 "ALPN HTTP2 문제 해결"을 검색합니다.
PCAP 수술은 HTTP/2 증거가 TLS, ALPN, 연결 타이밍, 스트림 재설정 및 TCP 닫기 동작을 보존해야 하기 때문에 유용합니다. TLS가 암호화되어 있고 키를 사용할 수 없는 경우 패킷 캡처에는 타이밍, TCP 재설정, 연결 재사용이 표시되며 때로는 통제된 환경에서만 암호 해독된 HTTP/2도 표시됩니다.
HTTP/2 연결과 스트림 비교
HTTP/2는 하나의 연결을 통해 여러 스트림을 다중화합니다. 스트림 재설정은 TCP 연결 재설정과 동일하지 않습니다.
RST_STREAM: 하나의 스트림이 취소되거나 실패했습니다.GOAWAY: 엔드포인트가 HTTP/2 연결을 닫거나 드레이닝하고 있습니다.- TCP FIN/RST: 기본 연결이 닫히거나 중단됩니다.
애플리케이션은 종종 이를 하나의 오류로 축소합니다. 패킷 증거와 로그를 통해 이를 분리해야 합니다.
ALPN 협상
TLS를 통한 HTTP/2는 일반적으로 ALPN에 따라 다릅니다. TLS 핸드셰이크는 h2 또는 다른 프로토콜을 협상합니다. ALPN이 HTTP/2를 협상하지 않으면 클라이언트와 서버가 대체되거나 실패할 수 있습니다.
보존하다:
- ClientHello ALPN 확장.
- 보이는 경우 서버가 선택한 ALPN.
- TLS 경고.
- 핸드셰이크 중에 TCP가 재설정됩니다.
HTTP/2가 협상되지 않은 경우 아직 RST_STREAM을 디버그하지 마세요.
GOAWAY
GOAWAY는 해당 연결에 새 스트림을 생성해서는 안 된다는 것을 피어에게 알립니다. 이는 정상적인 드레이닝, 배포, 프록시 연결 에이징 또는 로드 밸런서 동작 중에 정상일 수 있습니다. 클라이언트가 드레이닝 연결을 잘못 재사용하거나 활성 요청 중에 GOAWAY가 나타나면 문제가 됩니다.
중요한 질문:
- 누가 GOAWAY를 보냈나요?
- 마지막 스트림 ID는 무엇이었나요?
- 활성 스트림이 실패했나요?
- 클라이언트가 새 연결을 다시 시도했습니까?
- GOAWAY는 고정된 연결 연령에 발생합니까?
RST_STREAM
RST_STREAM은 하나의 HTTP/2 스트림을 종료합니다. 원인은 다음과 같습니다:
- 클라이언트 취소.
- 서버가 요청을 거부합니다.
- 프록시 시간 초과.
- 흐름 제어 문제.
- 최대 스트림 제한.
- gRPC 기한이 초과되었습니다.
- 백엔드 재설정이 프록시로 변환되었습니다.
스트림 ID와 타이밍이 중요합니다. 그것들이 없으면 패킷 스토리는 불완전합니다.
TCP 레이어는 여전히 중요하다
HTTP/2는 TCP에 위치합니다. 기본 연결에 재전송, 창 없음, 재설정, MTU 문제 또는 유휴 시간 초과가 있는 경우 HTTP/2 오류는 부차적일 수 있습니다.
연관:
- 스트림 재설정 시간.
- 재설정 전 TCP 재전송.
- FIN/RST 발신자.
- 유휴 간격.
- TLS close_notify가 표시되는 경우.
Checklist
다음 워크플로를 사용하세요.
- DNS, TCP 및 TLS 핸드셰이크를 유지합니다.
- ALPN 협상 HTTP/2를 확인합니다.
- 오류가 스트림 수준인지 연결 수준인지 식별합니다.
- GOAWAY 타이밍과 발신자를 찾으세요.
- 해독된 추적 또는 로그에서 RST_STREAM 타이밍과 스트림 ID를 찾으세요.
- 프록시/로드 밸런서 로그와 연관시키십시오.
- TCP 재전송, 제로 윈도우, FIN, RST를 확인하세요.
- 클라이언트가 올바르게 재시도하는지 확인하세요.
- 트리밍 시 패킷 타이밍을 유지합니다.
- 암호화되면 pcap 증거를 HTTP/2 디버그 로그와 결합합니다.
최종 진단
HTTP/2 GOAWAY 및 RST_STREAM 오류는 일반적인 네트워크 오류가 아닙니다. 이는 ALPN, 프록시 동작, gRPC 기한, TCP 상태 및 연결 재사용과 상호 연관되어야 하는 스트림 및 연결 제어 신호입니다.
PCAP 수술은 타임라인을 보존하여 HTTP/2 및 gRPC 오류를 TLS 협상, 스트림 재설정, 연결 드레이닝, 프록시 시간 초과 또는 TCP 전송 오류 등 올바른 계층으로 줄일 수 있도록 도와줍니다.