2010-06-02 18 views
51

यदि मैं सही समझता हूं, तो एप्लिकेशन कभी-कभी संदेश भेजने के लिए HTTP का उपयोग करते हैं, क्योंकि अन्य बंदरगाहों का उपयोग फ़ायरवॉल समस्याओं का कारण बनने के लिए उत्तरदायी है। लेकिन यह वेब अनुप्रयोगों जैसे अन्य अनुप्रयोगों के साथ संघर्ष किए बिना कैसे काम करता है? असल में एक बार कई ब्राउज़र कैसे चल रहे हैं? क्या वे सभी बंदरगाह की निगरानी करते हैं और अधिसूचित हो जाते हैं ... क्या आप इस तरह से एक बंदरगाह साझा कर सकते हैं?ब्राउज़र के साथ विवाद किए बिना कोई एप्लिकेशन पोर्ट 80/HTTP का उपयोग कैसे कर सकता है?

मुझे लगता है कि यह एक बेवकूफ सवाल है, लेकिन ऐसा कुछ नहीं जिसे मैंने पहले कभी सोचा था, और अन्य मामलों में मैंने समस्याएं देखी हैं जब 2 ऐप्स उसी पोर्ट का उपयोग करने के लिए कॉन्फ़िगर किए गए हैं।

उत्तर

65

2 बंदरगाहों के होते हैं: एक स्रोत बंदरगाह (ब्राउज़र) और एक गंतव्य बंदरगाह (सर्वर)।ब्राउज़र ओएस को एक उपलब्ध स्रोत पोर्ट के लिए पूछता है (मान लीजिए कि यह प्राप्त करता है) तो गंतव्य पोर्ट (आमतौर पर 80/HTTP, 443/HTTPS) के लिए सॉकेट कनेक्शन बनाता है।

जब वेब सर्वर को उत्तर प्राप्त होता है, तो यह एक प्रतिक्रिया भेजता है जिसमें 80 पोर्ट स्रोत पोर्ट और 33123 गंतव्य पोर्ट के रूप में होता है।

तो अगर आप 2 ब्राउज़रों समवर्ती stackoverflow.com तक पहुँचने है, तो आप कुछ इस तरह होगा:

Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80) 
Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80) 
+0

समवर्ती कनेक्शन के लिए, आप इसे ** ब्राउज़र के ** परिप्रेक्ष्य से समझाते हुए प्रतीत होते हैं। ** आवेदन के ** परिप्रेक्ष्य से क्या? –

+6

एक ब्राउज़र एक आवेदन है। क्या आप अपने प्रश्न पर विस्तार कर सकते हैं? –

+1

क्या ब्राउज़र पर हर टैब के पास एक अलग पोर्ट भी है? – huync

17

आउटगोइंग HTTP अनुरोध पोर्ट 80 पर नहीं होते हैं। जब कोई एप्लिकेशन सॉकेट का अनुरोध करता है, तो आमतौर पर इसे यादृच्छिक रूप से प्राप्त होता है। यह स्रोत बंदरगाह है।

पोर्ट 80 HTTP सामग्री (सर्वर द्वारा, ग्राहक नहीं) की सेवा के लिए है। यह गंतव्य बंदरगाह है।

प्रत्येक ब्राउज़र अनुरोध उत्पन्न करने के लिए एक अलग स्रोत का उपयोग करता है। इस तरह, पैकेट इसे सही एप्लिकेशन पर वापस लाते हैं।

+0

लेकिन क्या होगा अगर मेरी क्लाइंट/सर्वर 80 पर बातचीत ... अगर ग्राहक पर एक संदेश प्राप्त पोर्ट 80 (क्यों) ब्राउज़र इसे HTTP सामग्री के रूप में अवरुद्ध नहीं करेगा? –

+1

ग्राहक सर्वर पर पोर्ट 80 से कनेक्ट होगा, लेकिन एक और पोर्ट का उपयोग करेगा। इसे स्वयं आज़माएं: किसी सर्वर से फ़ाइल डाउनलोड करें (उदाहरण के लिए एक यूट्यूब वीडियो), एक प्रॉम्प्ट खोलें और "netstat" टाइप करें। पोर्ट 80 पर सर्वर से कनेक्ट करने के लिए आपकी अपनी मशीन एक यादृच्छिक बंदरगाह (जैसे 62123) का उपयोग करेगी। – Konerak

+5

@ जॉन, नहीं। * वेब सर्वर * पोर्ट 80 खोलता है, लेकिन * ब्राउज़र * में एक अलग, यादृच्छिक रूप से निर्दिष्ट पोर्ट है। यदि आपका ऐप पोर्ट 80 पर संचार करता है तो आप अपने ऐप को उसी मशीन पर वेब सर्वर के रूप में इस्तेमाल करने से रोकते हैं, लेकिन आप वेब ब्राउजिंग में हस्तक्षेप नहीं करते हैं। –

1

