TCP เริ่มต้นหมดเวลาเชื่อมต่อใดใน Windows


28

TCP เริ่มต้นหมดเวลาเชื่อมต่อใดใน Windows มีคีย์รีจิสทรีเพื่อกำหนดค่าหรือตั้งค่าแบบไดนามิกหรือไม่

คำตอบ:


23

ใน Windows ค่าจะเป็นแบบไดนามิกสำหรับส่วนที่กำหนดไว้แม้ว่าค่าเริ่มต้นสำหรับการเชื่อมต่อเริ่มต้นคือ 72 วินาที การตั้งค่ารีจิสทรีถูกกำหนดไว้ในบทความนี้:

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

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

TcpInitialRTT : กำหนดการตั้งค่าการหมดเวลาเริ่มต้นสำหรับการเชื่อมต่อใหม่ จำนวนในหน่วยวินาทีนี้จะเพิ่มเป็นสองเท่าในแต่ละครั้งที่ส่งสัญญาณใหม่ก่อนที่จะหมดเวลาเชื่อมต่อ ค่าเริ่มต้นเป็น 3

TcpMaxConnectRetransmissions : กำหนดจำนวนการส่งสัญญาณใหม่ก่อนที่จะหมดเวลาการเชื่อมต่อ ค่าเริ่มต้นถึง 5


เพียงแค่ต้องการสร้างการเชื่อมต่อที่กำหนดใหม่หลังจากเปลี่ยนสิ่งเหล่านี้ไม่จำเป็นต้องรีบูตใช่ไหม คุณอาจทราบหรือไม่ว่าควรเปลี่ยน Windows Vista ตัวใดที่จะหยุดการเชื่อมต่อที่มีอยู่จากการหยุดทำงานชั่วคราว ฉันได้ลองเปลี่ยนTcpMaxDataRetransmissionsเป็น 16 (ค่าเริ่มต้นควรเป็น 5) แต่ PuTTY ของฉันยังคงลดการเชื่อมต่ออย่างรวดเร็วในช่วงเวลาสั้น ๆ ในขณะที่ ssh บน OS X และเครือข่ายเดียวกันทำให้พวกเขาสบายดี superuser.com/questions/529511/…
cnst

3
จริงๆแล้วมันใช้งานได้หลังจากที่ฉันรีบูต! ไม่มีอะไรเปลี่ยนแปลงใน Windows! ดูเหมือนว่าคุณจะต้องรีบูทและการตั้งค่าไม่มีผลต่อการเชื่อมต่อเก่าหรือใหม่หากคุณเพียงแค่ทำการแก้ไขรีจิสทรีโดยไม่ต้องรีบูตเครื่อง!
cnst

9

โดยปกติ "การเชื่อมต่อหมดเวลา" หมายถึงการหมดเวลาสำหรับการสร้างการเชื่อมต่อเริ่มต้นไปยังโฮสต์ ในหลาย ๆ ระบบ (รวมอยู่ใน Windows 7) ค่านี้ได้รับการกำหนดค่าโดยใช้การตั้งค่าแยกต่างหากจากหมดเวลาสำหรับการสื่อสารต่อเนื่องหลังจากสร้างการเชื่อมต่อแล้ว คำตอบนี้กล่าวถึงสถานการณ์ "การเชื่อมต่อเริ่มต้น" สำหรับ Windows 7 ซึ่งแตกต่างจาก XP

สำหรับ Windows 7 ต้องใช้โปรแกรมแก้ไขด่วนสองตัวเพื่อสนับสนุนการปรับการตั้งค่าการหมดเวลาเชื่อมต่อ การตั้งค่าใหม่สามารถกำหนดค่าได้ด้วยคำสั่ง 'netsh'

จากบทความโปรแกรมแก้ไขด่วน 2786464:

หมายเหตุใน Windows 7 และ Windows Server 2008 R2 ค่าการส่งสัญญาณ SYN สูงสุด TCP (JH: MaxSynRetransmissions) ถูกตั้งค่าเป็น 2 และไม่สามารถกำหนดค่าได้ เนื่องจากขีด จำกัด 3 วินาทีของค่าการหมดเวลาเริ่มต้น (JH: InitialRTO) การจับมือสามทาง TCP จะถูก จำกัด ไว้ที่กรอบเวลา 21 วินาที (3 วินาที + 2 * 3 วินาที + 4 * 3 วินาที = 21 วินาที) )

โปรแกรมแก้ไขด่วนแรกเพิ่มการตั้งค่า 'MaxSynRetransmissions' ซึ่งอนุญาตให้เปลี่ยนการตั้งค่าลองใหม่จากค่าเริ่มต้นที่ 2 การตั้งค่าที่สองเพิ่ม 'InitialRto' ซึ่งช่วยให้การเปลี่ยนค่า RTO เริ่มต้นจากค่าเริ่มต้นของ 3000ms (ใช่มิลลิวินาที) เท่านั้น สิ่งที่สั้นกว่า 3000ms; ไม่สามารถเพิ่มได้ ขึ้นอยู่กับสถานการณ์ของคุณคุณอาจต้องการโปรแกรมแก้ไขด่วน '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 ใช้สำหรับการอ้างอิงสำหรับการหมดเวลาการเชื่อมต่อจริง จำเป็นต้องติดตั้งแยกต่างหาก แต่ทำได้ง่าย

ลิงค์เพิ่มเติม / รุ่งโรจน์:


2

TcpInitialRTT และ TcpMaxConnectRetransmissions อาจไม่มีอยู่ใน Vista และ Windows 2008 เอกสาร 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


1

หากฉันเข้าใจคำถามของคุณถูกต้องคุณหมายถึง:

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 สามารถรองรับและทำลายบริการเครือข่ายทั้งหมดในเซิร์ฟเวอร์นั้นเป็นประจำ มากกว่า 16,000+ การเชื่อมต่อใน netstat -a เมื่อคุณจัดการ RDP ไปยังเซิร์ฟเวอร์ เราตั้งค่าเป็น 30 ทศนิยม (30 วินาที) และ voila ปัญหาได้รับการแก้ไข - น้อยกว่า 10,000 การเชื่อมต่อพร้อมกัน (เนื่องจากแอปเปิดอย่างรวดเร็วและปิดพวกเขา) และไม่มีปัญหาปริมาณงาน


ใน Windows Server 2012 และ 2016 คีย์ที่แน่นอนปรากฏเป็น HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ TcpTimedWaitDelay
Vincent

การสันนิษฐานว่าการแก้ไขรีจิสตรีนี้ปลอดภัยหรือไม่หากต้องรีบู๊ต
Vincent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.