“ การเชื่อมต่อรีเซ็ตโดยเพียร์” หมายความว่าอย่างไร


648

ความหมายของข้อผิดพลาด "การเชื่อมต่อรีเซ็ตโดยเพียร์" ในการเชื่อมต่อ TCP คืออะไร? มันเป็นข้อผิดพลาดร้ายแรงหรือเพียงแค่การแจ้งเตือนหรือเกี่ยวข้องกับความล้มเหลวของเครือข่าย?

คำตอบ:


771

มันเป็นอันตรายถึงชีวิต รีโมตเซิร์ฟเวอร์ส่งแพ็กเก็ต RST ให้คุณซึ่งบ่งบอกถึงการเชื่อมต่อที่ลดลงทันทีแทนที่จะจับมือตามปกติ สิ่งนี้จะข้ามการเปลี่ยนสถานะครึ่งปิดปกติ ฉันชอบคำอธิบายนี้ :

"การเชื่อมต่อรีเซ็ตโดยเพียร์" เป็น TCP / IP ที่เทียบเท่ากับการกระแทกโทรศัพท์กลับไปที่ตะขอ มันสุภาพมากกว่าการไม่ตอบกลับปล่อยให้แขวนไว้ แต่ไม่ใช่ FIN-ACK ที่คาดหวังจากการสนทนา TCP / IP ที่สุภาพอย่างแท้จริง


49
ทำไมจึงมีข้อความระบุว่า "การเชื่อมต่อใหม่โดยเพียร์ " ดูเหมือนว่าควรเป็น "การเชื่อมต่อรีเซ็ตโดยโฮสต์" หรือ "การเชื่อมต่อรีเซ็ตโดยเซิร์ฟเวอร์"
Robert

27
@Robert เพราะนั่นคือที่มาของการรีเซ็ต เพียร์ส่งแพ็กเก็ต RST
มาร์ควิสแห่ง Lorne

106
... โรเบิร์ตความกังวลของคุณไม่สมเหตุสมผลสำหรับฉัน เพียร์เป็นคนทั่วไปที่เคร่งครัดกว่านั้นมาก ในรูปแบบไคลเอนต์ - เซิร์ฟเวอร์ทั่วไปเซิร์ฟเวอร์สามารถรับการแจ้งเตือนนี้จาก "ลูกค้า" ได้อย่างง่ายดาย เครื่องที่เริ่มการร้องขอการเชื่อมต่อนั้นมีพลังมากพอที่จะส่งการแจ้งเตือนนี้ได้ ในระดับ TCP ดูเหมือนว่าเมื่อเชื่อมต่ออย่างต่อเนื่อง เครื่องสองเครื่องเมื่อสื่อสารกันเป็นเพียงแค่เพื่อนร่วมงาน
codetaku

9
อุปกรณ์นี้อาจถูกส่งโดยอุปกรณ์อื่นที่อยู่ตรงกลางเหมือนเราเตอร์หรือไม่
Arnold Roa

3
ไม่สามารถเรียกว่า 'รีเซ็ตการเชื่อมต่อโดยเซิร์ฟเวอร์' เพราะสามารถส่งโดยไคลเอนต์หรือเซิร์ฟเวอร์ ไม่สามารถ 'ข้าม' ได้ หากลูกค้าได้รับข้อผิดพลาดนี้หมายความว่าการเชื่อมต่อ TCP จะไม่เปิดในเซิร์ฟเวอร์อีกต่อไปตัวอย่างเช่นตั้งแต่เซิร์ฟเวอร์ทำงานล้มเหลวและรีสตาร์ท
Johannes Overmann

193

ซึ่งหมายความว่าได้รับ TCP RST และการเชื่อมต่อถูกปิดในขณะนี้ สิ่งนี้จะเกิดขึ้นเมื่อแพ็กเก็ตถูกส่งจากการเชื่อมต่อปลายทางของคุณ แต่ปลายอีกด้านนั้นไม่รู้จักการเชื่อมต่อ มันจะส่งแพ็กเก็ตกลับมาพร้อมชุดบิต RST เพื่อบังคับให้ปิดการเชื่อมต่อ

สิ่งนี้อาจเกิดขึ้นได้หากอีกด้านหนึ่งขัดข้องจากนั้นจึงกลับมาสำรองข้อมูลหรือหากมีการเรียกclose()ใช้ซ็อกเก็ตในขณะที่มีข้อมูลจากคุณอยู่ระหว่างการจัดส่งและเป็นข้อบ่งชี้ให้คุณทราบว่าข้อมูลบางส่วน

มันขึ้นอยู่กับคุณไม่ว่าจะเป็นข้อผิดพลาด; หากข้อมูลที่คุณส่งเป็นเพียงเพื่อประโยชน์ของไคลเอนต์ระยะไกลก็อาจไม่สำคัญว่าข้อมูลสุดท้ายใด ๆ อาจสูญหาย อย่างไรก็ตามคุณควรปิดซ็อกเก็ตและเพิ่มทรัพยากรอื่น ๆ ที่เกี่ยวข้องกับการเชื่อมต่อ


11
หากคุณตั้งค่าตัวเลือกซ็อกเก็ต SO_LINGER เป็นศูนย์เมื่อเปิดซ็อกเก็ตใหม่จากนั้นปิดตามปกติบิต RST จะถูกตั้งค่า ดังนั้นการเชื่อมต่อทั้งหมดจะจบลงด้วยการรีเซ็ต อย่าลองทำที่บ้านมันน่ารำคาญนะ stackoverflow.com/questions/3757289
Chris Huang-Leaver

1
วิธีแก้ไขปัญหานี้แล้วเราต้องรีสตาร์ททั้งรีโมทและโฮสต์ของเราหรือไม่
user2225190

3
@ user2225190 คุณต้องเชื่อมต่อไคลเอ็นต์อีกครั้ง แต่ก่อนอื่นคุณต้องตรวจสอบซอฟต์แวร์ของคุณเพื่อให้แน่ใจว่าไม่ได้เกิดจากข้อผิดพลาดของโปรโตคอลแอปพลิเคชันเช่นปิดการเชื่อมต่อที่ปลายอีกด้านยังคงเขียนอยู่
มาร์ควิสแห่ง Lorne

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