पीयर-टू-पीयर इंटरनेट पर कैसे काम करता है?


15

जब मैं समझता हूं कि नेटवर्क के बाहर से एक स्थानीय नेटवर्क में कंप्यूटर पर एक पैकेट भेजने का कोई तरीका नहीं है, जब तक कि हम राउटर द्वारा नियोजित मार्ग तंत्र को नहीं जानते हैं ।

मान लें कि हमारे पास एक सेट-अप है जो इस तरह दिखता है:

  1. कंप्यूटर-ए, आईपी 192.168.1.2 (डिफ़ॉल्ट गेटवे 192.168.1.1)

  2. कंप्यूटर-बी, आईपी 192.168.1.3 (डिफ़ॉल्ट गेटवे 192.168.1.1)

  3. राउटर-सी, आईपी 192.168.1.1 (बाहरी आईपी 1.1.1.1)

  4. राउटर-डी (बाहरी आईपी 2.2.2.2)

कंप्यूटर-ए, कंप्यूटर-बी और राउटर-सी एक ही स्थानीय नेटवर्क से संबंधित हैं। राउटर-डी कंप्यूटर-ए को डेटा भेजना चाहता है, लेकिन यह राउटर-सी के माध्यम से जाने के बिना ऐसा नहीं कर सकता।

अब Router-C पैकेट को कंप्यूटर-A में भेज देगा अगर गंतव्य बंदरगाह 1000 है, और यदि गंतव्य बंदरगाह 2000 है, तो कंप्यूटर-बी को पैकेट अग्रेषित करेगा। लेकिन निश्चित रूप से, इस रूटिंग तंत्र को जानने वाला एकमात्र उपकरण Router-C ही है! कंप्यूटर-ए भी नहीं और न ही कंप्यूटर-बी इसके बारे में जानते होंगे, है ना?

तो राउटर-डी एक पैकेट को कंप्यूटर-ए में भेज सकता है अगर वह पोर्ट 1000 के माध्यम से राउटर-सी को पैकेट भेजता है, लेकिन राउटर-डी को पोर्ट 1000 के माध्यम से पैकेट भेजने का पता कैसे चलेगा, और पोर्ट 1001 नहीं कहेंगे?

बिटोरेंट जैसे सहकर्मी से सहकर्मी कार्यक्रम इस समस्या से कैसे गुजरते हैं? एकमात्र उपाय जिसके बारे में मैं सोच सकता हूं कि राउटर-डी पैकेट को राउटर-सी में सभी बंदरगाहों के माध्यम से भेजने के लिए है , जैसे कि यह कंप्यूटर-ए को भेजा जाता है, लेकिन क्या कोई बेहतर समाधान है?

जवाबों:


9

आपका भ्रम कुछ गलत धारणाओं से उपजा है।

लेकिन निश्चित रूप से, इस रूटिंग तंत्र को जानने वाला एकमात्र उपकरण राउटर-सी ही है! कंप्यूटर-ए भी नहीं और न ही कंप्यूटर-बी इसके बारे में जानते होंगे, है ना?

क्या, Why those तब उन पोर्ट को उन IP को अग्रेषित करने के लिए राउटर को क्यों कॉन्फ़िगर किया गया था? आपको एक विशिष्ट पोर्ट का उपयोग करने के लिए पी 2 पी क्लाइंट सेट करना होगा और फिर राउटर को पत्राचार के लिए सेट करना होगा।

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

क्योंकि आप किसी विशिष्ट पोर्ट (उस प्रोटोकॉल के लिए मानक या गैर-मानक) का उपयोग करने के लिए पी 2 पी क्लाइंट को कॉन्फ़िगर करते हैं।

एकमात्र उपाय जिसके बारे में मैं सोच सकता हूं कि राउटर-डी पैकेट को राउटर-सी के लिए सभी बंदरगाहों के माध्यम से भेजने के लिए है, जैसे कि यह कंप्यूटर-ए को आगे बढ़ाया जाता है, लेकिन क्या कोई बेहतर समाधान है?

