2012-10-26 28 views
28

मैं एक टीसीपी सॉकेट खोलता हूं और इसे नेटवर्क पर कहीं और सॉकेट से कनेक्ट करता हूं। मैं फिर सफलतापूर्वक डेटा भेज और प्राप्त कर सकता हूं। मेरे पास एक टाइमर है जो सॉकेट में हर सेकेंड भेजता है।टीसीपी सॉकेट कोई कनेक्शन टाइमआउट

मैं फिर जबरन कनेक्शन खोने (इस मामले में ईथरनेट केबल खींचकर) कनेक्शन को बाधित करता हूं। मेरी सॉकेट अभी भी रिपोर्ट कर रही है कि यह हर सेकेंड में सफलतापूर्वक डेटा लिख ​​रहा है। यह लगभग 1 घंटे और 30 मिनट तक जारी रहता है, जहां अंततः एक त्रुटि त्रुटि दी जाती है।

इस टाइम-आउट को निर्दिष्ट करता है जहां एक सॉकेट अंततः दूसरे छोर को स्वीकार कर लेता है? क्या यह ओएस (उबंटू 11.04) है, क्या यह टीसीपी/आईपी विनिर्देशन से है, या यह एक सॉकेट कॉन्फ़िगरेशन विकल्प है?

+2

शायद [यह] (http://stackoverflow.com/questions/5907527/application-control-of-tcp-retransmission-on-linux) आपके लिए उत्तर देता है। – SKi

उत्तर

49

नेटवर्क केबल खींचना एक टीसीपी कनेक्शन तोड़ नहीं देगा (1) हालांकि यह संचार को बाधित करेगा। आप केबल को वापस प्लग कर सकते हैं और एक बार आईपी कनेक्टिविटी स्थापित हो जाने पर, सभी बैक-डेटा स्थानांतरित हो जाएंगे। यह सेलुलर नेटवर्क पर भी टीसीपी भरोसेमंद बनाता है।

जब टीसीपी डेटा भेजता है, तो यह जवाब में एसीके की अपेक्षा करता है। यदि कोई भी समय के भीतर आता है, तो यह डेटा को फिर से प्रसारित करता है और फिर से प्रतीक्षा करता है। जब प्रसारण के बीच इंतजार होता है तो वह आम तौर पर तेजी से बढ़ता है।

कुछ एसीके के साथ कुछ रिट्रांसमिशन या कुल समय की कुछ मात्रा के बाद, टीसीपी कनेक्शन "टूटा हुआ" मान लेगा। आपके ओएस और इसकी कॉन्फ़िगरेशन पर कितनी बार या कितनी देर तक निर्भर करता है लेकिन यह आमतौर पर कई मिनटों के समय पर बाहर निकलता है।

लिनक्स के tcp.7 man page से:

tcp_retries2 (integer; default: 15; since Linux 2.2) 
      The maximum number of times a TCP packet is retransmitted in 
      established state before giving up. The default value is 15, which 
      corresponds to a duration of approximately between 13 to 30 minutes, 
      depending on the retransmission timeout. The RFC 1122 specified 
      minimum limit of 100 seconds is typically deemed too short. 

यह संभव है कि आप को बदलने के लिए कितना समय लगता है, तो आपके कनेक्शन गायब हो गया है पता लगाने के लिए ले जाता है समायोजित करना चाहेंगे कि मूल्य है।

(1) इसमें अपवाद हैं। एक केबल को हटाए जाने पर ध्यान देने वाली ऑपरेटिंग सिस्टम ऊपरी परतों को सूचित कर सकती है कि सभी कनेक्शनों को "टूटा" माना जाना चाहिए।

+1

यह बहुत उपयोगी था जवाब के लिए धन्यवाद! – corvid

+0

मैं रोज़ हजारों एचटीपी अनुरोध करता हूं, अब मैं Websockets (nodejs) पर काम कर रहा हूं, इसलिए स्वाभाविक रूप से मैं अच्छे पुराने सॉकेट के बारे में अधिक जानना चाहता था, अब मुझे एहसास हुआ कि कैसे सुंदर सॉकेट्स वर्क। भरोसेमंद, कनेक्शन उन्मुख और मेजबान विशिष्ट प्रोटोकॉल क्योंकि ऐसा क्यों नहीं है। ओएस पर निर्भर करता है! –