क्या टीसीपी कनेक्शन को खुला रखने के लिए मुझे दिल की धड़कन की आवश्यकता है?


94

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

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

मैं कारण घटक का एक हिस्सा जानता हूं एक दिल की धड़कन घटक बी है इसलिए यह समर्थन को सूचित कर सकता है यदि घटक बी के साथ संचार समस्याएं हैं (या तो लिंक नीचे है या घटक बी नहीं चल रहा है)। क्या दिल की धड़कन किसी अन्य कारण से आवश्यक हैं? जैसे कि यह सुनिश्चित करने के लिए कि अक्सर "पाइप में" कुछ खुला रहता है?

घटक ए वर्तमान में हर 20 सेकंड में घटक बी को हृदयंगम करता है और 120 सेकंड में घटक बी से कुछ भी वापस न मिलने पर कनेक्शन बंद कर देता है। यह तब इस धारणा के तहत कनेक्शन के लिए सुनना शुरू करता है कि घटक बी समय-समय पर लिंक को तोड़ने पर पुन: कनेक्ट करने का प्रयास करेगा। यह सफलतापूर्वक काम करता है।

मेरे प्रश्न को दोहराने के लिए: क्या टीसीपी / आईपी कनेक्शन को जीवित रखने के लिए दिल की धड़कनें आवश्यक हैं?


1
क्या यह व्यवहार कार्यान्वयन पर भी निर्भर हो सकता है? क्या यह टीसीपी मानक में कुछ निर्दिष्ट है, या क्या इसे कार्यान्वयन विवरण के रूप में छोड़ दिया गया है? उम्मीद है कि कोई और भी इसका जवाब दे सकता है।
dss539

1
यह एक कार्यान्वयन विवरण है जो मैं कहूंगा कि सभी टीसीपी / आईपी आधारित प्रोटोकॉल लागू नहीं होते हैं, यह पूरी तरह से आपके ऊपर छोड़ दिया गया है।
लॉयड

5
हां - टीसीपी / आईपी का निर्गमन नहीं - लेकिन अन्य हार्डवेयर या सॉफ़्टवेयर के कारण आप कनेक्शन ऐसे फ़ायरवॉल और होम 'राउटर' के माध्यम से जा सकते हैं जो निष्क्रिय टीसीपी कनेक्शन को छोड़ देते हैं, संबंधित: stackoverflow.com/questions/3907537-…
markmnl

जवाबों:


54

कनेक्शन की परवाह किए बिना खुला रहना चाहिए, लेकिन हाँ यह अक्सर आम है कि उदाहरण के लिए पिंग कमांड के साथ IRC, मृत कनेक्शन का पता लगाने में मदद करने के लिए दिल की धड़कन को लागू करें ।


34
रखने के लिए एक और सामान्य कारण ओ है कनेक्शन को नेट गेटवे के माध्यम से खुला रखें। जबकि टीसीपी को खुद को संचालित करने के लिए रखवाले की आवश्यकता नहीं है, यह नैट गेटवे के लिए दिए गए टाइमआउट के बाद एक tcp कनेक्शन को "ड्रॉप" करने के लिए आम है।
नोस

4
सामान्य समयबाह्य क्या है? सेकंड, मिनट, घंटे?
मिनीगॉड

@ लॉयड मुझे लगता है कि "मिनीगॉड का मतलब था," कब तक एक सामान्य समय समाप्त होगा? (जवाब सेकंड, मिनट, घंटे, में दिया गया ...)
jeromej

@JeromeJ कौन जानता है, कुछ साल हो गए हैं;)
लॉयड

इसके अलावा, यदि आप कनेक्शन एक प्रॉक्सी से गुजर रहे हैं तो आप अपने कनेक्शन को बासी मानकर गिराए जाने की उम्मीद कर सकते हैं। मुझे नहीं लगता कि इस मामले में जिंदा रहने से इस मामले में मदद मिलेगी, क्योंकि टीसीपी का यह पहलू आवेदन का प्रचार नहीं करता है।
गीता

49

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


टीसीपी कनेक्शन हमेशा के लिए जीवित कहेगा?
user7817808

22

यदि आपके घटक:

  • एक पारंपरिक वायर्ड नेटवर्क में हैं
  • उनके बीच कोई फायरवॉल या NAT राउटर नहीं हैं
  • उनमें से कोई भी दुर्घटना

फिर आपको दिल की धड़कन की आवश्यकता नहीं है।

यदि इनमें से कोई भी धारणा गलत है (मैं आपको देख रहा हूं, जीपीआरएस!), तो दिल की धड़कन जल्दी से जरूरी हो जाती है।


1
यह आमतौर पर नेटवर्किंग है, हालांकि। वितरित कम्प्यूटिंग के पीटर डिक्शन की परिकल्पना पर विचार करें; हम जानते हैं कि नेटवर्क स्वाभाविक रूप से अविश्वसनीय हैं, और इसलिए आपके आवेदन में विफलता के लगभग एक निश्चित बिंदु के रूप में माना जाना चाहिए। इस संदर्भ में, पारंपरिक वायर्ड नेटवर्क या नहीं, मान लें कि आप किसी बिंदु पर विफलता का अनुभव करेंगे और उस परिदृश्य को संभालने के लिए अपने एप्लिकेशन को डिज़ाइन करेंगे।
स्टीवन बख्तियारी

11

आपको खुद को दिल की धड़कन भेजने की जरूरत नहीं है। उपयोग की परवाह किए बिना टीसीपी कनेक्शन खुला रहेगा।

