2012-11-02 29 views
13

https://serverfault.com/questions/296603/understanding-ports-how-do-multiple-browser-tabs-communicate-at-the-same-timeपोर्ट नंबर वास्तव में टीसीपी में कैसे काम करता है?

how can an application use port 80/HTTP without conflicting with browsers?

How do multiple clients connect simultaneously to one port, say 80, on a server?

मैं उपरोक्त प्रश्नों को पढ़ लिया है लेकिन ऐसा लगता है जवाब असंगत हैं।

मुझे पता है कि वास्तव में एक गर्तिका कनेक्शन को परिभाषित करता है क्या चाहते हैं, यह है:

(sockid, source ip, source port, dest ip, dest port)

या केवल:

(source ip, source port, dest ip, dest port)

कर सकते हैं दो अलग अलग प्रक्रियाओं (जैसे, दो अलग-अलग ब्राउज़र) एक ही स्रोत बंदरगाह पर एक वेब सर्वर के साथ संवाद? (डिस्ट पोर्ट डिफ़ॉल्ट रूप से वही होगा)

उसी ब्राउज़र में अलग-अलग टैब के मामले में क्या होगा?

इसके अलावा, जैसा कि उत्तर में से एक में बताया गया है, एक भी वेब पेज एक साथ कई सर्वर (उदा।, विज्ञापन सर्वर) से कनेक्ट हो सकता है। एक साथ कई सर्वर से कनेक्ट करते समय, क्या वेब ब्राउज़र (उदा। क्रोम, फ़ायरफ़ॉक्स) एक ही पोर्ट का उपयोग करके प्रत्येक सर्वर से कनेक्ट होता है, या क्या यह प्रत्येक सर्वर के लिए एक अलग पोर्ट का उपयोग करता है?

+0

मैंने रेफरी सवालों को नहीं पढ़ा लेकिन सीक्वेंज़नंबर भी कनेक्शन की पहचान करने के लिए एक महत्वपूर्ण भूमिका निभाता है। – rekire

उत्तर

46

