37 votos

¿Cuál es el tiempo de espera de la conexión TCP por defecto en Windows?

¿Cuál es el tiempo de espera de la conexión TCP por defecto en Windows? ¿Hay una clave de registro para configurarlo o se configura dinámicamente?

28voto

sysadmin1138 Puntos 86362

En Windows el valor es dinámico para establecido aunque el valor por defecto para conexiones iniciales es de 72 segundos. La configuración del Registro se define en este artículo:

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

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

TcpInitialRTT : Define cuál es el tiempo de espera inicial para las nuevas conexiones. Este número en segundos se duplica cada vez que se retransmite antes de que se agote la conexión. El valor predeterminado es 3.

TcpMaxConnectRetransmissions : Define el número de retransmisiones antes de que se agote la conexión. El valor predeterminado es 5.

0 votos

Sólo hay que restablecer una determinada conexión después de cambiarlas, no es necesario reiniciar, ¿verdad? ¿Saben cuál debe cambiarse para que Windows 7 deje de eliminar proactivamente las conexiones existentes en caso de cortes breves? He probado a cambiar TcpMaxDataRetransmissions a 16 (se supone que el valor por defecto es 5), pero mi PuTTY sigue perdiendo las conexiones muy rápido en breves cortes, mientras que ssh en OS X y la misma red las mantiene sin problemas. superuser.com/questions/529511/

3 votos

De hecho, ¡funcionó después de reiniciar! Nada cambia en Windows. ¡Parece que hay que reiniciar, y la configuración no tiene efecto ni en las conexiones antiguas ni en las nuevas si simplemente se edita el registro sin reiniciar!

1 votos

Acabo de hojear la referencia, tal vez la fuente haya cambiado, pero ¿cómo se llega a los 72s? la referencia no lo menciona.

12voto

Josh Hansen Puntos 21

Por lo general, el "tiempo de espera de conexión" se refiere al tiempo de espera para crear la conexión inicial a un host. En muchos sistemas (incluido Windows 7), este valor se configura mediante parámetros distintos de los tiempos de espera para las comunicaciones en curso una vez establecida la conexión. Esta respuesta se refiere al escenario de "conexión inicial" para Windows 7, que es diferente de XP.

En el caso de Windows 7, se necesitan dos hotfixes para poder ajustar la configuración del tiempo de espera de la conexión. Los nuevos ajustes pueden configurarse con el comando 'netsh'.

Del artículo del hotfix 2786464:

Nota En Windows 7 y Windows Server 2008 R2, el valor máximo de retransmisión SYN de TCP (JH: MaxSynRetransmissions) está establecido en 2, y no es configurable. Debido al límite de 3 segundos del valor de tiempo de espera inicial (JH: InitialRTO), el handshake TCP de tres vías está limitado a un marco de tiempo de 21 segundos (3 segundos + 2*3 segundos + 4*3 segundos = 21 segundos).

El primer hotfix añade un ajuste "MaxSynRetransmissions" que permite cambiar el ajuste de reintentos desde el valor por defecto de 2. El segundo añade el ajuste "InitialRto" que permite cambiar el valor de RTO inicial desde el valor por defecto de 3000ms (sí, milisegundos), pero sólo a algo más corto que 3000ms; no se puede aumentar. Dependiendo de tu situación, puede que sólo necesites el hotfix 'MaxSynRetransmissions'.

Instale ambos hotfixes, reinicie y abra una ventana de comandos como administrador. No se requieren más reinicios para las siguientes invocaciones de comandos netsh.

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: El telnet de Windows se utiliza como referencia para el tiempo de espera real de la conexión. Es necesario instalarlo por separado, pero es fácil de hacer.

Enlaces adicionales / kudos:

0 votos

Gran respuesta. Por cierto, si alguien se pregunta, cómo es para Linux este puesto de Marco Pracucci lo explica muy bien. Los mencionados TCP_RTO_MIN y TCP_RTO_MAX pueden encontrarse en linux/include/net/tcp.h . HZ significa 1 segundo y es generado por linux/kernel/time/timeconst.bc

0 votos

HZ significa 1 segundo en el contexto del archivo tcp listado, ¡pero no en todo el kernel! Actualizar: linux/kernel/time/timeconst.bc no parece indicar que la HZ sea de 1 segundo.

0 votos

@AdamKalisz: Ver también este puesto para Linux en el que se habla de /proc/sys/net/ipv4/tcp_syn_retries

2voto

lethargo Puntos 21

TcpInitialRTT y TcpMaxConnectRetransmissions pueden no estar presentes en Vista y Windows 2008. Este documento de Microsoft no los incluye. http://download.microsoft.com/download/c/2/6/c26893a6-46c7-4b5c-b287-830216597340/TCPIP_Reg.doc

Y esto dice que al menos TcpInitialRTT ha desaparecido, aunque no sé hasta qué punto es fiable. http://pul.se/Blog-Post-TCP-IP-Stack-hardening-in-Operating-Systems-starting-with-Windows-Vista_SharePoint-kHPTTCP0WJ5,7zq00hH0wINE

1voto

denislin Puntos 11

Si he entendido bien su pregunta, se refiere a:

TcpTimedWaitDelay

Esta clave determina el tiempo que debe transcurrir antes de que TCP/IP pueda liberar una conexión cerrada y reutilizar sus recursos. Este intervalo entre el cierre y la liberación se conoce como estado TIME_WAIT o dos veces el tiempo máximo de vida del segmento (2MSL). Durante este tiempo, reabrir la conexión con el cliente y el servidor cuesta menos que establecer una nueva conexión. Al reducir el valor de esta entrada, TCP/IP puede liberar las conexiones cerradas más rápidamente y proporcionar más recursos para las nuevas conexiones. Ajuste este parámetro si la aplicación en ejecución requiere una liberación rápida, la creación de nuevas conexiones, o un ajuste debido a un bajo rendimiento causado por múltiples conexiones en el estado TIME_WAIT.

La clave exacta es HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Tcpip\Parameters\TcpTimedWaitDelay

Puede que no lo tengas configurado si usas Win2008 o posterior, pero el valor por defecto es 240 decimales (240 segundos o 4 minutos, es decir). Puedes añadir la clave al registro con un valor diferente y tendrá efecto después de un reinicio (probado en Windows Server 2008R2 en un entorno de producción). Este es un valor absurdamente alto dada la calidad de las redes modernas.

Tuve una aplicación, literalmente, hace menos de un mes que se ejecuta en un servidor que agotó el número máximo de conexiones que Windows puede soportar y mató a todos los servicios de red en ese servidor con regularidad. Más de 16.000 conexiones en netstat -a cuando incluso se consigue hacer RDP al servidor. Fijamos el valor a 30 decimales (30 segundos) y voilá, el problema se resolvió - menos de 10.000 conexiones simultáneas (ya que la aplicación estaba abriendo y cerrando rápidamente) y sin problemas de rendimiento.

0 votos

En Windows Server 2012 y 2016 la clave exacta parece ser HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\Tcpip\P arámetros \TcpTimedWa itDelay

0 votos

¿Es seguro asumir que esta edición del registro requiere un reinicio?

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X