क्या वेब ब्राउज़र विभिन्न टैब के लिए अलग-अलग आउटगोइंग पोर्ट का उपयोग करते हैं?


58

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

या ब्राउज़र सभी टैब और इसलिए सभी डोमेन के प्रबंधन के लिए एक एकल पोर्ट का उपयोग करता है?


वेबसाइट्स से कनेक्ट होने पर ब्राउजर 2 पोर्ट का इस्तेमाल करते हैं, 80 http कनेक्शन के लिए, 443 https कनेक्शन के लिए है। en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_noes
Moab

7
मुझे पता है कि सर्वर से कनेक्ट करने के लिए उपयोग किए जाने वाले पोर्ट, लेकिन मैं क्लाइंट (होस्ट कंप्यूटर) से कनेक्ट करने के लिए उपयोग किए जाने वाले पोर्ट नंबर के बारे में सोच रहा था।
yoyo_fun

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

6
पोर्ट ओएस द्वारा असाइन किए गए हैं और प्रत्येक नए कनेक्शन को अन्य सभी खुले कनेक्शनों से अलग बनाने के लिए एक नया स्थानीय पोर्ट सौंपा गया है।
Ex Umbris

1
@ExUmbris: यह एक समझदार और सरल रणनीति हो सकती है, लेकिन टीसीपी कनेक्शन को क्वाड {स्थानीय आईपी, स्थानीय पोर्ट, रिमोट आईपी, रिमोट पोर्ट} द्वारा पहचाना जाता है। स्थानीय पोर्ट विशिष्टता के लिए आवश्यक नहीं है, जो एक अच्छी बात है: वेबसर्वर अपने स्थानीय पोर्ट का उपयोग विशिष्टता के लिए बिल्कुल भी नहीं कर सकता है। और वेबसर्वर के नजरिए से, रिमोट आईपी अद्वितीय नहीं है क्योंकि कई उपयोगकर्ता एकल गेटवे / प्रॉक्सी के पीछे स्थित हो सकते हैं।
एमएसलर्स

जवाबों:


55

क्या ब्राउज़र विभिन्न वेबसाइटों से जुड़ने के लिए विभिन्न बंदरगाहों का उपयोग करते हैं?

हाँ, वो करते हैं।

यहाँ एक उदाहरण है, विंडोज 7 पर मेरे वर्तमान फ़ायरफ़ॉक्स कनेक्शन (मेरे पास 9 खुले टैब हैं) दिखा रहा है:

यहाँ छवि विवरण दर्ज करें

टिप्पणियाँ:

  • आप देख सकते हैं कि स्थानीय बंदरगाह सभी अलग हैं।

  • दूरस्थ बंदरगाह आमतौर पर 80 (HTTP), 443 (HTTPS) या 8080 (HTTP वैकल्पिक) हैं।

  • वेब पेज रेंडर करने की पूरी प्रक्रिया नीचे वर्णित है। विशेष चरण 5, 6, 13 और 15 में देखें (जो बोल्ड हैं):

    • सामान्य रूप से एक एकल वेब पेज एक से अधिक कनेक्शन का उपयोग करता है, जिनमें से सभी एक ही दूरस्थ पते पर नहीं होंगे।

    • ऐसा इसलिए है क्योंकि वेब पेजों में अक्सर संसाधनों की मेजबानी कहीं और (जावास्क्रिप्ट फ़ाइलें आदि) शामिल हैं।

  • एक ही वेबसाइट (जैसे stackoverflow.com) के कई कनेक्शनों के अलग-अलग स्थानीय पोर्ट भी होते हैं (क्योंकि वे अलग-अलग टैब को अलग-अलग पेजों को प्रस्तुत करने वाले अलग-अलग कनेक्शन होते हैं)।


वेब पेज रेंडर करना - स्टेप बाय स्टेप

ध्यान दें:

  • चरण 5, 6, 13 और 15 (जो बोल्ड हैं) सीधे प्रश्न के लिए प्रासंगिक हैं।

