เหตุใด Windows 7 / PuTTY จึงปล่อยการเชื่อมต่อ TCP แม้ในช่วงเวลาสั้น ๆ


15

ฉันมีเครือข่ายท้องถิ่นขนาดเล็กที่ piggybacks บนเชลย 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)ปิดตามค่าเริ่มต้น

เมื่ออินเทอร์เน็ตของฉันหยุดทำงานชั่วคราวเป็นเวลาประมาณหนึ่งนาที (ต้องตรวจสอบสิทธิ์อีกครั้งบน Captive Portal) PuTTY มักจะสูญเสียเซสชัน ssh ที่เปิดอยู่ทั้งหมดที่ฉันมีและโดยเฉพาะอย่างยิ่งผู้ที่มีกิจกรรมใด ๆ แต่ OpenSSH บน OS X ไม่แพ้เซสชันใด ๆ ตราบใดที่อินเทอร์เน็ตของฉันสำรองภายในประมาณหนึ่งหรือสองนาทีแม้ว่าฉันจะพยายามพิมพ์บางอย่างใน ssh และไม่เห็นการตอบกลับตลอดทั้ง 60 วินาทีหรือมากกว่านั้นจนกว่าการเชื่อมต่อของฉันจะเปิดใช้งานอีกครั้ง (ดังนั้นฉันรู้ว่า NAT ของอเมริกานั้นถูกสงวนไว้เสมอ)

ฉันสามารถหยุด Windows / PuTTY จากการยกเลิกการเชื่อมต่อที่ดีได้ไหม?

ดูเหมือนว่าฉันจะเป็น SO_KEEPALIVE หรือบางอย่างนั้นเปิดอยู่ตามค่าเริ่มต้นใน Windows และการหมดเวลาสำหรับการตรวจหาการเชื่อมต่อที่เก่าเกินไปนั้นเล็กเกินไป ฉันต้องการเพิ่มให้เป็นอะไรที่มากกว่าสองสามวินาทีเช่นเดียวกับที่ OS X มีภูมิคุ้มกันต่อการหยุดทำงานชั่วคราวสั้น ๆ เหล่านี้ตราบใดที่ไฟฟ้าดับเพียงสองสามร้อยวินาทีและต่ำกว่าค่าของ-oServerAliveInterval(เท่าServerAliveCountMax)


เพียงแค่เขียนเพื่อบอกว่าฉันมีปัญหาเดียวกันและ upvote ... จะดูคำถามนี้ ฉันคิดว่ามันมีส่วนเกี่ยวข้องกับการติดตั้งไดรเวอร์เครือข่ายใน Windows
allquixotic

ฉันใช้ผงสำหรับอุดรูเป็นเวลา 10 ปีแล้วและยังหาวิธีแก้ปัญหานี้มาตั้งแต่ต้น จุดปวดนี้สามารถบรรเทาได้ แต่ไม่สามารถแก้ไขได้ สีโป๊วต้องใช้การเชื่อมต่ออินเทอร์เน็ตที่เชื่อถือได้ 100.00% และแพ็กเก็ตที่ถูกทิ้ง 0.00% ในโลกใหม่ของอินเทอร์เน็ตที่ไม่แน่นอนตลอดเวลาสีโป๊วกลายเป็นน้อยลงและมีประโยชน์น้อยลงเมื่อเวลาผ่านไปเพราะมันสามารถทำงานได้เพียงไม่กี่นาทีต่อครั้งก่อนที่คุณจะถูกขัดจังหวะการทำงานและต้องเริ่มฉาบเชื่อมใหม่ จากนั้นเลือกตำแหน่งที่คุณค้างไว้เปิดไฟล์ที่เสียหายและพยายามทำให้งานเสร็จก่อนเกิดไฟดับครั้งต่อไป
Eric Leschinski

@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(คีย์จะหายไปตามค่าเริ่มต้นดังนั้นคุณต้องเพิ่มค่านี้ก่อนเพื่อเปลี่ยนค่า) เมื่อ unset - เป็น 5. เพิ่มและตั้งไว้อย่างน้อยเป็นf(15) และรีบูต


ค่าเริ่มต้นที่ 5 นั้นค่อนข้างไม่เพียงพอสำหรับการรักษาการเชื่อมต่อในช่วงสั้น ๆ และเครือข่ายขาดหายไป คุณจะได้รับการหมดเวลาภายในไม่กี่วินาที ฉันได้เพิ่มTcpMaxDataRetransmissionsคีย์นี้ในรีจิสตรีและตั้งค่าเป็นf(15) รีบูตเครื่องและหลังจากที่ทำการsysctl net.inet.ip.forwarding=0บนเราเตอร์ก่อนพิมพ์อักขระใน PuTTY ได้รับ echoed กลับมาฉันหลังจากเปิดใช้การส่งต่อ บนเราเตอร์ของฉันหลังจากรอ 5 นาที (ฉันทดสอบเพื่อตรวจสอบว่าค่า 0x0000000c (12) ทำให้การเชื่อมต่อหยุดลงอย่างแน่นอน 7 นาทีหลังจากความพยายามครั้งแรกที่ส่งแพ็กเก็ตในช่วงที่ไฟดับ) ก่อนที่จะรีบูตเครื่อง PuTTY จะหมดเวลาเชื่อมต่อภายในสองสามวินาทีทันที โปรดทราบว่าจำเป็นต้องรีบูต - อย่างน้อยใน Windows 7 Professionalเพียงแค่เปลี่ยนรีจิสทรีไม่มีผลต่อการเชื่อมต่อที่มีอยู่หรือใหม่ ! ไม่มีอะไรเปลี่ยนแปลงใน Windows!

ในขณะนั้นอาจเพิ่มและตั้งค่าKeepAliveIntervalเป็น60000ทศนิยม (60 วินาที) จากค่า unset เริ่มต้นที่1000(1 วินาที) แต่ไม่ควรมีผลกระทบใด ๆ ในกรณีเฉพาะของฉันข้างต้นเนื่องจาก TCP keepalives ไม่ได้เปิดใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.