Анализ HTTP/2 GOAWAY и RST_STREAM PCAP: отладка потоков сброса, ограничений прокси и сбоев gRPC
Как диагностировать ошибки HTTP/2 GOAWAY, RST_STREAM, недоступности gRPC, ограничения потока прокси, согласование TLS ALPN, повторное использование соединений и доказательства захвата пакетов.
Сбои HTTP/2 бывает сложно диагностировать, поскольку одно TCP-соединение может передавать множество потоков. Одиночный запрос может завершиться неудачно с сообщением «RST_STREAM», все соединение может получить сообщение «GOAWAY», или клиент gRPC может сообщить «UNAVAILABLE», «INTERNAL», «CANCELLED» или «сброс потока». Пользователи ищут «HTTP2 GOAWAY pcap», «Анализ RST_STREAM», «Захват пакета сброса потока gRPC», «Сброс прокси-сервера HTTP/2» и «Устранение неполадок ALPN HTTP2», когда журналы не объясняют, завершил ли поток клиент, прокси, балансировщик нагрузки или сервер.
PCAP Surgery полезен, поскольку доказательства HTTP/2 должны сохранять TLS, ALPN, время подключения, сброс потока и поведение закрытия TCP. Если TLS зашифрован и ключи недоступны, захват пакетов по-прежнему показывает время, сброс TCP, повторное использование соединения и иногда расшифрованный HTTP/2 только в контролируемых средах.
Соединение HTTP/2 против потока
HTTP/2 мультиплексирует несколько потоков по одному соединению. Сброс потока — это не то же самое, что сброс TCP-соединения.
RST_STREAM: один поток отменен или не выполнен.GOAWAY: конечная точка закрывает или опустошает соединение HTTP/2.- TCP FIN/RST: базовое соединение закрывается или прерывается.
Приложения часто объединяют их в одну ошибку. Доказательства пакетов и журналы должны разделять их.
Переговоры ALPN
HTTP/2 через TLS обычно зависит от ALPN. Подтверждение TLS согласовывает h2 или другой протокол. Если ALPN не согласовывает HTTP/2, клиент и сервер могут отступить или выйти из строя.
Сохранять:
- Расширение ClientHello ALPN.
- Выбранный сервером ALPN, где он виден.
- TLS-оповещения.
- TCP сбрасывается во время рукопожатия.
Если HTTP/2 никогда не согласовывался, пока не отлаживайте RST_STREAM.
GOAWAY
GOAWAY сообщает партнеру, что в этом соединении не следует создавать новые потоки. Это может быть нормальным явлением во время постепенного опорожнения, развертывания, устаревания прокси-соединения или поведения балансировщика нагрузки. Это становится проблемой, когда клиенты неправильно повторно используют сливные соединения или когда GOAWAY появляется во время активных запросов.
Важные вопросы:
- Кто послал GOAWAY?
- Какой был идентификатор последнего потока?
- Активные потоки не удались?
- Клиент повторил попытку нового соединения?
- Происходит ли GOAWAY в фиксированном возрасте подключения?
RST_STREAM
RST_STREAM завершает один поток HTTP/2. Причины включают в себя:
- Отказ от клиента.
- Сервер отклоняет запрос.
- Тайм-аут прокси.
- Проблема с контролем потока.
- Максимальный лимит потока.
- Срок действия gRPC превышен.
- Сброс бэкэнда, переведенный через прокси.
Идентификатор потока и время имеют значение. Без них история пакетов будет неполной.
Уровень TCP все еще имеет значение
HTTP/2 работает на TCP. Если базовое соединение имеет повторные передачи, нулевое окно, сброс, проблемы с MTU или тайм-аут простоя, ошибки HTTP/2 могут быть вторичными.
Коррелировать:
- Время сброса потока.
- TCP повторяет передачу перед сбросом.
- Отправитель FIN/RST.
- Интервал простоя.
- TLS close_notify, если виден.
Checklist
Используйте этот рабочий процесс:
- Сохраните подтверждение DNS, TCP и TLS.
- Подтвердите согласование ALPN HTTP/2.
- Определите, является ли сбой на уровне потока или на уровне соединения.
- Найдите время и отправителя GOAWAY.
- Ищите время RST_STREAM и идентификатор потока в расшифрованных трассировках или журналах.
- Коррелируйте с журналами прокси-сервера/балансировщика нагрузки.
- Проверьте повторную передачу TCP, нулевое окно, FIN и RST.
- Проверьте, правильно ли клиент повторяет попытку.
- Сохраняйте синхронизацию пакетов при обрезке.
- Объедините доказательства pcap с журналами отладки HTTP/2 в зашифрованном виде.
Окончательный диагноз
Ошибки HTTP/2 GOAWAY и RST_STREAM не являются типичными сетевыми сбоями. Это сигналы управления потоком и соединением, которые должны быть коррелированы с ALPN, поведением прокси-сервера, крайними сроками gRPC, работоспособностью TCP и повторным использованием соединения.
PCAP Surgery помогает сохранить временную шкалу, поэтому сбои HTTP/2 и gRPC можно свести к нужному уровню: согласование TLS, сброс потока, утечка соединения, тайм-аут прокси-сервера или сбой транспорта TCP.