Windows中默认的TCP连接超时是哪个?有用于配置它的注册表项,还是它是动态设置的?
Windows中默认的TCP连接超时是哪个?有用于配置它的注册表项,还是它是动态设置的?
Answers:
在Windows中,该值对于已建立的连接而言是动态的,尽管初始连接的默认值为72秒。本文中定义了注册表设置:
http://technet.microsoft.com/zh-CN/library/cc739819(WS.10).aspx
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services:\ Tcpip \ Parameters
TcpInitialRTT:定义新连接的初始超时设置。每次重新传输之前,此数字(以秒为单位)都会加倍,直到超时为止。默认为3。
TcpMaxConnectRetransmissions:定义在超时之前重新传输的次数。默认为5。
通常,“连接超时”是指用于创建与主机的初始连接的超时。在许多系统(包括Windows 7)中,使用连接超时后的单独设置来配置此值,以便在建立连接后继续进行通信。此答案解决了Windows 7与XP不同的“初始连接”方案。
对于Windows 7,需要两个修补程序才能支持调整连接超时设置。可以使用“ netsh”命令配置新设置。
修补程序#2786464:修补程序启用Windows 7或Windows Server 2008 R2中的TCP最大SYN重传数量的配置
修补程序2472264:您不能通过使用Windows Server 2008 R2中的netsh命令来自定义某些TCP配置
从2786464修补程序文章:
注意在Windows 7和Windows Server 2008 R2中,TCP最大SYN重传(JH:MaxSynRetransmissions)值设置为2,并且不可配置。由于初始超时值(JH:InitialRTO)的3秒限制,TCP三向握手被限制为21秒的时间范围(3秒+ 2 * 3秒+ 4 * 3秒= 21秒)。
第一个修补程序添加了一个“ MaxSynRetransmissions”设置,该设置允许将重试设置从默认值2更改。第二个修补程序添加了“ InitialRto”设置,该设置允许将初始RTO值从默认值3000ms(是,毫秒)更改,但仅更改为短于3000毫秒的内容;它不能增加。根据您的情况,您可能仅需要“ MaxSynRetransmissions”修补程序。
安装两个修复程序,重新启动,然后以管理员身份打开命令窗口。后续的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
这说至少TcpInitialRTT不见了,尽管我不知道它的可靠性。 http://pul.se/Blog-Post-TCP-IP-Stack-hardening-in-Operating-Systems-starting-with-Windows-Vista_SharePoint-kHPTTCP0WJ5,7zq00hH0wINE
如果我正确理解了您的问题,则是指:
TcpTimedWaitDelay
此项确定TCP / IP释放封闭的连接并重用其资源之前必须经过的时间。关闭和释放之间的时间间隔称为TIME_WAIT状态或最大段生存期(2MSL)状态的两倍。在这段时间内,重新建立与客户端和服务器的连接比建立新连接要少。通过减小该条目的值,TCP / IP可以更快地释放关闭的连接,并为新的连接提供更多的资源。如果正在运行的应用程序需要快速释放,创建新连接或由于TIME_WAIT状态下的多个连接导致吞吐量低而进行调整,请调整此参数。
确切的密钥是:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Tcpip \ Parameters \ TcpTimedWaitDelay
如果使用的是Win2008或更高版本,则可能没有设置它,但是默认值为240小数(即240秒或4分钟)。您可以使用其他值将密钥添加到注册表中,并且该密钥将在重新启动后生效(在生产环境中的Windows Server 2008R2上进行了测试)。考虑到现代网络的质量,这是一个荒谬的高价值。
我有一个不到一个月前在服务器上运行的应用程序,该应用程序耗尽了Windows可以支持的最大连接数量,并定期杀死了该服务器上的所有网络服务。当您甚至设法将RDP连接到服务器时,netstat -a中的连接数超过16,000。我们将该值设置为30小数(30秒),瞧,问题已解决-少于10,000个并发连接(因为该应用程序正在快速打开和关闭它们)并且没有吞吐量问题。
TcpMaxDataRetransmissions
为16(默认值应为5),但是在短暂的中断中,我的PuTTY仍然会确实快速断开连接,而OS X和相同网络上的ssh可以使它们正常运行。superuser.com/questions/529511/...