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

15

У меня есть небольшая локальная сеть, которая использует встроенный WiFi, и я использую sshв OS X с -oServerAliveInterval=240PuTTY 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).

CNST
источник
Просто пишу, чтобы сказать, что у меня та же проблема, и чтобы поддержать ... буду наблюдать за этим вопросом. Я предполагаю, что это как-то связано с реализацией сетевого драйвера в Windows.
allquixotic
Я использую шпаклевку уже 10 лет и с самого начала искала решение этой проблемы. Эта болевая точка может быть только смягчена, но не решена. Для Putty требуется 100% надежное подключение к Интернету и 0,00% отброшенных пакетов. В новом мире всегда пятнистого интернета везде замазка становится все менее и менее полезной с годами, потому что она может работать только в течение нескольких минут, пока вам не прервется ваша работа, и вам придется перезапускать шпаклевку, восстанавливать соединение затем выберите, где вы остановились, не повредите поврежденные файлы и попытайтесь выполнить свою работу до следующего сбоя.
Эрик Лещинский
@EricLeschinski, вы не правы. Это смягчение, описанное в этом вопросе, работает просто отлично, мои соединения IPv4 не прерываются очень и очень долго. (За исключением случаев, когда весь адрес IPv4 изменяется, или я сплю и т. Д. - для этих случаев, moshэто лучшая альтернатива.)
cnst

Ответы:

8

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 сек) с отключенном значение по умолчанию 1000(1 сек), но это не должно иметь никакого эффекта в моем конкретном случае , как указано выше, так как TCP поддержку активности не были включены.

CNST
источник