मैंने कर्नेल स्रोत में सही खुदाई के बिना इस पर जितना हो सकता है उतना शोध किया है। इस विषय पर बड़ी मात्रा में विघटन / गलत जानकारी प्रतीत होती है, इसलिए मुझे आशा है कि यह मेरे लिए और दूसरों के लिए एक बार और सभी के लिए प्रश्न का उत्तर देगा।
सख्ती से IPv4 बोल रहा है, क्या वास्तव में पोर्ट थकावट संभव है? मुझे समझाने दो:
- लगातार 65535 बंदरगाह उपयोग के लिए उपलब्ध हैं। 0 उपलब्ध नहीं है।
- मैंने पढ़ा है कि पोर्ट थकावट के लिए अद्वितीय होने के लिए (src ip, src port, dst ip, dst port) टपल की आवश्यकता होती है।
- स्पष्ट होने और यह मानने के लिए कि मैं sysctl net.ipv4.ip_local_port_range सेटिंग के माध्यम से 100% अल्पकालिक बंदरगाहों का उपयोग कर सकता हूं
और यह सवाल है: क्या यह काम करता है?
- मैं 127.0.0.1:(x) से 127.0.0.1:80 तक 65k कनेक्शन ले सकता था
- मैं 127.0.0.1:(x) से 127.0.0.1:555 तक 65k कनेक्शन रख सकता था
- मूल रूप से एक बार फिर, सवाल यह है (srcip, srcport, dstip, dstport) अद्वितीय होना चाहिए, सही?
- मैं किसी भी अधिक से अधिक 65k कनेक्शन नहीं खोल सके से आईपी 'ए' आईपी करने के लिए 'बी', पोर्ट "एन"
- इसी तरह, xxxx: 80 में एक भी आईपी मेरे वेबसर्वर के लिए 65k से अधिक कनेक्शन नहीं खोल सकता है, हालाँकि मैं तब तक 65k से अधिक का समर्थन कर सकता था जब तक कि वे अलग-अलग स्रोत आईपी से हों ?
अंत में, मैं अल्पकालिक बंदरगाहों और आने वाले बंदरगाहों के बारे में थोड़ा उलझन में हूँ जो सुन रहे हैं। मुझे पता है कि एक बार कनेक्शन स्थापित होने के बाद कनेक्शन का प्रत्येक पक्ष एक सहकर्मी और समान होता है, लेकिन इससे पहले कि यह होता है:
उदाहरण के लिए, यदि वास्तव में!
net.ipv4.ip_local_port_range = 1024 65535
जो 1024-65535 से एपीमेरल पोर्ट के उपयोग की अनुमति देता है, यदि मेरे पास ऐसी सेवाएँ हैं जो पोर्ट 3306 (mySQL, उदाहरण के लिए) पर बाँधते हैं, तो वे कभी-कभी शुरू करने में विफल रहेंगे क्योंकि पोर्ट उपयोग में है।
क्या यह इस तथ्य से संबंधित है कि: (और यह एक कथन है जिसे मैं मान्य करने के लिए कह रहा हूं):
- 1-65535 के पोर्ट रेंज के साथ प्रत्येक कनेक्शन के लिए अद्वितीय होने के लिए (srcip, srcport, dstip, dstport) की आवश्यकता होती है (एपेमेरल पोर्ट के OS के उपयोग पर ध्यान नहीं)
- हालांकि, एक सॉकेट को बांधने के लिए, इसे (srcip, srcport, *, *) के रूप में देखा जा सकता है। या इसे लगाने का एक और तरीका है, क्या आईपी किसी भी कारण से बांधने के लिए उस पोर्ट का उपयोग नहीं करना चाहिए?
मैं उपरोक्त व्यवहार को सत्यापित कर सकता हूं, अर्थात मैं ऊपर sysctl लाइन का उपयोग करता हूं, और इसके कारण मैंने mySQL को 1024 से कम पोर्ट में स्थानांतरित कर दिया, क्योंकि यह कभी-कभी और बहुत ही बेतरतीब ढंग से पुनरारंभ करने में विफल हो जाता है क्योंकि यह मानकर कि ओएस उस पोर्ट (3306) का उपयोग कर रहा था एक अल्पकालिक बंदरगाह के लिए।