क्या आपने कभी सोचा है कि जब आप वेब सर्फ करते हैं तो क्या होता है? यह उतना सरल नहीं है जितना लगता है:

  1. आप अपने पसंदीदा ब्राउज़र में एड्रेस बार में एक URL टाइप करें।
  2. ब्राउज़र प्रोटोकॉल, होस्ट, पोर्ट और पथ को खोजने के लिए URL को पार्स करता है।
  3. यह एक HTTP अनुरोध बनाता है (जो प्रोटोकॉल की सबसे अधिक संभावना थी)
  4. होस्ट तक पहुंचने के लिए, पहले मानव पढ़ने योग्य होस्ट को आईपी नंबर में बदलना होगा, और होस्ट पर डीएनएस लुकअप करके ऐसा करना होगा।
  5. तब निर्दिष्ट किए गए पोर्ट पर उपयोगकर्ता के कंप्यूटर से उस आईपी नंबर पर एक सॉकेट खोला जाना चाहिए (सबसे अधिक बार पोर्ट 80)
  6. जब कोई कनेक्शन खुला होता है, तो HTTP अनुरोध मेजबान को भेजा जाता है
  7. होस्ट आगे निर्दिष्ट सर्वर पर सुनने के लिए सर्वर सॉफ़्टवेयर (सबसे अधिक बार अपाचे) के लिए अनुरोध को कॉन्फ़िगर करता है
  8. सर्वर अनुरोध का निरीक्षण करता है (सबसे अधिक बार केवल पथ), और अनुरोध को संभालने के लिए आवश्यक सर्वर प्लगइन को लॉन्च करता है (आपके द्वारा उपयोग की जाने वाली सर्वर भाषा के अनुसार, PHP, Java, .NET, पायथन?)
  9. प्लगइन को पूर्ण अनुरोध तक पहुंच मिलती है, और HTTP प्रतिक्रिया तैयार करने के लिए शुरू होता है।
  10. प्रतिक्रिया का निर्माण करने के लिए एक डेटाबेस (सबसे अधिक संभावना है) का उपयोग किया जाता है। अनुरोध के पथ (या डेटा) में मापदंडों के आधार पर एक डेटाबेस खोज की जाती है
  11. डेटाबेस से डेटा, अन्य जानकारी के साथ प्लगइन को जोड़ने का फैसला करता है, पाठ की एक लंबी स्ट्रिंग (शायद HTML) में संयुक्त है।
  12. प्लगइन कुछ मेटा डेटा (HTTP हेडर के रूप में) के साथ उस डेटा को जोड़ता है, और HTTP प्रतिक्रिया को ब्राउज़र में वापस भेजता है।
  13. ब्राउज़र को प्रतिक्रिया मिलती है, और प्रतिक्रिया में HTML (जिसे 95% संभावना टूटी हुई है) को पार्स करता है
  14. एक DOM ट्री टूटे हुए HTML से बना है
  15. HTML स्रोत में पाए जाने वाले प्रत्येक नए संसाधन के लिए सर्वर से नए अनुरोध किए जाते हैं (आमतौर पर चित्र, शैली पत्रक और जावास्क्रिप्ट फ़ाइलें)। चरण 3 पर वापस जाएं और प्रत्येक संसाधन के लिए दोहराएं।
  16. स्टाइल्सशीट्स को पार्स किया गया है, और प्रत्येक में प्रतिपादन जानकारी डोम ट्री में मिलान नोड से जुड़ी हुई है
  17. जावास्क्रिप्ट को पार्स और निष्पादित किया जाता है, और DOM नोड्स को स्थानांतरित किया जाता है और शैली की जानकारी तदनुसार अपडेट की जाती है
  18. ब्राउज़र डोम ट्री और प्रत्येक नोड के लिए शैली जानकारी के अनुसार स्क्रीन पर पेज को प्रस्तुत करता है
  19. आप पृष्ठ को स्क्रीन पर देखते हैं
  20. आपको गुस्सा आता है पूरी प्रक्रिया बहुत धीमी थी।

स्रोत वेब पेज रेंडर करना - चरण दर चरण


63

एक वेबसाइट के लिए प्रत्येक कनेक्शन एक अलग सॉकेट का उपयोग करता है जो डिफ़ॉल्ट गंतव्य टीसीपी पोर्ट 80 के लिए सादे HTTP और 443 HTTPS के लिए है। सॉकेट अद्वितीय होने के लिए, स्रोत आईपी पते, स्रोत टीसीपी पोर्ट, गंतव्य आईपी पते और गंतव्य टीसीपी पोर्ट का संयोजन अलग होना चाहिए।

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

हालांकि, यह ध्यान दिया जाना चाहिए कि HTTP 1.1 के रूप में, सभी कनेक्शन किसी दिए गए समय अवधि (जब तक अन्यथा घोषित नहीं किए जाते हैं) के लिए लगातार बने रहते हैं। इसका मतलब यह है कि यदि आपके द्वारा एक ही वेबसाइट से कई संसाधनों का अनुरोध किया जाता है (उदाहरण के लिए css / js फ़ाइलें) तो उसी कनेक्शन को आपके ब्राउज़र द्वारा पुन: उपयोग किया जा सकता है। यह तब भी लागू होता है जब आपके ब्राउज़र में एक ही वेबसाइट के कई उदाहरण हैं।

