https затянувшиеся TIME_WAIT соединения

Со своего клиентского ПК я подключаюсь к веб-серверу, он использует только HTTPS.

Когда я подключаюсь, я вижу в TCPView (альтернативе netstat инструмента sysinternals) множество подключений TIME_WAIT к конечной точке https. Много времени я вижу 11 соединений, задерживающихся на 2 минуты в TIME_WAIT. И это каждый раз, когда я делаю запрос. 2-4 соединения остаются открытыми в УСТАНОВЛЕННО, пока я не установлю сервер Keep-Alive: timeout=xx

Последние соединения в порядке, и они используются соответствующим образом. Первые соединения накапливаются и занимают целых 2 минуты.

Я перехватил трафик с помощью WireShark и увидел обычную передачу FIN, ACK и т. Д. На исходных портах устаревшего соединения. Я часто видел, что Chrome и IE (оба используют стек HTTP Windows), передают 6 запросов TCP, прежде чем поступит любой запрос с реальными данными. Полезная нагрузка мала (около 2000 байт).

Firefox вообще не выдает эти запросы...

Также стоит упомянуть, что сертификат самоподписан и не проверяется в браузере (Firefox имеет совершенно другой способ справиться с этим, чем Chrome).

Почему мой браузер выдает эти запросы? Почему Firefox не выдает эти tcp-соединения?

РЕДАКТИРОВАТЬ, это дамп из первого подключения, которое делает Chrome (захваченный с Wireshark):

    "https","0.000000",local-ip,dest-ip,"443","TCP","53890 > https [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=8 SACK_PERM=1"
    "53890","0.012749",dest-ip,local-ip,"53890","TCP","https > 53890 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1400 WS=1 SACK_PERM=1"
    "https","0.012828",local-ip,dest-ip,"443","TCP","53890 > https [ACK] Seq=1 Ack=1 Win=65792 Len=0"
    "53890","0.025979",dest-ip,local-ip,"53890","TCP","https > 53890 [ACK] Seq=1 Ack=222 Win=128578 Len=0"
    "53890","0.026099",dest-ip,local-ip,"53890","TLSv1.1","Server Hello, Certificate, Server Hello Done"
    "53890","0.038848",dest-ip,local-ip,"53890","TCP","https > 53890 [ACK] Seq=1093 Ack=436 Win=128364 Len=0"
    "53890","0.040474",dest-ip,local-ip,"53890","TLSv1.1","Change Cipher Spec, Encrypted Handshake Message"
    "https","0.041191",local-ip,dest-ip,"443","TCP","53890 > https [FIN, ACK] Seq=436 Ack=1168 Win=64512 Len=0"
    "53890","0.053312",dest-ip,local-ip,"53890","TCP","https > 53890 [ACK] Seq=1168 Ack=437 Win=128364 Len=0"
    "53890","0.053313",dest-ip,local-ip,"53890","TCP","https > 53890 [FIN, PSH, ACK] Seq=1168 Ack=437 Win=128364 Len=0"
    "https","0.053345",local-ip,dest-ip,"443","TCP","53890 > https [ACK] Seq=437 Ack=1169 Win=64512 Len=0"

1 ответ

Это совершенно нормально.

Каждый новый запрос, который ваш браузер делает к веб-серверу, является соединением TCP, которое будет использовать новый сокет.

После квитирования, передачи данных и постепенного закрытия сокеты будут находиться в TIME_WAIT до истечения таймера ядра.

Таймер TIME_WAIT определяется в TCP RFC (RFC 793) как 2x Максимальное время жизни сегмента. MSL произвольно определяется как 2 минуты.

В зависимости от реализации TCP в операционной системе этот таймер может или не может быть соблюден. Например, старые BSD варьировались по TIME_WAIT от 1 минуты до 4 минут.

Другие вопросы по тегам