Windows中默认的TCP连接超时是什么? 有一个registry项来configuration它或它的dynamic设置?
在Windows中,对于已build立的连接,该值是dynamic的,但初始连接的默认值是72秒。 本文中定义了registry设置:
http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services:\ Tcpip \ Parameters
TcpInitialRTT :定义新连接的初始超时设置。 在定时连接之前,这个以秒为单位的数字每次重传时都加倍。 默认为3。
TcpMaxConnectRetransmissions :在定时连接之前定义重传次数。 默认为5。
通常“连接超时”是指创build到主机的初始连接超时。 在许多系统(包括Windows 7)中,在连接build立之后,使用超时的单独设置来configuration此值,以便进行通信。 此答案解决了Windows 7的“初始连接”场景,这与XP不同。
对于Windows 7,需要两个修补程序来支持调整连接超时设置。 新的设置可以用'netsh'命令configuration。
修补程序#2786464:修补程序启用Windows 7或Windows Server 2008 R2中TCP最大SYN重新传输量的configuration
修补程序#2472264:您无法通过在Windows Server 2008 R2中使用netsh命令来自定义某些TCPconfiguration
从2786464修补程序文章:
注意在Windows 7和Windows Server 2008 R2中,TCP最大SYN重传(JH:MaxSynRetransmissions)值设置为2,并且不可configuration。 由于初始超时值(JH:InitialRTO)的3秒限制,TCP三次握手被限制为21秒的时间帧(3秒+2 * 3秒+4 * 3秒= 21秒) )。
第一个修补程序增加了一个“MaxSynRetransmissions”设置,允许从默认值2更改重试设置。第二个添加了“InitialRto”设置,允许将初始RTO值从默认值3000ms(是,毫秒)更改,但仅限于短于3000ms的东西; 它不能增加。 根据您的情况,您可能只需要“MaxSynRetransmissions”修补程序。
安装两个修补程序,重新启动,然后以pipe理员身份打开命令窗口。 后续的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
注意:Windows telnet用于实际连接超时的参考。 它需要单独安装,但很容易做到。
其他链接/荣誉:
Vista和Windows 2008中可能不存在TcpInitialRTT和TcpMaxConnectRetransmissions。此Microsoft文档不包括它们。 http://download.microsoft.com/download/c/2/6/c26893a6-46c7-4b5c-b287-830216597340/TCPIP_Reg.doc
而且这说至lessTcpInitialRTT消失了,虽然我不知道它有多可靠。 http://pul.se/Blog-Post-TCP-IP-Stack-hardening-in-Operating-Systems-starting-with-Windows-Vista_SharePoint-kHPTTCP0WJ5,7zq00hH0wINE
如果我正确理解你的问题,你指的是:
TcpTimedWaitDelay的
这个密钥决定了在TCP / IP释放一个closures的连接并重新使用它的资源之前必须经过的时间。 closures和释放之间的时间间隔称为TIME_WAIT状态或最大段寿命(2MSL)状态的两倍。 在此期间,重新连接到客户端和服务器的成本低于build立新连接的成本。 通过减less此条目的值,TCP / IP可以更快地释放closures连接,并为新连接提供更多的资源。 如果正在运行的应用程序需要快速释放,创build新的连接,或者由于TIME_WAIT状态中的多个连接导致吞吐量较低,则调整此参数。
确切的关键是:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Tcpip \ Parameters \ TcpTimedWaitDelay
如果您使用Win2008或更高版本,您可能没有设置它,但默认值是240十进制(即240秒或4分钟)。 您可以使用不同的值将registry项添加到registry中,重新启动后生效(在生产环境中的Windows Server 2008 R2上进行testing)。 鉴于现代networking的质量,这是一个荒谬的高价值。
我有一个应用程序字面上不到一个月前在服务器上运行,耗尽Windows可以支持的最大数量的连接,并定期中止该服务器上的每个networking服务。 当您甚至将RDPpipe理到服务器时,netstat -a中有16,000多个连接。 我们将该值设置为十进制30(30秒),瞧,问题解决了 – less于10,000个同时连接(因为应用程序正在快速打开和closures它们)并且没有吞吐量问题。