सॉकेट क्या है?


49

क्या कोई मुझे समझा सकता है कि सॉकेट क्या है? मैं इसे एसएसएल, आदि के संदर्भ में कई सारांशों में देखता हूं।

इसके अलावा, इसे सॉकेट क्यों कहा जाता है? क्या यह विशुद्ध रूप से है क्योंकि यह वह नाम था जिसका उन्होंने आविष्कार किया था? या यह पहला नाम था जो वे साथ आए थे?


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

यह एक सादृश्य के लिए बुरा नहीं है। एक सर्वर सिर्फ एक कॉल-सेंटर है और इसमें एक समय में कई सैकड़ों सक्रिय कॉल हो सकते हैं।
MSalters

जवाबों:


42

एक सॉकेट संचार के लिए एक तार्किक समापन बिंदु है। वे परिवहन परत पर मौजूद हैं। आप सॉकेट पर चीजें भेज और प्राप्त कर सकते हैं, आप सॉकेट को बांध सकते हैं और सुन सकते हैं। एक सॉकेट एक प्रोटोकॉल, मशीन और पोर्ट के लिए विशिष्ट है, और एक पैकेट के हेडर में इस तरह से संबोधित किया जाता है।

नेटवर्क प्रोग्रामिंग और इंटर-प्रोसेस कम्युनिकेशन में बीजे के मार्गदर्शक दोनों को सॉकेट का उपयोग करने के बारे में अच्छी जानकारी है, और यहां तक ​​कि इस सटीक प्रश्न का उत्तर भी ।


64

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

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

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

जैसा कि ट्रिपलपी ने उल्लेख किया है, बीएसडी के इतिहास के दौरान, पाइपों को सॉकेट्स की तुलना में पहले पेश किया गया था, और जो मौजूद थे, उन्हें सॉकेट्स का उपयोग करके फिर से लागू किया गया था। इसी संदर्भ, द डिजाइन एंड इंप्लीमेंटेशन ऑफ फ्रीबीएसडी ऑपरेटिंग सिस्टम , उल्लेख करता है कि पाइप तब प्रदर्शन कारणों से गैर-सॉकेट कार्यान्वयन के लिए वापस कर दिए गए थे: यह निश्चित रूप से इस तथ्य को रेखांकित करता है कि पाइप समानताएं साझा करते हैं।


3
शायद यह भी उल्लेख करता है कि पाइप सॉकेट से पहले से हैं, लेकिन एक बार सॉकेट इंटरफ़ेस को यूनिक्स में जोड़ा गया था, तो स्थानीय सॉकेट्स का उपयोग करके पाइप को फिर से लागू करने के लिए बहुत समझ में आया।
10

@tripleee: यह एक महान ऐतिहासिक बिंदु है। एक संदर्भ प्रदान करने के लिए देखभाल?
dhag

क्विक गुगलिंग पेज 40 को द डीबीएस और ऑपरेटिंग सिस्टम के डिजाइन और कार्यान्वयन में बदल देता है ; पाठ में 4.2BSD में इस परिवर्तन का उल्लेख है, लेकिन यह भी स्पष्ट करता है कि प्रदर्शन कारणों से यह अब नहीं है।
ट्रिपल

बहुत बढ़िया, मैं इसे अपने उत्तर में जोड़ूंगा।
डेग

सभी में सर्वश्रेष्ठ तकनीकी उत्तर
चोसगुरू

7

एक सॉकेट एक अमूर्त। यह एक सिस्टम संसाधन (इस मामले में नेटवर्क कनेक्शन) का उपयोग करने के लिए अनुप्रयोगों के लिए एक इंटरफ़ेस प्रदान करता है जो ऑपरेटिंग सिस्टम को किसी भी संख्या में अनुप्रयोगों द्वारा सीमित संसाधन के उपयोग को मध्यस्थता और व्यवस्थित करने की अनुमति देता है।

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

जैसे कि वे 'सॉकेट' को अच्छी तरह से क्यों कहते हैं, यह धारणा कि आविष्कारकों को यह कॉल करने के लिए मिलता है कि वे जो भी चाहते हैं वह शायद वहां एक बड़ी भूमिका निभाता है। हालांकि, यह मेरी राय में एक बुरा नाम नहीं है :)


7

अब, यह क्या है?

एक सॉकेट, या "सॉकेट" कई चीजें हो सकती हैं:

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

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

आपको जानने की आवश्यकता नहीं है (और आप जानना भी नहीं चाहते हैं!) चाहे आप उसी कंप्यूटर पर या किसी अन्य कंप्यूटर पर किसी अन्य प्रोग्राम से बात करें, या उन कंप्यूटरों के बीच IPv4 या IPv6 नेटवर्क है, या शायद कुछ अन्य प्रोटोकॉल जो आपने कभी नहीं सुना है।

