Добрый день,

On Mon, May 30, 2022 at 04:27:54PM +0400, Roman Arutyunyan wrote:
> Добрый день,
> 
> Да, я видел. спасибо.
> 
> > On 30 May 2022, at 16:22, [email protected] wrote:
> > 
> > Добрый день Роман.
> > 
> > Скинул ссылку с дампом на личную почту.
> > Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось 
> > без ответа
> > 
> > 
> > -- 
> > С уважением,
> > Izorkin                          mailto:[email protected]
> > 
> > _______________________________________________
> > nginx-ru mailing list -- [email protected]
> > To unsubscribe send an email to [email protected]
> 
> ----
> Roman Arutyunyan
> [email protected]

> _______________________________________________
> nginx-ru mailing list -- [email protected]
> To unsubscribe send an email to [email protected]

Удалось выяснить следующее.  Имеет место проблема на стороне Хрома.  Если
точнее, в гугловой библиотоке 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
[email protected]
_______________________________________________
nginx-ru mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Ответить