एक प्रोग्राम के मरने के बाद सुनने वाले टीसीपी पोर्ट को साफ करने में कई मिनट तक का समय क्यों लगता है?


27

अगर मैं एक प्रोग्राम को मारता हूं जो टीसीपी पोर्ट पर सुन रहा है, तो सिस्टम द्वारा पुनः प्राप्त होने और फिर से प्रयोग करने योग्य होने तक कई मिनट तक का समय लगता है। मैंने कई क्यू / ए को इस घटना का उल्लेख करते हुए देखा है, लेकिन बिना स्पष्टीकरण के। ऐसा क्यों होता है, सिस्टम पोर्ट को तुरंत क्यों रिकवर नहीं करता है? क्या यह विंडोज या मैक जैसे किसी अन्य सिस्टम पर भी होता है?

जवाबों:


25

इसके पीछे का विचार यह सुनिश्चित करना है कि आप उस पोर्ट पर सुनने वाले पिछले प्रोग्राम के लिए लक्षित पैकेट प्राप्त न करें। यह TIME_WAITराज्य RFC793 में अधिकतम खंड जीवनकाल के रूप में परिभाषित किया गया है ।

मैं अन्य ऑपरेटिंग सिस्टम के बारे में नहीं जानता लेकिन मेरा मानना ​​है कि इन सभी में कुछ इसी तरह का व्यवहार होता है।

इस समस्या का एक समाधान SO_REUSEADDRसॉकेट पर सेट करना है जिसे TIME_WAITराज्य को अनदेखा करना चाहिए ।


3
अपने भरोसेमंद टीसीपी राज्य आरेख की जांच करते हुए, मैं देख सकता हूं कि TIME_WAIT एक सॉकेट की अंतिम स्थिति है और आम तौर पर 2MSL के लिए बनी रहती है - जो कि जीवनकाल के अधिकतम खंड से दोगुना है। युक्ति (RFC793) इसे 2 मिनट के रूप में बताती है, जो कुल 4 मिनट देती है। यह किसी भी अनुरोध और उत्तर के लिए पर्याप्त समय देता है "फ्लाइट में" संसाधित होने और सही प्रोग्राम पर उतरने के लिए - या सॉकेट TIME_WAIT में होने पर खारिज कर दिया जाए।
फेलेकले

मैं पुष्टि कर सकता हूं कि विंडोज में भी ऐसा होता है।
थॉमस ब्राट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.