ब्राउज़र एक क्लाइंट एप्लिकेशन है जिसका उपयोग आप वेब सर्वर पर सामग्री देखने के लिए करते हैं जो आमतौर पर एक अलग मशीन पर होता है। वेब सर्वर क्लाइंट पर ब्राउज़र नहीं, पोर्ट 80 पर सुन रहा है।

+1

मुझे समझ में नहीं आता कि यह क्यों डाउनवॉट किया गया था । यह सबसे व्यापक जवाब नहीं हो सकता है लेकिन इसमें कुछ भी गलत नहीं है। –

2

पोर्ट 80 आप यहां पर बात कर रहे हैं सर्वर पर पोर्ट पोर्ट, स्थानीय ब्राउज़र प्रत्येक कनेक्शन के लिए उच्च पोर्ट खोलता है।

प्रत्येक कनेक्शन में पर पोर्ट नंबर दोनों समाप्त होते हैं, जिन्हें स्थानीय पोर्ट, अन्य रिमोट पोर्ट कहा जाता है।

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

+0

"स्थानीय रूप से ब्राउजर प्रत्येक कनेक्शन के लिए उच्च पोर्ट खोलता है" ... फिर फ़ायरवॉल के माध्यम से यह कैसे मिलता है? फ़ायरवॉल डिफ़ॉल्ट रूप से बंदरगाहों की एक विशिष्ट श्रृंखला को छोड़ देते हैं? –

+1

@ जॉन: आम तौर पर, फ़ायरवॉल बंदरगाहों और पते का पता लगाएगा जब कनेक्शन क्लाइंट द्वारा पहली बार स्थापित किया जाता है, और जब तक कनेक्शन "जीवित" होता है तब तक सर्वर से रिटर्न ट्रैफिक को स्वचालित रूप से अनुमति देता है। –

+0

फ़ायरवॉल किसी भी बंदरगाह पर आउटगोइंग कनेक्शन की अनुमति देता है। वे आमतौर पर अधिकांश बंदरगाहों पर आने वाले कनेक्शन को अवरुद्ध करते हैं जबतक कि आप उन्हें स्पष्ट रूप से खोलें। –

3

आपको "पोर्ट 80 पर सुनना" और "पोर्ट 80 से कनेक्ट करने" के बीच भेद बनाने में सावधान रहना होगा।

जब आप कहते हैं कि "एप्लिकेशन कभी-कभी संदेशों को भेजने के लिए HTTP का उपयोग करते हैं, क्योंकि अन्य बंदरगाहों का उपयोग फ़ायरवॉल समस्याओं का कारण बनने के लिए उत्तरदायी है", तो आप वास्तव में "एप्लिकेशन कभी-कभी पोर्ट 80 पर संदेश भेजते हैं"।

सर्वर पोर्ट 80 पर सुन रहा है, और उस बंदरगाह पर कई कनेक्शन स्वीकार कर सकता है।

6

यह 5-टुपल (आईपी प्रोटोकॉल, स्थानीय आईपी पता, स्थानीय बंदरगाह, रिमोट आईपी पता, रिमोट पोर्ट) है जो कनेक्शन की पहचान करता है। एकाधिक ब्राउज़र (या वास्तव में एक ही ब्राउज़र एकाधिक पृष्ठों को एक साथ लोड कर रहा है) प्रत्येक गंतव्य गंतव्य 80 का उपयोग करेगा, लेकिन स्थानीय पोर्ट (जिसे ओ/एस द्वारा आवंटित किया जाता है) प्रत्येक मामले में अलग है। इसलिए कोई संघर्ष नहीं है।

+0

तो आंतरिक रूप से, सर्वर प्रतिक्रिया वापस ग्राहक के पर भेजता है? –

+0

ठीक है, प्रतिक्रिया में सर्वर स्थानीय और रिमोट पोर्ट और स्थानीय और दूरस्थ आईपी पते को स्विच करता है, इसलिए प्रतिक्रिया में स्थानीय पोर्ट = 80 और रिमोट पोर्ट = <क्लाइंट का स्थानीय पोर्ट> है। – jchl

4

ग्राहक आमतौर पर 1024 और 65535 के बीच एक पोर्ट चुनते हैं। यह ऑपरेटिंग सिस्टम पर निर्भर करता है कि इसे कैसे संभाला जाए। मुझे लगता है कि विंडोज क्लाइंट प्रत्येक नए कनेक्शन के लिए मूल्य बढ़ाते हैं, यूनिक्स क्लाइंट एक यादृच्छिक पोर्ट नंबर चुनते हैं।

कुछ सेवाओं एनटीपी (123 यूडीपी) की तरह एक स्थिर ग्राहक बंदरगाह पर भरोसा करते हैं

+0

1024 और * 65535 * (65536 नहीं) – exoddus

+0

@exoddus निश्चित, धन्यवाद। –

संबंधित मुद्दे

 संबंधित मुद्दे