Qual é o tempo limite padrão da conexão TCP no Windows?


28

Qual é o tempo limite padrão da conexão TCP no Windows? Existe uma chave do Registro para configurá-lo ou ela é definida dinamicamente?

Respostas:


23

No Windows, o valor é dinâmico para conexões estabelecidas , embora o padrão para conexões iniciais seja 72 segundos. As configurações do Registro são definidas neste artigo:

http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services: \ Tcpip \ Parameters

TcpInitialRTT : define quais são as configurações de tempo limite inicial para novas conexões. Esse número em segundos é dobrado cada vez que é retransmitido antes do tempo limite da conexão. O padrão é 3.

TcpMaxConnectRetransmissions : define o número de retransmissões antes do tempo limite de uma conexão. O padrão é 5.


Só é necessário restabelecer uma determinada conexão após alterá-las, não é necessário reiniciar, certo? Você sabe qual deles deve ser alterado para impedir que o Windows 7 descarte proativamente as conexões existentes em curtas interrupções? Tentei mudar TcpMaxDataRetransmissionspara 16 (o padrão é 5), mas o PuTTY ainda reduz as conexões muito rapidamente em breves interrupções, enquanto o ssh no OS X e na mesma rede as mantém bem. superuser.com/questions/529511/…
cnst

3
Na verdade, funcionou depois que eu reiniciei! Nada muda no Windows! Parece que você precisa reiniciar, e a configuração não afeta as conexões antigas ou novas se você simplesmente editar o registro sem reiniciar!
CNST

9

Normalmente, "tempo limite de conexão" refere-se ao tempo limite para criar a conexão inicial com um host. Em muitos sistemas (Windows 7 incluído), esse valor é configurado usando configurações separadas dos tempos limite para comunicações contínuas após o estabelecimento de uma conexão. Esta resposta aborda o cenário "conexão inicial" para o Windows 7, que é diferente do XP.

No Windows 7, são necessários dois hotfixes para oferecer suporte ao ajuste das configurações de tempo limite da conexão. As novas configurações podem ser definidas com o comando 'netsh'.

Do artigo do hotfix 2786464:

Nota No Windows 7 e Windows Server 2008 R2, o valor máximo de retransmissão SYN TCP (JH: MaxSynRetransmissions) é definido como 2 e não é configurável. Devido ao limite de 3 segundos do valor do tempo limite inicial (JH: InitialRTO), o handshake de três vias do TCP é limitado a um período de 21 segundos (3 segundos + 2 * 3 segundos + 4 * 3 segundos = 21 segundos) )

O primeiro hotfix adiciona uma configuração 'MaxSynRetransmissions' que permite alterar a configuração de repetição do valor padrão de 2. O segundo adiciona a configuração 'InitialRto' que permite alterar o valor RTO inicial do padrão de 3000ms (sim, milissegundos), mas apenas para algo menor que 3000ms; não pode ser aumentado. Dependendo da sua situação, você pode precisar apenas do hotfix 'MaxSynRetransmissions'.

Instale os dois hotfixes, reinicie e abra uma janela de comando como Administrador. Reinicializações adicionais não são necessárias para chamadas de comandos netsh subsequentes.

C:\Windows\system32>NET SESSION >nul 2>&1

C:\Windows\system32>IF %ERRORLEVEL% EQU 0 (ECHO Administrator PRIVILEGES Detected!) ELSE ( ECHO NOT AN ADMIN! )
Administrator PRIVILEGES Detected!

C:\Windows\system32>netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled
Initial RTO                         : 3000
Non Sack Rtt Resiliency             : disabled
Max SYN Retransmissions             : 2
** The above autotuninglevel setting is the result of Windows Scaling heuristics

overriding any local/policy configuration on at least one profile.

C:\Windows\system32>cmd /v:on /c "echo !TIME! & telnet 192.168.1.254 & echo !TIME!"
14:10:30.53
Connecting To 192.168.1.254...Could not open connection to the host, on port 23: Connect failed
14:10:51.60


C:\Windows\system32>netsh interface tcp set global MaxSynRetransmissions=3
Ok.


C:\Windows\system32>netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled
Initial RTO                         : 3000
Non Sack Rtt Resiliency             : disabled
Max SYN Retransmissions             : 3
** The above autotuninglevel setting is the result of Windows Scaling heuristics

overriding any local/policy configuration on at least one profile.

C:\Windows\system32>cmd /v:on /c "echo !TIME! & telnet 192.168.1.254 & echo !TIME!"
14:27:02.33
Connecting To 192.168.1.254...Could not open connection to the host, on port 23:
 Connect failed
14:27:47.41

C:\Windows\system32>netsh interface tcp set global MaxSynRetransmissions=2
Ok.


C:\Windows\system32>netsh interface tcp set global InitialRto=1000
Ok.


C:\Windows\system32>netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled
Initial RTO                         : 1000
Non Sack Rtt Resiliency             : disabled
Max SYN Retransmissions             : 2
** The above autotuninglevel setting is the result of Windows Scaling heuristics

overriding any local/policy configuration on at least one profile.


C:\Windows\system32>cmd /v:on /c "echo !TIME! & telnet 192.168.1.254 & echo !TIME!"
14:29:06.13
Connecting To 192.168.1.254...Could not open connection to the host, on port 23:
 Connect failed
14:29:13.20

Nota: O telnet do Windows é usado como referência para o tempo limite real da conexão. Ele precisa ser instalado separadamente, mas é fácil de fazer.

Links / elogios adicionais:



1

Se entendi sua pergunta corretamente, você está se referindo a:

TcpTimedWaitDelay

Essa chave determina o tempo que deve decorrer antes que o TCP / IP possa liberar uma conexão fechada e reutilizar seus recursos. Esse intervalo entre o fechamento e a liberação é conhecido como o estado TIME_WAIT ou duas vezes o estado máximo da vida útil do segmento (2MSL). Durante esse período, a reabertura da conexão com o cliente e o servidor custa menos do que estabelecer uma nova conexão. Ao reduzir o valor dessa entrada, o TCP / IP pode liberar conexões fechadas mais rapidamente e fornecer mais recursos para novas conexões. Ajuste esse parâmetro se o aplicativo em execução exigir uma liberação rápida, a criação de novas conexões ou um ajuste devido a uma baixa taxa de transferência causada por várias conexões no estado TIME_WAIT.

A chave exata é: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Tcpip \ Parameters \ TcpTimedWaitDelay

Você pode não configurá-lo se estiver usando o Win2008 ou posterior, mas o padrão é 240 decimal (240 segundos ou 4 minutos). Você pode adicionar a chave ao registro com um valor diferente, que entrará em vigor após uma reinicialização (testada no Windows Server 2008R2 em um ambiente de produção). Este é um valor absurdamente alto, dada a qualidade das redes modernas.

Eu tinha um aplicativo há menos de um mês, executando em um servidor que esgotava o número máximo de conexões que o Windows pode suportar e matava todos os serviços de rede desse servidor regularmente. Mais de 16.000 conexões no netstat -a quando você ainda gerencia o RDP no servidor. Definimos o valor como 30 decimal (30 segundos) e pronto, o problema foi resolvido - menos de 10.000 conexões simultâneas (já que o aplicativo as estava abrindo e fechando rapidamente) e sem problemas de taxa de transferência.


No Windows Server 2012 e 2016, a chave exata parece ser HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ TcpTimedWaitDelay
Vincent

É seguro assumir que esta edição do registro requer uma reinicialização?
25418 Vincent
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.