सॉकेट और पोर्ट के बीच अंतर


121

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


9
पोर्ट एक भौतिक पता है, जबकि सॉकेट एक ऑब्जेक्ट है।
सुपर उम

14
अगर कोई पैकेट किसी पोर्ट पर सॉकेट पर पॉकेट मारता है ...
user16764

जवाबों:


116

S एक सर्वर प्रोग्राम है: मान लीजिए कि यह एक HTTP सर्वर है, इसलिए यह HTTP के लिए प्रसिद्ध पोर्ट नंबर का उपयोग करेगा , जो कि 80 है। मैं इसे IP पते वाले होस्ट पर चलाता हूं 10.0.0.4, इसलिए यह कनेक्शनों के लिए सुनेगा 10.0.0.4:80(क्योंकि यही वह जगह है जहाँ हर कोई इसे खोजने की उम्मीद करेगा)।

एस के अंदर , मैं एक सॉकेट बनाने जा रहा हूं और इसे उस पते पर बांध10.0.0.4:80 दूंगा : अब, ओएस जानता है कि आने वाले कनेक्शन को उस विशेष सॉकेट के माध्यम से मेरी एस प्रक्रिया में भेजा जाना चाहिए ।

  • नेटस्टैट आउटपुट एक बार सॉकेट बाउंड होने के बाद:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    एनबी। स्थानीय पता सभी शून्य है क्योंकि S को इस बात की परवाह नहीं है कि उसके ग्राहक उस तक कैसे पहुँचे

एक बार जब एस में यह सॉकेट बंध जाता है, तो यह कनेक्शन स्वीकार करेगा - हर बार एक नया क्लाइंट कनेक्ट होने पर, acceptएक नया सॉकेट लौटाता है , जो उस क्लाइंट के लिए विशिष्ट है

  • एक बार कनेक्शन स्वीकृत होने के बाद netstat आउटपुट:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80कनेक्शन के एस के अंत का प्रतिनिधित्व करता है, और द्वारा लौटाए गए सॉकेट के साथ जुड़ा हुआ हैaccept
    • 10.0.0.5:55715कनेक्शन का क्लाइंट अंत है, और उस सॉकेट से जुड़ा है जिसे क्लाइंट कनेक्ट करने के लिए पास किया गया है । इस टीसीपी कनेक्शन पर पैकेट को रूट करने के अलावा सही प्रक्रिया के लिए क्लाइंट के पोर्ट का उपयोग नहीं किया जाता है: यह एपर्मेरल पोर्ट रेंज से क्लाइंट के कर्नेल द्वारा यादृच्छिक रूप से असाइन किया जाता है।

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

तो, लगभग:

  • आईपी ​​पता नेटवर्क पर मेजबानों के बीच रूटिंग के लिए है
  • पोर्ट होस्ट पर सही सॉकेट के लिए रूटिंग के लिए है
    • मैंने लगभग सही प्रक्रिया कहा है , लेकिन यह वास्तव में एक ही सॉकेट पर स्वीकार करने वाले कई (आमतौर पर बच्चे) प्रक्रियाओं के लिए संभव है ...
    • हालाँकि, जब भी कोई समवर्ती acceptकॉल करता है, तो वह केवल एक प्रक्रिया में ऐसा करता है, प्रत्येक आने वाले कनेक्शन का सॉकेट सर्वर के एक उदाहरण के लिए अद्वितीय होता है
  • सॉकेट वह वस्तु है जो एक प्रक्रिया एक विशेष कनेक्शन के बारे में ओएस से बात करने के लिए उपयोग करती है, बहुत कुछ फ़ाइल विवरणक की तरह
    • जैसा कि टिप्पणियों में उल्लेख किया गया है, सॉकेट्स के लिए बहुत सारे अन्य उपयोग हैं जो सभी बंदरगाहों का उपयोग नहीं करते हैं: उदाहरण के लिए सॉकेटपेयर एक साथ जुड़े सॉकेट्स की एक जोड़ी बनाता है जिनकी कोई भी संबोधित करने की योजना नहीं है - उस पाइप का उपयोग करने का एकमात्र तरीका है वह प्रक्रिया, जिसे कहा जाता है socketpair, उस प्रक्रिया का एक बच्चा होना और किसी को विरासत में देना या स्पष्ट रूप से उस प्रक्रिया में से एक सॉकेट को पारित करना

