मैं यह समझने की कोशिश कर रहा हूं कि टीसीपी हाफ ओपन कनेक्शन और टीसीपी हाफ बंद कनेक्शन के बीच क्या अंतर है, क्या कोई बता सकता है कि वे वास्तव में क्या हैं?
मैं यह समझने की कोशिश कर रहा हूं कि टीसीपी हाफ ओपन कनेक्शन और टीसीपी हाफ बंद कनेक्शन के बीच क्या अंतर है, क्या कोई बता सकता है कि वे वास्तव में क्या हैं?
जवाबों:
यह पोस्ट आधे बंद कनेक्शनों पर फैलती है। आधे खुले कनेक्शन के लिए KContreau का सही विवरण देखें।
प्रत्येक टीसीपी कनेक्शन में दो आधे-कनेक्शन होते हैं जो एक-दूसरे से स्वतंत्र रूप से बंद होते हैं। इसलिए यदि एक छोर एक फिन भेजता है, तो दूसरा छोर सिर्फ एसीके (एफआई + एसीके-इंग के बजाय) के लिए स्वतंत्र है, जो फिन-सेंडिंग एंड को संकेत देता है कि अभी भी भेजने के लिए डेटा है। इसलिए दोनों छोर ESTABLISHED के अलावा एक स्थिर डेटा अंतरण स्थिति में समाप्त होते हैं - अर्थात् FIN_WAIT_2 (प्राप्त अंत के लिए) और CLOSE_WAIT (भेजने के अंत के लिए)। ऐसा कनेक्शन आधा बंद बताया गया है और टीसीपी वास्तव में उन परिदृश्यों का समर्थन करने के लिए डिज़ाइन किया गया है, इसलिए आधा बंद कनेक्शन एक टीसीपी सुविधा है।
जबकि RFC 793 केवल "आधा बंद" शब्द का उल्लेख किए बिना कच्चे तंत्र का वर्णन करता है, RFC 1122 उस मामले में खंड 4.2.2.13 में विस्तृत है। आप आश्चर्यचकित हो सकते हैं कि नरक को किस सुविधा की आवश्यकता है। टीसीपी के डिजाइनरों ने भी यूनिक्स प्रणाली के लिए टीसीपी / आईपी को लागू किया और, हर यूनिक्स उपयोगकर्ता की तरह, आई / ओ पुनर्निर्देशन से प्यार करता था। डब्ल्यू। स्टीवंस (टीसीपी / आईपी सचित्र, धारा 18.5) के अनुसार, I / O- रीडायरेक्ट टीसीपी स्ट्रीम की इच्छा फीचर को पेश करने की प्रेरणा थी। यह फिन ack की भूमिका लेने या EOF के रूप में अनुवादित होने की अनुमति देता है। तो यह मूल रूप से एक ऐसी सुविधा है जो आपको एप्लिकेशन परत पर लापरवाही से अनुरोध / प्रतिक्रिया-शैली की बातचीत करने की अनुमति देती है, जहां फिन "अनुरोध के अंत" का संकेत देता है।
आधे खुले और आधे बंद कनेक्शन वास्तव में क्या हैं , यह वर्णन करने का अन्य लोगों ने काफी अच्छा काम किया , लेकिन आधे खुले कनेक्शनों के विचार को अक्सर उन्हें PROBLEM होने के संदर्भ में भी खोजा जाता है।
इंटरनेट पर तर्क हैं कि शब्दावली "आधा-खुला" या "आधा-बंद" का प्रतिनिधित्व करना चाहिए, लेकिन जहां तक मेरा संबंध है, शब्दावली सिर्फ शब्दार्थ है। कुछ लोग कहते हैं कि "आधा-खुला" कनेक्शन एक "समस्या" है, जबकि "आधा-बंद" एक डिज़ाइन विशेषता है जो आपको अपनी फाइल को आधे बंद राज्य में समाप्त होने से पहले भेजने की धारा को बंद करके आपकी भेजने की धारा को बंद करने की अनुमति देता है ( अन्य उपयोगकर्ताओं के रूप में वर्णित)।
हालांकि, अन्य के बारे में ... "समस्या": इसे बंद करने के लिए एक टीसीपी कनेक्शन और इसे बंद करने के लिए 4-तरफ़ा हैंडशेक करने के लिए एक 3 रास्ता हैंडशेक लगता है।
टीसीपी में एक भेद्यता है कि एक ग्राहक को भेजा गया अंतिम फिन पैकेट संभावित रूप से राउटर / नेटवर्क द्वारा गिराया जा सकता है जिसके परिणामस्वरूप एक कनेक्शन है जो आधा खुला है जब वास्तविक इरादा पूरी तरह से कनेक्शन को बंद करना था। यह और इसी तरह के दृष्टिकोण सेवा के हमलों के डेनियल के लोकप्रिय प्रकार हैं क्योंकि उन्हें बहुत अधिक बैंडविड्थ की आवश्यकता नहीं होती है, फिर भी संभावित रूप से खाने योग्य मूल्यवान हैंडल, सॉकेट्स और थ्रेड्स सर्वर कार्यान्वयन के आधार पर होते हैं, लेकिन वे वास्तविक दुनिया में भी हो सकते हैं बढ़ती आवृत्ति के साथ हमारे घटिया वायरलेस वाहक के लिए धन्यवाद।
ऑपरेटिंग सिस्टम ने आधे-खुले / बंद कनेक्शनों की संख्या को सीमित करके आधे-खुले DDoS हमलों के खिलाफ वापस लड़ने का प्रयास किया है, जो एक निश्चित समय में ऑपरेटिंग सिस्टम में मौजूद हो सकते हैं और अधिकतम समय की लंबाई का परिचय देकर कि कनेक्शन एक में बने रह सकते हैं आधा खुला / बंद राज्य। पिछली बार मैंने व्यक्तिगत रूप से जाँच की थी, हालाँकि, विंडोज पर समय सीमा बहुत अधिक थी (2 दिन, अगर मुझे याद है)।
टीसीपी कीप-अलाइव की वैकल्पिक प्रकृति द्वारा इस स्थिति को और अधिक बढ़ा दिया गया है, जिसे यदि मृत / ज़ोंबी कनेक्शन का पता लगाने के लिए प्रोटोकॉल-स्तर (आवेदन स्तर के विपरीत) समाधान के रूप में पूरी तरह से लागू किया गया था। लेकिन, जब टीसीपी डिजाइन किया गया था, तो बैंडविड्थ अब की तुलना में काफी अधिक कीमती था, और चिंताएं थीं कि टीसीपी के लिए अनिवार्य रूप से रखे गए टाइमर भी "चैट्टी" होंगे। इसलिए कीप-अलाइव वैकल्पिक हैं, आमतौर पर उपयोग नहीं किए जाते हैं, और RFC1122 के अनुसार राउटर द्वारा प्रेषित किए जाने की गारंटी नहीं है। इसलिए ... भले ही आप परिदृश्य का पता लगाने / संभालने की कोशिश में टीसीपी परत पर कीप-अलाइव को सक्षम करते हों, लेकिन आप पा सकते हैं कि जैसे-जैसे आपका ट्रैफ़िक दुनिया भर में घूमता है, कुछ राउटर, ज़िंदा पैकेट को गिरा रहे हैं ... परीक्षण करने के लिए संभावित दुर्लभ परिदृश्य।
Half-Open connections pose a bit of an engineering challenge to coders who write TCP-based servers, particularly, because they can unintentionally appear at random, during times of high-load... and typically on production servers... and can be difficult to notice in Alpha/Beta testing stages. In my experience, I found them to occur in maybe 1 in 40,000 connections on servers handling 2.5million connections/day, but those numbers will vary depending on your traffic conditions and the traffic conditions of every leg of the internet between your server and the client.
एक इंजीनियर के रूप में, उन समस्याओं को ट्रैक करना मुश्किल हो सकता है जो केवल और केवल लाइव, परिनियोजित सर्वर पर होती हैं, इसलिए टीसीपी सर्वर कोड लिखते समय इस दुर्लभ-कनेक्शन की स्थिति का अनुकरण करने का प्रयास करना महत्वपूर्ण है ताकि यह विश्लेषण किया जा सके कि आपका सर्वर कब प्रतिक्रिया देगा। इस स्थिति का सामना करना पड़ा। यदि आपका टीसीपी सर्वर उदाहरण के लिए कार्यकर्ता-थ्रेड्स की एक स्थिर संख्या का उपयोग करता है, तो आप उन सभी को ज़ोंबी कनेक्शन द्वारा उपभोग कर सकते हैं जब आप उत्पादन के लिए तैनात करते हैं, उदाहरण के लिए। यदि कनेक्शन के लिए बहुत सारी मेमोरी की आवश्यकता होती है, तो अंतिम परिणाम मेमोरी लीक के समान दिखाई दे सकता है। आदि आदि।
100% व्यवहार्य रखने योग्य समाधान के बिना, टीसीपी इसे आधे-खुले / बंद कनेक्शन को कैसे निर्धारित किया जाता है, यह निर्धारित करने के लिए उपयोगकर्ता-परत तक छोड़ देता है, इसलिए आपके कोड में पता लगाने, टाइम-आउट और क्लीन करने के लिए एक योजना / तंत्र होना चाहिए। जब यह स्थिति होती है, तो संसाधन ... यह मानते हुए कि यह एक ऐसा प्रोटोकॉल है जिसका आपने आविष्कार किया है और कई (खराब) खुले मानकों में से एक नहीं है जो प्रोग्रामर आमतौर पर उपयोग करते हैं। बेशक मैं HTTP जैसे प्रोटोकॉल की बात कर रहा हूं, जो विशेष रूप से टीसीपी पर चलते हैं। ये प्रोटोकॉल इस प्रोग्रामर की राय में बहुत अधिक हैं।
टीसीपी की कमजोरियों और HTTP / वेब ट्रैफिक को संचारित करने के लिए इसकी दुर्भाग्यपूर्ण लोकप्रियता को स्वीकार करते हुए, स्मार्ट कंपनियों ने प्रतिस्थापन की तलाश करने की मांग की है। उदाहरण के लिए, Google ने QUIC नामक एक प्रोटोकॉल के साथ प्रयोग किया, जो UDP पर HTTP को प्रसारित करता है। TSCP नामक एक खुला प्रोटोकॉल भी है। हालांकि उन प्रोटोकॉल में से किसी ने भी व्यापक रूप से गोद नहीं लिया है।
एक नियम के रूप में, मैं अपने स्वयं के यूडीपी-आधारित प्रोटोकॉल पर विशेष रूप से बात करने के लिए अपने सभी सर्वरों का निर्माण करता हूं। यूडीपी आपके विचार से मुश्किल है, और मुझे ऐसा लगता है कि मैं इसे हमेशा तेज, चालाक, कम-विलंबता, कम-भीड़ के कारण घुमा रहा हूं ... लेकिन कम से कम मुझे अब आधे-खुले कनेक्शन से निपटना नहीं है; )
जब टीसीपी एक कनेक्शन स्थापित करता है, तो इसे गारंटी माना जाता है क्योंकि एक हैंडशेक होता है:
उस बिंदु पर कनेक्शन स्थापित किया गया है, और डेटा प्रवाह करना शुरू कर देता है। इसके विपरीत, एक यूडीपी पैकेट की गारंटी नहीं है, और इसे वहां मिलने वाली आशाओं में भेजा जाता है।
http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment
आधिकारिक तौर पर, आरएफसी के अनुसार, आधा खुला टीसीपी कनेक्शन तब होता है जब स्थापित कनेक्शन का एक तरफ दुर्घटनाग्रस्त हो गया है, और यह अधिसूचना नहीं भेजी कि कनेक्शन समाप्त हो रहा था। यह आज का सामान्य उपयोग नहीं है।
अनौपचारिक रूप से, यदि एक भ्रूण कनेक्शन का उल्लेख कर सकते हैं, जो स्थापित होने की प्रक्रिया में एक कनेक्शन है।
अर्ध-बंद उस अनौपचारिक परिभाषा के विपरीत है। यह बीच में कहीं एक राज्य है जहां कंप्यूटर स्थापित कनेक्शन को फाड़ रहे हैं।
टीसीपी कनेक्शन समाप्ति का सबसे अच्छा स्पष्टीकरण
टीसीपी 3-वे हैंडशेक प्रक्रिया में हमने अध्ययन किया कि SYN बिट सेगमेंट का उपयोग करके ट्रांसमिशन कंट्रोल प्रोटोकॉल (टीसीपी) में क्लाइंट और सर्वर के बीच कनेक्शन कैसे स्थापित होता है। इस लेख में हम इस बारे में अध्ययन करेंगे कि कैसे क्लाइंट और सर्वर के बीच टीसीपी का घनिष्ठ संबंध है। यहां हमें बिट सेगमेंट को सर्वर पर भेजने की आवश्यकता होगी जो फिन बिट 1 पर सेट है।
टीसीपी में तंत्र कैसे काम करता है:
Step 1 (FIN From Client) – Suppose that the client application decides it wants to close the connection. (Note that the server could also choose to close the connection). This causes the client send a TCP segment with the FIN bit set to 1 to server and to enter the FIN_WAIT_1 state. While in the FIN_WAIT_1 state, the client waits for a TCP segment from the server with an acknowledgment (ACK).
Step 2 (ACK From Server) – When Server received FIN bit segment from Sender (Client), Server Immediately send acknowledgement (ACK) segment to the Sender (Client).
Step 3 (Client waiting) – While in the FIN_WAIT_1 state, the client waits for a TCP segment from the server with an acknowledgment. When it receives this segment, the client enters the FIN_WAIT_2 state. While in the FIN_WAIT_2 state, the client waits for another segment from the server with the FIN bit set to 1.
Step 4 (FIN from Server) – Server sends FIN bit segment to the Sender(Client) after some time when Server send the ACK segment (because of some closing process in the Server).
Step 5 (ACK from Client) – When Client receive FIN bit segment from the Server, the client acknowledges the server’s segment and enters the TIME_WAIT state. The TIME_WAIT state lets the client resend the final acknowledgment in case the ACK is lost.The time spent by client in the TIME_WAIT state is depend on their implementation, but their typical values are 30 seconds, 1 minute, and 2 minutes. After the wait, the connection formally closes and all resources on the client side (including port numbers and buffer data) are released.
के बारे में अधिक: https://www.geeksforgeeks.org/tcp-connection-termination/
आधा बंद कनेक्शन एक ऐसी प्रक्रिया है जो सर्वर के एक छोर पर स्थापित होती है और क्लाइंट कनेक्शन को समाप्त करने का इरादा रखता है। टीसीपी एक कनेक्शन उन्मुख प्रक्रिया है इस प्रकार प्रत्येक सॉकेट एक विशेष अनुप्रयोग के लिए खोला जाता है। टीसीपी में आवेदन को समाप्त करने के लिए कोई दबाव नहीं है। इस प्रकार कनेक्शन उन्मुख प्रक्रिया प्रतीक्षा संकेतों के साथ समाप्ति को आगे बढ़ाती है। इसे टीसीपी में आधा बंद कहा जाता है (कनेक्शन)