Qual é o tempo limite padrão da conexão TCP no Windows? Existe uma chave do Registro para configurá-lo ou ela é definida dinamicamente?
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:
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.
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:
TcpInitialRTT e TcpMaxConnectRetransmissions podem não estar presentes no Vista e no Windows 2008. Este documento da Microsoft não os inclui. http://download.microsoft.com/download/c/2/6/c26893a6-46c7-4b5c-b287-830216597340/TCPIP_Reg.doc
E isso diz que pelo menos o TcpInitialRTT se foi, embora eu não saiba o quão confiável é. http://pul.se/Blog-Post-TCP-IP-Stack-hardening-in-Operating-Systems-starting-with-Windows-Vista_SharePoint-kHPTTCP0WJ5,7zq00hH0wINE
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.
TcpMaxDataRetransmissions
para 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/…