socketलाइब्रेरी फ़ंक्शन (या syscall) का नाम भी है जो "सॉकेट " बनाता है , जो एक विशेष प्रकार की फ़ाइल है (यूनिक्स में सब कुछ एक फ़ाइल है)।

यह कैसे तुलना करता है ...

सॉकेट पाइप और नाम पाइप के समान श्रेणी में आते हैं

एक पाइप एक पाठक और एक लेखक के बीच एक ही तरह से संचार का साधन है (दोनों ही प्रोग्राम) एक ही कंप्यूटर पर। यह डेटा की एक धारा का अनुकरण करता है (जैसे टीसीपी)।
यही है, पाइप के दृष्टिकोण से कोई व्यक्तिगत "संदेश" या "डेटा के ब्लॉक" मौजूद नहीं हैं। आप डेटा की किसी भी मात्रा को "एक छोर" में कॉपी कर सकते हैं, और कोई भी व्यक्ति किसी भी राशि के डेटा को पढ़ सकता है (जरूरी नहीं कि एक ही हो, और जरूरी नहीं कि एक ही बार में) "बाइट एंड ऑर्डर" में एक ही बाइट क्रम में हो। में धकेल दिया।

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

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

इसे ध्यान में रखते हुए, यह स्पष्ट है कि सॉकेट कुछ अधिक जटिल करते हैं और आम तौर पर पाइप की तुलना में अधिक ओवरहेड होते हैं (जो मूल रूप memcpyसे एक बफर से और एक साधारण से अधिक नहीं होते हैं !), लेकिन यदि आप स्थानीय सॉकेट बनाते हैं (यानी उसी पर) कंप्यूटर), ऑपरेटिंग सिस्टम आमतौर पर एक भारी अनुकूलित फास्ट पथ लागू करता है, इसलिए वास्तव में बहुत अंतर नहीं है।

नेटवर्क के संबंध में कभी-कभी अंतर-प्रक्रिया संचार का उल्लेख किया जाता है

हां, सॉकेट्स अंतर-प्रक्रिया संचार (साझा मेमोरी और पाइप विकल्प के उदाहरण होने का एक संभव तरीका) हैं। सभी एक ही समय में, उन्हें "नेटवर्किंग" के लिए उपयोग किया जा रहा है, जैसा कि ऊपर बताया गया है।


1

आईपी ​​पर udp या tcp के लिए,

सॉकेट पता IP पते और पोर्ट नंबर का संयोजन है।

एक IP पता इंटरनेट पर एक मशीन का पता है जैसे unix.stackexchange.com has address 198.252.206.140

हालांकि प्रत्येक मशीन को एक से अधिक सेवा प्रदान करने में सक्षम होना चाहिए, इसलिए अधिकांश मशीनें पोर्ट 80 पर http (वेब ​​पेज) प्रदान करेंगी, और पोर्ट 22 पर ssh, और आदि।

तो unix.stackexchange.com:80बंदरगाह 80के unix.stackexchange.com(सॉकेट) इस वेब साइट का उपयोग कर सकते है।

हालांकि सॉकेट के अन्य प्रकार हैं, नीचे टिप्पणी देखें।


5
tcp / ip केवल एक प्रकार का सॉकेट है। कुछ अन्य हैं जिनका tcp / ip से कोई लेना-देना नहीं है।
Psusi

कितने अलग-अलग प्रकार के सॉकेट हैं?
अब्दुल अल हज़्रेड

1
@AbdulAlHazred, मुझे चार सामान्य प्रकारों का पता है जिनका उपयोग आईपी नेटवर्किंग के साथ किया जाता है, वही IP6 के साथ, दो यूनिक्स के साथ और दो IPX के साथ हैं। मैंने ax25, atm, या appletalk को नहीं देखा है। वहाँ अन्य प्रोटोकॉल linux पर समर्थित हैं, और वहाँ प्रोटोकॉल linux समर्थन नहीं करता है। ज्यादातर मामलों में प्रत्येक प्रोटोकॉल में स्ट्रीम (tcp) और डेटाग्राम (udp) सॉकेट होते हैं। कच्चे सॉकेट्स भी आम हैं, और imcp में सॉकेट इंटरफ़ेस भी हो सकता है।
hildred

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

0

मेरा मानना ​​है कि आपने नेटवर्किंग के बारे में पूछा है। तो टीसीपी सेवाएं संचार के लिए बिंदु के रूप में सॉकेट का उपयोग करती हैं और एक आईपी पते, प्रोटोकॉल और पोर्ट नंबर से बनी होती हैं।

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