एक आधुनिक लिनक्स बॉक्स में होने वाली खुली टीसीपी कनेक्शन की सैद्धांतिक अधिकतम संख्या क्या है


236

हार्डवेयर से अनंत प्रदर्शन को मानते हुए, क्या लिनक्स बॉक्स> 65536 टीसीपी कनेक्शन खोल सकता है?

मैं समझता हूं कि पंचांग बंदरगाहों (<65536) की संख्या एक स्थानीय आईपी से एक दूरस्थ आईपी पर एक बंदरगाह के लिए कनेक्शन की संख्या को सीमित करती है।

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

क्या सिस्टम में एक और 16 बिट की सीमा है? फ़ाइल वर्णनकर्ताओं की संख्या शायद?

जवाबों:


349

एक एकल श्रवण पोर्ट एक साथ एक से अधिक कनेक्शन स्वीकार कर सकता है।

एक '64K' सीमा होती है जिसे अक्सर उद्धृत किया जाता है, लेकिन यह प्रति क्लाइंट प्रति सर्वर पोर्ट है , और इसे स्पष्ट करने की आवश्यकता है।

प्रत्येक टीसीपी / आईपी पैकेट में मूल रूप से संबोधित करने के लिए चार क्षेत्र होते हैं; य़े हैं:

source_ip source_port destination_ip destination_port
< client            > < server                      >

टीसीपी स्टैक के अंदर, इन चार क्षेत्रों को कनेक्शन (जैसे फ़ाइल डिस्क्रिप्टर) के पैकेट को मिलान करने के लिए एक यौगिक कुंजी के रूप में उपयोग किया जाता है।

यदि किसी ग्राहक के एक ही गंतव्य पर एक ही पोर्ट के कई कनेक्शन हैं, तो उन क्षेत्रों में से तीन समान होंगे - केवल source_portअलग-अलग कनेक्शन को अलग करने के लिए भिन्न होता है। पोर्ट 16-बिट नंबर हैं, इसलिए किसी भी क्लाइंट को दिए गए होस्ट पोर्ट में कनेक्शन की अधिकतम संख्या 64K हो सकती है।

हालाँकि, कई क्लाइंट प्रत्येक में कुछ सर्वर के पोर्ट के लिए 64K कनेक्शन हो सकते हैं, और यदि सर्वर में कई पोर्ट हैं या या तो मल्टी-होम हैं तो आप इसे आगे बढ़ा सकते हैं।

तो असली सीमा फ़ाइल डिस्क्रिप्टर है। प्रत्येक व्यक्तिगत सॉकेट कनेक्शन को एक फ़ाइल डिस्क्रिप्टर दिया जाता है, इसलिए सीमा वास्तव में फ़ाइल डिस्क्रिप्टर की संख्या है जिसे सिस्टम को अनुमति देने के लिए कॉन्फ़िगर किया गया है और संसाधनों को संभालने के लिए। अधिकतम सीमा आमतौर पर 300K से अधिक है, लेकिन sysctl के साथ विन्यास योग्य है ।

सामान्य बक्सों के बारे में घमंड करने वाली यथार्थवादी सीमाएँ 80K के आसपास हैं, उदाहरण के लिए सिंगल थ्रेडेड जेबर मैसेजिंग सर्वर।


3
यदि आप (a) SO_REUSEADDR का उपयोग करते हैं और (b) विभिन्न गंतव्य स्थानों के पते को लक्षित कर सकते हैं, तो आप सैद्धांतिक रूप से 64K से अधिक आउटगोइंग कनेक्शन ले सकते हैं। लेकिन कर्नेल मेमोरी सीमाएं शायद आपको पहले रोक देंगी।
डार्रोन सेप

4
Sysctl की सीमा पूरी प्रणाली के लिए है, है ना? Ulimit के साथ विन्यास योग्य सीमा भी है, जो एक प्रक्रिया के लिए फ़ाइल डिस्क्रिप्टर की अधिकतम संख्या को सीमित करता है। यह डिफ़ॉल्ट रूप से 300K से काफी कम है, आमतौर पर 1024।
pacoverflow

1
एक हल्की तकनीकी: एक क्लाइंट मशीन में एक राउटर से कई आईपी पते निर्दिष्ट किए जा सकते हैं। ये सभी एक ही मैक को सौंपे जा सकते हैं, या उस मशीन में अतिरिक्त आईपी पते के लिए कई भौतिक नेटवर्क इंटरफेस हो सकते हैं। ओपी ने 1 आईपी निर्दिष्ट किया है, लेकिन दूसरों के लिए अधिक आईपी पते से इंकार नहीं करना महत्वपूर्ण है।
टॉड

2
@ खूबसूरती से समझाया !! बहुत उपयोगी ... +100 उत्थान देना चाहेंगे ... धन्यवाद :-)
टॉम टेलर

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

17

यदि आप एक सर्वर चलाने के बारे में सोच रहे हैं और यह तय करने की कोशिश कर रहे हैं कि एक मशीन से कितने कनेक्शन दिए जा सकते हैं, तो आप C10k समस्या और एक साथ बहुत सारे ग्राहकों की सेवा में शामिल संभावित समस्याओं के बारे में पढ़ना चाह सकते हैं ।


14
C10k 10 साल पुराना है और अब मज़ेदार नहीं है। [इसे पढ़ें] यह देखने के लिए कि C1024K से कैसे निपटा जा सकता है।
चंद्रवंशी

@Chandranshu - क्या आपका मतलब metabrew.com/article/… है ?
मिकको रैंटलैनेन

1
@ मायको रेंटालैनेन - हाँ। मुझे लगता है कि अब बेहतर बेंचमार्क उपलब्ध हैं। फीनिक्स दोस्तों ने पहले ही इसे 2 मिलियन एक साथ कनेक्शन पर धकेल दिया है।
चंद्रवंशी

3
@Chandranshu - 12M कनेक्शन के साथ डेल डेमो है: mrotaru.wordpress.com/2013/06/20/…
मकोको रैंटलैनेन

1
कुछ साल पहले: इंटेल एटम D2700, 2GB रैम, 1.2M समवर्ती कनेक्शन। मेरे पास केवल वही मुद्दे थे जो परीक्षण कार्य में विंडोज बॉक्स के साथ थे; नियमित रूप से इंटेल एटम बॉक्स के लिए प्रयास करते समय ये ऊपर चले गए ...
Klaws

12

यदि आपने उपयोगकर्ता में कच्चे सॉकेट ( SOCK_RAW) और पुन: लागू टीसीपी का उपयोग किया है, तो मुझे लगता है कि इस मामले में उत्तर केवल (local address, source port, destination address, destination port)टुपल्स की संख्या (~ 2 ^ 64 प्रति स्थानीय पते) द्वारा सीमित है ।

यह निश्चित रूप से उन सभी कनेक्शनों की स्थिति को बनाए रखने के लिए बहुत सारी मेमोरी लेगा, और मुझे लगता है कि कर्नेल टीसीपी स्टैक को अपसेट और / या आपकी ओर से प्रतिक्रिया देने के लिए आपको कुछ iptables नियम स्थापित करने होंगे।

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