यह उससे बहुत सरल है। जब क्लाइंट किसी सहकर्मी से संबंध बनाता है, तो यह निर्दिष्ट करता है कि वह किस पोर्ट का उपयोग करना चाहता है, इसलिए सहकर्मी उस पोर्ट पर डेटा भेजता है।

हम्म, लेकिन बिटटोरेंट राउटर के व्यवहार को सही नहीं बदलता है? चूंकि कुछ राउटिंग तंत्र सुपरयूज़र.com/a/187190/78897 में दिखाए गए अनुसार गतिशील हो सकता है, इसलिए कंप्यूटर-ए इसके बारे में कैसे जान सकता है?

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

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

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


आप की तरह एक कार्यक्रम का उपयोग करते हैं SmartSniff या TCPView अपने कनेक्शन की निगरानी के लिए, तो आप देखेंगे कि पी 2 पी कनेक्शन आमतौर पर बंदरगाह को आपके द्वारा कॉन्फ़िगर (या ग्राहक के लिए डिफ़ॉल्ट) इनकमिंग कनेक्शन के लिए गंतव्य और या तो डिफ़ॉल्ट या एक कस्टम के रूप में होगा / स्रोत के लिए यादृच्छिक पोर्ट, और आउटगोइंग कनेक्शन के लिए इसके विपरीत।


हम्म, लेकिन बिटटोरेंट राउटर के व्यवहार को सही नहीं बदलता है? चूंकि कुछ राउटिंग तंत्र सुपरयूज़र . com /a/ 187190 / 78897 में दिखाए गए अनुसार गतिशील हो सकता है , इसलिए कंप्यूटर-ए इसके बारे में कैसे जान सकता है?
पचेरियर

पोर्ट फॉरवार्डिंग। आप इसे पहले से सेट कर लें।
यूटाहजहेड ऑक्ट

@Pacerier दोनों रूटर और p2p एप्लिकेशन का उपयोग करते हैं UPnP , पोर्ट अग्रेषण गतिशील किया जा सकता है। इस मामले में, हाँ बिटोरेंट राउटर के व्यवहार को बदल देता है।
जीरो

@ zero2cx, वैसे भी राउटर के व्यवहार को बदलने के बिना पीयर-टू-पीयर करने के लिए है?
पेसरियर

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

4

आपका प्रश्न इंटरनेट के दिल को छूता है और रूटिंग की बहुत परिभाषा है। आपके उदाहरण में, राउटर डी, कंप्यूटर ए को दो परिसरों के आधार पर डेटा भेजता है:

  • यह कंप्यूटर ए को डेटा भेजने के लिए कहा गया है।
  • यह कंप्यूटर ए से पहले से ही संसाधित डेटा है।

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

राउटर C नियमित रूप से राउटर D सहित सभी राउटर्स में अपडेट भेजता है - कि यह "192.168" को जानता है। वास्तव में "नेटवर्क" - ऐसा नहीं होगा क्योंकि उस नेटवर्क को रूट नहीं किया गया है - इसे निजी माना जाता है। लेकिन उस पर ध्यान न दें।) इसलिए, राउटर डी पहले से ही जानता है कि राउटर सी उस नेटवर्क को जानता है।

इसलिए जब डेटा को कंप्यूटर ए के लिए नियत किया जाता है, तो इसे पहले नेटवर्क द्वारा संबोधित किया जाता है। तो, राउटर डी पूछता है, "मुझे 192.168 खोजने की आवश्यकता है। * नेटवर्क। क्या मैं इसे जानता हूं? नहीं। क्या मैं किसी और को जानता हूं जो करता है? हां। राउटर सी करता है। मैं अपने सी के माध्यम से रूटर सी कैसे प्राप्त करूं? 2.2 इंटरफ़ेस। "

राउटर डी फिर डेटा को राउटर सी। राउटर सी को भेजता है और कहता है, "ओह, मेरे पास राउटर डी का डेटा है लेकिन यह 192.168 नेटवर्क के लिए है। क्या मैं उस नेटवर्क को जानता हूं? हां, मेरे 192.168.1.1 नेटवर्क के जरिए या फिर? इसके बाद।

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

