Добрый день,
On Mon, May 30, 2022 at 04:27:54PM +0400, Roman Arutyunyan wrote:
> Добрый день,
>
> Да, я видел. спасибо.
>
> > On 30 May 2022, at 16:22, izorkin@gmail.com wrote:
> >
> > Добрый день Роман.
> >
> > Скинул ссылку с дампом на личную почту.
> > Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось без ответа
> >
> >
> > --
> > С уважением,
> > Izorkin mailto:izorkin@gmail.com
> >
> > _______________________________________________
> > nginx-ru mailing list -- nginx-ru@nginx.org
> > To unsubscribe send an email to nginx-ru-leave@nginx.org
>
> ----
> Roman Arutyunyan
> arut@nginx.com
> _______________________________________________
> nginx-ru mailing list -- nginx-ru@nginx.org
> To unsubscribe send an email to nginx-ru-leave@nginx.org
Удалось выяснить следующее. Имеет место проблема на стороне Хрома. Если
точнее, в гугловой библиотоке QUICHE. Проблемa триггерится комбинацией
EarlyData + HelloRetryRequest. Если Хром отправил EarlyData, которую сервер
проигнорировал, то далее клиент не шлет новый ClientHello в ответ на
HelloRetryRequest т.к. зачем-то ждет подтверждения EarlyData. В итоге
соединение зависает и таймаутится.
ClientHello ->
EarlyData -> (ignore)
<- HelloRetryRequest
(timeout)
Самый простой способ обойти проблему - избежать отправки HelloRetryRequest.
В рассматриваемом случае для этого достаточно было убрать из конфигурации
nginx директиву ssl_ecdh_curve.
Заткнуть это также можно и в QUICHE при помощи следующего патча:
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index d2976006..ad5c4d3c 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -2404,6 +2404,9 @@ bool QuicSession::RetransmitLostData() {
return false;
}
}
+ if (connection()->encryption_level() == ENCRYPTION_ZERO_RTT) {
+ return true;
+ }
while (!streams_with_pending_retransmission_.empty()) {
if (!CanWriteStreamData()) {
break;
----
Roman Arutyunyan
arut@nginx.com
_______________________________________________
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-leave@nginx.org