udp - यूडीपी होल छिद्रण 3 जी पर नहीं जा रहा है




3g hole-punching (2)

मैं सॉफ्टवेयर में एक छेद छिद्रण सुविधा को लागू करने की कोशिश कर रहा हूं। बात यह है, मैं उपयोगकर्ताओं के साथ संवाद करने के लिए पहले से तैयार किए गए टीसीपी सर्वर के साथ इसे लागू कर रहा हूं।

यहां तक ​​कि मेरे पास अब तक क्या है:

  • "ए" एक यूडीपी सर्वर "यूएस" को संदेश भेजता है (पोर्ट 9333 पर)
  • "यूएस" वापस "ए" बंदरगाह से जुड़ा हुआ है (पोर्ट 31000 - स्थानीयपोर्ट 31005)
  • "ए" एक टीसीपी सर्वर "टीएस" को एक संदेश भेजता है जिसमें कहा गया है कि वह बी से कनेक्ट होना है (और पोर्ट 31000 दे)
  • "टीएस" "बी" को एक संदेश भेजता है जिसमें उसे "ए" पोर्ट (31000) और आईपी दिया जाता है
  • "बी" "यूएस" को संदेश भेजता है (पोर्ट 9333 पर)
  • "यूएस" "B" को एक संदेश भेजता है उसे उसे पोर्ट 45000 (स्थानीयपोर्ट 45005)
  • "बी" "टीएस" देने के लिए एक संदेश भेजता है udp पोर्ट (45000)
  • "टीएस" "ए" को दे रही बी ओडपी पोर्ट (45000) और आईपी को एक संदेश भेजता है
  • "ए" udp संदेश को पोर्ट 45000 पर बी के आईप को भेजना शुरू करें और स्थानीयपोर्ट 31005 पर सुनें
  • "बी" udp संदेश को बंदरगाह 31000 पर ए के आईपी को भेजना और स्थानीयपोर्ट 45005 पर सुनना शुरू करें

बेशक बंदरगाह 31000, 31005, 45000 और 45005 उदाहरण के लिए यहां हैं, प्रत्येक नया कनेक्शन बंदरगाह परिवर्तन, केवल 9 333 स्थिर है

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

हालांकि प्रयोक्ताओं के बीच संदेश किसी भी द्वारा प्राप्त नहीं होते हैं ... किसी को भी एक विचार क्यों होगा?

संपादित करें:

मैंने http://nattest.net.in.tum.de/test.php के साथ मेरे राउटर का परीक्षण किया है और यूड छिच छिद्रण ठीक काम करता है, इसलिए यह समस्या मेरे रूटर से नहीं आ रही है, लेकिन मेरे प्रोटोकॉल से ...

जब उपयोगकर्ता एक ही एनएटी के पीछे हैं, तो सबकुछ ठीक काम करता है, ज़ाहिर है कि यह निजी आईपी का उपयोग करता है, लेकिन इसका मतलब यह है कि कोड भी काम कर रहा है, इसलिए हर कोई एक प्रोटोकॉल मुद्दे की ओर जाता है ...

2 संपादित करें:

दरअसल, मैंने इसे आधा काम किया (और समस्या वास्तव में मेरे कोड से आ रही थी, प्रोटोकॉल नहीं थी ... मैंने 2 उपयोगकर्ताओं को कनेक्ट किया है, एक आईफोन के साथ 3 जी में, वाईफ़ाई पर मेरे नेट के पीछे एक है

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

इसलिए मैंने अपने एनएटी में एक छेद का प्रबंधन किया, लेकिन वास्तव में सेलुलर एनएटी में नहीं।

बेशक, मैंने अभी 3 जी में कनेक्ट होने वाले 2 आईफोनों का परीक्षण किया है। और दूसरे से कोई भी संदेश प्राप्त नहीं करता है

क्या मैंने सेलुलर एनएटी के बारे में कुछ याद किया?

पी एस: मेरे सवाल को इतने अपडेट करने के लिए खेद है, लेकिन जब से मुझे कोई जवाब नहीं मिलता तो मैं खुद को ढूंढने की कोशिश कर रहा हूं ...

पीएस 2: चूंकि मैंने अपने एनएटी में एक छेद का प्रबंधन किया, मैंने "3 जी पर" शीर्षक को बदल दिया है

3 संपादित करें : मैं http://nattest.net.in.tum.de/test.php अपने कंप्यूटर के साथ अपने आईफोन के 3 जी कनेक्शन के माध्यम से इंटरनेट से जुड़े फिर से परीक्षण चलाया।

यहां परिणाम है:

जाहिरा तौर पर 9 वें टेस्ट पर सभी यूडपी छिद्र छिद्रण परीक्षा सफल रही।

आगे यह लगता है:

यूडीपी बाइंडिंग टेस्ट (?): एंडपॉइंट स्वतंत्र बाध्यकारी, पोर्ट पूर्वानुमान आसान है

तो यह 3 जी कनेक्शन पर 2 सहयोगियों को जोड़ने में कोई परेशानी नहीं होनी चाहिए (अच्छी तरह से "होम" नेट के पीछे की तुलना में अधिक नहीं) ... क्या मैं सही हूं?

4 संपादित करें:

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

लंबी कहानी छोटी, बंदरगाहों (स्थानीय और सार्वजनिक) दोनों ही सर्वर पर कनेक्ट होने पर समान हैं। इसलिए 2 संपादन पर किया गया परीक्षण सही था, औदप समापन बिंदु स्वतंत्र है, इसलिए कोई छेद छिद्रण नहीं करना चाहिए जो मुझे लगता है ... (कम से कम मेरे आईएसपी के साथ)


आपके पीछे एनएटी सममित है, या यह आपके गंतव्य के आधार पर आपके आउटगोइंग पोर्ट नंबर को बदलता है। सममित एनएटी के माध्यम से छिद्र छिद्र एक अलग विधि (या तो बारी या यूडीपी बहु छेद छिद्रण) की आवश्यकता है। ऐसा करने का प्रयास करें: https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing


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

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

यहां कुछ संबंधित प्रश्न हैं, जिनमें कुछ और विवरण हैं।

  • यूपीपी छिद्र पंचिंग एल्गोरिथम
  • मोबाइल प्रदाता के साथ यूडीपी होल पंचिंग संभव नहीं है
  • यूडीपी होल छिद्रण मेजबान विशिष्ट विफलता