मुझे पता है कि यह देर हो चुकी है, लेकिन चूंकि धागा अभी भी इंटरनेट पर है, और क्योंकि यह वेब पर बहुत कम आधिकारिक उत्तरों के साथ एक आम प्रश्न है, इसलिए इसमें उन लोगों के लिए एक और पूर्ण और संक्षिप्त स्पष्टीकरण होना चाहिए जो इसमें ठोकर खा सकते हैं , यहां तक ​​कि इस देर की तारीख में भी।

  1. आप एक वेब साइट खींचने के लिए एक ब्राउज़र खोलते हैं, आइए google.com कहें। वेब साइट निर्दिष्ट करने की प्रक्रिया में आपका कंप्यूटर मनमाने ढंग से अपने "स्रोत पोर्ट" के रूप में उपयोग करने के लिए पोर्ट नंबर चुन देगा। यह संख्या 49152 से ऊपर होगी जो "गतिशील, निजी, या क्षणिक बंदरगाहों" की शुरुआत है, लेकिन 65535 से नीचे जो उच्चतम पोर्ट नंबर उपलब्ध है। चयनित पोर्ट नंबर उस ब्राउज़र "उदाहरण" से जुड़ा हुआ है।

  2. बस मस्ती के लिए, आप ब्राउज़र पर एक नया टैब खोलें और यूआरएल लाइन पर "google.com" टाइप करें। आपका लक्ष्य google.com के दो उदाहरण चलाना है क्योंकि आप अलग-अलग चीजों की तलाश में हैं। तब आपका कंप्यूटर उस सत्र के लिए दूसरा पोर्ट नंबर चुनता है, जो पहले सत्र के लिए उपयोग किए जाने वाले "स्रोत" पोर्ट से अलग होता है। वास्तव में, आप इसे कई बार कई बार कर सकते हैं, और प्रत्येक सत्र में प्रत्येक उदाहरण के साथ एक अद्वितीय "स्रोत" पोर्ट होगा।

  3. आपका पैकेट google.com पर जाता है, और प्रत्येक इंस्टेंस में गंतव्य पोर्ट नंबर पोर्ट 80 होगा। वेब सर्वर आने वाले कनेक्शन अनुरोधों के लिए पोर्ट 80 पर "सुनें"। आपके द्वारा खोले गए google.com के साथ प्रत्येक सत्र के लिए, आपके कंप्यूटर के परिप्रेक्ष्य से गंतव्य पोर्ट, हमेशा पोर्ट 80 होगा, लेकिन आपके ब्राउज़र या ब्राउज़र पर google.com के कनेक्शन के प्रत्येक उदाहरण के लिए, स्रोत पोर्ट विशिष्ट रूप से होगा विशिष्ट रूप से एक ब्राउज़र उदाहरण पर एक विशिष्ट टैब की पहचान करें। इस प्रकार वे आपके कंप्यूटर पर भिन्न होते हैं।

  4. google.com आपका पहला अनुरोध प्राप्त करता है। इसका उत्तर पोर्ट 80 को इसके स्रोत पोर्ट के रूप में निर्दिष्ट करेगा। यहां वह दिलचस्प है जहां यह दिलचस्प हो जाता है। आपके द्वारा प्राप्त प्रत्येक क्वेरी google.com को "सॉकेट" के रूप में माना जाएगा, जो आपके आईपी पते का संयोजन है, और उस प्रक्रिया से जुड़े विशिष्ट पोर्ट नंबर जो google.com से संपर्क करते हैं। इसलिए, उदाहरण के लिए हम कहेंगे कि आपका आईपी पता 165.40.30.12 है, और आपके कंप्यूटर का स्रोत पोर्ट नंबर google.com के साथ संचार के चार उदाहरणों के लिए अपने स्रोत पोर्ट के रूप में उपयोग किया जाता है (मान लें कि Google.com खोलने वाले चार अलग-अलग टैब) थे 61235, 62421, 58392, और 53925. ये चार "सॉकेट" 165.40.30.12:61235, 165.40.30.12:62421, 165.40.30.12:58392, और 165.40.30.12:523925 होंगे। "आईपी पता: स्रोत पोर्ट नंबर" का प्रत्येक संयोजन अद्वितीय है, और google.com प्रत्येक उदाहरण को अद्वितीय के रूप में मानेंगे। google.com प्रतिक्रिया करता है, और "सॉकेट" के साथ संचार करता है, यानी आईपी पता और बंदरगाह का संयोजन।

  5. आपका कंप्यूटर google.com से इसकी प्रतिक्रिया प्राप्त करता है, और इसे अपने गंतव्य "सॉकेट" के रूप में प्राप्त करता है जो इसे पोर्ट नंबरों से बाहर निकाल देता है, google.com से उचित ब्राउज़र विंडो में प्रतिक्रिया निर्दिष्ट करता है या टैब, उपयुक्त के रूप में। चीजों के अंत से कोई समस्या नहीं है क्योंकि आप हर बार सही विंडो में सही प्रतिक्रिया देखते हैं।

  6. "लेकिन," आप सोच रहे हैं, "क्या हुआ अगर किसी और गलती से एक ही पोर्ट नंबर का उपयोग करता है - मान लीजिए कि 61,235 जाने - के रूप में मैं अपने स्रोत संख्या के लिए उपयोग किया है यह भ्रमित google.com नहीं है" बिलकुल नहीं, क्योंकि google.com "सॉकेट" ट्रैक कर रहा है जो आईपी एड्रेस और पोर्ट नंबर का संयोजन है। कोई और, स्वाभाविक रूप से, और हम ईमानदारी से आशा करते हैं कि आप जिस व्यक्ति का उपयोग कर रहे हैं उससे अलग आईपी पता का उपयोग कर रहे हैं, मान लें 152.126.11.27, और आईपी एड्रेस और पोर्ट नंबर का संयोजन अद्वितीय है - 152.126.11.27:61235 - द्वारा विभेदित उनके अलग-अलग आईपी पते, भले ही बंदरगाह संख्याएं समान हों।

  7. इससे कोई फर्क नहीं पड़ता कि google.com को 1000 उपयोगकर्ताओं से 1000 प्रश्न मिलते हैं, सभी पोर्ट 80 का उपयोग अपने गंतव्य पोर्ट नंबर के रूप में करते हैं (पोर्ट google.com इनकमिंग संचार के लिए सुन रहा है) क्योंकि उनमें से प्रत्येक 1000 उपयोगकर्ता सभी में अद्वितीय आईपी पते हैं। google.com अपने ग्राहकों को उनके अद्वितीय द्वारा ट्रैक करता है - और उन्हें हमेशा अद्वितीय होना चाहिए, है ना? - सॉकेट संख्याएं जिनमें उनके आईपी पते और "स्रोत" पोर्ट नंबर शामिल हैं। भले ही उन 1000 ग्राहकों में से प्रत्येक ने एक ही "स्रोत" पोर्ट नंबर (अधिकतम तक की संभावना) का उपयोग करने में कामयाब रहे, फिर भी उनके पास अलग-अलग आईपी पते होंगे, जिससे उनके स्रोत "सॉकेट" को अन्य सभी के बीच अद्वितीय बनाया जा सकेगा।

  8. यह सब कुछ आसान है जब आप इसे इस तरह समझाते हैं। यह स्पष्ट करता है कि एक वेब सर्वर हमेशा एक बंदरगाह (80) पर सुन सकता है और फिर भी विभिन्न ग्राहकों से अलग हो सकता है। यह केवल क्वेरी में प्राप्त आईपी पते को नहीं देखता है - आपको लगता है कि उन्हें पहले ब्लश पर अद्वितीय होना चाहिए जबतक कि आपको एहसास न हो कि उस वेब सर्वर पर एक से अधिक वेब पेज खोले जा सकते हैं - लेकिन स्रोत पोर्ट पर संख्या, जो संयोजन में, प्रत्येक क्वेरी अद्वितीय बनाती है। मुझे उम्मीद है कि यह बहुत स्पष्ट है। यह एक सुरुचिपूर्ण प्रणाली है जब आप इसके बारे में सोचते हैं, फिर भी इसे समझने के बाद सरल।

