2012-02-25 20 views
7

यदि दो होस्ट (ए & बी) के बीच एक टीसीपी कनेक्शन स्थापित किया गया है, और कहें कि मेजबान ए ने बी होस्ट करने के लिए 5 ऑक्टेट्स भेजे हैं, और फिर होस्ट बी क्रैश (अज्ञात कारण के कारण)। होस्ट ए स्वीकृति के लिए इंतजार करेगा, लेकिन उन्हें प्राप्त करने पर, ऑक्टेट्स को फिर से भेज देगा और प्रेषक विंडो आकार को भी कम करेगा। यह दो बार दोहराएगा जब तक कि पैकेट नुकसान की वजह से खिड़की का आकार शून्य तक गिर जाए। मेरा सवाल है, आगे क्या होगा?मशीन में से एक मरने पर टीसीपी कनेक्शन कैसे समाप्त हो जाता है?

+0

यह सिंक बाढ़ नहीं है? –

उत्तर

5

इस मामले में, टीसीपी आखिरकार एएके की प्रतीक्षा कर रहा है और एप्लिकेशन में एक त्रुटि लौटाता है। उस त्रुटि के बारे में जानने के लिए एप्लिकेशन को टीसीपी सॉकेट से पढ़ना/आरईवी करना होगा, बाद में लिखने/प्रेषण कॉल भी असफल हो जाएगी। इस बिंदु तक कि टीसीपी ने निर्धारित किया है कि कनेक्शन खत्म हो गया है, कॉल लिखना/भेजना असफल नहीं होगा, अगर सॉकेट बफर भरा हुआ है तो वे एप्लिकेशन से दिखाई देंगे या ब्लॉक करेंगे।

यदि आपका होस्ट बी इसके एसीके भेजे जाने के बाद गायब हो जाता है, तो होस्ट ए उस बारे में तब तक नहीं सीख पाएगा जब तक कि यह बी को कुछ नहीं भेजता, जो अंततः समय समाप्त हो जाएगा, या परिणामस्वरूप आईसीएमपी त्रुटि होगी। (आम तौर पर पहला लिखना/प्रेषण कॉल विफल नहीं होगा क्योंकि टीसीपी तुरंत कनेक्शन में विफल नहीं होगा, और ध्यान रखें कि कॉल लिखना/भेजना एसीके तक पूरा होने तक इंतजार नहीं करता है)।

ध्यान दें कि पुन: ट्रांसमिशन खिड़की के आकार को कम नहीं करता है।

1

इस link

अब मेरे विचार में अपने प्रश्न का एक बहुत ही सरल जवाब है, कनेक्शन का समय समाप्त हो जाएगा का पालन करें और बंद कर दिया जाएगा कृपया। एक और संभावना मौजूद है कि कुछ गैर-उत्तरदायी मशीन के कारण कुछ आईसीएमपी त्रुटि उत्पन्न हो सकती है।

इसके अलावा, यदि क्रैश मशीन फिर से ऑनलाइन है, तो ऊपर दिए गए लिंक में वर्णित प्रक्रिया को देखा जाएगा।

1

ओएस कार्यान्वयन पर निर्भर करता है। संक्षेप में यह एसीके की प्रतीक्षा करेगा और समय-समय पर पैकेट फिर से भेज देगा। तब आपका कनेक्शन फटा जाएगा। लिनक्स में वास्तव में क्या होता है यह देखने के लिए here अन्य ओएस समान एल्गोरिदम का पालन करते हैं।

0

आपके मामले में, एक एफआईएन उत्पन्न होगा (जीवित नोड द्वारा) और कनेक्शन अंततः बंद राज्य में माइग्रेट हो जाएगा। यदि आप गंतव्य आईपी पते पर नेटस्टैट आउटपुट के लिए grep-ing रखते हैं, तो आप एस्टाब्लिश किए गए राज्य से TIMED_WAIT पर माइग्रेशन देखेंगे और फिर अंततः गायब हो जाएंगे।

आपके मामले में, ऐसा तब होगा जब टीसीपी ने भेजे गए पैकेट के लिए एसीके प्राप्त करने के लिए टाइमर रखा है। यह टाइमर काफी लंबा नहीं है इसलिए पता लगाना बहुत जल्दी होगा।

हालांकि, यदि ए बी के बाद एसी प्राप्त हो जाता है तो मशीन बी मर जाता है और उसके बाद ए कुछ भी नहीं भेजता है, तो उपरोक्त टाइमर एक ही घटना का पता नहीं लगा सकता है, हालांकि एक और टाइमर (निष्क्रिय टाइमआउट कॉल करता है) उस स्थिति का पता लगाएगा और कनेक्शन तब बंद हो जाएगा। यह टाइमआउट अवधि डिफ़ॉल्ट रूप से उच्च है। लेकिन आम तौर पर यह मामला नहीं है, मशीन ए बीच में सामान भेजने की कोशिश करेगा और पथ भेजने में त्रुटि स्थिति का पता लगाएगा।

संक्षेप में, टीसीपी एक मामले को छोड़कर कनेक्शन को बंद करने के लिए पर्याप्त स्मार्ट है (और इसके बारे में एप्लिकेशन को इसके बारे में पता है) (निष्क्रिय टाइमआउट: जो डिफ़ॉल्ट रूप से बहुत अधिक है)।

cforfun

+0

मरने वाली मशीन मरने पर एफआईएन कैसे उत्पन्न कर सकती है? – EJP

+0

@EJP: एक टीसीपी एफआईएन दोनों सिरों द्वारा उत्पन्न किया जा सकता है: जीवित पक्ष में त्रुटि प्रबंधन अपने कार्यान्वयन में सक्रिय बंद कर सकता है और आप जीवित नोड में इस कनेक्शन के लिए नेटस्टैट आउटपुट में FIN_WAIT_1 स्थिति देख सकते हैं। – cforfun

+0

लेकिन एफआईएन उत्पन्न करने से पहले क्या होता है? – EJP

0

सामान्य मामलों में, प्रत्येक पक्ष एक फिन (समाप्त) के साथ एक विशेष संदेश भेजकर संपर्क के अपने अंत को समाप्त सेट बिट। यह एफआईएन प्राप्त करने वाला डिवाइस एफआईएन को एक पावती के साथ प्रतिक्रिया देता है यह इंगित करने के लिए कि यह प्राप्त हुआ है। पूरे कनेक्शन को समाप्त नहीं किया जाता है जब तक कि दोनों डिवाइस एक एफआईएन भेजकर और पावती प्राप्त करके शट डाउन प्रक्रिया पूरी नहीं कर लेते।

संबंधित मुद्दे