Mengapa Windows 7 / Putty drop koneksi TCP bahkan pada pemadaman yang sangat singkat?

15

Saya memiliki jaringan lokal kecil yang mendukung Piggybacks pada WiFi captive, dan saya gunakan sshpada OS X dengan -oServerAliveInterval=240dan Putty 0,62 pada Windows 7 Professional untuk membuat koneksi ke Linode, Hetzner dan server lain.

Dengan Putty, saya memilih ConnectionSending of null packets to keep session activeke 240. Tidak Enable TCP keepalives (SO_KEEPALIVE option)aktif, sesuai standar.

Ketika internet saya untuk sementara waktu sekitar satu menit (harus mengautentikasi ulang pada captive portal), Putty hampir selalu kehilangan semua sesi ssh terbuka yang saya miliki, dan terutama yang ada aktivitas apa pun, tetapi OpenSSH di OS X tidak pernah kehilangan sesi apa pun selama internet saya kembali dalam sekitar satu atau dua menit, bahkan jika saya benar-benar mencoba mengetik sesuatu dalam ssh, dan tidak melihat balasan selama 60 detik atau lebih, sampai koneksi saya aktif kembali. (Jadi saya tahu pasti bahwa negara-negara NAT selalu dilestarikan.)

Bisakah saya menghentikan Windows / Putty dari sebelumnya membuang koneksi yang baik?

Tampaknya bagi saya seolah-olah SO_KEEPALIVE atau semacamnya sebenarnya aktif secara default di Windows, dan batas waktu untuk mendeteksi koneksi basi terlalu kecil. Saya ingin meningkatkannya menjadi lebih dari beberapa detik, mirip dengan bagaimana OS X kebal terhadap pemadaman sementara yang singkat ini selama pemadaman hanya beberapa ratus detik dan di bawah nilai -oServerAliveInterval(kali ServerAliveCountMax).

cnst
sumber
Hanya menulis untuk mengatakan saya memiliki masalah yang sama dan untuk memperbaiki ... akan menonton pertanyaan ini. Saya menganggap itu ada hubungannya dengan implementasi driver jaringan pada Windows.
allquixotic
Saya telah menggunakan dempul selama 10 tahun sekarang dan surga sudah mencari solusi untuk ini sejak awal. Titik nyeri ini hanya dapat dikurangi, tidak diselesaikan. Putty membutuhkan koneksi internet yang andal 100,00% dan paket yang dijatuhkan 0,00%. Di dunia baru internet selalu-jerawatan di mana-mana, dempul menjadi semakin tidak bermanfaat seiring berjalannya waktu karena dempul hanya dapat bekerja selama beberapa menit sebelum pekerjaan Anda terganggu, dan harus memulai kembali dempul, menyambung kembali , lalu pilih di mana Anda tinggalkan, buka file yang rusak, dan coba selesaikan pekerjaan Anda sebelum pemadaman berikutnya.
Eric Leschinski
@EricLeschinski, Anda salah. Mitigasi ini diuraikan dalam pertanyaan ini berfungsi dengan baik, saya belum koneksi IPv4 saya terputus dalam waktu yang sangat, sangat lama. (Terlepas dari kasus di mana seluruh alamat IPv4 berubah, atau saya tidur, dll - untuk kasus tersebut, moshmerupakan alternatif yang lebih baik.)
cnst

Jawaban:

8

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


Sepertinya TcpMaxDataRetransmissions(REG_DWORD) langsung memengaruhi ini. Nilai dapat ditambahkan ke HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parametersdengan regedit.exe(kunci tidak ada secara default, jadi Anda harus menambahkannya terlebih dahulu untuk mengubahnya). Ketika tidak disetel - ini 5. Tambahkan, dan atur setidaknya ke f(15), dan reboot.


Nilai default 5 tampaknya cukup tidak memadai untuk menjaga koneksi selama pemadaman jaringan singkat dan sementara; Anda akan mendapatkan batas waktu dalam beberapa detik. Saya telah menambahkan TcpMaxDataRetransmissionskunci ini ke registri, dan mengatur nilainya ke f(15), me-reboot mesin, dan setelah melakukan sysctl net.inet.ip.forwarding=0pada router tepat sebelum mengetik karakter di Putty, mendapatkan karakter bergema kembali kepada saya setelah mengaktifkan kembali penerusan pada router saya setelah menunggu 5 menit (saya mengujinya untuk menentukan bahwa nilai 0x0000000c (12) membuat koneksi terputus tepat 7 menit setelah upaya pertama mengirim paket selama pemadaman). Sebelum memulai ulang, Putty akan memutuskan koneksi dalam beberapa detik segera. Perhatikan bahwa reboot diperlukan - setidaknya pada Windows 7 Professional,hanya mengubah registri tidak berpengaruh pada koneksi yang ada maupun yang baru ! Tidak ada yang pernah berubah di Windows!

Sementara itu, mungkin juga menambah dan mengatur KeepAliveIntervalke 60000desimal (60 detik) dari nilai default tidak disetel 1000(1 detik), tetapi itu tidak seharusnya memiliki efek dalam kasus khusus saya seperti di atas, karena TCP keepalives tidak diaktifkan.

cnst
sumber