टीसीपी / आईपी सॉकेट्स को "खुली फाइलें" क्यों माना जाता है?


29

मुझे कुछ सहायता की आवश्यकता है जो मुझे यकीन है कि लिनक्स में एक मौलिक अवधारणा है: खुली फाइलों की सीमा। विशेष रूप से, मैं इस बात पर असमंजस में हूँ कि खुले सॉकेट किसी सिस्टम पर "खुली फ़ाइलों" की कुल संख्या की ओर क्यों गिन सकते हैं।

क्या कोई कारण के बारे में विस्तार से बता सकता है? मैं समझता हूं कि यह संभवत: लिनक्स में "सब कुछ एक फाइल है" सिद्धांत पर वापस जाता है लेकिन किसी भी अतिरिक्त विवरण की सराहना की जाएगी।

जवाबों:


34

"ओपन फाइल" की सीमा वास्तव में सिर्फ फाइलों के लिए नहीं है। यह कर्नेल हैंडल की एक सीमा है जो एक एकल प्रक्रिया एक समय में उपयोग कर सकती है। ऐतिहासिक रूप से, केवल एक चीज जो प्रोग्राम आमतौर पर बहुत सारी फाइलें खोलती थी, इसलिए यह खुली फाइलों की संख्या पर एक सीमा के रूप में जाना जाता है। कहने से प्रक्रियाओं को रोकने में मदद करने के लिए एक सीमा है, बहुत सारी फाइलें खोलना और गलती से उन्हें बंद करने के लिए भूल जाना, जो अंततः सिस्टम-व्यापी समस्याओं का कारण होगा।

सॉकेट कनेक्शन भी कर्नेल हैंडल है। तो वही सीमाएं समान कारणों के लिए लागू होती हैं - यह नेटवर्क कनेक्शन खोलने और उन्हें बंद करने की प्रक्रिया के लिए संभव है।

जैसा कि टिप्पणियों में कहा गया है, कर्नेल हैंडल परंपरागत रूप से यूनिक्स जैसी प्रणालियों में फ़ाइल विवरणक कहलाते हैं।


23
"कर्नेल हैंडल" एक विंडोज़ शब्दावली है। आप इसके बजाय "फ़ाइल डिस्क्रिप्टर" का संदर्भ देंगे जो इन संस्थाओं को आम तौर पर यूनिक्स और लिनक्स के साथ कहा जाता है।
जुलियाग्रे

11
यह जवाब बहुत ज्यादा हेज करता है। सॉकेट हैं फ़ाइलें। वे read/ writeइंटरफ़ेस के माध्यम से बाइट्स की धाराओं तक पहुंच प्रदान करते हैं , जो एक फ़ाइल होने का मतलब है का दिल है।

4
@ WumpusQ.Wumbley, लेकिन तब आपके पास shutdown(2)उन पर syscall है, लेकिन फाइलों पर नहीं, और आप उपयोग कर रहे सॉकेट से नहीं पढ़ सकते हैं cat- यही कारण netcatबनाया गया है। मैं कहूंगा कि (सौभाग्य से) यूनिक्स की तरह गुठली में सॉकेट I / O के संदर्भ में फाइलों की तरह व्यवहार करता है, लेकिन समानता वहीं समाप्त होती है। (ईमानदारी से, मैं योजना 9 के अनुभव वाले किसी व्यक्ति से भी सुनना पसंद करूंगा क्योंकि मैंने सुना है कि उन्हें पारंपरिक चीजों की तुलना में इन चीजों का एकीकरण मिला है)।
कोस्टिक्स

@ माइक, इस पुस्तक को आपको अधिकांश यूनिक्स से संबंधित अवधारणाओं के साथ गति प्राप्त करनी चाहिए। अत्यधिक सिफारिशित।
कोस्टिक्स

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

27

कारण क्यों टीसीपी / आईपी सॉकेट उपयोग फ़ाइल वर्णनकर्ता अर्थात, जब सॉकेट इंटरफ़ेस पहले तैयार किया गया है और कार्यान्वित (गया था BSD यूनिक्स में, 1983 में ), इसके डिजाइनरों का मानना था कि एक नेटवर्क कनेक्शन एक फ़ाइल के अनुरूप था - आप कर सकते हैं read, writeऔर closeदोनों , और यह कि "सब कुछ एक फ़ाइल है" के यूनिक्स विचार के साथ अच्छी तरह से फिट होगा।

अन्य टीसीपी / आईपी नेटवर्क स्टैक कार्यान्वयन अपने ओएस की फ़ाइल- I / O सबसिस्टम के साथ एकीकृत नहीं थे, उदाहरण के लिए MacTCP । लेकिन क्योंकि BSD सॉकेट इंटरफ़ेस बहुत लोकप्रिय था, यहां तक ​​कि इन अन्य कार्यान्वयनों ने अपने यूनिक्स जैसे कार्यों के साथ सॉकेट एपीआई को दोहराने के लिए चुना, इसलिए आपको "फाइल डिस्क्रिप्टर" मिला, जो केवल टीसीपी / आईपी संचार के लिए उपयोग किया जाता था, सिस्टम पर जो अन्यथा नहीं हुआ फ़ाइल विवरणक हैं।

आपके प्रश्न का दूसरा भाग एक सीमा क्यों है? ऐसा इसलिए है क्योंकि फ़ाइल डिस्क्रिप्टर लुकअप टेबल को लागू करने का सबसे तेज़ तरीका एक सरणी के साथ है। ऐतिहासिक रूप से, सीमा को कर्नेल में हार्ड-कोड किया गया था।

यहां यूनिक्स रिलीज़ 7 (1979) में एक हार्ड-कोडित सीमा 20 फाइल डिस्क्रिप्टर प्रति प्रक्रिया के साथ कोड है:

तुलना करके, लिनक्स गतिशील रूप से एक प्रक्रिया की फाइल डिस्क्रिप्टर तालिका के लिए स्थान आवंटित करता है। पूर्ण सीमा 8192 तक सीमित होती है, लेकिन आप इसे अपनी पसंद के अनुसार सेट कर सकते हैं। मेरी प्रणाली 191072 को सूचीबद्ध करती है /proc/sys/fs/file-max

लिनक्स में कोई भी पूर्ण सीमा नहीं होने के बावजूद, फिर भी हम कार्यक्रमों को पागल नहीं होने देना चाहते हैं, इसलिए व्यवस्थापक (या वितरण पैकेज) आम तौर पर संसाधन सीमा निर्धारित करते हैं। देख लो /etc/security/limits.conf, या चलाओ ulimit -n


इस विषय में सबसे अच्छे उत्तरों में से एक, धन्यवाद
user859375

6

फाइलें केवल डिस्क या मेमोरी में फाइलें नहीं हैं; वे डेटा की धाराएँ हैं, जिनमें से वे दो उदाहरण हैं।

रिमोट एंडपॉइंट एक तीसरा उदाहरण है, और आप सॉकेट का उपयोग करने वालों के साथ बातचीत करते हैं।


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