यह मेरे संगठन के एक सॉफ्टवेयर इंजीनियर द्वारा उठाया गया प्रश्न था। मुझे व्यापक परिभाषा में दिलचस्पी है।
यह मेरे संगठन के एक सॉफ्टवेयर इंजीनियर द्वारा उठाया गया प्रश्न था। मुझे व्यापक परिभाषा में दिलचस्पी है।
जवाबों:
एक टीसीपी सॉकेट एक आईपी पॉइंट द्वारा परिभाषित एंडपॉइंट उदाहरण है और एक विशेष टीसीपी कनेक्शन या सुनने की स्थिति के संदर्भ में एक पोर्ट है।
एक पोर्ट एक वर्चुअलाइजेशन पहचानकर्ता है जो एक सेवा समापन बिंदु को परिभाषित करता है (जैसा कि एक सेवा उदाहरण के समापन बिंदु उर्फ सत्र पहचानकर्ता से अलग है)।
एक टीसीपी सॉकेट एक कनेक्शन नहीं है , यह एक विशिष्ट कनेक्शन का समापन बिंदु है।
किसी सेवा समापन बिंदु के लिए समवर्ती कनेक्शन हो सकते हैं , क्योंकि किसी कनेक्शन को उसके स्थानीय और दूरस्थ दोनों समापन बिंदुओं द्वारा पहचाना जाता है , जिससे ट्रैफ़िक को विशिष्ट सेवा आवृत्ति पर भेजा जा सकता है।
किसी दिए गए पते / पोर्ट संयोजन के लिए केवल एक श्रोता सॉकेट हो सकता है ।
यह एक दिलचस्प सवाल था जिसने मुझे कई चीजों को फिर से जांचने के लिए मजबूर किया, जो मुझे लगा कि मैं अंदर से जानता हूं। आपको लगता है कि "सॉकेट" जैसा नाम आत्म-व्याख्यात्मक होगा: यह स्पष्ट रूप से उस समापन बिंदु की कल्पना को चुनने के लिए चुना गया था जिसमें आप एक नेटवर्क केबल प्लग करते हैं, जिसमें मजबूत कार्यात्मक समानताएं होती हैं। फिर भी, नेटवर्क परिच्छेद में शब्द "सॉकेट" इतना सामान ले जाता है कि एक सावधानीपूर्वक पुन: परीक्षा आवश्यक है।
व्यापक संभव अर्थों में, एक बंदरगाह अंतर्ग्रहण या प्रग्रहण का एक बिंदु है। हालांकि एक नेटवर्किंग संदर्भ में उपयोग नहीं किया जाता है, फ्रांसीसी शब्द पोर्टे का शाब्दिक अर्थ है द्वार या प्रवेश द्वार , इस तथ्य पर जोर देना कि बंदरगाह परिवहन समापन बिंदु हैं चाहे आप डेटा या बड़े स्टील कंटेनर जहाज करते हैं।
इस चर्चा के उद्देश्य से मैं टीसीपी-आईपी नेटवर्क के संदर्भ में विचार को सीमित कर दूंगा। ओएसआई मॉडल बहुत अच्छी तरह से है, लेकिन पूरी तरह से कभी भी लागू नहीं किया गया है, बहुत कम व्यापक रूप से उच्च-यातायात उच्च-तनाव की स्थिति में तैनात किया गया है।
आईपी पते और पोर्ट के संयोजन को कड़ाई से समापन बिंदु के रूप में जाना जाता है और कभी-कभी सॉकेट कहा जाता है। यह उपयोग मूल TCP विनिर्देश RFC793 के साथ होता है।
एक टीसीपी कनेक्शन दो एंडपॉइंट्स उर्फ सॉकेट्स द्वारा परिभाषित किया गया है ।
एक समापन बिंदु (सॉकेट) एक नेटवर्क पते और एक बंदरगाह पहचानकर्ता के संयोजन से परिभाषित किया गया है । ध्यान दें कि पता / पोर्ट पूरी तरह से एक सॉकेट (इस पर बाद में) की पहचान नहीं करता है ।
बंदरगाहों का उद्देश्य किसी दिए गए नेटवर्क पते पर कई समापन बिंदुओं को अलग करना है। आप कह सकते हैं कि एक पोर्ट एक वर्चुअलाइज्ड एंडपॉइंट है। यह वर्चुअलाइजेशन एकल नेटवर्क इंटरफेस पर कई समवर्ती कनेक्शन को संभव बनाता है।
यह सॉकेट पेयर (क्लाइंट आईपी एड्रेस, क्लाइंट पोर्ट नंबर, सर्वर आईपी एड्रेस और सर्वर पोर्ट नंबर) से युक्त 4-ट्यूपल है जो दो अंत बिंदुओं को निर्दिष्ट करता है जो एक इंटरनेट में प्रत्येक टीसीपी कनेक्शन की विशिष्ट पहचान करता है। ( टीसीपी-आईपी इलस्ट्रेटेड वॉल्यूम 1 , डब्ल्यू रिचर्ड स्टीवंस)
अधिकांश सी-व्युत्पन्न भाषाओं में, टीसीपी कनेक्शन सॉकेट क्लास के एक उदाहरण पर विधियों का उपयोग करके स्थापित और हेरफेर किए जाते हैं। हालाँकि यह अमूर्तता के उच्च स्तर पर संचालित करने के लिए आम है, आमतौर पर एक NetworkStream वर्ग का एक उदाहरण, यह आम तौर पर एक सॉकेट ऑब्जेक्ट के संदर्भ को उजागर करता है। कोडर के लिए यह सॉकेट ऑब्जेक्ट कनेक्शन को दर्शाता है क्योंकि सॉकेट ऑब्जेक्ट के तरीकों का उपयोग करके कनेक्शन बनाया और हेरफेर किया जाता है।
C # में, TCP कनेक्शन स्थापित करने के लिए (मौजूदा श्रोता के लिए) सबसे पहले आप एक TcpClient बनाते हैं । यदि आप TcpClient कंस्ट्रक्टर के लिए एक समापन बिंदु निर्दिष्ट नहीं करते हैं तो यह चूक का उपयोग करता है - एक तरीका या कोई अन्य स्थानीय समापन बिंदु परिभाषित किया गया है। फिर आप अपने द्वारा बनाए गए इंस्टेंस पर कनेक्ट विधि को लागू करते हैं । इस पद्धति के लिए अन्य समापन बिंदु का वर्णन करने वाले पैरामीटर की आवश्यकता होती है।
यह सब थोड़ा भ्रमित है और आपको विश्वास दिलाता है कि एक सॉकेट एक कनेक्शन है, जो कि बैलॉक है। जब तक रिचर्ड डोरमैन ने सवाल नहीं पूछा तब तक मैं इस गलतफहमी के तहत काम कर रहा था।
बहुत अधिक पढ़ने और सोचने के बाद, मुझे अब यकीन हो गया है कि एक क्लास TcpConnection को एक कंस्ट्रक्टर के साथ करने के लिए बहुत अधिक समझ होगी जो दो तर्क, LocalEndpoint और RemoteEndpoint लेता है । आप शायद एक ही तर्क का समर्थन कर सकते हैं रिमोटइंडपॉइंट जब चूक स्थानीय समापन बिंदु के लिए स्वीकार्य होती हैं। यह मल्टीहोम कंप्यूटर पर अस्पष्ट है, लेकिन दूरस्थ छोर तक सबसे छोटे मार्ग के साथ इंटरफ़ेस का चयन करके मार्ग तालिका का उपयोग करके अस्पष्टता को हल किया जा सकता है।
अन्य मामलों में भी स्पष्टता बढ़ाई जाएगी। IP पते और पोर्ट के संयोजन से एक सॉकेट की पहचान नहीं की जाती है:
[...] स्थानीय और विदेशी पतों वाले सभी चार मूल्यों का उपयोग करते हुए आने वाले सेगमेंट में आने वाले सेक्शंस को स्थानीय और विदेशी एड्रेस: डेस्टिनेशन आईपी एड्रेस, डेस्टिनेशन पोर्ट नंबर, सोर्स आईपी एड्रेस और सोर्स पोर्ट नंबर। टीसीपी निर्धारित नहीं कर सकती है कि कौन सी प्रक्रिया केवल गंतव्य बंदरगाह को देखकर आने वाले सेगमेंट को प्राप्त करती है। इसके अलावा, [दिए गए पोर्ट नंबर] पर [विभिन्न] एंडपॉइंट्स में से केवल एक ही है जो आने वाले कनेक्शन अनुरोधों को प्राप्त करेगा, यह सुनने की स्थिति में एक है। (p255, TCP-IP इलस्ट्रेटेड वॉल्यूम 1 , डब्ल्यू। रिचर्ड स्टीवंस)
जैसा कि आप देख सकते हैं, यह संभव नहीं है, बल्कि एक नेटवर्क सेवा के लिए समान पते / पोर्ट के साथ कई सॉकेट होने की संभावना है, लेकिन किसी विशेष पते / पोर्ट संयोजन पर केवल एक श्रोता सॉकेट है। विशिष्ट पुस्तकालय कार्यान्वयन एक सॉकेट क्लास प्रस्तुत करते हैं, जिसका एक उदाहरण कनेक्शन बनाने और प्रबंधित करने के लिए उपयोग किया जाता है। यह बेहद दुर्भाग्यपूर्ण है, क्योंकि इससे भ्रम पैदा होता है और इससे दोनों अवधारणाओं का व्यापक टकराव होता है।
हाग्रवाल मुझ पर विश्वास नहीं करते (टिप्पणियां देखें) इसलिए यहां एक वास्तविक नमूना है। मैंने एक वेब ब्राउज़र को http://dilbert.com से जोड़ा और फिर चलाया netstat -an -p tcp
। आउटपुट की अंतिम छह पंक्तियों में इस तथ्य के दो उदाहरण हैं कि पता और पोर्ट विशिष्ट रूप से सॉकेट की पहचान करने के लिए पर्याप्त नहीं हैं। 192.168.1.3 (मेरे कार्य केंद्र) और 54.252.94.236:80 (दूरस्थ HTTP सर्वर) के बीच दो अलग-अलग कनेक्शन हैं
TCP 192.168.1.3:63240 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63241 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63242 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:63243 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:64161 65.54.225.168:443 ESTABLISHED
चूंकि एक सॉकेट एक कनेक्शन का समापन बिंदु है, इसलिए पते / पोर्ट संयोजन के साथ दो सॉकेट हैं और पते / पोर्ट संयोजन के 207.38.110.62:80
साथ दो और हैं 54.252.94.236:80
।
मुझे लगता है कि "पहचान" शब्द के मेरे बहुत सावधानी से प्रयोग से हगरावल की गलतफहमी पैदा होती है। मेरा मतलब है "पूरी तरह से, स्पष्ट और विशिष्ट पहचान"। उपरोक्त नमूने में पता / पोर्ट संयोजन के साथ दो समापन बिंदु हैं 54.252.94.236:80
। यदि आपके पास सभी पते और पोर्ट हैं, तो आपके पास इन सॉकेट को अलग-अलग बताने के लिए पर्याप्त जानकारी नहीं है। सॉकेट की पहचान करना पर्याप्त जानकारी नहीं है ।
RFC793 के खंड 2.7 के अनुच्छेद दो कहते हैं
एक कनेक्शन छोरों पर सॉकेट की जोड़ी द्वारा पूरी तरह से निर्दिष्ट है। एक स्थानीय सॉकेट कई कनेक्शन में विभिन्न विदेशी सॉकेट में भाग ले सकता है।
सॉकेट की यह परिभाषा एक प्रोग्रामिंग दृष्टिकोण से सहायक नहीं है क्योंकि यह सॉकेट ऑब्जेक्ट के समान नहीं है , जो किसी विशेष कनेक्शन का समापन बिंदु है। एक प्रोग्रामर के लिए, और इस सवाल के अधिकांश दर्शक प्रोग्रामर हैं, यह एक महत्वपूर्ण कार्यात्मक अंतर है।
एक सॉकेट में तीन चीजें होती हैं:
एक पोर्ट 1 और 65535 समावेशी के बीच एक संख्या है जो एक उपकरण में एक तार्किक गेट को दर्शाता है। क्लाइंट और सर्वर के बीच हर कनेक्शन के लिए एक यूनिक सॉकेट की आवश्यकता होती है।
उदाहरण के लिए:
एक सॉकेट दो नेटवर्क अनुप्रयोगों के बीच एक एकल कनेक्शन का प्रतिनिधित्व करता है। ये दो अनुप्रयोग नाममात्र के विभिन्न कंप्यूटरों पर चलते हैं, लेकिन सॉकेट्स का उपयोग किसी एकल कंप्यूटर पर इंटरप्रोसेस संचार के लिए भी किया जा सकता है। अनुप्रयोग एक दूसरे के साथ संचार के लिए कई सॉकेट बना सकते हैं। सॉकेट्स द्विदिश हैं, जिसका अर्थ है कि कनेक्शन के दोनों तरफ डेटा भेजने और प्राप्त करने में सक्षम है। इसलिए एक सॉकेट को सैद्धांतिक रूप से 2 से ऊपर की ओर ओएसआई मॉडल के किसी भी स्तर पर बनाया जा सकता है। प्रोग्रामर अक्सर परोक्ष रूप से नेटवर्क प्रोग्रामिंग में सॉकेट्स का उपयोग करते हैं। Winsock जैसी प्रोग्रामिंग लाइब्रेरी सॉकेट प्रोग्रामिंग के कई निम्न-स्तरीय विवरणों को छिपाती है। 1980 के दशक की शुरुआत से सॉकेट व्यापक उपयोग में हैं।
एक बंदरगाह नेटवर्क संचार के लिए एक समापन बिंदु या "चैनल" का प्रतिनिधित्व करता है। पोर्ट नंबर एक ही कंप्यूटर पर विभिन्न अनुप्रयोगों को एक दूसरे के साथ हस्तक्षेप किए बिना नेटवर्क संसाधनों का उपयोग करने की अनुमति देते हैं। पोर्ट नंबर सबसे अधिक नेटवर्क प्रोग्रामिंग में दिखाई देते हैं, विशेष रूप से सॉकेट प्रोग्रामिंग। कभी-कभी, हालांकि, पोर्ट नंबर आकस्मिक उपयोगकर्ता को दिखाई देते हैं। उदाहरण के लिए, कुछ वेब साइटें जो व्यक्ति इंटरनेट पर आते हैं, वे निम्न जैसे URL का उपयोग करते हैं:
http://www.mairie-metz.fr:8080/ इस उदाहरण में, संख्या 8080 वेब सर्वर से कनेक्ट करने के लिए वेब ब्राउज़र द्वारा उपयोग किए जाने वाले पोर्ट नंबर को संदर्भित करता है। आम तौर पर, एक वेब साइट पोर्ट संख्या 80 का उपयोग करती है और इस संख्या को URL के साथ शामिल नहीं किया जाना चाहिए (हालांकि यह हो सकता है)।
आईपी नेटवर्किंग में, पोर्ट नंबर सैद्धांतिक रूप से 0 से 65535 तक हो सकते हैं। सबसे लोकप्रिय नेटवर्क एप्लिकेशन, हालांकि, रेंज के निचले छोर पर पोर्ट नंबर का उपयोग करते हैं (जैसे HTTP के लिए 80)।
नोट: शब्द बंदरगाह नेटवर्क प्रौद्योगिकी के कई अन्य पहलुओं को भी संदर्भित करता है। एक पोर्ट धारावाहिक, समानांतर और USB पोर्ट जैसे परिधीय उपकरणों के लिए एक भौतिक कनेक्शन बिंदु को संदर्भित कर सकता है। शब्द बंदरगाह कुछ ईथरनेट कनेक्शन बिंदुओं को भी संदर्भित करता है, जैसे कि हब, स्विच या राउटर पर।
रेफरी http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm
रेफरी http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm
कुछ उपमा के साथ
हालाँकि बहुत सारी तकनीकी चीजें पहले से ही सॉकेट्स के लिए ऊपर दी गई हैं ... मैं अपना जवाब जोड़ना चाहूंगा, बस अगर कोई व्यक्ति अभी भी आईपी, पोर्ट और सॉकेट्स के बीच के अंतर को महसूस नहीं कर सकता है।
सर्वर S पर विचार करें ,
और उस व्यक्ति S से व्यक्ति X, Y, Z को एक सेवा (चैट सेवा) कहने की आवश्यकता है
फिर
आईपी एड्रेस बताता है -> कौन? क्या वह चैट सर्वर 'S' है जो X, Y, Z से संपर्क करना चाहता है
ठीक है, आपको "सर्वर कौन है" मिला
लेकिन मान लीजिए कि सर्वर 'S' अन्य लोगों को भी कुछ अन्य सेवाएं प्रदान कर रहा है, तो 'S' व्यक्ति A, B, C को भंडारण सेवाएं प्रदान करता है।
फिर
port बताता है ---> कौन सा सेवा आप (एक्स, वाई, जेड) की जरूरत है यानी चैट सेवा और न कि भंडारण सेवा
ठीक है .., आप यह जानने के लिए सर्वर बनाते हैं कि 'चैट सेवा' वही है जो आप चाहते हैं और भंडारण नहीं
परंतु
आप तीन हैं और सर्वर तीनों को अलग-अलग पहचान देना चाहता है
सॉकेट आता है
अब सॉकेट बताता है -> कौन सा? विशेष संबंध
यह कहना,
व्यक्ति X के लिए सॉकेट 1
व्यक्ति वाय के लिए सॉकेट 2
और व्यक्ति Z के लिए सॉकेट 3
मुझे आशा है कि यह किसी ऐसे व्यक्ति की मदद करता है जो अभी भी उलझन में था :)
सबसे पहले, मुझे लगता है कि हमें ए से बी तक एक पैकेट प्राप्त करने के बारे में थोड़ी समझ के साथ शुरू करना चाहिए।
नेटवर्क के लिए एक सामान्य परिभाषा OSI मॉडल का उपयोग है जो उद्देश्य के अनुसार नेटवर्क को कई परतों में अलग करता है। कुछ महत्वपूर्ण हैं, जिन्हें हम यहां कवर करेंगे:
टीसीपी में अन्य बातों के अलावा, बंदरगाहों की अवधारणा शामिल है । ये एक ही आईपी पते पर प्रभावी रूप से अलग-अलग डेटा एंडपॉइंट हैं, जिनसे इंटरनेट सॉकेट ( AF_INET
) बांध सकता है।
जैसा कि होता है, इसलिए यूडीपी , और अन्य परिवहन परत प्रोटोकॉल भी करता है। उन्हें तकनीकी रूप से पोर्ट की सुविधा की आवश्यकता नहीं है , लेकिन ये पोर्ट आउटगोइंग कनेक्शन प्राप्त करने के लिए एक ही कंप्यूटर का उपयोग करने के लिए ऊपर की परतों में कई अनुप्रयोगों के लिए एक रास्ता प्रदान करते हैं।
जो हमें एक टीसीपी या यूडीपी कनेक्शन की शारीरिक रचना के लिए लाता है। प्रत्येक में एक स्रोत बंदरगाह और पता, और एक लक्ष्य बंदरगाह और पता है। ऐसा इसलिए है कि किसी भी सत्र में, लक्ष्य एप्लिकेशन प्रतिक्रिया दे सकता है, साथ ही स्रोत से प्राप्त कर सकता है।
इसलिए बंदरगाह अनिवार्य रूप से एक ही पते पर कई समवर्ती कनेक्शनों को साझा करने की अनुमति देने का एक विनिर्देश-अनिवार्य तरीका है।
अब, हमें इस पर एक नज़र डालने की आवश्यकता है कि आप बाहरी दुनिया के लिए एप्लिकेशन के दृष्टिकोण से कैसे संवाद करते हैं। ऐसा करने के लिए, आपको अपने ऑपरेटिंग सिस्टम से विनम्रतापूर्वक पूछने की आवश्यकता है और चूंकि अधिकांश OS चीज़ों को करने के बर्कले सॉकेट्स के तरीके का समर्थन करते हैं, इसलिए हम देखते हैं कि हम इस तरह से एक आवेदन से बंदरगाहों को शामिल करने वाले सॉकेट बना सकते हैं:
int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...
महान! इसलिए sockaddr
संरचनाओं में, हम अपना पोर्ट और बेम निर्दिष्ट करेंगे! काम हो गया! खैर, लगभग, को छोड़कर:
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
यह भी संभव है। उरग, कि कार्यों में एक स्पैनर फेंका गया है!
ठीक है, वास्तव में यह नहीं है। हमें बस कुछ उपयुक्त परिभाषाएँ देनी होंगी:
/var/run/database.sock
।देखा! यह चीजों को ख़त्म करता है। तो हमारी योजना में तब,
तो वास्तव में एक पोर्ट इंटरनेट सॉकेट बनाने के लिए आवश्यकताओं का एक सबसेट है। दुर्भाग्य से, यह सिर्फ इतना होता है कि सॉकेट शब्द का अर्थ कई अलग-अलग विचारों पर लागू किया गया है। इसलिए मैं दिल से आपको सलाह देता हूं कि आप अपने अगले प्रोजेक्ट सॉकेट का नाम दें, बस भ्रम में जोड़ें;)
एक सॉकेट = आईपी पता + एक बंदरगाह (संख्यात्मक पता)
एक साथ वे एक मशीन पर एक नेटवर्क कनेक्शन के लिए एक अंतिम बिंदु की पहचान करते हैं। (क्या मैंने सिर्फ नेटवर्क 101 को फ्लैंक किया था?)
आम तौर पर, आपको बहुत सैद्धांतिक मिलेगा लेकिन इन दो अवधारणाओं को अलग करने का सबसे आसान तरीका इस प्रकार है:
सेवा प्राप्त करने के लिए, आपको एक सेवा संख्या चाहिए। इस सर्विस नंबर को पोर्ट कहा जाता है। इतना ही आसान।
उदाहरण के लिए, एक सेवा के रूप में HTTP 80 पोर्ट पर चल रहा है।
अब, कई लोग सेवा का अनुरोध कर सकते हैं और क्लाइंट-सर्वर से एक कनेक्शन स्थापित किया गया है। बहुत सारे कनेक्शन होंगे। प्रत्येक कनेक्शन क्लाइंट का प्रतिनिधित्व करता है। प्रत्येक कनेक्शन को बनाए रखने के लिए, सर्वर अपने क्लाइंट को बनाए रखने के लिए प्रति कनेक्शन एक सॉकेट बनाता है।
ऐसा लगता है कि 2 पीसी के बीच कनेक्शन के साथ सॉकेट की बराबरी करने के लिए बहुत सारे उत्तर हैं..जो मुझे लगता है कि बिल्कुल गलत है। एक सॉकेट हमेशा 1 पीसी पर समापन बिंदु रहा है , जो जुड़ा हो सकता है या नहीं भी हो सकता है - निश्चित रूप से हम सभी ने कुछ समय पर श्रोता या यूडीपी सॉकेट * का उपयोग किया है। महत्वपूर्ण हिस्सा यह है कि यह पता योग्य और सक्रिय है। 1.1.1.1:1234 को एक संदेश भेजना काम करने की संभावना नहीं है, क्योंकि उस समापन बिंदु के लिए कोई सॉकेट परिभाषित नहीं है।
सॉकेट्स प्रोटोकॉल विशिष्ट हैं - इसलिए विशिष्टता का कार्यान्वयन जो कि टीसीपी / आईपी और यूडीपी / आईपी दोनों * (ipaddress: port) का उपयोग करता है, उदाहरण के लिए, IPX (नेटवर्क, नोड और ... ahem, सॉकेट - - से अलग है। सॉकेट सामान्य "सॉकेट" शब्द से है। IPX सॉकेट संख्या आईपी पोर्ट के बराबर है)। लेकिन, वे सभी एक अद्वितीय पते योग्य समापन बिंदु प्रदान करते हैं।
चूंकि आईपी प्रमुख प्रोटोकॉल बन गया है, एक पोर्ट (नेटवर्किंग शब्दों में) या तो यूडीपी या टीसीपी पोर्ट नंबर के साथ समान हो गया है - जो सॉकेट पते का एक हिस्सा है।
UDP कनेक्शन-कम है - जिसका अर्थ है कि 2 समापन बिंदुओं के बीच कोई वर्चुअल सर्किट कभी नहीं बनाया गया है। हालाँकि, हम अभी भी समापन बिंदु के रूप में यूडीपी सॉकेट का उल्लेख करते हैं। एपीआई फ़ंक्शंस यह स्पष्ट करते हैं कि दोनों बस अलग-अलग प्रकार के सॉकेट हैं - SOCK_DGRAM
यूडीपी (बस एक संदेश भेजना) है और SOCK_STREAM
टीसीपी (एक वर्चुअल सर्किट बनाना) है।
तकनीकी रूप से, IP हेडर IP पता रखता है, और IP के ऊपर प्रोटोकॉल (UDP या TCP) पोर्ट नंबर रखता है। इससे अन्य प्रोटोकॉल (उदाहरण के लिए ICMP जिसमें कोई पोर्ट संख्या नहीं है, लेकिन IP पता जानकारी है) होना संभव है।
संक्षिप्त संक्षिप्त उत्तर।
एक पोर्ट को होस्ट के भीतर एक आंतरिक पते के रूप में वर्णित किया जा सकता है जो किसी प्रोग्राम या प्रक्रिया की पहचान करता है।
ए सॉकेट को एक प्रोग्रामिंग इंटरफ़ेस के रूप में वर्णित किया जा सकता है जो प्रोग्राम को इंटरनेट या स्थानीय स्तर पर अन्य कार्यक्रमों या प्रक्रियाओं के साथ संवाद करने की अनुमति देता है।
वे दो अलग-अलग डोमेन से शब्द हैं: 'पोर्ट' टीसीपी / आईपी नेटवर्किंग से एक अवधारणा है, 'सॉकेट' एक एपीआई (प्रोग्रामिंग) चीज है। एक 'सॉकेट' एक पोर्ट और एक होस्टनाम या नेटवर्क एडेप्टर बनाकर और उन्हें एक डेटा संरचना में संयोजित करके बनाया जाता है जिसका उपयोग आप डेटा भेजने या प्राप्त करने के लिए कर सकते हैं।
ये बुनियादी नेटवर्किंग अवधारणाएं हैं इसलिए मैं उन्हें विवरणों को समझने के लिए एक आसान और व्यापक तरीके से समझाऊंगा।
तो नेटवर्किंग में एक सॉकेट एक आभासी संचार उपकरण है जो एक जोड़ी (आईपी, पोर्ट) = (पता, सेवा) के लिए बाध्य है।
ध्यान दें:
आशा है कि यह आप पर संदेह करता है
उत्कृष्ट मतदान के जवाबों को पढ़ने के बाद, मैंने पाया कि निम्न बिंदु को मेरे लिए जोर देने की आवश्यकता है, जो नेटवर्क प्रोग्रामिंग के लिए एक नवागंतुक है:
टीसीपी-आईपी कनेक्शन एक दिशा को जोड़ने वाले द्वि-दिशात्मक मार्ग हैं: एक अन्य पते के साथ पोर्ट संयोजन: पोर्ट संयोजन। इसलिए, जब भी आप अपने स्थानीय मशीन से किसी दूरस्थ सर्वर पर पोर्ट (www.google.com:80 कहते हैं) के लिए एक कनेक्शन खोलते हैं, तो आप सर्वर के साथ सर्वर को भेजने की अनुमति देने के लिए, कनेक्शन के साथ अपनी मशीन पर एक नया पोर्ट नंबर भी जोड़ रहे हैं। चीजें आपके पास, (जैसे 127.0.0.1:65234)। आपकी मशीन के कनेक्शन को देखने के लिए नेटस्टैट का उपयोग करना मददगार हो सकता है:
> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 192.168.0.6.49871 17.172.232.57.5223 ESTABLISHED
...
123.132.213.231 # IP address
:1234 # port number
123.132.213.231:1234 # socket address
एक कनेक्शन तब होता है जब 2 सॉकेट एक साथ बंधे होते हैं।
सॉकेट एक विशेष प्रकार का फ़ाइल हैंडल है, जो ऑपरेटिंग सिस्टम से नेटवर्क सेवाओं का अनुरोध करने के लिए एक प्रक्रिया द्वारा उपयोग किया जाता है। एक सॉकेट पता ट्रिपल है: {प्रोटोकॉल, स्थानीय-पता, स्थानीय-प्रक्रिया} जहां स्थानीय प्रक्रिया को एक पोर्ट नंबर द्वारा पहचाना जाता है।
उदाहरण के लिए, टीसीपी / आईपी सूट में:
{tcp, 193.44.234.3, 12345}
एक वार्तालाप दो प्रक्रियाओं के बीच संचार लिंक है, इस प्रकार दो के बीच एक एसोसिएशन का चित्रण है। एक संघ 5-ट्यूपल है जो पूरी तरह से दो प्रक्रियाओं को निर्दिष्ट करता है जिसमें एक कनेक्शन होता है: {प्रोटोकॉल, स्थानीय-पता, स्थानीय-प्रक्रिया, विदेशी-पता, विदेशी-प्रक्रिया}
उदाहरण के लिए, टीसीपी / आईपी सूट में:
{tcp, १ ९३.४४.२४.३, १५००, १ ९ ३.४४.३४.५, २१}
एक मान्य एसोसिएशन हो सकता है।
एक आधा एसोसिएशन या तो है: {प्रोटोकॉल, स्थानीय-पता, स्थानीय-प्रक्रिया}
या
{प्रोटोकॉल, विदेशी पता, विदेशी प्रक्रिया}
जो प्रत्येक कनेक्शन का आधा हिस्सा निर्दिष्ट करता है।
अर्ध-एसोसिएशन को सॉकेट या ट्रांसपोर्ट एड्रेस भी कहा जाता है। यही है, एक सॉकेट संचार के लिए एक अंतिम बिंदु है जिसे नेटवर्क में नाम और संबोधित किया जा सकता है। सॉकेट इंटरफ़ेस संचार प्रोटोकॉल के लिए कई एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) में से एक है। एक सामान्य संचार प्रोग्रामिंग इंटरफ़ेस होने के लिए डिज़ाइन किया गया था, यह पहली बार 4.2BSD UNIX सिस्टम द्वारा पेश किया गया था। हालांकि इसे मानकीकृत नहीं किया गया है, यह एक वास्तविक उद्योग मानक बन गया है।
एक सॉकेट एक संचार समापन बिंदु है। एक सॉकेट सीधे टीसीपी / आईपी प्रोटोकॉल परिवार से संबंधित नहीं है, इसका उपयोग आपके सिस्टम द्वारा समर्थित किसी भी प्रोटोकॉल के साथ किया जा सकता है। सी सॉकेट एपीआई आपको पहले सिस्टम से एक खाली सॉकेट ऑब्जेक्ट प्राप्त करने की उम्मीद करता है जिसे आप या तो स्थानीय सॉकेट पते से जोड़ सकते हैं (कनेक्शन-कम प्रोटोकॉल के लिए आने वाले ट्रैफ़िक को सीधे प्राप्त करने के लिए या कनेक्शन-उन्मुख प्रोटोकॉल के लिए आने वाले कनेक्शन अनुरोधों को स्वीकार करने के लिए। या जिसे आप दूरस्थ सॉकेट पते (किसी भी तरह के प्रोटोकॉल के लिए) से जोड़ सकते हैं। आप दोनों को भी कर सकते हैं यदि आप दोनों को नियंत्रित करना चाहते हैं, तो स्थानीय सॉकेट एड्रेस एक सॉकेट से जुड़ा होता है और रिमोट सॉकेट एड्रेस एक सॉकेट से जुड़ा होता है। कनेक्शन-कम प्रोटोकॉल के लिए एक सॉकेट कनेक्ट करना और भी वैकल्पिक है लेकिन यदि आप ऐसा नहीं करते हैं, तो आप ' आपको प्रत्येक पैकेट के साथ गंतव्य का पता भी पास करना होगा जिसे आप सॉकेट के ऊपर भेजना चाहते हैं क्योंकि सॉकेट को कैसे पता चलेगा कि यह डेटा कहाँ भेजा जाना है? फायदा यह है कि आप अलग-अलग सॉकेट पते पर पैकेट भेजने के लिए एकल सॉकेट का उपयोग कर सकते हैं। एक बार जब आप अपने सॉकेट को कॉन्फ़िगर कर लेते हैं और शायद कनेक्ट हो जाते हैं, तो इसे द्वि-दिशात्मक संचार पाइप मानते हैं। आप इसका उपयोग कुछ डेस्टिनेशन पर डेटा पास करने के लिए कर सकते हैं और कुछ डेस्टिनेशन इसका उपयोग आपके पास डेटा वापस करने के लिए कर सकते हैं। एक सॉकेट के लिए आप जो लिखते हैं वह बाहर भेजा जाता है और जो प्राप्त हुआ है वह पढ़ने के लिए उपलब्ध है। आप इसका उपयोग कुछ डेस्टिनेशन पर डेटा पास करने के लिए कर सकते हैं और कुछ डेस्टिनेशन इसका उपयोग आपके पास डेटा वापस करने के लिए कर सकते हैं। एक सॉकेट के लिए आप जो लिखते हैं वह बाहर भेजा जाता है और जो प्राप्त हुआ है वह पढ़ने के लिए उपलब्ध है। आप इसका उपयोग कुछ डेस्टिनेशन पर डेटा पास करने के लिए कर सकते हैं और कुछ डेस्टिनेशन इसका उपयोग आपके पास डेटा वापस करने के लिए कर सकते हैं। एक सॉकेट के लिए आप जो लिखते हैं वह बाहर भेजा जाता है और जो प्राप्त हुआ है वह पढ़ने के लिए उपलब्ध है।
दूसरी ओर पोर्ट कुछ ऐसे हैं जो केवल टीसीपी / आईपी प्रोटोकॉल स्टैक के कुछ प्रोटोकॉल हैं। टीसीपी और यूडीपी पैकेट में पोर्ट होते हैं। एक पोर्ट सिर्फ एक साधारण संख्या है। सोर्स पोर्ट और डेस्टिनेशन पोर्ट का संयोजन दो मेजबानों के बीच एक संचार चैनल की पहचान करता है। उदाहरण के लिए आपके पास एक सर्वर हो सकता है जो दोनों एक साधारण HTTP सर्वर और एक साधारण एफ़टीपी सर्वर होगा। यदि अब कोई पैकेट उस सर्वर के पते के लिए आता है, तो यह कैसे पता चलेगा कि वह HTTP या FTP सर्वर का पैकेट है? खैर, यह पता चलेगा कि HTTP सर्वर 80 पोर्ट पर और FTP सर्वर 21 पोर्ट पर चलेगा, इसलिए यदि पैकेट एक गंतव्य पोर्ट 80 के साथ आता है, तो यह HTTP सर्वर के लिए है न कि एफ़टीपी सर्वर के लिए। इसके अलावा पैकेट में एक स्रोत पोर्ट होता है क्योंकि ऐसे स्रोत पोर्ट के बिना, एक सर्वर एक समय में केवल एक आईपी पते के लिए एक कनेक्शन हो सकता है। स्रोत पोर्ट किसी सर्वर के लिए अन्यथा समान कनेक्शन को अलग करना संभव बनाता है: वे सभी एक ही गंतव्य पोर्ट, उदाहरण के लिए पोर्ट 80, एक ही गंतव्य आईपी (सर्वर का आईपी), और एक ही स्रोत आईपी, जैसा कि वे सभी से आते हैं। एक ही क्लाइंट, लेकिन जैसा कि उनके पास एक अलग स्रोत पोर्ट है, सर्वर उन्हें एक दूसरे से अलग कर सकता है। और जब सर्वर वापस जवाब भेजता है, तो यह पोर्ट से अनुरोध करने के लिए आया था, इस तरह से ग्राहक एक ही सर्वर से प्राप्त विभिन्न उत्तरों को भी अलग कर सकता है।
बंदरगाह सबसे आसान हिस्सा था, यह एक सॉकेट के लिए एक अद्वितीय पहचानकर्ता है। एक सॉकेट एक ऐसी प्रक्रिया है जिसका उपयोग कनेक्शन स्थापित करने और एक दूसरे के साथ संवाद करने के लिए किया जा सकता है। टाल जेफ के पास एक बेहतरीन टेलीफोन सादृश्य था, जो सही नहीं था, इसलिए मैंने इसे ठीक करने का फैसला किया:
netstat
कुछ समय एक प्रदर्शन पर एक नज़र है । सुनने वाले सॉकेट से स्वीकार किए गए सभी सॉकेट समान पोर्ट साझा करते हैं। एक पोर्ट के लिए एर्गो एक विशिष्ट पहचानकर्ता नहीं है।
एक एप्लिकेशन में नेटवर्क (क्लाइंट-सर्वर जोड़ी) पर संचार करने वाली प्रक्रियाओं की जोड़ी होती है। ये प्रक्रिया सॉकेट नामक एक सॉफ्टवेयर इंटरफेस के माध्यम से और नेटवर्क से संदेश भेजती और प्राप्त करती है । "कंप्यूटर नेटवर्किंग: टॉप डाउन अप्रोच" पुस्तक में प्रस्तुत सादृश्य को ध्यान में रखते हुए। एक घर है जो दूसरे घर के साथ संवाद करना चाहता है। यहां, घर एक प्रक्रिया के अनुरूप है, और एक सॉकेट के लिए दरवाजा है। भेजने की प्रक्रिया मानती है कि दरवाजे के दूसरी तरफ एक बुनियादी ढांचा है जो डेटा को गंतव्य तक पहुंचाएगा। एक बार संदेश दूसरी तरफ आने के बाद, यह रिसीवर के दरवाजे (सॉकेट) से होकर घर (प्रक्रिया) में जाता है। उसी पुस्तक का यह चित्रण आपकी मदद कर सकता है:
सॉकेट्स परिवहन परत का हिस्सा हैं, जो अनुप्रयोगों को तार्किक संचार प्रदान करता है। इसका अर्थ है कि अनुप्रयोग के दृष्टिकोण से दोनों मेजबान एक दूसरे से सीधे जुड़े हुए हैं, भले ही उनके बीच कई राउटर और / या स्विच हैं। इस प्रकार एक सॉकेट स्वयं एक कनेक्शन नहीं है, यह कनेक्शन का अंतिम बिंदु है। ट्रांसपोर्ट लेयर प्रोटोकॉल केवल मेजबानों पर लागू किए जाते हैं, न कि मध्यवर्ती राउटर पर।
बंदरगाहोंएक मशीन को आंतरिक पता देने के साधन प्रदान करें। प्राथमिक प्रक्रिया यह कई प्रक्रियाओं को अन्य प्रक्रियाओं (उनके डेटा) के साथ हस्तक्षेप किए बिना नेटवर्क पर डेटा भेजने और प्राप्त करने की अनुमति देती है। सभी सॉकेट पोर्ट नंबर के साथ दिए गए हैं। जब कोई खंड होस्ट में आता है, तो परिवहन परत खंड के गंतव्य पोर्ट संख्या की जांच करती है। यह तब सेगमेंट को संबंधित सॉकेट के लिए आगे की ओर करता है। ट्रांसपोर्ट लेयर सेगमेंट में सही सॉकेट में डेटा पहुंचाने के इस काम को डे-मल्टीप्लेक्सिंग कहा जाता है । तब खंड का डेटा सॉकेट से जुड़ी प्रक्रिया में भेजा जाता है।
सॉकेट आपके सॉफ़्टवेयर में एक संरचना है। यह अधिक-या-कम फ़ाइल है; इसमें पढ़ने और लिखने जैसे ऑपरेशन हैं। यह एक भौतिक चीज नहीं है; यह आपके सॉफ़्टवेयर के लिए भौतिक चीज़ों को संदर्भित करने का एक तरीका है।
पोर्ट एक डिवाइस जैसी चीज है। प्रत्येक मेजबान के पास एक या एक से अधिक नेटवर्क हैं (वे भौतिक हैं); एक मेजबान के पास प्रत्येक नेटवर्क पर एक पता है। प्रत्येक पते में हजारों पोर्ट हो सकते हैं।
एक सॉकेट केवल एक पते पर पोर्ट का उपयोग कर सकता है। सॉकेट फ़ाइल सिस्टम I / O के लिए एक उपकरण आवंटित करने की तरह लगभग बंदरगाह आवंटित करता है। एक बार पोर्ट आवंटित हो जाने के बाद, कोई अन्य सॉकेट उस पोर्ट से कनेक्ट नहीं हो सकता है। सॉकेट बंद होने पर पोर्ट को मुक्त कर दिया जाएगा।
टीसीपी / आईपी शब्दावली पर एक नज़र डालें ।
एक सॉकेट नेटवर्क पर चलने वाले दो कार्यक्रमों के बीच दो-तरफ़ा संचार लिंक का एक समापन बिंदु है। एक सॉकेट एक पोर्ट नंबर से जुड़ा होता है ताकि टीसीपी लेयर उस एप्लिकेशन की पहचान कर सके जिसे डेटा भेजा जाना है।
पोर्ट और सॉकेट की तुलना बैंक शाखा से की जा सकती है।
"बैंक" की इमारत संख्या आईपी पते के अनुरूप है। एक बैंक को अलग-अलग सेक्शन मिले हैं जैसे:
तो 1 (बचत खाता विभाग), 2 (व्यक्तिगत ऋण विभाग), 3 (गृह ऋण विभाग) और 4 (शिकायत विभाग) पोर्ट हैं।
अब हम कहते हैं कि आप एक बचत खाता खोलने के लिए जाते हैं, आप बैंक (आईपी पते) पर जाते हैं, फिर आप "बचत खाता विभाग" (पोर्ट नंबर 1) पर जाते हैं, फिर आप "बचत खाता विभाग" के तहत काम करने वाले कर्मचारियों में से एक से मिलते हैं। "। खाता खोलने के लिए हम उसे SAVINGACCOUNT_EMPLOYEE1 कहते हैं।
SAVINGACCOUNT_EMPLOYEE1 आपका सॉकेट डिस्क्रिप्टर है, इसलिए SAVINGACCOUNT_EMPLOYEEN से SAVINGACCOUNT_EMPLOYEE1 हो सकता है। ये सभी सॉकेट डिस्क्रिप्टर हैं।
इसी तरह, अन्य विभागों में उनके अधीन काम करने वाले कर्मचारी होंगे और वे सॉकेट के अनुरूप होते हैं।
सॉकेट एक डेटा I / O तंत्र है। एक पोर्ट एक संचार प्रोटोकॉल की एक संविदात्मक अवधारणा है । एक सॉकेट बिना पोर्ट के मौजूद हो सकता है। एक पोर्ट एक विशिष्ट सॉकेट को मिटा सकता है (उदाहरण के लिए यदि एक ही पोर्ट पर कई सॉकेट सक्रिय हैं, जिसे कुछ प्रोटोकॉल के लिए अनुमति दी जा सकती है)।
एक पोर्ट का उपयोग यह निर्धारित करने के लिए किया जाता है कि रिसीवर को कितने प्रोटोकॉल के साथ पैकेट को रूट करना चाहिए, लेकिन यह हमेशा आवश्यक नहीं होता है और प्राप्त सॉकेट का चयन अन्य तरीकों से किया जा सकता है - एक पोर्ट पूरी तरह से प्रोटोकॉल हैंडलर द्वारा उपयोग किया जाने वाला उपकरण है नेटवर्क सबसिस्टम। उदाहरण के लिए, यदि कोई प्रोटोकॉल पोर्ट का उपयोग नहीं करता है, तो पैकेट सभी सुनने वाले सॉकेट या किसी भी सॉकेट में जा सकते हैं।
सापेक्ष टीसीपी / आईपी शब्दावली जो मुझे लगता है कि प्रश्न द्वारा निहित है। आम आदमी की शर्तों में:
PORT किसी विशेष ज़िप कोड में किसी विशेष घर के टेलीफोन नंबर की तरह होता है। शहर के ज़िप कोड को शहर के आईपी पते और उस शहर के सभी घरों के रूप में सोचा जा सकता है।
दूसरी ओर एक SOCKET अधिक है जैसे कि एक जोड़ी घरों के टेलीफोन के बीच एक स्थापित फोन कॉल एक दूसरे से बात कर रहा है। उन कॉल को एक ही शहर में घरों के बीच या अलग-अलग कस्बों में दो घरों में स्थापित किया जा सकता है। यह एक दूसरे से बात करने वाले फोन की जोड़ी के बीच अस्थायी रूप से स्थापित मार्ग है जो SOCKET है।
एक व्यापक अर्थ में, सॉकेट - सिर्फ एक ऐसा सॉकेट है, जो आपके इलेक्ट्रिकल, केबल या टेलीफोन सॉकेट की तरह है। एक बिंदु जहां "आवश्यक सामान" (शक्ति, संकेत, सूचना) बाहर जा सकता है और अंदर से आ सकता है। यह बहुत सारे विस्तृत सामान को छुपाता है, जिसे "आवश्यक सामान" के उपयोग के लिए आवश्यक नहीं है। सॉफ्टवेयर पार्लियामेंट में, यह दो संस्थाओं के बीच संचार के तंत्र को परिभाषित करने का एक सामान्य तरीका प्रदान करता है (वे संस्थाएं कुछ भी हो सकती हैं - दो एप्लिकेशन, दो शारीरिक रूप से अलग-अलग डिवाइस, एक ओएस के भीतर उपयोगकर्ता और कर्नेल स्थान, आदि)
एक पोर्ट एक समापन बिंदु भेदभाव करनेवाला है। यह एक एंडपॉइंट को दूसरे से अलग करता है। नेटवर्किंग स्तर पर, यह एक एप्लिकेशन को दूसरे से अलग करता है, ताकि नेटवर्किंग स्टैक सूचना को उपयुक्त एप्लिकेशन तक पहुंचा सके।
इस प्रश्न के पहले से ही सैद्धांतिक उत्तर दिए गए हैं। मैं इस प्रश्न का एक व्यावहारिक उदाहरण देना चाहूंगा, जिससे सॉकेट और पोर्ट के बारे में आपकी समझ साफ हो जाएगी।
मैंने इसे यहां पाया
यह उदाहरण आपको विली जैसी वेबसाइट से जुड़ने की प्रक्रिया से गुजरेगा। आप अपना वेब ब्राउज़र (जैसे मोज़िला फ़ायरफ़ॉक्स) खोलेंगे और एड्रेस बार में www.wiley.com टाइप करेंगे। आपका वेब ब्राउज़र अपने आईपी पते की पहचान करने के लिए www.wiley.com नाम देखने के लिए एक डोमेन नेम सिस्टम (DNS) सर्वर का उपयोग करता है। इस उदाहरण के लिए, पता 192.0.2.100 है।
फ़ायरफ़ॉक्स 192.0.2.100 पते पर और पोर्ट के लिए एक कनेक्शन बनाता है जहां एप्लिकेशन लेयर वेब सर्वर चल रहा है। फ़ायरफ़ॉक्स जानता है कि किस पोर्ट की उम्मीद है क्योंकि यह एक प्रसिद्ध पोर्ट है। एक वेब सर्वर के लिए प्रसिद्ध बंदरगाह टीसीपी पोर्ट 80 है।
गंतव्य सॉकेट जिसे फ़ायरफ़ॉक्स कनेक्ट करने का प्रयास करता है, सॉकेट के रूप में लिखा जाता है: पोर्ट, या इस उदाहरण में, 192.0.2.100:80। यह कनेक्ट का सर्वर पक्ष है, लेकिन सर्वर को यह जानने की आवश्यकता है कि आप मोज़िला फ़ायरफ़ॉक्स में वेब पेज को कहां भेजना चाहते हैं, इसलिए आपके पास कनेक्शन के क्लाइंट पक्ष के लिए एक सॉकेट भी है।
क्लाइंट साइड कनेक्शन आपके आईपी पते से बना है, जैसे कि 192.168.1.25, और एक बेतरतीब ढंग से चुना गया डायनेमिक पोर्ट नंबर। फ़ायरफ़ॉक्स से जुड़ा सॉकेट 192.168.1.25:49175 जैसा दिखता है। क्योंकि वेब सर्वर TCP पोर्ट 80 पर काम करते हैं, ये दोनों सॉकेट्स TCP सॉकेट हैं, जबकि यदि आप UDP पोर्ट पर काम करने वाले सर्वर से कनेक्ट कर रहे थे, तो सर्वर और क्लाइंट सॉकेट दोनों ही UDP सॉकेट होंगे।
सॉकेट एक गर्भपात है जो डेटा I / O के लिए उपयोगकर्ता अनुप्रयोगों को कर्नेल द्वारा प्रदान किया जाता है। एक सॉकेट प्रकार प्रोटोकॉल द्वारा इसकी हैंडलिंग, एक IPC संचार आदि द्वारा परिभाषित किया जाता है। इसलिए यदि कोई टीसीपी सॉकेट बनाता है तो वह सॉकेट में डेटा पढ़ने और साधारण तरीकों से डेटा लिखने और टीसीपी रूपांतरण जैसे निचले स्तर के प्रोटोकॉल से निपटने के लिए जोड़तोड़ कर सकता है और पैकेट को निचले स्तर के नेटवर्क प्रोटोकॉल में भेजने से कर्नेल में विशेष सॉकेट कार्यान्वयन होता है। लाभ यह है कि उपयोगकर्ता को प्रोटोकॉल विशिष्ट नाइट्रिगेट्स को संभालने के बारे में चिंता करने की ज़रूरत नहीं है और इसे सामान्य बफर की तरह सॉकेट में डेटा को पढ़ना और लिखना चाहिए। IPC के मामले में भी यही सच है, उपयोगकर्ता सिर्फ सॉकेट में डेटा को पढ़ता और लिखता है और बनाए गए सॉकेट के प्रकार के आधार पर सभी निचले स्तर के विवरणों को संभालता है।
आईपी के साथ मिलकर पोर्ट सॉकेट को एक पता प्रदान करने जैसा है, हालांकि यह आवश्यक नहीं है, लेकिन यह नेटवर्क संचार में मदद करता है।
एक एकल पोर्ट में एक या एक से अधिक सॉकेट हो सकते हैं जो विभिन्न बाहरी आईपी के साथ कई विद्युत आउटलेट की तरह जुड़े होते हैं।
TCP 192.168.100.2:9001 155.94.246.179:39255 ESTABLISHED 1312
TCP 192.168.100.2:9001 171.25.193.9:61832 ESTABLISHED 1312
TCP 192.168.100.2:9001 178.62.199.226:37912 ESTABLISHED 1312
TCP 192.168.100.2:9001 188.193.64.150:40900 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.23.194.149:43970 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.49.73.11:38842 ESTABLISHED 1312
सॉकेट नेटवर्किंग समापन बिंदु का SW अमूर्त है, जिसका उपयोग अनुप्रयोग के लिए इंटरफ़ेस के रूप में किया जाता है। जावा में, सी # यह ऑब्जेक्ट द्वारा दर्शाया गया है, लिनक्स में, यूनिक्स यह एक फाइल है।
पोर्ट एक सॉकेट की एक संपत्ति है जिसे आपने निर्दिष्ट किया है यदि आप संचार स्थापित करना चाहते हैं। एक सॉकेट से पैकेट प्राप्त करने के लिए आपको इसे विशिष्ट स्थानीय पोर्ट और NIC (स्थानीय IP पते के साथ) या सभी NIC (INADDR_ANY को बाइंड कॉल में निर्दिष्ट किया गया है) से बाँधना होगा। पैकेट भेजने के लिए, आपको रिमोट सॉकेट के पोर्ट और आईपी को निर्दिष्ट करना होगा।
सॉकेट मूल रूप से नेटवर्क संचार के लिए एक समापन बिंदु है, जिसमें कम से कम एक आईपी-पता और एक पोर्ट होता है। जावा / सी # में एक सॉकेट एक दो तरफ़ा कनेक्शन के एक तरफ का उच्च स्तर का कार्यान्वयन है।
इसके अलावा, जावा प्रलेखन में एक परिभाषा ।
बंदरगाह:
एक पोर्ट धारावाहिक, समानांतर और USB पोर्ट जैसे परिधीय उपकरणों के लिए एक भौतिक कनेक्शन बिंदु को संदर्भित कर सकता है। शब्द बंदरगाह कुछ ईथरनेट कनेक्शन बिंदुओं को भी संदर्भित करता है, जो हब, स्विच, या राउटर के समान हैं।
सॉकेट:
एक सॉकेट दो नेटवर्क अनुप्रयोगों के बीच एक एकल कनेक्शन का प्रतिनिधित्व करता है। ये दो अनुप्रयोग नाममात्र के अलग-अलग कंप्यूटरों पर चलते हैं, लेकिन सॉकेट्स का उपयोग किसी एकल कंप्यूटर पर इंटरप्रोसेस संचार के लिए भी किया जा सकता है। अनुप्रयोग एक दूसरे के साथ संचार के लिए कई सॉकेट बना सकते हैं। सॉकेट्स द्विदिश हैं, जिसका अर्थ है कि कनेक्शन के दोनों तरफ डेटा भेजने और प्राप्त करने में सक्षम है।
एक पोर्ट IP नेटवर्क प्रोटोकॉल के लिए TCP और UDP ट्रांसपोर्ट में एक संचार समापन बिंदु को दर्शाता है। सॉकेट एक सॉफ़्टवेयर एब्स्ट्रेक्शन है जो आमतौर पर इन प्रोटोकॉल (सॉकेट एपीआई) के कार्यान्वयन में उपयोग किया जाता है। एक वैकल्पिक कार्यान्वयन XTI / TLI API है।
यह सभी देखें:
स्टीवंस, डब्ल्यूआर 1998, यूनिक्स नेटवर्क प्रोग्रामिंग: नेटवर्किंग एपीआई: सॉकेट्स और एक्सटीआई; खंड 1, अप्रेंटिस हॉल।
स्टीवंस, डब्ल्यूआर, 1994, टीसीपी / आईपी इलस्ट्रेटेड, वॉल्यूम 1: प्रोटोकॉल, एडिसन-वेस्ले।