आप अपनी पहली धारणा नोटिस करेंगे - दूरस्थ राउटर को रूटिंग तंत्र को जानना होगा - यहाँ खेलने में नहीं आता है। यदि रूटर C EIGRP, RIP, RIPv2, OSPF, या जो भी हो, राउटर D परवाह नहीं करता है। सभी परवाह है कि यह एक अद्यतन मिल गया है। (बेशक, इसे कैसे अपडेट मिला, दोनों को सिंक में रहना सुनिश्चित करना महत्वपूर्ण है। लेकिन फिर, यह एक अलग मुद्दा है।)

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

अपने उदाहरण के साथ जारी रखते हुए, राउटर सी पोर्ट 1000 (आपके परिदृश्य के अनुसार) पर डेटा अग्रेषित करेगा क्योंकि यह संभव है कि कंप्यूटर ए पर उस विशिष्ट पोर्ट पर डेटा की उम्मीद करने वाली सेवा हो। लेकिन यह केवल करना जानता है क्योंकि राउटर डी ने इसे 1000 पोर्ट पर भेजा था। और राउटर डी केवल इसे उस पोर्ट पर भेजता है क्योंकि डेटा के प्रवर्तक ने इसे उस पोर्ट पर राउटर डी को भेजा था।

मैं आपके द्वारा पूछे गए प्रश्न के चिंतनशील के रूप में बिटोरेंट या पी 2 पी कार्यक्रमों के आपके समावेश को नहीं समझता। एक ही स्पष्टीकरण लागू होगा। राउटर को पोर्ट ट्रिगर के साथ भी कॉन्फ़िगर किया जा सकता है जो एक विशेष डिवाइस (या आईपी) को एक विशेष पोर्ट के साथ जोड़ता है। ऐसा है कि जब यातायात 1234 पोर्ट में आता है, तो रूटर्स डिवाइस ABCD को डेटा भेजना जानते हैं। यह आमतौर पर एक आउटगोइंग टीसीपी पोर्ट के साथ जुड़ा हुआ है। यानी यदि मैं पोर्ट 7890 पर ट्रैफिक भेजता हूं, तो राउटर जानता है कि आने वाला ट्रैफिक पोर्ट 1234 पर होगा और मुझे भेज देगा।

लेकिन पोर्ट ट्रिगरिंग (दूरस्थ) रूटिंग निर्णयों के साथ संबद्ध नहीं है - इसके बजाय यह आंतरिक मैक / आईपी तालिका से संबंधित है जो राउटर लैन के लिए उपयोग करता है।

अद्यतन / संपादित करें : अपनी टिप्पणी के बाद उत्तर देने और विस्तृत करने के लिए। राउटर डी केवल अपने आईपी पते (192.168.2.2) द्वारा कंप्यूटर ए को जानता है। लेकिन Router C कंप्यूटर को उसके IP पते और उसके MAC पते से जानता है। मैक (मीडिया एक्सेस कंट्रोल) एक अद्वितीय (आमतौर पर ...) 48-बिट पहचानकर्ता है जिसे अंतर्राष्ट्रीय मानक द्वारा परिभाषित किया गया है। LAN (वायर्ड और वायरलेस) से जुड़े प्रत्येक उपकरण में एक अद्वितीय मैक पता होना चाहिए।

राउटर (राउटर सी) आईपी एड्रेस और मैक एड्रेस को एक टेबल (मैक एड्रेस टेबल) में एक साथ जोड़ देता है। इसलिए जब ट्रैफ़िक राउटर C में आता है, और राउटर को इसके "स्थानीय" का एहसास होता है, तो यह MAC एड्रेस टेबल लुकअप करता है। राउटर तब सूचना को संबोधित करने वाले फ्रेम को शाब्दिक रूप से बदल देता है।

यह कंप्यूटर ए के गंतव्य मैक पते के लिए परत 2 गंतव्य जानकारी को फिर से लिखता है (पुन: लिखता है) लेकिन आईपी पते की जानकारी (परत 3) को समान रखता है।

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