1
@ समर्थन यह उल्लेख करने लायक है कि सॉकेट्स आईपी ​​को इंगित करने की आवश्यकता नहीं है क्योंकि उत्तर इंगित करता है। यह ओपी के लिए बिल्कुल प्रासंगिक नहीं है, लेकिन सॉकेट परिवारों का स्पष्टीकरण इस उत्तर को पूरा करने में मदद करेगा।
हैफिकुक

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

11
यह बिल्कुल भी बेकार नहीं है
l --''''''--------- '' '' '' '' '' '' ''

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

3
यहां समस्या यह है कि आपकी उपमा गलत है। भूल जाओ कि भौतिक दुनिया में सॉकेट का क्या मतलब है - यह किसी और चीज के लिए एक रूपक नहीं है, बस एक विशिष्ट तकनीकी सॉफ्टवेयर अवधारणा के लिए एक तकनीकी शब्द है। यह भौतिक नेटवर्क पोर्ट्स या सॉकेट्स से भी दृढ़ता से संबंधित नहीं है - आपको बस इसे समझना होगा, इस डोमेन में, अपनी शर्तों पर एक अवधारणा के रूप में।
बेकार

49

अपार्टमेंट मशीन के रूप में अपनी मशीन के बारे में सोचें:

  • पोर्ट एक अपार्टमेंट नंबर है।

  • एक सॉकेट एक अपार्टमेंट का दरवाजा है।

  • आईपी ​​एड्रेस बिल्डिंग का स्ट्रीट एड्रेस होता है।


3
मैं इस सादृश्य को पसंद करता हूं, हालांकि अब मैं उस अपार्टमेंट के अंदर होने के बारे में सोच रहा हूं जो बहुत सारे दरवाजों के साथ एक अंतहीन गलियारे को देख रहा है। मैं बाहर नहीं निकल सकता। मैं बाहर नहीं निकल सकता! :)
डैनियल हॉलिनकेरे

1
@ कालेब A socket is the door of an apartment.लेकिन क्या एक बंदरगाह पर कई कुर्सियां ​​नहीं खुली हो सकती हैं?
सुहैल गुप्ता

3
@suhail कभी-कभी एक अपार्टमेंट में एक से अधिक दरवाजे होते हैं। उन सभी के पास एक ही अपार्टमेंट नंबर है, लेकिन वे अलग-अलग दरवाजे हैं।
कालेब

45

एक पोर्ट टीसीपी और यूडीपी प्रोटोकॉल में पते का हिस्सा है। इसका उपयोग ओएस की पहचान करने में मदद करने के लिए किया जाता है कि किस एप्लिकेशन को प्राप्त डेटा प्राप्त करना चाहिए। एक OS को टीसीपी और यूडीपी का समर्थन करने के लिए बंदरगाहों का समर्थन करना पड़ता है क्योंकि पोर्ट टीसीपी और यूडीपी का आंतरिक हिस्सा हैं।

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


एक सॉकेट अनिवार्य रूप से एक 4 टपल से बना है: स्रोत आईपी: पोर्ट-डेस्ट आईपी: पोर्ट।
टोनी द लायन

आप मतलब है कि पोर्ट केवल टीसीपी और यूडीपी प्रोटोकॉल में मौजूद है ??? Http और अन्य प्रोटोकॉल के बारे में क्या?
एच। अक्जन

HTTP एक एप्लीकेशन लेयर प्रोटोकॉल है जो TCP या UDP जैसे ट्रांसपोर्ट लेयर प्रोटोकॉल के शीर्ष पर चलता है। इसमें बंदरगाहों की अपनी अवधारणा नहीं है, यह उन्हें अंतर्निहित परिवहन परत प्रोटोकॉल से विरासत में मिला है।
डर्क होलसोप्पल

8

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


0

एक सॉकेट पोर्ट के लिए एक संचार पथ है। जब आप अपने प्रोग्राम को नेटवर्क पर संवाद करना चाहते हैं, तो आपने इसे पोर्ट को संबोधित करने का एक तरीका दिया है और यह एक सॉकेट बनाकर और इसे पोर्ट पर अटैच करके किया जाता है। मूल रूप से, सॉकेट = आईपी + पोर्ट सॉकेट पोर्ट + आईपी तक पहुंच प्रदान करते हैं


-1

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

इसलिए वास्तविक संचार के लिए आपको पोर्ट + आईपी की आवश्यकता होती है जिसे सॉकेट कहा जाता है।

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