ध्यान दें कि टीसीपी औजार एक वैकल्पिक keepalive तंत्र है, जो उसके बाद ही नहीं बल्कि कुछ बाद की तारीख में डेटा भेजने के लिए आप की आवश्यकता होती है की तुलना में एक समय पर फैशन में एक बंद कनेक्शन की पहचान करने के लिए प्रयोग किया जाता है और किया जा सकता है कनेक्शन की खोज बंद कर दिया है।


1
यह कैसे लिनक्स पर काम करने के लिए लगता है? क्या यह काम करता है? क्या मैं 2 घंटे से कम का समय समाप्त कर सकता हूं? उदाहरण के लिए 30 सेकंड?
इताइ लेविन

यह काम करने के लिए आवेदन रखने के लिए समर्थन की जरूरत है। बस इसे लिनक्स में सक्षम करना पर्याप्त नहीं होगा।
माइक

9

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

डिफॉल्ट कीप-लिविंग अंतराल 2 घंटे है।

http://msdn.microsoft.com/en-us/library/ms819735.aspx

यदि आप 2 घंटे के लिए जीवित रहते हैं तो वांछनीय नहीं है, तो आपको अपनी खुद की दिल की धड़कन को लागू करने और खिड़कियों पर टीसीपी को जीवित रखने की आवश्यकता हो सकती है।


3

क्या टीसीपी / आईपी कनेक्शन को जीवित रखने के लिए दिल की धड़कनें आवश्यक हैं?

वे पता लगाने के लिए उपयोगी होते हैं कि कोई कनेक्शन कब मर गया है।


3

टीसीपी कनेक्शन को जीवित रखेगा। आवेदन दिल की धड़कन आवेदन स्तर पर विचार के लिए हैं जैसे कि विफलता, लोड संतुलन, या संभावित समस्याओं के लिए प्रशासक को सतर्क करना।


3

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

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


2

एक प्रोटोकॉल के रूप में टीसीपी / आईपी निर्दिष्ट किया जाता है जब तक कि आप एक करीबी पैकेट नहीं भेजते। स्पॉटी वायरलेस या इंटरनेट कनेक्शन होने के बाद भी मैंने सॉकेट खोल रखे हैं।

हालांकि, यह सभी कार्यान्वयन पर बहुत निर्भर है। सबसे अधिक संभावना है कि एक "टाइमआउट" होगा जिसका अर्थ है कि कनेक्शन को "मृत" मानने से पहले प्रतिक्रिया की प्रतीक्षा करने के लिए अधिकतम समय। कभी-कभी यह एप्लिकेशन पर ही आधारित होता है, कभी-कभी NAT राउटर्स पर।

इसलिए, मैं आपको अत्यधिक सलाह दूंगा कि आप खराब कनेक्शन का पता लगाने के लिए "दिल की धड़कन" रखें और उन्हें खुला रखें।


2

मूल रूप से एक टीसीपी कनेक्शन मार्ग के साथ स्विचेस में संग्रहीत लिंक स्थिति बनाता है। टूटे हुए कनेक्शनों का पता लगाने के लिए (जैसे कि जब एक समकक्ष दुर्घटनाग्रस्त हो जाता है) (उचित डिस्कनेक्ट भेजे बिना), इन राज्यों को निष्क्रियता की अवधि के बाद बेदखल करना पड़ता है। और जब ऐसा होता है, तो आपका टीसीपी कनेक्शन बंद कर दिया गया है। हालाँकि मैं यह नहीं बता सकता कि ये समय कितने समय के हैं, वे डिवाइस-उत्पादकों और / या इंटरनेट प्रदाताओं पर निर्भर प्रतीत होते हैं। मुझे याद है कि मेरे निष्क्रिय एसएसएच टर्मिनल सत्र तेजी से (निष्क्रिय समय के 15 मिनट से कम) मेरे पूर्व 1 & 1 इंटरनेट प्रदाता द्वारा बंद कर दिए गए थे, जबकि वे कई घंटों तक खुले रहे जब एक काबेल-बीडब्ल्यू ने कनेक्शन प्रदान किया ...

अंत में, मैं अपने पिछले वक्ताओं के साथ निष्कर्ष निकालता हूं: दिल का धड़कना यह बताने का एक अच्छा तरीका है कि क्या कोई कनेक्शन अभी भी जीवित है और लात मार रहा है ...


1

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

कुछ लोग उन्हें NOOPs (नो ऑप्स) कहते हैं।

लेकिन नहीं, वे कनेक्शन को जीवित रखने के लिए आवश्यक नहीं हैं, केवल यह जानने में मददगार हैं कि स्थिति क्या है।


1

मैं कहूंगा कि अगर आपके दिल की धड़कन नहीं है, तो यह मायने नहीं रखता कि आपका टीसीपी / आईपी कनेक्शन खुला है या नहीं।


1

टीसीपी प्रोटोकॉल के लिए दिल की धड़कन की आवश्यकता नहीं है। यह कार्यान्वयन यह पता लगाने के लिए है कि क्या अन्य लोगों ने गैर मानक तरीके से कनेक्शन को समाप्त कर दिया है (अर्थात आंसू नीचे की प्रक्रिया से नहीं गुजरे)।


0

कनेक्शन खुला रहेगा - दिल की धड़कन को लागू करने की आवश्यकता नहीं है, और सॉकेट का उपयोग करने वाले अधिकांश एप्लिकेशन ऐसा नहीं करते हैं।


-2

बहुत सारे प्रोटोकॉल दिल की धड़कन या स्वास्थ्य की स्थिति को लागू करते हैं जैसे कि लॉयड ने कहा। बस आप जानते हैं कि कनेक्शन अभी भी खुला है और यदि आप कुछ भी याद कर सकते हैं

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