Чому Windows 7 / PuTTY скидає TCP-з'єднання навіть при дуже коротких відключеннях?


15

У мене є невелика локальна мережа, яка копіює на захопленому 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 секунд, поки моє з'єднання знову не активується. (Тож я точно знаю, що НАТ-стани завжди зберігаються.)

Чи можу я зупинити Windows / PuTTY від попереднього відмови від хороших підключень?

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


Лише пишу, щоб сказати, що у мене така ж проблема, і я підняв ... Я припускаю, що це пов'язане з реалізацією мережевого драйвера в 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 підтримку активності не були включені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.