पोर्ट को समझना: एक ही समय में कई ब्राउज़र टैब कैसे संवाद करते हैं? [बन्द है]


18

मुझे आज एहसास हुआ कि मैं बुनियादी तौर पर यह नहीं समझता कि पोर्ट कम्युनिकेशन कैसे काम करता है।

अगर मैं पोर्ट 80 पर सुनने वाले वेबसर्वर के एक उदाहरण को आग लगाता हूं, तो यह कई अलग-अलग ब्राउज़र टैब से कई अनुरोधों का जवाब दे सकता है, सभी पोर्ट 80 पर संचार कर रहे हैं।

हालाँकि, मैं सर्वर के दो उदाहरणों को शुरू नहीं कर सकता, दोनों ही पोर्ट 80 पर सुन रहे हैं, क्योंकि इससे पोर्ट संघर्ष होता है।

मैंने हमेशा इसे दिए गए के रूप में लिया है, (केवल एक प्रक्रिया किसी भी समय एक विशिष्ट बंदरगाह पर बाँध सकती है) कभी भी वास्तव में यह सोचने के बिना - क्या पोर्ट 80 पर संचार करने वाली कई प्रक्रियाएं नहीं हैं? (यानी?, ब्राउज़र में चल रहे प्रत्येक टैब?)

जवाबों:


24

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

यहाँ और अधिक विस्तार


वास्तव में आप एक ही पोर्ट पर कई प्रक्रियाएं सुन सकते हैं। यदि आप उदाहरण के लिए कई udp पाठकों के साथ करते हैं, तो आपको कर्नेल स्तर पर लोड-संतुलन मिलेगा। पहले सुनने के लिए सॉकेट खोलें, फिर recv()प्रत्येक प्रक्रिया में कांटा और प्रयास करें ।
विराटपुर

5
@viraptor: सच है, लेकिन UDP कनेक्शन रहित है, "सुनने" और "प्राप्त करने" के बीच वास्तव में कोई अंतर नहीं है।
एडम रॉबिन्सन

समान विचार टीसीपी के साथ काम करता है, सॉकेट को सुनने और दोनों पर स्वीकार करने () के साथ प्रक्रिया को आगे बढ़ाता है।
विराटपुर

दरअसल, संचार के लिए एक सॉकेट केवल एक "समापन बिंदु" है। मुझे लगता है कि आपके कहने का मतलब यह है कि कनेक्टेड सॉकेट स्थानीय आईपी / पोर्ट और रिमोट आईपी / एड्रेस / रिमोट पोर्ट का एक संयोजन है। सॉकेट शब्द का उपयोग अक्सर ऐसा होता है कि मेरे लिए यह पता लगाना कठिन था कि इसका वास्तविक वर्णन क्या है
पश्चिमोत्तर

14

ब्राउज़र आपके कंप्यूटर पर एक यादृच्छिक उच्च (यानी> 1024) पोर्ट से दूरस्थ सर्वर के पोर्ट 80 से जोड़ता है। इसलिए आपकी मशीन पर कोई पोर्ट संघर्ष नहीं है।

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


2
यह सही जवाब है। टीसीपी कनेक्शन में दोनों सिरों पर पोर्ट नंबर होता है। शामिल दोनों कंप्यूटर कनेक्शन वेबसाइट के बीच अंतर कर सकते हैं: 80 <-> ब्राउज़र: 12397 और अलग कनेक्शन वेबसाइट: 80 <-> ब्राउज़र: 22958।
pjc50

7

पोर्ट 80 पर सुनने वाला सर्वर कई प्रक्रियाओं को संभालने के लिए नहीं है। बड़े वर्षों के सरल टीसीपी डीमन एक समय में केवल एक कनेक्शन ही संभाल सकते थे। आप netcatएक विशिष्ट पोर्ट पर सुनने जैसे कार्यक्रम का आयोजन करके इस व्यवहार का अनुकरण कर सकते हैं और इसके लिए दो मशीनों को जोड़ने का प्रयास कर सकते हैं। एक में मिलेगा, दूसरा बिना कनेक्शन के उछल जाएगा। ये डेमन ज्यादातर बेकार हैं इसलिए आप उन्हें कभी नहीं देखते हैं।

