लिनक्स नेटवर्किंग पोर्ट थकावट


10

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

सख्ती से 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) का उपयोग कर रहा था एक अल्पकालिक बंदरगाह के लिए।


मैंने अधिक जानकारी के साथ अपना उत्तर अपडेट किया। किसी भी सवाल का जवाब देने के लिए स्वतंत्र महसूस करें।
89c3b1b8-b1ae-11e6-b842-48d705

जवाबों:


8

आपके यहाँ दो मुख्य प्रश्न हैं:

1।

सख्ती से IPv4 बोल रहा है, क्या वास्तव में पोर्ट थकावट संभव है?

हाँ। उदाहरण के लिए, एक लोड बैलेंसिंग राउटर, जो सभी कनेक्शनों को NAT IP पते पर भेजता है। यह तब होने की संभावना है जब आपके पास कई SRC IPएकल की अड़चन से जुड़ना है DST IP

इसका मतलब है कि आपके वेबसर्वर के पास कनेक्शन का एक गुच्छा हो सकता है जैसे:

root@buglab:~# netstat -pnt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 173.200.1.18:80      10.100.1.100:49923        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.200.1.200:10155        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.10.1.10:14400        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.10.1.10:50652        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.20.1.20:57554        ESTABLISHED 13939/nginx: worker 

और यह पूरी तरह से ठीक है। हालाँकि, यदि सभी 'विदेशी पते' समान थे, तो यह एक समस्या का कारण बन सकता है (उदाहरण के लिए 'बड़े राउटर जो NAT <---> सर्वर को एक आईपी पते के साथ निष्पादित करता है)।

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

हालाँकि, मैं व्यक्तिगत रूप से एक लोड संतुलन कंपनी में काम करते समय कुछ पोर्ट थकावट के मुद्दों पर आया हूं।

2. एक इस्तेमाल किया बंदरगाह एक सुनने की सेवा के लिए एक समस्या क्यों पेश कर सकता है?

"जो 1024-65535 से अल्पकालिक बंदरगाहों के उपयोग की अनुमति देता है, यदि मेरे पास ऐसी सेवाएँ हैं जो पोर्ट 3306 (mySQL), उदाहरण के लिए) पर बांधती हैं, तो वे कभी-कभी शुरू करने में विफल रहेंगे क्योंकि पोर्ट उपयोग में है।"

अगर यह प्रयोग में है तो mySQL सर्वर उस पोर्ट से नहीं जुड़ सकता है - लोकलहोस्ट द्वारा कहें: 3306 या सभी इंटरफेस पर। उदाहरण के लिए, निम्न netstatआउटपुट में 0.0.0.0:80 लाइन देखें ?

root@buglab:~# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      964/php-fpm.conf)
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1660/mysqld     
tcp        0      0 0.0.0.0:842             0.0.0.0:*               LISTEN      1317/inetd      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13938/nginx     

इसका मतलब है कि पोर्ट 80 सर्वर पर स्थानीय सभी इंटरफेस को सुन रहा है। यदि मेरे nginxसर्वर के शुरू होने से पहले एक और प्रक्रिया पोर्ट 80 रखती है , nginxतो उस पोर्ट पर नियंत्रण नहीं कर पाएगी और संभवतः इसकी स्टार्टअप प्रक्रिया विफल हो जाएगी।

आम तौर पर, पोर्ट 3306 ठीक है क्योंकि सुनने वाली सेवाओं में पूर्व-परिभाषित पोर्ट (या रेंज) हैं जो होस्ट मशीन से अनुरोध किए जाते हैं - जैसे कि वेबसर्वर के लिए पोर्ट 80 और 443।


0

मेरे पास 127.0.0.1:(x) से 127.0.0.1.180 तक 65k कनेक्शन हो सकते हैं, 127.0.0.1:(x) से 127k.0.1:555 तक 65k कनेक्शन हो सकते हैं।

a: हाँ, यदि आप स्थानीय पोर्ट 1-65535 हैं, तो कनेक्शन की गिनती 65k-1 है (एक पोर्ट सुनो है)

मूल रूप से एक बार फिर, सवाल यह है (srcip, srcport, dstip, dstport) अद्वितीय होना चाहिए, सही? a: हाँ

मैं आईपी "ए" से आईपी "बी", पोर्ट "एन" किसी भी 65k से अधिक कनेक्शन नहीं खोल सकता था, इसी तरह, एक भी आईपी एक्सएक्सएक्स पर मेरे वेबसर्वर के लिए 65k से अधिक कनेक्शन नहीं खोल सकता था: 80, हालांकि मैं और अधिक समर्थन कर सकता था जब तक वे अलग-अलग स्रोत आईपी से हैं, तब तक कुल मिलाकर 65k?

a: xxxx: 80 पर मेरे वेबसर्वर के लिए एक एकल आईपी 65k से अधिक कनेक्शन नहीं खोल सकता है, क्योंकि srcip, srcport, dstip, dstport अद्वितीय है। हाँ, आप 65k से अधिक का समर्थन कर सकते हैं, अगर soruce ip diffrent है

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