+0

स्थानीय बंदरगाह <= 65535 है, <65535 नहीं। इस बात की कोई गारंटी नहीं है कि ब्राउजर एक ही टैब पर एक नए टैब के लिए एक नया कनेक्शन उपयोग करेगा। एक सवाल एक सॉकेट नहीं है। आप HTTP रखरखाव देख रहे हैं। आपने 8 अंक के साथ कुछ सरल बल्कि जटिल बना दिया है, जहां लगभग दो करेंगे। – EJP

+0

@ paul1307 - सर्वर पक्ष एकाधिक अनुरोधों को कैसे प्रबंधित किया जाता है, इस बारे में थोड़ी अधिक जानकारी इस उत्तर को पूर्ण और अत्यधिक शिक्षित करेगी। –

8

बदले में अपने प्रश्नों ले रहा है:

एक कनेक्शन से परिभाषित किया गया है:

{प्रोटोकॉल, स्थानीय IP, स्थानीय बंदरगाह, दूरदराज के आईपी, दूरदराज के बंदरगाह}

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

सॉकिड उपयोगकर्ता प्रक्रिया में केवल एक वर्णक है जो कर्नेल में कनेक्शन के लिए मानचित्र करता है, बस एक फ़ाइल des के रूप में डिस्क पर एक फ़ाइल के लिए क्रिप्टर नक्शे खोला गया है।

दो अलग-अलग प्रक्रियाएं उसी स्थानीय बंदरगाह से बंधी नहीं जा सकती हैं। हालांकि, दो प्रक्रियाओं के लिए एक ही कनेक्शन का उपयोग करना संभव है - एक सॉकेट डिस्क्रिप्टर को मूल प्रक्रिया से एक बाल प्रक्रिया में विरासत में प्राप्त किया जा सकता है, या वर्णनकर्ता इंटरप्रोसेस संचार का उपयोग कर प्रक्रियाओं के बीच पारित किया जा सकता है। दो प्रक्रियाएं एक ही बंदरगाहों का उपयोग कर रही हैं क्योंकि वे वास्तव में एक ही कनेक्शन साझा कर रहे हैं।

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

+0

मेरे पास आपके उत्तर के बारे में कोई प्रश्न है। मान लें कि मैं दो अलग-अलग टैबों में stackoverflow.com पर दो कनेक्शन खोलता हूं (इस प्रश्न के लिए मान लें कि मैं एक ही सर्वर से कनेक्ट कर रहा हूं)।आइए मान लें कि सॉकेट 1 स्थानीय बंदरगाह 1 और रिमोट पोर्ट 80 पर है। दूसरा चलो स्थानीय कहें: 2 और रिमोट: 80. सर्वर के दृश्य से, क्या यह स्थानीय पर संचार कर रहा है: 80 और रिमोट: 1 सॉकेट 1 और स्थानीय के लिए: 80 रिमोट: 2 सॉकेट 2 के लिए? या यह स्थानीय है: 1 और रिमोट: सॉकेट 1 और स्थानीय के लिए 80: 2 रिमोट: 80 सॉकेट 2 के लिए? यदि यह पूर्व है, तो सर्वर एक ही स्थानीय बंदरगाह के साथ 2 खुले कनेक्शन बनाए रखता है? –

