Почему Windows 7 / PuTTY отключает TCP-соединения даже при очень коротких отключениях?

У меня есть небольшая локальная сеть, которая подключается к неактивному WiFi, и я использую ssh на OS X с -oServerAliveInterval=240 и PuTTY 0.62 на Windows 7 Professional для установления соединений с моим Linode, Hetzner и другими серверами.

С помощью PuTTY я выбираю ConnectionSending of null packets to keep session active до 240. Enable TCP keepalives (SO_KEEPALIVE option) отключено по умолчанию.

Когда мой интернет временно отключается примерно на минуту (нужно повторно аутентифицировать на плененном портале), PuTTY почти всегда теряет все открытые сеансы ssh, которые у меня есть, и особенно те, где была какая-то деятельность, но OpenSSH на OS X Никогда не теряет никаких сеансов, пока мой интернет работает примерно через минуту или две, даже если я на самом деле пытаюсь ввести что-то в ssh и не вижу ответа в течение 60 секунд или около того, пока мое соединение не активируется снова. (Поэтому я точно знаю, что состояния NAT всегда сохраняются.)

Могу ли я остановить Windows / PuTTY от упреждающего отказа от хороших соединений?

Мне кажется, что SO_KEEPALIVE или некоторые из них фактически включены по умолчанию в Windows, а таймаут для обнаружения устаревших подключений слишком мал. Я хотел бы увеличить его до чего-то более чем на пару секунд, подобно тому, как OS X невосприимчив к этим кратким временным отключениям, если отключение составляет всего пару сотен секунд и ниже значения -oServerAliveInterval (раз ServerAliveCountMax ).

http://www.chiark.greenend.org.uk/~sgtatham/putty/faq.html#faq-timeout


Кажется, что TcpMaxDataRetransmissions (REG_DWORD) напрямую влияет на это. Значение может быть добавлено в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters с regedit.exe (по умолчанию отсутствует ключ, поэтому вам сначала нужно добавить его, чтобы изменить его). Если отключено – это 5. Добавьте его и установите по крайней мере на f (15) и перезагрузитесь.


Значение по умолчанию 5 кажется довольно неадекватным для поддержания соединений во время кратковременных и временных отключений сети; Вы получите тайм-аут в течение нескольких секунд. Я добавил этот ключ TcpMaxDataRetransmissions в реестр и установил его значение в f (15), перезагрузил машину и выполнил sysctl net.inet.ip.forwarding=0 на маршрутизаторе прямо до ввода символа в PuTTY, После того, как я вернул его, после того, как я вернусь обратно через маршрутизатор после ожидания 5 минут (я проверил его, чтобы определить, что значение 0x0000000c (12) заставляет соединение разбить ровно через 7 минут после первой попытки отправки пакета во время Отключение). Перед перезагрузкой PuTTY сразу задержит соединение через пару секунд. Обратите внимание, что требуется перезагрузка – по крайней мере, на Windows 7 Professional просто изменение реестра не влияет ни на существующие, ни на новые подключения ! Ничего не меняется в Windows!

В то время как при этом может также добавляться и устанавливать KeepAliveInterval в 60000 десятичных (60 секунд) из значения unset 1000 по умолчанию, равное 1000 (1 с), но это не должно иметь никакого эффекта в моем конкретном случае, как указано выше, поскольку TCP keepalives не были включены ,

  • Как отменить jquery.load ()?
  • Можно ли читать из InputStream с таймаутом?
  • Давайте будем гением компьютера.