Os timers do Windows para TCP usam uma unidade de tempo chamada tempo limite de retransmissão (RTO) baseado no tempo de ida e volta estimado (ou RTT) entre o emissor e o receptor, bem como a variação neste tempo de ida e volta. O comportamento deste temporizador é especificado em RFC 6298 . Para mais informações, consulte o artigo da Wikipédia Protocolo de Controle de Transmissão .
A maneira como funciona no Windows é a seguinte:
- Um RTO estimado é estabelecido pela primeira vez
- A mensagem TCP é enviada e esperamos por um pacote ACK (confirmação)
- Se o ACK não chegou, duplicamos o tempo de espera e voltamos para o passo 2
- Se o ACK for recebido, um novo RTO será calculado
- SE um ACK nunca for recebido, a conexão será cancelada com o erro WSAECONNABORTED.
O Windows usa dois parâmetros de registro para este protocolo, descritos neste artigo da Microsoft Como modificar o tempo limite de retransmissão máximo de TCP / IP .
TcpMaxDataRetransmissions
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Value Name: TcpMaxDataRetransmissions
Data Type: REG_DWORD - Number
Valid Range: 0 - 0xFFFFFFFF
Default: 5
Descrição:
This parameter controls the number of times TCP retransmits an individual data segment (non connect segment) before aborting the connection. The retransmission time-out is doubled with each successive retransmission on a connection. It is reset when responses resume. The base time-out value is dynamically determined by the measured round-trip time on the connection.
TCPInitialRtt
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ID for Adapter
Value Name: TCPInitialRtt
Data Type: REG_DWORD
Valid Range: 300-65535 (milliseconds in decimal)
Default: 0xBB8 (3000 milliseconds expressed in hexadecimal)
Descrição:
This parameter controls the initial retransmission time-out that is used by TCP on each new connection. It applies to the connection request (SYN) and to the first data segments that is sent on each connection. For example, the value data of "5000 decimal" sets the initial retransmit time to five seconds.
NOTE: You can increase the value only for the initial time-out. Decreasing the value is not supported.
Embora TCPInitialRtt comece com um tempo limite inicial de 3 segundos, será suavizado para um valor razoável quando os pacotes são transmitidos corretamente.
Por exemplo, como isso funciona se tomarmos os valores padrão de 3 segundos RTO e 5 tentativas, o tempo total de espera será:
- primeiro tempo limite: 3 segundos
- segundo tempo: 6 segundos
- terceiro tempo: 12 segundos
- quarto tempo limite: 24 segundos
- quinto e último tempo: 48 segundos
O que dá um tempo total de espera de 93 segundos antes que a conexão seja interrompida. Na maioria dos casos, se a conexão já funcionou corretamente, o tempo limite será muito menos.