+1

यह पहला तरीका है। सर्वर पर स्थानीय पोर्ट क्लाइंट पर रिमोट पोर्ट है, और इसके विपरीत। यह ऐसा करने में सक्षम है क्योंकि एक कनेक्शन दोनों बंदरगाहों और आईपी द्वारा परिभाषित किया गया है, उसी स्थानीय बंदरगाह के साथ कई कनेक्शन होने में कोई समस्या नहीं है, जब तक रिमोट पोर्ट और/या आईपी अलग हों। – Barmar

-1

मैंने संबंधित मंच पर उपरोक्त प्रश्न पढ़ा है लेकिन मुझे लगता है कि लोग भी एक-दूसरे से सहमत नहीं हैं।

मुझे आपके द्वारा उल्लिखित मामलों से संबंधित किसी भी में कोई असहमति नहीं दिखाई देती है।

मुझे पता है कि वास्तव में एक सॉकेट कनेक्शन

(sockid, स्रोत आईपी, स्रोत बंदरगाह, dext आईपी, गंतव्य बंदरगाह)

या केवल

(स्रोत आईपी, स्रोत को परिभाषित करता है क्या चाहते हैं पोर्ट, डेक्स आईपी, dest पोर्ट)

उत्तरार्द्ध। पूर्व कल्पना की एक कल्पना है। आपके द्वारा उद्धृत किसी भी धागे में इसका उल्लेख नहीं किया गया है।

क्या मैं पूछना चाहता हूँ कि दो अलग-अलग ब्राउज़र की तरह दो अलग अलग प्रक्रियाओं एक ही स्रोत बंदरगाह पर एक वेब सर्वर के साथ संवाद कर सकते हैं। (डेस्ट बंदरगाह डिफ़ॉल्ट रूप से ही होगा)।

यदि वे एक ही स्रोत आईपी पर नहीं हैं। यह ऊपर वर्णित पहचान परिभाषा का उल्लंघन करेगा।

उसी ब्राउज़र में अलग-अलग टैब के मामले में क्या।

हाँ, कनेक्शन पूलिंग के कारण। यदि आप अलग कनेक्शन के बारे में बात कर रहे हैं, तो जवाब अभी भी नहीं है।

इसके अलावा

जवाब किसी एक वेब पृष्ठ की कोशिश करता है में से एक में उल्लिखित विज्ञापन सर्वर आदि तो अलग सर्वर या करने के लिए एक ही बंदरगाह के साथ कनेक्ट उस बात के लिए क्रोम या फ़ायरफ़ॉक्स की तरह कई अलग अलग सर्वर से कनेक्ट एक बंदरगाह का उपयोग करें।

आपको इसे समझाना होगा। 'एक ही बंदरगाह' और 'एक बंदरगाह' के बीच क्या अंतर है? असली सवाल नहीं है।

+0

"अगर वे एक ही स्रोत आईपी पर नहीं हैं। यह ऊपर बताई गई पहचान परिभाषा का उल्लंघन करेगा।" निश्चित रूप से वे एक अलग अल्पकालिक स्रोत/स्थानीय बंदरगाह (उनके 'प्रस्थान' बंदरगाह) का उपयोग किया जाएगा, इस प्रकार आप प्रमुख से एक अनूठी पहचान है: "{स्थानीय IP, स्थानीय बंदरगाह, दूरदराज के आईपी, दूरदराज के बंदरगाह}" - अर्थात् उदाहरण यथार्थवादी नहीं है। – Joe

+0

@ जो उन्होंने * वही * स्रोत और गंतव्य बंदरगाहों का उपयोग करने के बारे में पूछा। तुम्हारी बात? – EJP

+0

बस एक ही स्रोत और गंतव्य बंदरगाहों का उपयोग करने के लिए कुछ प्रबंधित करने के लिए प्रतीत होता है। आम तौर पर आपको अपने लिए आवंटित निकास बंदरगाह मिल जाएगा, और मैं सोच रहा था कि क्या यह भ्रम का मुद्दा था। अपने निकास बंदरगाह को परिभाषित करना सामान्य नहीं है, है ना? – Joe