वेब-सर्वर की तरह कुछ के लिए, यह सीधे पोर्ट पर सुन रहा है। ध्यान रखने वाली बात यह है कि यह ऑपरेटिंग-सिस्टम के सॉकेट लाइब्रेरी में सबसे ऊपर बैठा है। जब एक नया कनेक्शन स्थापित होता है, तो सॉकेट लाइब्रेरी वेब-सर्वर सॉफ्टवेयर के लिए नया सॉकेट पास करता है। उस बिंदु पर, वेब-सर्वर सॉफ़्टवेयर में कुछ विकल्प होते हैं।

एक संभावना यह है कि यह सॉकेट-ऑब्जेक्ट को एक ही प्रक्रिया में एक नए थ्रेड को पास करता है। जब भी इस सॉकेट पर संचार होता है, तो यह थ्रेड इसे संभाल लेगा। मूल प्रक्रिया मध्यस्थता करती है कि कौन से धागे किसी भी समय सक्रिय हैं, जो बहुत कुछ हो सकता है।

एक और संभावना यह है कि यह एक नई प्रक्रिया का निर्माण करता है और प्रक्रिया के लिए सॉकेट-ऑब्जेक्ट को पास करता है। जैसा कि मैंने इसे समझा, यह अब इन बाल-प्रक्रियाओं और उनके लक्ष्यों के बीच ऑपरेटिंग सिस्टम के सॉकेट सिस्टम की मध्यस्थता संचार तक है। मूल प्रक्रिया अभी भी प्रक्रियाओं पर कुछ नियंत्रण रखती है, जैसे कि भूखों को मारना और अन्य अंतर-प्रक्रिया संचार।

इनमें से कौन सा दृष्टिकोण अधिक कुशल है, ऑपरेटिंग सिस्टम पर निर्भर करता है। IIRC, Apache दोनों ही मोड में चल सकते हैं।

संक्षेप में, सॉकेट लाइब्रेरी वेब-सर्वर के समानांतर प्रसंस्करण का स्तर प्रदान करता है। यह नए कनेक्शनों को स्वीकार करते हुए सक्रिय रूप से डेटा स्थानांतरित करने के लिए एक साथ कई कनेक्शनों को संभाल सकता है।

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


+1 इतने तरीकों से सही होने के लिए :)
माइकल लोमैन

2

प्रभावी रूप से, धारा सॉकेट के दो "प्रकार" हैं। एक के पास एक वाइल्ड-कार्ड "अन्य छोर" है, एक के पास एक विशिष्ट होस्ट है: दूसरे छोर के लिए पोर्ट।

कोई भी दो सॉकेट ("बल्कि, कभी भी) एक ही" इस छोर "और" दूसरे छोर "के पहचानकर्ता हो सकते हैं। सॉकेट जो "सुनी जाती है" (आने वाले कनेक्शनों को स्वीकार करता है) वह है जिसमें एक वाइल्ड-कार्ड "अन्य छोर" है, इसलिए एक समय में केवल एक ही मौजूद हो सकता है। जैसे ही कनेक्शन आता है, एक acceptकिया जाता है, एक मेजबान के साथ सॉकेट लौटाता है: दूसरे छोर के लिए पोर्ट टपल।


1

आपका सवाल मुझे कुछ साल पहले सिस्को CCNA से पहले याद दिलाता है - वही संदेह था :)

सबसे पहले, कई HTTP कनेक्शन स्थापित करना जरूरी नहीं है कि आपके ब्राउज़र में आपके द्वारा खोले गए टैब की मात्रा से बंधा हुआ है। उदाहरण के लिए विज्ञापनों या Google विश्लेषिकी कोड वाली साइट पर जाने पर, आप केवल एक टैब में होने के बावजूद कई साइटों से जुड़ जाएंगे।

वैसे भी, जब आपका ब्राउज़र वेबसर्वर के साथ संचार करता है, तो वेबसर्वर को भेजे गए ट्रैफ़िक का गंतव्य पोर्ट 80 है, जबकि स्रोत पोर्ट एक यादृच्छिक संख्या है। स्रोत पोर्ट वेबसर्वर को यह बताने के लिए है कि उसे किस पोर्ट पर आपको वापस संवाद करना चाहिए। प्रत्येक http स्थापित कनेक्शन में आपके कंप्यूटर पर स्वयं का पोर्ट खुला होगा। कुछ वेबसाइट खोलने के साथ नेटस्टैट चलाने की कोशिश करें और आप तुरंत देखेंगे कि मेरा क्या मतलब है।

आप हंस सकते हैं लेकिन यह पुस्तक टीसीपी / आईपी की मूल बातें प्राप्त करने का एक शानदार और तेज़ तरीका है। इसने मेरी बहुत मदद की।

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