Какое время ожидания 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 7 существующих соединений при кратковременных сбоях? Я попытался изменить 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 (JH: MaxSynRetransmissions) TCP равно 2 и не настраивается. Из-за 3-секундного ограничения начального значения времени ожидания (JH: InitialRTO) трехстороннее рукопожатие TCP ограничено 21-секундным таймфреймом (3 секунды + 2 * 3 секунды + 4 * 3 секунды = 21 секунда). ).

Первое исправление добавляет параметр «MaxSynRetransmissions», который позволяет изменить настройку повтора со значения по умолчанию, равного 2. Второе добавляет параметр «InitialRto», который позволяет изменить значение начального RTO со значения по умолчанию 3000 мс (да, миллисекунд), но только на что-то короче 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 используется для ссылки на фактическое время ожидания соединения. Он должен быть установлен отдельно, но это легко сделать.

Дополнительные ссылки / респект:


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 секунд) и вуаля, проблема была решена - менее 10000 одновременных подключений (так как приложение быстро открывало и закрывало их) и никаких проблем с пропускной способностью.


В Windows Server 2012 и 2016 точным ключом является HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ TcpTimedWaitDelay
Vincent

Можно ли предположить, что это редактирование реестра требует перезагрузки?
Винсент
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.