जेनेरिक सॉकेट क्या है और यह नेटवर्क डिवाइस से कैसे संबंधित है?


9

मैं यह समझने की कोशिश कर रहा हूं कि लिनक्स के तहत नेटवर्क ड्राइवर कैसे काम करते हैं। इस प्रश्नोत्तर ने दिखाया कि लिनक्स में नेटवर्क डिवाइस एक डिवाइस फ़ाइल द्वारा प्रतिनिधित्व नहीं करता है। यह बताता है कि नेटवर्क ड्राइवर के साथ काम करते हैं sockets

उदाहरण के लिए, यह संदर्भ ioctlकॉल के माध्यम से नेटवर्क उपकरणों को सेटअप करने का तरीका बताता है । ioctlहालाँकि , एक फाइल डिस्क्रिप्टर की जरूरत है , यह देखते हुए कि नेटवर्क ड्राइवरों के लिए कोई डिवाइस फाइल नहीं है, केवल फाइल डिस्क्रिप्टर जिसे पास किया जा सकता है वह सॉकेट से एक है।

यह मुझे सवाल के बिंदु पर लाता है। अब तक यह नेटवर्क इंटरफ़ेस की तरह लगता है, जो एक भौतिक नेटवर्क कार्ड का एक सॉफ्टवेयर प्रतिनिधित्व होगा, वास्तव में एक सॉकेट के लिए एक अवर वस्तु है।

  • लेकिन इस अमूर्त अर्थ में एक सॉकेट क्या है, क्या यह एक डिवाइस फ़ाइल का सिर्फ दूसरा नाम है जो पुश नोटिफिकेशन का समर्थन करता है? मुझे पता है कि किसी यूजरस्पेस ऐप द्वारा एक नेटवर्क इंटरफ़ेस पर पोर्ट जोड़ी में बंधे कनेक्शन बिंदुओं के लिए टीसीपी सॉकेट्स हैं। मुझे नेटवर्क इंटरफ़ेस सेट करने के लिए एक शर्त के रूप में एक सॉकेट समझ में नहीं आता है।

  • क्या लिनक्स पर एक नेटवर्क इंटरफ़ेस (जैसे eth0सूचीबद्ध ifconfig) सॉकेट के बिना मौजूद है?

  • क्या ifconfigया कुछ नेटवर्क मैनेजर डेमन हमें नेटवर्क इंटरफ़ेस विकल्प सेट करने की अनुमति देने के लिए एक सॉकेट खुला रखते हैं?


जवाबों:


6

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

लेकिन उन उपकरणों (बॉड दर आदि सेट) को कॉन्फ़िगर करने के लिए एक तरीके की आवश्यकता थी, और उसके लिए, ioctl कॉल का आविष्कार किया गया था। यह केवल एक डेटा संरचना को पारित करता है जो डिवाइस के लिए विशिष्ट है और कर्नेल के लिए उपयोग किए जाने वाले I / O नियंत्रण, और उसी डेटा संरचना में परिणाम वापस मिलता है, इसलिए यह एक बहुत ही सामान्य एक्स्टेंसिबल API है और इसका उपयोग बहुत सारी चीजों के लिए किया जा सकता है ।

अब, नेटवर्क ऑपरेशन कैसे फिट होते हैं? एक विशिष्ट नेटवर्क सर्वर एप्लिकेशन कुछ नेटवर्क पते से जुड़ना चाहता है , एक निश्चित पोर्ट (जैसे HTTP के लिए 80, या ssh के लिए 22) पर सुनता है , और यदि कोई क्लाइंट कनेक्ट होता है , तो वह इस क्लाइंट से डेटा भेजना और प्राप्त करना चाहता है । और ग्राहक के लिए दोहरी कार्रवाई।

यह स्पष्ट नहीं है कि इसे फ़ाइल संचालन के साथ कैसे फिट किया जाए (हालांकि यह किया जा सकता है, योजना 9 देखें ), यही कारण है कि यूनिक्स के डिजाइनरों ने एक नया एपीआई: सॉकेट का आविष्कार किया । आप के लिए धारा 2 आदमी पन्नों में जानकारी प्राप्त कर सकते socket, bind, listen, connect, sendऔर recv। ध्यान दें कि यह I / O API फ़ाइल से अलग है, लेकिन socketकॉल फिर भी फ़ाइल डिस्क्रिप्टर देता है। वेब पर सॉकेट का उपयोग करने के लिए कई ट्यूटोरियल हैं, Google थोड़ा सा।

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

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

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

लेकिन एनआई को कॉन्फ़िगर करने का एक तरीका होना चाहिए, जैसे आपको ब्लॉक और चरित्र उपकरणों को कॉन्फ़िगर करने का एक तरीका चाहिए। और चूंकि सॉकेट्स ने पहले ही एक फाइल डिस्क्रिप्टर लौटा दिया था, इसलिए ioctlउस फाइल डिस्क्रिप्टर पर सिर्फ अनुमति देना कुछ हद तक तर्कसंगत था । यह आपके द्वारा लिंक किए गए netdevice इंटरफ़ेस है।

एक समान तरीके से सिस्टम कॉल के कुछ अन्य दुरुपयोग हैं, उदाहरण के लिए पैकेट फ़िल्टरिंग, पैकेट कैप्चर आदि।

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


Sockets as the network communications API were already not represented in the filesystem, so the NI didn't get one, either.क्या यह एक टाइपो है?
TheMeaningfulEngineer

आपके हिसाब से कौन सा पार्ट टाइपो है? सादे सॉकेट्स में एक फ़ाइल नाम या उनके साथ जुड़ा हुआ नहीं है (हालांकि यूनिक्स डोमेन सॉकेट करते हैं)।
dirkt

मैं सिर्फ शब्दार्थ को नहीं समझता था, क्षमा करें, इसलिए पुन: जाँच करना चाहता था।
TheMeaningfulEngineer

क्षमा करें, मैं अंग्रेजी का एक गैर-देशी वक्ता हूं। मैंने इसे फिर से समझने की कोशिश की, क्या अब इसे समझना आसान है?
'14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.