यदि आप विंडोज पर हैं, तो netstat -no -p TCPकमांड आपको सभी सक्रिय टीसीपी सॉकेट्स और उनके संबंधित प्रक्रिया आईडी दिखाएगा, जिसमें आपके ब्राउज़र भी शामिल हैं:

यहाँ छवि विवरण दर्ज करें

यदि आप यूनिक्स / लिनक्स (इस मामले में डेबियन) पर हैं, तो आप netstat -ntpया ss -tकमांड का उपयोग कर सकते हैं :

यहाँ छवि विवरण दर्ज करें


4
ध्यान दें कि netstat गैर-ब्राउज़र कनेक्शन भी दिखाएगा, उदाहरण के लिए ईमेल क्लाइंट के लिए ईमेल कनेक्शन, समाचार रीडर के लिए समाचार कनेक्शन। ये कनेक्शन अलग-अलग रिमोट पोर्ट पर होंगे।
DavidPostill

जब तक मैं कुछ याद नहीं कर रहा हूं, ऐसा लगता है जैसे आप यह अनुमान लगा रहे हैं कि पूछने वाला विंडोज का उपयोग कर रहा है, हालांकि उसने एक ऑपरेटिंग सिस्टम का उल्लेख नहीं किया है। यह भी सूचीबद्ध करने के लिए अच्छा है कि आप ओएस का उल्लेख कर रहे हैं जब भी कंसोल कमांड प्रदान करते हैं।
user45623

9
@ user45623: हालाँकि स्क्रीनशॉट एक विंडोज स्क्रीनशॉट है, netstat -nलेकिन लिनक्स और मैक ओएस सहित अधिकांश ऑपरेटिंग सिस्टम में काम करना चाहिए।
हेनजी

1
विंडोज पर (शायद अन्य ओएस भी) आप यह netstat -n -oदेखने के लिए उपयोग कर सकते हैं कि किस कनेक्शन ने कौन सी प्रक्रिया बनाई। या आप GUI में सूची देखने के लिए SysInternal का tcpview चला सकते हैं , प्रक्रिया के नाम और चिह्न और सभी।
जोनाथन

अब सवाल यह है कि क्या वेब ब्राउज़र एक ही सर्वर से जुड़ने पर विभिन्न टैब से कनेक्शन का पुन: उपयोग करते हैं?
जॉन ड्वोरक

11

जैसा कि विभिन्न वेबसाइटों के टैब के बारे में है, टीसीपी में ऐसा कुछ भी नहीं है, जिसके लिए स्थानीय पोर्ट अलग होना चाहिए, जब तक कि टपल {लोकल आईपी, लोकल पोर्ट, टारगेट आईपी, टारगेट पोर्ट} यूनिक न हो जाए। एक ही वेबसाइट के टैब के लिए, स्थिति बहुत अधिक जटिल है।

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

यह कहना संभव नहीं है कि एक ही वेबसाइट के अलग-अलग टैब, अलग-अलग कनेक्शन का उपयोग करेंगे , क्योंकि (ए) आमतौर पर प्रति टैब पर एक भी कनेक्शन नहीं होता है, और (बी) समय और प्रमाणीकरण के आधार पर, कनेक्शन हो सकते हैं टैब के बीच पुन: उपयोग; और जैसा कि कनेक्शनों की पहचान करना संभव नहीं है इसलिए स्थानीय बंदरगाहों की पहचान करना संभव नहीं है।


धन्यवाद। "पूलिंग" का क्या मतलब है?
yoyo_fun

इसे बंद करने के बजाय, इसे एक पूल में लौटाएं, और केवल इसे बंद कर दें अगर यह कुछ समय अंतराल के लिए बेकार रहता है; और उस लक्ष्य के लिए एक नया कनेक्शन बनाने से पहले पहले पूल में देखना। यह कैसे HTTP रखने-जीवित कार्यान्वित किया जाता है।
user207421

तो एक पूल मेमोरी में एक डेटा संरचना है जो स्टोर खोला और अभी तक बंद कनेक्शन नहीं है?
yoyo_fun

यह सही है, आम तौर पर एक नक्शा जो आईपी द्वारा लक्षित होता है: पोर्ट।
user207421

2
@ ईजेपी: ध्यान दें कि HTTPS के लिए, यह लक्ष्य IP और पोर्ट द्वारा मानचित्र की कुंजी के लिए सुरक्षित नहीं है; आपको विभिन्न होस्टनामों के कनेक्शन के बीच अंतर करने की आवश्यकता है, भले ही वे एक ही आईपी और पोर्ट के समाधान के लिए हों। यकीनन एक ब्राउज़र को अलग टैब के लिए कनेक्शन अलग रखना चाहिए अगर कम से कम एक टैब गुप्त मोड में हो।
हेनिंग मैखोलम

