https conexões TIME_WAIT prolongadas

7

No meu PC cliente, estou conectando a um servidor da web, ele usa apenas HTTPS.

Quando me conecto, vejo no TCPView (alternativa da ferramenta sysinternals ao netstat) muitas conexões TIME_WAIT com o terminal https. Muitas vezes vejo 11 conexões permanecendo por 2 minutos em TIME_WAIT. E isso é toda vez que faço um pedido. 2-4 conexões permanecem abertas em ESTABLISHED por quanto tempo eu configurei Keep-Alive: timeout=xx

do servidor

As últimas conexões são OK e são reutilizadas adequadamente. As conexões anteriores se acumulam e levam os 2 minutos completos.

Capturei o tráfego com o WireShark e vi o FIN normal, o ACK etc passby nas portas de origem da conexão remanescente. Eu vi frequentemente que o Chrome e o IE (ambos usam a pilha HTTP do Windows), emitem 6 solicitações TCP antes que qualquer solicitação com dados reais apareça. A carga útil é pequena (cerca de 2000 bytes).

O Firefox não emite essas solicitações ...

Também vale mencionar que o certificado é auto-assinado e não é verificado no navegador (o Firefox tem uma maneira totalmente diferente de lidar com isso do que com o chrome).

Por que meu navegador emite essas solicitações? Por que o Firefox não emite essas conexões tcp?

EDIT, este é um dump da primeira conexão que o Chrome faz (capturado com o 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"
    
por Jaap 22.10.2012 / 15:59

1 resposta

3

Isso é completamente normal.

Cada novo pedido que o seu navegador faz ao servidor da web é uma conexão TCP que usará um novo soquete.

Após o handshake, a transferência de dados e o fechamento normal, os sockets ficarão em TIME_WAIT até que o timer do kernel expire.

O temporizador TIME_WAIT é definido no RFC TCP (RFC 793) como 2x a duração máxima do segmento. O MSL é arbitrariamente definido como 2 minutos.

Dependendo da implementação do TCP no sistema operacional, este temporizador pode ou não ser respeitado. Por exemplo, os BSDs antigos variavam TIME_WAIT entre 1 minuto e 4 minutos.

por 14.05.2013 / 12:45