तो Router-D एक पैकेट को Router-C को पोर्ट 60000 (प्रीकंफिगर्ड) के माध्यम से भेजता है, Router-C पैकेट को प्राप्त करता है, लेकिन यह कैसे पता चलता है कि यह पैकेट कंप्यूटर-ए को भेजा जाना है?
पचेरियर

1
राउटर डी पहले से ही अंतिम गंतव्य को जानता है - कंप्यूटर ए। इट (राउटर डी) कंप्यूटर को केवल अपने आईपी पते से जानता है: 192.168.2.2। लेकिन, राउटर C कंप्यूटर A को दो तरीकों से जानता है: IP एड्रेस (192.168.2.2) और कुछ इसे MAC एड्रेस कहते हैं। मैं अधिक जानकारी के साथ उत्तर को अपडेट करूंगा।
जॉन

2

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

कुछ मॉडलों में एक केंद्रीय सर्वर होता है जिसका उपयोग बुनियादी संचार के लिए किया जाता है। उदाहरण के लिए:

  • 2-तरह के संचार के लिए सर्वर के साथ क्लाइंट 1 संकेत।
  • एक ही चीज़ के लिए क्लाइंट 2 संकेत।

सर्वर को अब सभी फाइलें पता हैं जो Client1 और Client2 के पास हैं।

  • Client2 का कहना है कि "मुझे Server1 से फ़ाइल X चाहिए"।
  • सर्वर क्लाइंट 1 को बताता है "क्लाइंट 2 एक्स फ़ाइल चाहता है।"
  • क्लाइंट 1 पोर्ट 2 को सेट करने के लिए, क्लाइंट 2 के सार्वजनिक IP को डेटा का एक कचरा टुकड़ा भेजता है, इसलिए यह क्लाइंट 2 से उत्तर के लिए पोर्ट को खोलता है।
  • Client2 क्लाइंट 1 के सार्वजनिक IP पर अपना प्रारंभिक संकेत भेजता है।

Client1 ने उस पोर्ट को क्लाइंट 2 के लिए खोलने में सिर्फ राउटर को बेवकूफ बनाया।

कुछ मामलों में, जैसे कि बिटटोरेंट या मूल नेपस्टर (iirc) के लिए, आपको इसके राउटर पर एक पोर्ट को फॉरवर्ड करना होगा ताकि वह बेहतर तरीके से काम कर सके।

जहाँ तक अन्य ग्राहकों को पता है कि शुरू में कनेक्ट करने के लिए कौन सा पोर्ट है, यह इसलिए है क्योंकि आपके क्लाइंट ने झुंड या सर्वर को बताया था कि आप किस पोर्ट का उपयोग करते हैं। बिटटोरेंट अक्सर एक ट्रैकर का उपयोग करता है और यह ट्रैक रखता है कि कौन से पोर्ट किस क्लाइंट द्वारा उपयोग किए जाते हैं।


जहां तक ​​उन्हें पता है कि किस पोर्ट का उपयोग करना है ... आप क्लाइंट को एक विशिष्ट पोर्ट पर सुनने के लिए कॉन्फ़िगर करते हैं। आपका क्लाइंट झुंड (बिटटोरेंट के मामले में) को बताता है कि आप किस पोर्ट पर हैं ताकि दूसरे क्लाइंट को पता हो कि क्या कनेक्ट करना है। आपके पीसी ने उन्हें बताया।
यूटाहजहेड

मुझे लगता है कि आपने जवाब दिया जबकि मेरा पहला परिशिष्ट लिखा जा रहा था। सही बात?
यूटाहजहेड

लेकिन पीसी को राउटिंग तंत्र को कैसे जाना जाता है जब यह राउटर है जो इसे करता है? कुछ तंत्र के रूप में में प्रदर्शन गतिशील हो सकता था superuser.com/a/187190/78897
Pacerier

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

लेकिन पोर्ट फ़ॉरवर्डिंग केवल तभी संभव है जब व्यवस्थापक ने इसे पूर्व-निर्धारित किया था .. क्या आपके कहने का मतलब यह है कि बिटोरेंट हमारे राउटर को पुन: कॉन्फ़िगर करता है?
पचेरियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.