6

हाँ। किसी तरह की संभावना नहीं। निर्भर करता है।

सबसे पहले, एक ब्राउज़र कनेक्शन के लिए इनमें से किसी भी रणनीति का उपयोग कर सकता है:

  1. एकल कनेक्शन (1995 से अधिक हाल के किसी भी ब्राउज़र के लिए असंभावित)
  2. प्रति टैब एक कनेक्शन (मूल रूप से # 1 जैसा, बस थोड़ा बहुत बेहतर)
  3. प्रति संसाधन एक कनेक्शन (अनुभवहीन, लेकिन इतना बुरा काम नहीं करता)
  4. रखने के साथ कनेक्शन का पूल, जिंदा है, फिर से उपयोग कनेक्शन
  5. कुछ अलग (अजीब सामान के रूप में पढ़ें)

आपके पास यह जानने का एक तरीका नहीं है कि ब्राउज़र किस रणनीति का उपयोग करेगा, हालांकि कनेक्शन का एक पूल (और कनेक्शन का फिर से उपयोग करना) एक उचित धारणा है।

दूसरा, जिस तरह से टीसीपी काम करता है, आपके पास एक स्रोत पोर्ट है, और हर कनेक्शन के लिए एक गंतव्य बंदरगाह है। स्रोत और गंतव्य पते / पोर्ट की जोड़ी कनेक्शन को परिभाषित करती है। सर्वर से कनेक्ट करने के लिए
आप हमेशा [1] एक प्रसिद्ध पोर्ट (जैसे कि 80 या 443) का उपयोग करते हैं (जिस पर वह अपने विज्ञापित पते पर सुनता है), लेकिन दूसरे पोर्ट को यादृच्छिक रूप से चुना जाता है। इस प्रकार, आप एक कनेक्शन को किस तरफ देखते हैं, इसके आधार पर, इसमें या तो एक या कई संभावित पोर्ट होते हैं।

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

चूंकि प्रश्न स्पष्ट रूप से "सामान्य" स्थिति में आउटगोइंग का उल्लेख करता है , पोर्ट नंबर एक ही होंगे चाहे वे किस टैब में हों, या दो संभावित पोर्ट (80 और 443) में से एक हो। यद्यपि बेशक एक URL में एक अलग पोर्ट (जैसे 8080) के लिए स्पष्ट रूप से पूछना संभव है। हालांकि यह दुर्लभ है।


[१] ठीक है, हमेशा नहीं ... लेकिन चलो इसे बहुत अधिक जटिल नहीं करें।


एक अन्य कारक ... क्लाइंट-साइड पोर्ट आमतौर पर ओएस द्वारा चुना जाता है, न कि ब्राउज़र; और क्लाइंट-साइड पोर्ट जिसे सर्वर देखता है वह ब्राउज़र से अलग हो सकता है, अगर कनेक्शन NAT डिवाइस से गुजरता है। अधिकांश OS या तो (कॉन्फ़िगर करने योग्य) अल्पकालिक पोर्ट रेंज के भीतर या बेतरतीब ढंग से आवंटित करते हैं, लेकिन एक ब्राउज़र एक ही स्रोत-पोर्ट को कई कनेक्शनों से विभिन्न सर्वरों के लिए अनुरोध कर सकता है। (और ओपी क्लाइंट पोर्ट्स के बारे में पूछ रहा है, न कि सर्वर पोर्ट्स के बारे में।)
david

@ डेविड: यह बताना मुश्किल है कि क्यू में से कौन सा सही है (या क्या जवाब देना है) क्योंकि यह एक अजीब अस्पष्ट है, इसलिए मेरा कुछ लंबा-चौड़ा भ्रमण है। ओपी क्लाइंट पर आउटगोइंग पोर्ट के बारे में पूछ रहा है। "क्लाइंट" से पता चलता है कि हम स्रोत पोर्ट (टीसीपी शब्दों में) के बारे में बात कर रहे हैं, जो कि स्वतंत्र रूप से या बेतरतीब ढंग से (कार्यान्वयन द्वारा) चुना जाता है, लेकिन "आउटगोइंग" से पता चलता है कि यह वास्तव में गंतव्य बंदरगाह है जिसके बारे में हम बात कर रहे हैं। जिसे आम शब्दों में "सर्वर पर पोर्ट" के रूप में वर्णित किया गया है। NAT पर आपकी टिप्पणी सर्वर से देखी गई सही है, लेकिन क्लाइंट को प्रभावित नहीं करती है।
डेमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.