सॉकेट्स (धारा) बनाम सॉकेट्स (डेटाग्राम) के बीच अंतर क्या है? एक का उपयोग दूसरे पर क्यों करें?
सॉकेट्स (धारा) बनाम सॉकेट्स (डेटाग्राम) के बीच अंतर क्या है? एक का उपयोग दूसरे पर क्यों करें?
जवाबों:
कुछ समय पहले मैंने दोनों के बीच के अंतर को समझाने के लिए एक महान सादृश्य पढ़ा। मुझे याद नहीं है कि मैंने इसे कहाँ पढ़ा है दुर्भाग्य से मैं लेखक को इस विचार के लिए श्रेय नहीं दे सकता, लेकिन मैंने अपने स्वयं के बहुत से ज्ञान को वैसे भी कोर सादृश्य में जोड़ा है। तो यहाँ जाता है:
एक धारा सॉकेट एक फोन कॉल की तरह है - एक तरफ कॉल को कॉल करता है, दूसरे जवाब, आप एक दूसरे को हैलो कहते हैं (टीसीपी में SYN / ACK), और फिर आप जानकारी का आदान-प्रदान करते हैं। एक बार जब आप काम पूरा कर लेते हैं, तो आप अलविदा (टीसीपी में फिन / एसीके) कहते हैं। यदि एक पक्ष अलविदा नहीं सुनता है, तो वे आमतौर पर दूसरे को कॉल करेंगे क्योंकि यह एक अप्रत्याशित घटना है; आमतौर पर क्लाइंट सर्वर से जुड़ जाएगा। इस बात की गारंटी है कि डेटा आपके भेजे हुए से अलग क्रम में नहीं आएगा, और इस बात की उचित गारंटी है कि डेटा क्षतिग्रस्त नहीं होगा।
डेटाग्राम सॉकेट क्लास में एक नोट को पास करने जैसा है। उस मामले पर विचार करें जहां आप सीधे उस व्यक्ति के बगल में नहीं हैं जिसे आप नोट कर रहे हैं; नोट एक व्यक्ति से दूसरे व्यक्ति तक जाएगा। यह अपने गंतव्य तक नहीं पहुंच सकता है, और इसे वहां पहुंचने तक संशोधित किया जा सकता है। यदि आप एक ही व्यक्ति को दो नोट पास करते हैं, तो वे एक ऐसे क्रम में आ सकते हैं, जिसका आप इरादा नहीं करते हैं, क्योंकि जिस कक्षा के माध्यम से नोट्स लेते हैं, वही नहीं हो सकता है, एक व्यक्ति दूसरे के रूप में तेजी से एक नोट पारित नहीं कर सकता है, आदि। ।
तो आप एक स्ट्रीम सॉकेट का उपयोग करते हैं जब ऑर्डर और सूचना का होना महत्वपूर्ण होता है। फाइल ट्रांसफर प्रोटोकॉल यहां एक अच्छा उदाहरण है। आप अपनी सामग्री के साथ कुछ फ़ाइल डाउनलोड नहीं करना चाहते हैं जो बेतरतीब ढंग से चारों ओर फेरबदल और क्षतिग्रस्त है!
जब ऑर्डर समय पर डिलीवरी (सोचिए वीओआईपी या गेम प्रोटोकॉल) से कम महत्वपूर्ण होता है, तो आप एक डाटाग्राम सॉकेट का उपयोग करेंगे, जब आप एक स्ट्रीम का उच्च ओवरहेड नहीं चाहते हैं (यही कारण है कि DNS मुख्य रूप से एक डाटाग्राम प्रोटोकॉल है, ताकि सर्वर कर सकें कई, कई अनुरोधों पर एक बार बहुत जल्दी प्रतिक्रिया), या जब आप कभी भी बहुत ज्यादा परवाह नहीं करते हैं यदि डेटा कभी भी अपने गंतव्य तक पहुंचता है।
वीओआईपी / खेल के मामले में विस्तार करने के लिए, ऐसे प्रोटोकॉल में अपना डेटा-ऑर्डरिंग तंत्र शामिल है। लेकिन अगर एक पैकेट खराब हो जाता है या खो जाता है, तो आप फिर से भेजने का अनुरोध जारी करने के लिए स्ट्रीम प्रोटोकॉल (आमतौर पर टीसीपी) पर इंतजार नहीं करना चाहते हैं - आपको जल्दी से ठीक होने की आवश्यकता है। टीसीपी को ठीक होने में कुछ मिनट लग सकते हैं, और गेमिंग या वीओआईपी जैसे रियलटाइम प्रोटोकॉल के लिए भी तीन सेकंड अस्वीकार्य हो सकते हैं! यूडीपी जैसे डेटाग्राम प्रोटोकॉल का उपयोग करने से सॉफ़्टवेयर को इस तरह की घटना से बहुत जल्दी ठीक होने की अनुमति मिलती है, बस खोए हुए डेटा की अनदेखी करके या टीसीपी की तुलना में इसे फिर से अनुरोध करता है।
वीओआईपी केवल खोए गए डेटा को अनदेखा करने के लिए एक अच्छा उम्मीदवार है - एक पार्टी को बस एक छोटी सी खाई सुनाई जाएगी, इसी तरह के सेल फोन पर किसी से बात करते समय खराब रिसेप्शन होता है। गेमिंग प्रोटोकॉल अक्सर थोड़े अधिक जटिल होते हैं, लेकिन आमतौर पर की गई कार्रवाइयां या तो लापता डेटा को अनदेखा करने के लिए होंगी (यदि बाद में प्राप्त डेटा खो गया डेटा को सुपरचार्ज करता है), लापता डेटा का फिर से अनुरोध करें, या एक पूर्ण राज्य अपडेट का अनुरोध करें। सुनिश्चित करें कि क्लाइंट की स्थिति सर्वर के साथ सिंक में है।
स्ट्रीम सॉकेट:
डाटाग्राम सॉकेट:
यदि यह नेटवर्क प्रोग्रामिंग है, तो मुझे लगता है कि सॉकेट्स से शुरू करना एक अच्छी शुरुआत होगी।
सॉकेट = आईपी + पोर्ट
तीन प्रकार के सॉकेट
स्ट्रीम (टीसीपी, ऑर्डर और डिलीवरी की गारंटी, कोई दोहराव नहीं, डेटा के लिए कोई लंबाई या चार सीमाएं, कनेक्शन-उन्मुख, विश्वसनीय, संगामिति)
डेटाग्राम (यूडीपी, पैकेट-आधारित, कनेक्शन रहित, डेटाग्राम नहीं है आकार सीमा, डेटा खो सकता है या डुप्लिकेट किया जा सकता है, गारंटी नहीं दी जा सकती है, विश्वसनीय नहीं होगी)
कच्ची (निचली परत प्रोटोकॉल आईपी, आईसीएमपी तक सीधी पहुंच)
मैं परिवहन प्रोटोकॉल प्रकार के लिए कोई सख्त नियम नहीं देखता कि सॉकेट के लिए क्या परिवहन प्रोटोकॉल का उपयोग करना है और विश्वसनीयता गलत नहीं होनी चाहिए क्योंकि दोनों छोर सक्रिय होने की स्थिति में UDP वास्तविक है।
विश्वसनीयता डिलीवरी की विश्वसनीयता को संदर्भित करती है क्योंकि टीसीपी का परिवहन प्रोटोकॉल के रूप में उपयोग करके अनुक्रम संख्या की जांच होती है जो यूडीपी में मौजूद नहीं है। यह नेटवर्क प्रोटोकॉल विश्लेषक जैसे कि वायरशार्क टीसीपीडम्प आदि का उपयोग करना बेहतर है यह देखने के लिए कि आपका सॉफ्टवेयर वास्तव में क्या कर रहा है; कागज पर अपने काम के साथ सत्यापन या विलय सिद्धांत।