क्या क्लाइंट के डिस्कनेक्ट होने पर टीसीपी कनेक्शन खुला रहना संभव है?


12

हमारे पास एक सर्वर एप्लिकेशन है जो लगभग 4000 कनेक्शनों पर टीसीपी थकावट की समस्याओं का सामना कर रहा है। यह हर 3 या 4 सप्ताह (लगभग) होगा। विक्रेता, जिसने इस सर्वर एप्लिकेशन को बनाया है, नेटस्टैट-बी के आउटपुट की जांच करने के बाद हमें बताता है कि क्लाइंट के गिरा दिए जाने पर भी कुछ कनेक्शन खुले रहते हैं।

मुझे यह जांचने का काम दिया गया है कि क्यों एक विशेष क्लाइंट एप्लिकेशन टीसीपी कनेक्शन को ठीक से बंद नहीं कर रहा है। मुझे विश्वास है कि यदि एक क्लाइंट कंप्यूटर बंद हो जाता है, तो यह उस सर्वर से POSSIBLY की रिपोर्ट नहीं कर सकता है जो उस क्लाइंट के साथ अभी भी एक टीसीपी कनेक्शन स्थापित है। दुर्भाग्य से, मुझे अपना दृष्टिकोण मान्य करने के लिए कोई जानकारी नहीं मिल रही है। मैं किसी भी संभावित समस्या की जांच में अधिक समय बर्बाद नहीं करना चाहता हूं जो मुझे नहीं लगता कि एक समस्या भी हो सकती है।

tldr;

क्या कोई सर्वर बंद किए गए कंप्यूटर से एक स्थापित कनेक्शन की रिपोर्ट कर सकता है?

जवाबों:


13

टीसीपी एक मृत कनेक्शन का पता लगाने के लिए कोई प्रयास नहीं करता है सिवाय उस तरफ के जो डेटा ट्रांसमिट कर रहा है। यह करने के लिए टीसीपी स्टैक में कॉलिंग एप्लिकेशन कोड की जिम्मेदारी है। क्या प्रोटोकॉल यहाँ शामिल है? (टीसीपी के शीर्ष पर एक)

यह एक भयानक रूप से बदसूरत "समाधान" है, लेकिन आप टीसीपी रखवाले को सक्षम कर सकते हैं । इस लेख में और भी बहुत कुछ है


आप शायद लेयर और इसके सेशन लेयर को ट्रांसपोर्ट लेयर के शीर्ष पर रखते हैं, जो कि टीसीपी रहता है।
रिलिंडो

1
@Rilindo: व्यवहार में, और इस विशेष मामले में, आपके पास एक आवेदन है जो टीसीपी स्टैक को कॉल करता है। टीसीपी के शीर्ष पर प्रोटोकॉल (HTTP, POP, या जो भी) आमतौर पर यह निर्दिष्ट करता है कि यह कैसे करना है, क्योंकि उन प्रोटोकॉल के डिजाइनर जानते थे कि टीसीपी खुद ऐसा नहीं कर सकता है।
डेविड श्वार्ट्ज

वूप्स, मेरी गलती। इसकी परत 7, तब।
Rilindo

मैं इस बिंदु पर रखवाले को सक्षम नहीं करने जा रहा हूं, लेकिन यह जानना आसान है कि विकल्प मौजूद है। उस लेख से लगता है कि वहां पहले से ही 2 घंटे का समय मौजूद है। AFAIK, कनेक्शन दिनों / हफ्तों के लिए खुले रखे जा रहे हैं।
जोश स्मेटन डिक

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

8

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

जहां तक ​​टीसीपी का सवाल है, आधे-खुले कनेक्शन और लंबे निष्क्रिय कनेक्शन के बीच कोई अंतर या भेद नहीं है।

आप OSI मॉडल की लेयर 1 (भौतिक) से लेयर 7 (एप्लिकेशन) तक समस्या निवारण की शुरुआत करने जा रहे हैं ताकि यह पता लगाया जा सके कि समस्या कहां हो रही है। मेरी सलाह यह होगी कि समस्या होने तक प्रभावित ग्राहकों में से किसी एक पर पैकेट कैप्चर प्रोग्राम को स्थापित करना और चलाना, और फिर ग्राहक को कनेक्शन बंद न करने के लिए क्या करना है, यह निर्धारित करने के लिए कैप्चर का विश्लेषण करें।


3
या विक्रेता उचित समय समाप्ति :) लागू करने के लिए मिलता है
शेन झुंझलाना

5

जब कोई वर्कस्टेशन किसी सर्वर के साथ कनेक्शन बंद करना चाहता है तो वह टीसीपी फाइनल भेजता है। यदि क्लाइंट ठीक से व्यवहार नहीं कर रहा है और अपने कनेक्शन को बंद नहीं कर रहा है, तो वे वास्तव में सर्वर पर स्थापित रह सकते हैं। आप इन्हें साफ करने के लिए सर्वर पर खुले कनेक्शन के लिए टाइमआउट सेट कर सकते हैं - हालांकि इसका कारण ढूंढना बेहतर होगा। खुले कनेक्शन किस पोर्ट में आ रहे हैं? एक बार जब आपको पता चल जाता है कि किस सेवा को एक्सेस किया जा रहा है, तो आप उस क्लाइंट ऐप की पहचान करने में सक्षम हो सकते हैं जो सर्वर को मार रहा है।


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

4
जहां तक ​​सर्वर का संबंध है कनेक्शन तब तक खुला रहता है जब तक कि वह क्लाइंट से फिन या आरएसटी प्राप्त नहीं करता है। इसके बिना, सर्वर मानता है कि कनेक्शन अभी भी स्थापित है लेकिन क्लाइंट के पास भेजने के लिए कोई डेटा नहीं है। जहां तक ​​सर्वर का संबंध है, आधे-खुले कनेक्शन और निष्क्रिय कनेक्शन में कोई अंतर नहीं है।
जोकेवेटी

@joeqwerty: यह सच है, हालांकि सर्वर यह तय कर सकता है कि वह अनिश्चित काल तक खुला कनेक्शन नहीं रखना चाहता है, और कुछ टाइमआउट / क्लोज मैकेनिज्म को लागू कर सकता है। डेविड श्वार्ट्ज ने अपने जवाब में "यह एप्लिकेशन कोड की जिम्मेदारी है" का मतलब बताया। इसलिए सर्वर चाहे तो आधे-खुले कनेक्शन और निष्क्रिय कनेक्शन के बीच अंतर कर सकता है। हालांकि टीसीपी के लिए, आधे खुले कनेक्शन और निष्क्रिय कनेक्शन के बीच वास्तव में कोई अंतर नहीं है।
साल्के

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